操作系统教材第6版——个人笔记5

3.2 单连续分区存储管理

3.2.1 单连续分区存储管理

单连续分区存储管理

  • 每个进程占用一个物理上完全连续的存储空间(区域)
  • 单用户连续分区存储管理
  • 固定分区存储管理
  • 可变分区存储管理

单用户连续分区存储管理

  • 主存区域划分为系统区与用户区
  • 设置一个栅栏寄存器界分两个区域,硬件用它在执行时进行存储保护
  • 一般采用静态重定位进行地址转换 硬件实现代价低 适用于单用户单任务操作系统,如DOS

单用户连续分区存储管理示意

静态重定位:在装入一个作业时,把该作业中程序的指令地址和数据地址全部转换成绝对地址

固定分区存储管理的基本思想

  • 支持多个分区
  • 分区数量固定
  • 分区大小固定
  • 可用静态重定位
  • 硬件实现代价低
  • 早期OS采用

固定分区方式的主存分配 

固定分区方式的地址转换

  • 硬件实现机制与动态重定位

可变分区存储管理概述

  • 固定分区存储管理不够灵活,既不适应大尺寸程序,又存在内存内零头,有浪费
  • 能否按照进程实际内存需求动态划分分区,并允许分区个数可变
  • 这就是可变分区存储管理

3.2.2 可变分区存储管理

可变分区存储管理

  • 按进程的内存需求来动态划分分区
  • 创建一个进程时,根据进程所需主存量查看主存中是否有足够的空闲空间
  • 若有,则按需要量分割一个分区
  • 若无,则令该进程等待主存资源
  • 由于分区大小按照进程实际需要量来确定,因此分区个数是随机变化的

可变分区方式的内存分配示例

可变分区方式的主存分配表

 可变分区方式的内存分配

最先适应分配算法

邻近适应分配算法

最优适应分配算法

最坏适应分配算法

可变分区方式的内存回收

地址转换与存储保护

可变分区方式的内存零头

固定分区方式会产生内存内零头 #固定--内存内零头

可变分区方式也会随着进程的内存分配产生一小的不可用的内存分区,称为内存外零头 #可变--小不可用内存分区

最优适配算法最容易产生外零头 #最优--外零头

任何适配算法都不能避免产生外零头

移动技术(程序浮动技术)

移动技术的工作流程

3.3 页式存储管理

3.3.1 页式存储管理的基本原理

页式存储管理的基本原理

  • 分页存储器将主存划分成多个大小相等的页架
  • 受页架尺寸限制,程序的逻辑地址也自然分成页
  • 不同的页可以放在不同页架中,不需要连续
  • 页表用于维系进程的主存完整性

页式存储管理中的地址

  • 页式存储管理的逻辑地址由两部分组成,页号和单元号 #逻辑=页号+单元号
  • 页式存储管理的物理地址也有两部分组成:页架号和单元号 #物理=页架号+单元号
  • 地址转换可以通过查页表完成

页式存储管理的地址转换思路

页式存储管理的内存分配/去配

页的共享

页式存储管理能够实现多个进程共享程序和数据数据共享: #多进程共享程序数据

不同进程可以使用不同页号共享数据页程序共享: #不同页号共享数据页程序

不同进程必须使用相同页号 #不通进程必须同页号

共享代码页共享代码页中的(JMP )指令,使用不同页号是做不到

3.3.2 页式存储管理的地址转换

页式存储管理的地址转换代价

  • 页表放在主存: 每次地址转换必须访问两次主存 #页表>>主存--访问两次主存
  • 按页号读出页表中的相应页架号 #页号>>页表中页架号
  • 按计算出来的绝对地址进行读写
    • 存在问题:降低了存取速度
    • 解决办法:利用Cache存放部分页表

页式存储管理的快表

  • 为提高地址转换速度,设置一个专用的高速存储器,用来存放页表的一部分
  • 快表:存放在高速存储器中的页表部分
  • 快表表项:页号,页架号
  • 这种高速存储器是联想存储器,即按照内容寻址,而非按照地址访问 #块表--联想存储器--内容寻址--存储页表部分

引入快表后的地址转换代价

  • 采用快表后,可以加快地址转换速度
  • 假定主存访问时间为200毫微秒,快表访问时间为40毫微秒,查快表的命中率是90%,平均地址转换代价为 (200+40) *90%+(200+200+40)*10%=260毫微秒
  • 比两次访问主存的时间(400毫微秒)下降了35%

基于快表的地址转换流程

  • 按逻辑地址中的页号查快表
  • 若该页已在快表中,则由页架号和单元号形成绝对地址 #页在快表---页架号单元号=绝对地址
  • 若该页不在快表中,则再查主存页表形成绝对地址,同时将该页登记到快表中 #不在块表--查主存页表=绝对地址---登记块表
  • 当快表填满后,又要登记新页时,则需在快表中按一定策略淘汰一个旧登记项

多道程序环境下的进程表

多道程序环境下的地址转换

3.3.3 页式虚拟存储管理

页式虚拟存储管理的基本思想

  • 把进程全部页面装入虚拟存储器,执行时先把部分页面装入实际内存,然后,根据执行行为,动态调入不在主存的页,同时进行必要的页面调出
  • 现代OS的主流存储管理技术 首次只把进程第一页信息装入主存,称为请求页式存储管理

页式虚拟存储管理的页表

页式虚拟存储管理的实现

CPU处理地址

若页驻留,则获得块号形成绝对地址 #页驻留,块号形成绝对地址

若页不在内存,则CPU发出缺页中断 OS处理缺页中断 #页不在内存,缺页中断

若有空闲页架,则根据辅存地址调入页,更新页表与快表等

若无空闲页架,则决定淘汰页,调出已修改页,调入页,更新页表与快表

页式虚拟存储管理的地址转换

缺页中断的处理流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日题库:Huawe数通HCIA——13

所有资料均来源自网络,但个人亲测有效,特来分享,希望各位能拿到好成绩! PS:别忘了一件三连哈! 今日题库: 186. 下列协议中属于动态IGP路由协议的是?-单选 A.stA.tiC. B.OSPF c…

使用Django Channels和WebSocket构建聊天应用

一、引言 WebSocket提供了一种在客户端和服务器之间进行实时双向通信的方式。结合Django Channels,我们可以轻松地在Django项目中实现WebSocket功能。本文将通过一个简单的聊天应用示例,展示如何使用Django Channels和WebSocket。 二、环境搭建 项目的…

Nacos的下载使用

下载 本地Java8Maven环境 下载地址 https://github.com/alibaba/nacos/releases使用 解压安装包,直接运行bin目录下的startup.cmd 账号密码都是nacos

Win32和c++11多线程

Win32和c11多线程 一、概念1.线程的特点线程内核对象线程控制块线程是独立调度和分派的基本单位共享进程的资源 2.线程的上下文切换引起上下文切换的原因 3.线程的状态 二、Windows多线程API1.CreateThread创建线程2.获取线程ID3.关闭线程句柄4.挂起线程5.恢复线程6.休眠线程的…

算法金 | 读者问了个关于深度学习卷积神经网络(CNN)核心概念的问题

​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 读者问了个关于卷积神经网络核心概念的问题,如下, 【问】神经元、权重、激活函数、参数、图片尺寸,卷…

手机相册的排列方式探讨

不论你是不是程序员,你一定留意过一个问题:相册 App 基本都将图片裁剪成了居中的 1:1 正方形。那么手机相册 App,为什么要将图片切割成 1:1 正方形,然后以网格排列?是行业标准吗? 自适应图片宽度的图库&a…

vscode 离线下载指定版本插件和安装方法

1、背景 由于不同的vscode版本需要安装对应的插件版本,一般情况下,vscode版本会落后于vscode插件库提供的可以下载的插件版本,网页一般只会提供最新的插件下载版本,因此我们需要下载指定的版本需要采取一些措施。 2、获取需要安…

c语言速成系列指针上篇

那么这一篇文章带大家学习一下c语言的指针的概念、使用、以及一些注意事项。 指针的概念 指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。 大白话讲解…

【数据集划分】oracle数据集划分(总结版)

【数据集划分】假如你有接近百万条oracle数据库数据(成真版) 写在最前面最终代码原理:生成随机索引并打乱顺序示例作用应用场景 遇到报错:ORA-01795,通过CTE(Common Table Expressions)和窗口函…

Next.js Tailwind CSS UI组件

摘要: 官网 今天公司使用到一个前端ui框架——Next.js Tailwind CSS UI组件!这从头构建一个AI驱动的前端UI组件生成器,生成Next.js Tailwind CSS UI组件: 1、用Next.js、ts和Tailwind CSS构建UI组件生成器Web应用程序。 2、用Copi…

08-指针与数组的结合——数组指针与指针数组的区别

指针与数组的结合 示例 1:指针访问数组元素 通过指针访问数组元素的例子&#xff1a; #include <stdio.h>int main() {int arr[5] {1,2,3,4,5};//int *p1 &arr;int *p1 (int *)&arr; // 需要强制类型转换int *p2 arr;printf("*p1:%d\n", *(p1 …

Python第二语言(四、Python数据容器)

目录 一、 数据容器&#xff08;list、tuple、str、map、dict&#xff09; 1. 数据容器概念 2. 列表list&#xff08; [] &#xff09; 2.1 定义方式 2.2 嵌套列表 2.3 list通过获取下标索引获取值 2.4 下标使用概念 2.5 list列表的使用&#xff08;列表的方法&#xff…

​在 The Sandbox 元宇宙的 CU 超商中寻找Milk币!

CU&#xff08;韩国领先的便利店&#xff09;和 MiL.k&#xff08;基于区块链的忠诚度整合平台&#xff09;合作在 The Sandbox 推出了首款元宇宙游戏&#xff0c;通过独家活动在 Web2 和 Web3 之间建立联系。 在元宇宙中玩转 “Play CU X MiL.k” 体验 通过引人入胜的游戏内容…

Apple开发者证书创建完整过程

1.创建CSR文件: 打开钥匙串访问程序 选择从证书颁发机构请求 创建证书 保存CSR文件到桌面 成功如下: 开始创建证书: 选择

每天一道大厂SQL题【Day32】按消息量给广东省qq打标记

文章目录 每天一道大厂SQL题【Day32】按消息量给广东省qq打标记每日语录第32题 需求三&#xff1a;按消息量给广东省qq打标记思路分析附表 答案获取加技术群讨论文末SQL小技巧 后记 每天一道大厂SQL题【Day32】按消息量给广东省qq打标记 大家好&#xff0c;我是Maynor。相信大…

vue3引入cesium和olcs

首先引入包 pnpm i olcs; pnpm i -D vite-plugin-cesium pnpm i -S cesium在vite.config.js中配置&#xff0c;参考这位大佬的笔记 添加链接描述 import { defineConfig } from vite import vue from vitejs/plugin-vue import cesium from vite-plugin-cesium; // https://…

芝麻IP好用吗?来测试了!

作为老牌代理IP服务厂商&#xff0c;芝麻IP和青果网络代理IP都做的不错&#xff0c;市场上几乎可以是有口皆碑了&#xff0c;上次测试了青果网络的代理IP&#xff0c;效果表现得还挺不错&#xff0c;和他们自己宣传的以及客户对他们的评价大差不差。 总的来说&#xff0c;他们家…

开机弹窗找不到opencl.dll怎么办,教你几种有效的修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到opencl.dll文件”。这个问题可能会影响到我们的正常使用&#xff0c;因此了解其原因和解决方法是非常必要的。本文将从多个方面对“找不到opencl.dll文件”这一问题进行详细分析和解…

如何修复d3dcompiler43.dll丢失问题,这三种方法可轻松解决

在计算机使用过程中&#xff0c;我们常常会遇到一些错误提示&#xff0c;其中之一就是“计算机缺失d3dcompiler43.dll”。这个问题可能会影响到计算机的正常运行&#xff0c;让我们无法正常使用某些软件或者游戏。那么&#xff0c;究竟什么是d3dcompiler43.dll&#xff1f;为什…

极光公布2024年第一季度财报

2024年6月6日&#xff0c;中国深圳——中国领先的客户互动和营销科技服务商极光&#xff08;Aurora Mobile&#xff0c;纳斯达克股票代码&#xff1a;JG&#xff09;&#xff08;以下称“极光”或“公司”&#xff09;公布截至2024年3月31日第一季度未经审计的财报。 2024年第…