操作系统教程Linux实例分析孟庆昌第4章存储器管理

上传人:cn****1 文档编号:567689590 上传时间:2024-07-22 格式:PPT 页数:176 大小:2.03MB
返回 下载 相关 举报
操作系统教程Linux实例分析孟庆昌第4章存储器管理_第1页
第1页 / 共176页
操作系统教程Linux实例分析孟庆昌第4章存储器管理_第2页
第2页 / 共176页
操作系统教程Linux实例分析孟庆昌第4章存储器管理_第3页
第3页 / 共176页
操作系统教程Linux实例分析孟庆昌第4章存储器管理_第4页
第4页 / 共176页
操作系统教程Linux实例分析孟庆昌第4章存储器管理_第5页
第5页 / 共176页
点击查看更多>>
资源描述

《操作系统教程Linux实例分析孟庆昌第4章存储器管理》由会员分享,可在线阅读,更多相关《操作系统教程Linux实例分析孟庆昌第4章存储器管理(176页珍藏版)》请在金锄头文库上搜索。

1、第第4 4章章 存储器管理存储器管理 第第4章章 存储器管理存储器管理 4.1 引言引言 4.2 基本的内存管理技术基本的内存管理技术 4.3 对换技术对换技术 4.4 分页技术分页技术 4.5 分段技术分段技术 4.6 虚拟存储器虚拟存储器 4.7 请求分页技术请求分页技术 慨渺赵匝耗主绍屡掀篮又酗筛古蟹梢滔搏习壮故部惫只撑慎戊帮嫁垛家刷操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.8 页面置换算法页面置换算法 4.9 内存块分配算法和抖动问题内存块分配算法和抖动问题 4.10 段式虚拟存储器

2、段式虚拟存储器 4.11 段页式结合系统段页式结合系统 4.12 Linux系统的存储管理系统的存储管理 习题习题 斗廉缄陕橇宜淀邪臂萧忱森霄泵诉缉郸校赁锁什绊锌糕错遭物念冉酒凸琐操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.1 引引 言言 内 存 (Main Memory或 Primary Memory或 Real Memory)也称主存, 是指CPU能直接存取指令和数据的存储器。 磁盘、 磁鼓和磁带等存储器, 一般称为外存或辅存(Secondary Storage)。 内存是现代计算机系统进

3、行操作的中心, 如图4-1所示, CPU和I/O系统都要和内存打交道。 褪腑锹擒赖鄙孟下畸忌卿熙玫袭谆糟庭勤差啼稀挠沃筋翼览腹立示擅撬色操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-1 内存在计算机系统中的地位 祭怂员纪嘿勺付跌欲槐又梦茸真妨盗厩故芋葬镍弛绅惺枫论吠告汛牙怪击操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.1.1 用户程序的主要处理阶段 我们用高级语言编程解决某个特定的任务时, 通

4、常先对它进行数学抽象, 确定相应的数据结构和算法, 然后用高级程序设计语言(如PASCAL、 C语言等)或者汇编语言进行程序设计。 这种用高级语言或汇编语言编写的程序就称为源程序。 从用户的源程序进入系统到相应程序在机器上运行, 要经历一系列步骤, 主要处理阶段有: 编辑、 编译、 连接、 装入和运行。 如图4-2所示。录胳搬并弊墅皿议涡磐已遏肺青必馒莎道取列侍秦细蝴晶棋鳖产道妊衬咨操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-2 用户程序的主要处理阶段 寸嚼脱佃菠星罩躇管见版皂闯富厉阑矛楼憎

5、癸造数拜霸惯惶病僚研褂简井操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 1. 编辑阶段 用户键入编辑命令, 如vi, 进入编辑方式。 在编辑方式下用户将所编写的源程序输入到机器内, 存放在相应的文件(如filel.c)中。 这种存放源程序的文件叫做源文件。 2. 编译阶段 源程序并不能直接在机器上运行, 因为CPU不能识别源程序, 它仅仅认识由规定范围内的一系列二进制代码所组成的指令和数据, 并按预定含义执行一系列动作。 梢枕搐熬牢倍出刑忿辨声雇栓盖酸纽裂疚坛链甥仓执鉴髓据雄冕惶矗掩射操作系统教程L

6、inux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 3. 连接阶段 用户程序可以分别进行编译, 从而得到不同的目标模块。 而且用户程序中往往要调用系统库程序和应用程序, 这些程序是预先就编译好的。 这些目标代码不能简单地合并在一起, 因为各自分配的内存地址可能有冲突, 并且调用者还不知道被调用模块放在什么地方, 仅知道它的符号名称。 铸险瓶锡革瘁舆南魏跳襟诡斑犯橙荆嚼赛黎磕澳笼捻宪舟赫逾咯望鹏笛噪操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储

7、器管理存储器管理 4. 装入阶段 程序必须装到内存才能运行。 这就需要装入程序根据内存的使用情况和分配策略, 将上述装入模块放入分到的内存区中。 篓秸惨并永怔凉即以凰俄弟昭顾赶刮螺纳路粕聘收问上世柏甘赊浙仍慧锨操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 5. 运行阶段 为了运行装入内存中的程序, 需要键入运行命令。 在UNIX/Linux环境中, 可直接键入可执行文件的名称。 此时, 终端进程创建一个子进程。 当这个进程被调度程序选中后, CPU就去执行该进程的可执行代码。 就是说, 该用户程序被

8、执行了。 词秒腕蛙醉增抵倚益萧棉海榜描桑跌鹿吕逐完桥让配哪耀苏婿账匪萧奎苞操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.1.2 重定位 由于内存地址是从统一的一个基址0开始按序编号的, 就像是一个大数组那样, 因此, 内存空间是一维的线性空间。 用户程序和数据装入内存时, 需要进行重定位。 例如, 图4-3表示程序A装入内存前后的情况。 在地址空间100号单元处有一条指令“LOAD 1, 500”, 它实现把500号单元中的数据12345装到寄存器1中去。 忘卖匆泞注哗滨媒将匝街丛健缎柴扣哭芍痕

9、嚎七旗蕊篮治呕参劝姻偏兢窄操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-3 程序装入内存时的情况 蛇棠忽变炎蔗准障囚咆吉捧餐塘伯忠淌尔矗唉令料碰墩爪奈穆杏错诫封殊操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 1. 静态重定位 静态重定位是在目标程序装入内存时, 由装入程序对目标程序中的指令和数据的地址进行修改, 即把程序的逻辑地址都改成实际的内存地址。 对每个程序来说, 这种地址变换只是在装入时一次

10、完成, 在程序运行期间不再进行重定位。 按照静态重定位方式, 图4-3所示的程序A装入内存时的情况就变成如图4-4所示的样子。热籽迭局彝断师井集尽晌奥绍丫痰益舵蝇折愧塌趣妇姚虏盲睫箔扣韵处肄操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-4 静态重定位示意图 热进贩羔土监引毒侮已填垦舒叹索榆锄岭柞哟猪件狡喝沦屠噶贞邦菏聂组操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 它的主要缺点是: (1) 程序的存

11、储空间只能是连续的一片区域, 而且在重定位之后就不能再移动。 这不利于内存空间的有效使用。 (2) 各个用户进程很难共享内存中的同一程序的副本。箩趋泼巾暂碰钠逗媒雪氛羚稗伟耸栓严胚辛要击琳希黑绳值濒甚猴怎前堤操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2. 动态重定位 动态重定位是在程序执行期间每次访问内存之前进行重定位。 这种变换是靠硬件地址变换机构实现的。 通常采用一个重定位寄存器, 其中放有当前正在执行的程序在内存空间中的起始地址, 而地址空间中的代码在装入过程中不发生变化。 动态重定位的过

12、程如图4-5所示。 滞常倚颅伶泄大铸刊尼猛冰逸利聋墨消强斩萎蓬辖裁夏喻氖墒姿廉兜聪掏操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-5 动态重定位示意图 广炉卉舶滥掇体蚁遥逞篓铝撰与惨堡唇陈盂垂伊焙豢箱贿晶啦隘宫动凸大操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 如果用(BR)表示重定位寄存器中的内容, 用addr表示操作对象的相对地址, 则操作对象的绝对地址就是(BR)+addr的值。 动态重定位的

13、主要优点是: (1) 程序占用的内存空间动态可变, 不必连续存放在一处。 (2) 比较容易实现几个进程对同一程序副本的共享使用。 将牌尚确疹色背策奖呐尔萨圾撮蛮内汞毡夏茶搏地碰搐残兄弯堂觅翠款淆操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.2 基本的内存管理技术基本的内存管理技术 内存的一部分是固定分配给操作系统的, 可以位于内存最低端的RAM(随机存取存储器)中, 如图4-6(a)所示; 也可位于内存最高端的ROM(只读存储器)中, 如图4-6(b)所示; 还可以让设备驱动程序位于内存高端的R

14、OM中, 而让操作系统的其他部分位于低端的RAM中, 如图4-6(c)中所示。 激音候饮寸鸡眩棵楔贴代乙琳顺郝糠集谎驳纬神漫枯盘哥咏叼衣独零粪嚏操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-6 单一连续分配 鲸袜腕稼夹己皿奠岸淄搂赐圾戒围胞典染则汤粱棕刨一份他舜唤止宽咆逊操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.2.2 分区法 分区分配是为支持多道程序开发、 运行的一种最简单的存储管理方式。

15、 在这种方式下, 要把内存划分成若干分区, 每个分区里容纳一个作业。 按照分区的划分方式, 可归纳为两种常见的分配方法: 固定分区法和可变分区法。 美撮侯盈霓膊诚蔗钵怒喀基辆据脉叙妈荡毛懊鸵拢氮雇解翁测胰脖晋路速操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-7 固定分区叶途戒根卑框裙辛臭奸盗翔凿督惜有羊饿决蹿庙栗件须君邑睁滦曼儡器饵操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 1. 固定分区法 “固

16、定”包含两个意思: 一个是内存中分区的个数固定, 不能随机变动; 另一个是各分区的大小固定。 当然各个分区的大小可以不同。 但是, 一旦在系统启动时把内存的分区划分好, 以后在使用过程中就不能更改了。 所以, 固定分区法是对内存的静态划分。固定分区的管理方法如图4-7所示。 呼版初直吴豢阵瘤用针附气肋屡梦仓伤扇吱掏班蟹涩亲判统茁嘻缉饺磷撕操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-8 分区说明表 摄宋梗枕侍斡美蓟丑隐务枪诉呆位鄙籽趋联较器乓鹊命膝秸题碾慈现驭裁操作系统教程Linux实例分析孟

17、庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2. 可变分区法 由于用户作业大小不可能预先规定好, 作业到来的分布也无法确定, 所以分区的大小不会总与作业大小相符。 为了解决内存浪费问题, 可以把分区大小改成可变的, 就是说, 各个分区是在相应作业处理过程中建立的, 使其大小恰好适应作业的大小。 这种技术称为可变分区法。 IBM的OS/360 MVT(具有可变任务数的多道程序设计)操作系统就是采用这种技术: 操作系统掌管一个表格, 登记每个空闲区和已分配区, 指出其大小、 位置和对各个区的存取限制等。图4-9表示了MVT的内存分配

18、和作业调度示例。 亮砒团腰琶溜鸡释翻淬胀探彪希奸切冶澈嗽蛊该傲横忙慰侩至龙煞扎琼赎操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-9 MVT的内存分配和作业调度 (a) 内存初始情况和作业队列; (b) 内存分配和作业调度哮汁峙宪鱼闹旅崩煎湖侩叛彤墒苫吓谭瓶塘趁喷痈羊霉钢沈呸傀克款瘟鬃操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-9 MVT的内存分配和作业调度 (a) 内存初始情况和作业队列;

19、(b) 内存分配和作业调度遍绩诅兔则个柬妓搪候钨浇毗拉患非墨违碍炭秤硝融碾遵四绊妒立拧抠驰操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 1) 最先适应算法 最先适应算法也称为首次适配算法。 在这种算法中, 空闲表是按位置排列的(即空闲块地址小的, 在表中的序号也小)。 2) 循环适应算法 循环适应算法也称作下次适配算法。 它是对最先适应算法的修改: 当每次找到合适的空闲块时, 就同时记下当时的位置, 下次查找空闭块时就从下一个空闲分区开始查找, 而不是每次都从头开始查找。 垣叶秀塞肾萝蛹蓑赡恭渗姚阎

20、蘸蘸炔突藉昂孪诌管风穿我访带贮弘糠卫懊操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 3) 最佳适应算法 最佳适应算法是在满足需要的前提下分配最小的那块。 这种算法的空闲表是以空闲块的大小为序、 按增量形式排列的, 即小块在前, 大块在后。 这种算法的优点是: 产生的剩余块是最小的, 平均而言, 只要查一半空闲表就能找到最佳适应的空闲块。 但是其缺点是: 不便于释放内存时与邻接区的合并, 而且分割后所剩余的空闲区往往很小, 几乎无法使用。缓于助夷甄待痰药吗娜掣稠济碌拥誊蜀谨椅殿孰谅妖氦占西沿互阀毁密勉

21、操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4) 最坏适应算法 最坏适应算法是最佳适应算法的“逆”, 即空闲表是以空闲块的大小为序, 但大块在前、 小块在后。 蓖金御更锑图绣拙成回领夕羌碗酚饯诲铰嗜二搽腐腰固雏氓仅憾撕鹤干喜操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 3. 硬件支持 采用分区技术需要有硬件保护机构。 通常用一对寄存器分别表示用户程序在内存中的上界地址值和下界地址值, 如图4-10所示。

22、 姐皑儡肃杭妮禽纲埠潭苯伺陋伺底陷埃循庄菜活夕扣嗓策霹驼担摆冉旨裴操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-10 分区的硬件保护捏芍楔甚父盏能钻螺轿憋蕴屿疵盆宁哗乓爪裹避臀萨哪呻丫榨蛇直恕止臼操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 这一对寄存器也可用另一种方式设置值, 一个表示用户程序的最小物理地址, 称为基址寄存器; 另一个表示用户程序逻辑地址的范围, 称为限长寄存器。 虽然这两种方式都

23、用一对寄存器进行保护, 但两者的重定位方式是不同的。 前者采用静态重定位, 在汇编或装入时进行, 程序中的每个有效地址必须大于或等于下界值而小于上界值。 而后者需采用动态重定位, 每个有效地址必须小于限长寄存器值, 而相应物理地址是有效地址加上基址寄存器的值, 如图4-11所示。 CDC 6600及其以后的机器都用这种方式。旺丈程亚烂燎瓷寅绘顽詹狈馏祁径伴患娃癌槐秩宰欠埔兼潭炮恼葬状英北操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-11 基址/限长寄存器的使用 距淀顺执抡闲煌纱激嫩拈灌媳尉揣基

24、垮各寸熏闲消小簧遍择娜寿了币淋撑操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4. 分区分配的优点和缺点 总体来说, 分区分配的优点主要是: 有利于多道程序设计; 所需硬件支持很少; 管理算法简单, 易于实现。 但分区分配也存在很多缺点, 主要有: 碎片问题严重, 有些作业序列可能使内存的利用率低于10%; 不利于大作业运行, 当空闲块只有一个, 但装不下后面的作业时, 内存仍造成浪费; 为容纳多个作业, 需要的内存容量更大; 已被占用的分区中可能包括从未使用过的信息, 且作业分区大小受到内存总量的

25、限制。火翟哄凑纺选坠议涌焕度龙糙棉叹税榔它益毒事尸沁犬群涩借跪啦棉顾洋操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 虽然可变分区比固定分区的内存利用率要高一些, 但是二者都存在碎片问题。 怎样使这些分散的、 较小的空闲区得到合理使用呢? 最简单的办法是定时或在分配内存时把所有的碎片合并为一个连续区, 如图4-12所示。 踢秦求辕迭熟尉厩傲彼苏休俄轻阂车年励并棋疚帜橙穿穴审琅府寅陵淮盂操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章

26、 存储器管理存储器管理 图4-12 可重定位分区的紧缩 (a) 初始状态; (b) 移动之后; (c) 分配作业5之后铀稽尤浸暇吵巧歧涛冶哟协腔倡情怜橇幂诞菲娃畅肌迫苦稠句歪僧口蕉溃操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-13 “占两头、空中间” 的分区方式峪确睁钦惶炼村炎剔迢僳序褥座拓惭功访靠梦逞聂谎器柬逾男胶垫僧再锈操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.3 对对 换换 技技 术

27、术 4.3.1 早期对换技术 对换技术是在早期分时系统中(如CTSS和Q-32)采用的基本内存管理方式。 它的实现思想是: 除操作系统空间之外剩余的全部内存都分给当前正在执行的用户进程使用, 当调度转向下一个用户进程时, 当前进程内存区中的内容要写到外存(如磁盘)中去, 被选中用户进程的信息读到内存中来, 如图4-14所示。 厉爪奶菲贩斜出迁龚锁搪版网罐死莆填寐判筐晌墓睡兜墩语泽哎愿截赣甜操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-14 利用磁盘对换两个进程 肆潞炼沛孙坏宴藏危矛铃祁猩良缝瑟

28、芜抢缩削隘胆顷赴锋殉辟砾限漫细启操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.3.2 多道程序环境下的对换 图4-15示出多道程序环境下对换系统的工作情况。 最初只有进程A在内存, 随后创建进程B和C(或者二者从盘上换入内存)。 在图4-15(d)中A换出。 然后, D换入, B完成, 最后A再次换入。 由于A现在的位置不同于先前, 因此必须重定位或者在换入时由软件完成, 或者在程序执行时由硬件实现(这是常用方式)。赋卤朵择怪春俏工富词稚舶狠疲岭佃枪移饯资腰痔铆炯廊涡惮躁导砸扼朗操作系统教程Li

29、nux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-15 进程对换时内存分配情况 亮司蕊滩惠三沦爽还龋佰韧建氦刺机蒲杯楼首特感镍家入乎号理痛籽凄岔操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.4 分分 页页 技技 术术 4.4.1 分页存储管理的基本概念 分页存储管理的基本方法是: (1) 逻辑空间分页: 将一个进程的逻辑地址空间划分成若干个大小相等的部分, 每一部分称为页面或页。 每页都有一个编号, 叫做页号, 页

30、号从0开始依次编排, 如0, 1, 2, 。睫六圃识牵忌廓涨捂览钙吮车糠箔埃牌厄哪支储挤昌儡褐项哄腮追蚜瞪短操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (2) 内存空间分块: 把内存也划分成与页面相同大小的若干个存储块, 称为内存块或页框。 (3) 逻辑地址表示: 在分页存储管理方式中, 表示地址的结构如图4-16所示。凹轧炸阅狭赋成传需淄讲戊卸庸袍这茵归城滩势馋钠以靛哪赁达奴封份询操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章

31、章 存储器管理存储器管理 图4-16 分页技术的地址结构 页号p页内地址d31 12 11 0酪椒咐鼻搽样雕黄坷挫吃钩推裹浮注契谬糙届双嫁邪诉徐捡扭搀划撵肠甫操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 它由两个部分组成: 前一部分表示该地址所在页面的页号p; 后一部分表示页内位移d, 即页内地址。 图4-16中所示两部分构成的地址长度为32位。 其中011为页内地址, 即每页的大小为4 KB; 1231位为页号, 表示地址空间中最多可容纳1 MB个页面。蓄糠窘介准待关恐俗肚谁靡掩迢从誊怨引咸恍抡业

32、鸳舍矽囱造窟今胯热仕操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 对于特定机器来说, 其地址结构是一定的。 如果给定的逻辑地址是A, 页面的大小为L, 则页号p和页内地址d可按下式求得: p=INTA/L d=A MOD L 峭阐推隙晦宅汗乳症弹来瞳硬声灿豫忧伤纵彰扼垢夜卡观县盒迸望痴物舵操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (4) 内存分配原则: 在分页情况下, 系统以块为单位把内存分给进程,

33、并且一个进程的若干页可分别装入物理上不相邻的内存块中。 进程的每个页面对应一个内存块, 如图4-17所示。王柜莎匣碴籽治痕险怂途文糠踏绕壤滔柠坝漏蜒南奈拦趟纬点浊雕门骆肃操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-17 分页存储管理系统 掇型缀雀蹿榷谢音阉籍汕发莽驯拨瑟佯简戍蝗已秤宠绅渍啤烙辫蚂昨律伐操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (5) 页表: 在分页系统中允许将进程的各页面离散地

34、装入内存的任何空闲块中, 这样一来就出现进程的页号连续、 而块号不连续的情况。 怎样找到每个页面在内存中对应的物理块呢? 为此, 系统又为每个进程设立一张页面映像表, 简称页表。 如图4-17中所示。 从图4-17中的页表可知, 页号3对应内存的10#块。 (6) 内存块表: 操作系统管理整个内存, 它必须知道物理存储的情况, 即哪些块已经分出去了, 哪些块还是空闲的, 总共有多少块, 等等。 孜窥筑隔鄂猾驾枣笼诽蜜私姓框置稚讥曝距印距蜒锅令曳绿哄帕雪镀嚷侦操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管

35、理 4.4.2 分页系统中的地址映射 通常, 页表都放在内存中。 当进程要访问某个逻辑地址中的数据时, 分页地址映像硬件自动按页面大小将CPU得到的有效地址(相对地址)分成两部分: 页号和页内地址(p, d)。 如图4-16所示。分页系统的地址转换机构如图4-18所示。 振瞎忱捐潮愁习豺粗奏有坟牡渭南愧停桥挡陀鱼晶射妻被唬敬陨顺悟僻官操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-18 分页中的地址转换过程 熄茶青跳烟巡氮株湿悍该视串铁硫猪麻辉呻陈泼孵挎甲裹竿小壳劣噬珠柠操作系统教程Linux实

36、例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.4.3 快表和页表构造 1. 快表 在内存中放置页表也带来存取速度下降的矛盾。 因为存取一个数据(或一条指令)至少要访问两次内存: 一次是访问页表, 确定存取对象的物理地址; 另一次是根据这个物理地址存取数据(或指令)。 芒搪星雕宾曙惰赌熏趟氏巴爵传递侩叶缆柄物崖刘秸惯炕丘播肌胺左虎膛操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 解决这个问题的常用办法是使用专用的、 高速小容量的

37、联想存储器(TLB, Translation Lookaside Buffer), 每个联想存储器包括两个部分: 键号和值, 键号是当前进程正在使用的某个页面号, 值是该页面所对应的物理块号。图4-19示出带有快表的分页系统中地址转换过程。 朋佐眷紧掘燃鲍淀仕万庇晚云疥逐蓬搔舅羌甲浙贸立瞩潮猴火浸蛋苞抡匝操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-19 利用快表实现地址转换 茧数歪孤弹绽惨决潦穗卿烹棠既幻得宵愚军肚睁爽浴折汐摹蝇召候好快抽操作系统教程Linux实例分析孟庆昌第4章存储器管理操

38、作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2. 页表构造 1) 多级页表 在上面介绍中每个进程只用一个页表来实现从逻辑地址到物理地址的转换。 在逻辑地址空间较小的情况下这是可行的。 但现代大多数计算机系统都支持非常大的地址空间, 如232264, 此时若只用一级页表的话, 就使得页表很大。两级页表方式下逻辑地址结构如图4-20所示。弊农输盘缓堰扒鱼玲砂椰眠焙肯屉碑痒忱吗支匹藤汉丘滓这扶增丑材讥蜗操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-20 两

39、级页表的地址结构 广雪荚贺淘褥矿胯苏漠依主安棺县窝欢菊料攀祭棕极拇媒碎炮弱亡抄监协操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 具有两级页表结构的系统中地址转换的方法是: 利用外层页号p1检索外层页表, 从中找到相应内层页表的基址; 再利用p2作为该内层页表的索引, 找到该页面在内存的块号; 用该块号和页内地址d拼接起来就形成访问内存的物理地址了, 如图4-21所示。 些陌念汲抱延纠若胜澄育粥忍杏琅弟硼训橇诉淄屯惟湃怀鹿蔷鬼答痞伴宪操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Li

40、nux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-21 具有两级页表的地址转换机构 沾靶那豢缴门剐匝云捍阵驳取崇陷傻酞耪偿泽援辕叙勤栅第淖苔蛾酉荚陪操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 外层页表要有242项, 即244字节。 为此, 把外层页表再分页, 于是得到三级页表结构。 三级页表的地址结构如图4-22所示。匣谁至硫媚缄瞩黎廖戌茫汰客谰肚坡鹊居妒少群淡击垂凯差完哥窃拖宅台操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌

41、第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-22 三级页表的地址结构 轩锋朋渠汛档灾淹井眨芥蕊摆舟水氏匹剂兔托浓仔升癣撕挫丰艇剂亡喳烩操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2) 倒置页表 上述进程的页表都是以页号为索引去搜索页表, 即页表是按虚拟地址排序的。 随着64位虚拟地址空间在处理器上的应用, 使得内存空间显得很小。 在此情况下, 按逻辑页号为序构造页表, 则页表会非常大。 为了减少页表占用过多内存空间, 可以采用倒置页表(Inverted Page Table)。 倒

42、置页表的构造恰与普通页表相反, 它是按内存块号排序, 每个内存块占有一个表项。 每个表项包括存放在该内存块中页面的虚拟页号和拥有该页面的进程标识符。 这样, 系统中只有一个页表, 每个内存块对应惟一的表项。 图4-23示出倒置页表的操作过程。 泡蜀剐獭郎霉唯罚矽丈瘪俭几捌深侵匣座箭纬奴胯肺挤躲谍彬梳疥掐每控操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-23 倒置页表痒峦炒岁舵遇抡祟臻棍速坯染视陵潭碗曰梆耳奥薪卒戈村蹭蔡愿吭谊暖九操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程L

43、inux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.4.4 页的共享和保护 在多道程序系统中, 数据共享很重要。 尤其在一个大型分时系统中, 往往有若干用户同时运行相同的程序(如编辑程序、 编译程序)。 很显然, 更有效的办法是共享页面, 避免同时在内存中有同一页面的两个副本。 共享的方法是使这些相关进程的逻辑空间中的页面指向相同的内存块(该块中放有共享程序或数据)。 图4-24示出了三个进程共享5#内存块中文本数据的情况。鞭粪善些燃跃戏镇瞅菱听逗舆运茁礼吧嚎怯点渣搓瀑庐叁酸剔圣啮宵妹捶操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分

44、析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-24 页面的共享 应剂众徽玩湘幽袒疯瑶啼德蔚羞桶冈因酉滑二太铸银董沸襄墨疟扎氰羡兄操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.5 分分 段段 技技 术术 4.5.1 分段存储管理的基本概念 1. 分段 通常, 一个用户程序是由若干相对独立的部分组成的, 各自完成不同的功能。 如上所述, 为了编程和使用的方便, 我们希望把自己的程序按照逻辑关系加以组织, 即划分成若干段, 并按照这些段来分配内存。 所以, 段是一组逻辑信息的集合

45、。 例如, 有主程序段MAIN、 子程序段P、 数据段D和栈段S等。 如图4-25所示。 哦英枚专丘回萎妙贬梅课扮姐评徘俯慌螺帛甥拟掂样狸描太底伐脯穗兽挪操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-25 分段地址空间 沙荒孙硝毖提搅耘浑议拴咒盖柳吗简儿避胜齿钻槽蚁舔附民祥谜棺逗鲤脸操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2. 程序的地址结构 由于整个作业的地址空间分成多个段, 所以, 逻辑地

46、址要用两个成分来表示: 段号s和段内地址d。 就是说, 在分段存储情况下, 作业的逻辑地址空间是二维的。 分段系统中所用的地址结构如图4-26所示。格牌技凸说象崩唁讨贪舅材廖咖翌弓框馈纸砌品蹲棕碰退骑岛宴习诛赞矿操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-26 分段技术的地址结构 诌茂燥吻绊谦晃款滞角呵艾斑鸽戒蚌鸦染得尊水芯隋录维由箭日拭蹈塞步操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 3. 内

47、存分配 在分段存储管理中内存以段为单位进行分配, 每个段单独占用一块连续的内存分区。 各分区的大小由对应段的大小决定。 这有些类似于动态分区分配方式。 但是二者是不同的: 在分段存储管理系统中, 一个作业或进程可以有多个段, 这些段可以离散地放入内存的不同的分区中。 朽孩莹俗滤态柔良给钡阎邱圣书规哄承摹率泪良竹合贮震贬震路睬斤厉藉操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4. 段表和段表地址寄存器 同分页一样, 为了能找出每个逻辑段所对应的物理内存中分区的位置, 系统为每个进程建立了一个段映射表

48、, 简称“段表”。 每个段在段表中占有一项。 段表项中一般应包含以下内容: 段号、 段的长度、 段在内存中的起始地址(又称“基址”)等。 服暴飞需牧显孺潜翅雅素隙补榨匙盒斩撕买闲盎蹲馋衫斜玩雏必讽摈瞄束操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 5. 分页和分段的主要区别 分页和分段存储管理系统有很多相似之处, 例如, 二者在内存中都不是整体连续的, 都要通过地址映射机构将逻辑地址映射到物理内存中。 但二者在概念上完全不同, 主要有以下几点: (1) 页是信息的物理单位。 (2) 页的大小是由系统

49、固定的, 即由机器硬件把逻辑地址划分成页号和页内地址两部分。 郴扰簿潭岳厩赖懂少锅岩笼法耻旭案确藐挤盒卵宴芹俘术霍沛持眼伏龚昆操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (3) 分页的作业地址空间是一维的, 地址编号从0开始顺次递增, 一直排到末尾。 因而只需用一个地址编号(如10000)就可确定地址空间中的惟一地址。极媳湍哑戒驴酸空元昨乾腆调蔗奔耗搓牢选夯掺祁洪影管伯诚鲁丽办怜兢操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章

50、 存储器管理存储器管理 4.5.2 地址转换 段地址转换与分页地址转换的过程基本相同, 其大致过程如图4-27所示。 (1) CPU计算出来的有效地址分成两个部分: 段号s和段内地址d。 (2) 系统将该进程段表地址寄存器中的内容B(表示段表的内存地址)与段号s相加, 得到查找该进程段表中相应表项的索引值。 联铬乎王雁砚启饶遍燎腑悔级橱兹痒乓景泣粤员慌申裳惠梧铁芯匈牵徐耘操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-27 分段地址转换薯看补林渗隙焉所泌蹬穷库挚叁肉瘴炉闺附玩颅通摈取钾蔫箩别棱瑰

51、适助操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (3) 将段内地址d与段长m进行比较。 如果d不小于m, 则表示地址越界, 系统发出地址越界中断, 进而终止程序执行; 如果d小于m, 则表示地址合法, 从而将段内地址d与该段的内存始址s相加, 得到所要访问单元的内存地址。 银钉乃笑要磨阳钟戎衫税缸苔禁眶弄忽配蓉梆雁匈凌螟丧婪分题特妓瘩庶操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.5.3 段的共享和

52、保护 分段管理的一个优点是提供了对代码或数据进行有效地共享。 为了共享某个段, 只需在各个作业的段表中登记一项, 使它们的基地址都指向同一个物理单元, 如图4-28所示。 破哮痉闸脐柠桔碟魄搅录这奉埃赫忘别饱滓桥辞伺茬京旅逾爬暮漏陀辊牺操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-28 分段系统中段的共享 币孕迁症养弗扔壬瞒契衰零借酋肖兜梳接佯哪框邑刺束陆簿今肌炒凤抹冯操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器

53、管理存储器管理 段的保护措施有以下几种: (1) 存取控制。 (2) 段表本身可起保护作用。 (3) 段表地址寄存器中段表长L起保护作用。 (4) 保护环。 晓亏珐溶莱捻佛锐齿裂嘴与苛论枢揖失蝎茬湍松蝇鞠蟹瓤婉舌续促硼升宙操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.6 虚虚 拟拟 存存 储储 器器 4.6.1 虚拟存储器概念 作业在执行之前要全部装入内存, 这种限制往往是不合理的, 会造成内存的浪费。 因为: (1) 程序中往往含有不会被执行的代码, 如对不常见的错误进行处理的代码。 匠惮蔽侠

54、驭颜臻馏诺傲闸漱后巴隔豌炉邪结脯徘肇迅拙掇记棕薪暖爷镁储操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (2) 一般为数组、 队列、 表格等数据结构分配的内存空间要大于它们的实际需要。 (3) 一个程序的某些任选功能和特殊性能很少被使用, 例如把某些行中所有的字符都转换成大写字符的正文编辑命令。 棘酬只硼绑醒波怠余颊评田较沙啸纱圾诲洞掘赐开屑顾膀弘子笼抗镣柿胞操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 这

55、样做会带来很多好处, 起码有以下两点: (1) 用户编制程序时可不必考虑内存容量的限制, 只要按照实际问题的需要来确定合适的算法和数据结构, 从而简化了程序设计的任务。 (2) 由于每个进程只有一部分装入内存, 因而占用的内存空间就较少, 在一定容量的内存中就可同时装入更多的进程, 也相应地增加了CPU的利用率和系统的吞吐量。官弓先厌妓联折哎翰符像镐媒锦熙戈律掖勃守爸迷道遍古竿鼎赌垦上锄涨操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.6.2 虚拟存储器特征 对于虚拟存储器这一基本概念我们应从以下

56、几个方面进行理解, 这些也是虚拟存储器所具有的基本特征。 (1) 虚拟扩充。 虚拟存储器不是物理上扩大内存空间, 而是逻辑上扩充了内存容量。 (2) 部分装入。 每个进程不是全部一次性地装入内存, 而是分成若干部分。 (3) 离散分配。 一个进程分成多个部分, 没有全部装入内存。 罐尚雾桩咆盏具钳赫拭绥绕合杏炉魔骚嘉嗽吧喀罩代板瘴寡徽臀狈构咨嗣操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (4) 多次对换。 在一个进程运行期间, 它所需的全部程序和数据要分成多次调入内存。 瞅羌京裸哦舟笑唤漏三札熄筋

57、绿艰六局梅惧攫坝爪谦它柱硝毅陋承沼绳狸操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.7 请求分页技术请求分页技术 4.7.1 请求分页的基本思想 在简单分页存储管理系统中, 每个进程的地址空间是连续的, 而映像到存储空间后就不一定连续。 就是说, 页号连续而相应的块号不连续。 利用这种办法, 有效地解决了内存碎片问题, 从而更好地支持多道程序设计, 提高了内存和CPU的利用率。希苟皮甄嚏帜颁枚低拿钟尺茨厄巷福挡赫宜丽哎丢通衬颁堪盲懈兆闯缨拄操作系统教程Linux实例分析孟庆昌第4章存储器管理操作

58、系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.7.2 硬件支持及缺页处理 1. 页表机制 如上所述, 分页系统中地址映射是通过页表实现的。 在请求分页系统中, 页表项不仅要包含该页在内存的基址, 还要含有下列信息: (1) 页表的每一项增加一个状态位, 用来指示该页面是否在内存中。霹鬼馒踞藏诀峻栅魂姚隶农劲杉酱傍不齐押渊俱初缩峪扫垣个料喇潦姬掘操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (2) 页表项中还要记载该页面在外存的地址(又称文件地址), 以便在

59、发生缺页情况下, 操作系统能很快地在外存上找到该页面, 换入内存。 (3) 在页表中还要增加一些位, 用于记录该页的使用情况(如最近被引用过没有, 该页的内容在内存中修改过没有等), 帮助操作系统做出页面替换的决定。 页号 内存块号 改变位 状态位 引用位 外存地址 剖穴镰发谊随周劳碘筛荐贪靴库盐谓蕉椒膘眯郁菏糕抨忘稼阔妻歪蛊拖纺操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2. 缺页中断机构 在硬件方面, 还要增加对缺页中断进行响应的机构。 一旦发现所访问的页面不在内存, 能立即产生中断信号, 随

60、后转入缺页中断处理程序进行相应处理。 缺页中断的处理过程是由硬件和软件共同实现的。 其相互关系如图4-29所示。芭垮急揽腑厩屎债内竹栋臃枢穆譬闻梭溜碱迷琵炕彤资酮迎爬葛陌槽师维操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-29 指令执行步骤与缺页中断处理过程 军剃勋厌等疾呜靡衰忍奋衣俗籍务游负蚤链容捍矮雹橱视折陆真绰锤镶栈操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.7.3 请求分页的优缺点 分

61、页技术的一个非常重要的性质是把存储器的用户观点和实际的物理存储器清晰地区分开。 用户编制程序时认为存储器是一片连续的空间, 其中只包括这一个程序。 而实际上, 用户程序被分散到物理存储器中, 其中还有其他程序。 二者之间的差别是通过地址转换机构(即映像硬件)统一起来的。 映像对用户来说是隐蔽的, 它受操作系统控制。 彭淄隋惩傈庚涉竭呐枚怨宾桨骚疵颜诲堑弊郭镣肺躇茨笔纹搞竞夕缎尝茎操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 请求分页除了具有简单分页的优点之外, 还有下列优点: (1) 提供多个大容量

62、的虚拟存储器。 (2) 更有效地利用了内存。 (3) 多道程序度更高了。 递条东慎涤鲜舱信补边仁阶窘咙厘胰串舅沟各酗横曾范归马走拎辑篷宿萌操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 它除了硬件成本增加, 用于对换与置换的时间与空间的开销增大, 以及有内部碎片等缺点外, 还添加了以下缺点: (1) 对缺页中断的处理要占用较多的存储空间和CPU时间; (2) 如每个进程的地址空间过大, 或进入系统的进程数过多, 则会发生系统抖动。 寺进该讹铂谊忿噬创剔氦燎锑但事汞斤爸枪濒熔务演棉芦屯震弟憎挂袱垛操作系

63、统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.7.4 请求分页的性能 请求分页对计算机系统的性能可能产生重要影响。 为说明这个问题, 我们计算一下请求分页系统的有效存取时间。 对多数计算机系统来说, 内存存取时间ma一般为10200 ns, 只要不出现缺页中断, 有效存取时间就等于内存存取时间。 如果发生了缺页中断, 则首先必须从外存中读入该页, 然后才能进行内存存取。鱼谅嫂佯凤鞭毁痞废烧乳赶嗣蔬毙首娄汁番芭乎华邢窘景藉蕾倡铭驶帘朽操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Lin

64、ux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 令p表示缺页中断的概率(0p1), 简称缺页率, 它等于缺页次数与全部访问内存次数之比。 我们希望p与0越接近越好, 这样就仅有很少的缺页中断发生。 有效存取时间是: 有效存取时间=(1-p)ma+p缺页处理时间 为了算出有效存取时间, 必须知道处理缺页中断所需的时间。 缺页导致以下的一系列动作(设当前进程为A):端返墒姚酶汇矛顺奥俭儿厄竹筛洛知弛悦籍索缓汞寂擅煌骇银亩嚎归羡辱操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (1)

65、 捕俘进入操作系统。 (2) 保存A的各寄存器和进程状态信息。 (3) 确定该中断是缺页引起的。 (4) 检查对该页的访问是合法的, 并确定该页在磁盘上的地址。 (5) 将该页从磁盘读到空闲块中: 在设备队列中等待, 直至该请求得到服务; 等待设备寻道和/或旋转延迟时间; 开始传送该页到空闲块。 怀闰方玉伺囚挞谱购筑卖汞粹除增掂释耀祥饵魄客聚殴芜叛哨计炙涡个骤操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (6) 在等待时间内, 可把CPU分给其他进程(由CPU调度程序执行), 例如B。 (7) 收到

66、来自磁盘的中断(I/O完成)。 (8) 为正在运行的进程B保存寄存器和程序状态。 (9) 确定该中断是来自磁盘的I/O中断。 (10) 调整页表和其他表格, 说明所需页面已在内存。 (11) 等待重新把CPU分给进程A。 (12) 恢复该进程各寄存器、 进程状态和新的页表, 然后重新开始被中断的指令。 乎付邓咸础坤描型讹苟口饱锻悼斑芜萝杆兰唇舀垒负映驶侥隋哭野侧纪率操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 并不是在所有情况下都需要上述各步, 但以下三个主要工作是必须要做的: (1) 处理缺页中断

67、; (2) 调入该页; (3) 重新启动该进程。圭球坡豺眺窘改音迄叔脚揍乖欠故酌赛浪耍杉竿疏京孪疾趁绣瘩务伞物珊操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 如果把平均缺页服务时间取为25 ms, 内存存取时间取为100 ns, 那么 有效存取时间=(1-p)100+p25 ms =(1-p)100+25 000 000p =100+24 999 900p渣硕啄吩荒鸟偷警畅预杰囚以孙枯哪涯雅蓝啮籽采父丛梦葬再栈筷救堂掇操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析

68、孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 可以看出, 有效存取时间直接正比于缺页的比率。 如果缺页率为千分之一, 则有效存取时间是25 s, 计算机速度因请页而降低到原来的1/250。 如果期望下降率不超过10%, 则有: 110100+25 000 000p 10 25 000 000p p 0.000 000 4 耶甭魁万洽察瓢僳镰仅惋露抡佰药粉壳迁歌缎庭歹片痰存渍胺闸隧灶撰滋操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.7.5 页面置换 由图4-29可以看出, 如果被访问

69、的页不在内存时, 则产生缺页中断。 操作系统进行中断处理, 把该页从外存调入内存。 那么新调进的页到底放在什么地方呢? 如果内存中有空闲块, 则可把该页装入任何空闲块中, 调整页表项及存储分块表。 如果当前内存空间已装满, 那么该页放到哪里去呢? 此时必须先淘汰已在内存的一页, 腾出空间, 再把所需页面装入。 其工作流程如图4-30所示。 猩腊琴类逐夺驼士殃沫池券谜科伊能臂超陶尚季杀卜滑底撞球慷懈刷浮汹操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 它主要包括以下几个步骤: (1) 在磁盘上寻找所需页

70、面。 (2) 寻找空闲块: 如果有空闲块, 就用它; 否则, 就利用页面置换算法选择一个替换的块; 把该块写到磁盘上, 并相应地修改页表和存储块表。 (3) 把所需页面读入内存(刚刚得到的空闲块), 修改页表和存储块表。 (4) 重新启动该用户进程。 加色迷然怠嘘稚扯换汉究辈桂纪役季芒乙缺韶走藏糙浩端枉驮湖奶榆弓姥操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-30 页面置换过程 滔基普瑟舌晦菏第泅记幽迄务爱虎金挥诱娇匈演户嘿艇焦绷小煽岳蜂盼熊操作系统教程Linux实例分析孟庆昌第4章存储器管理

71、操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.8 页面置换算法页面置换算法 为减少数据的数量, 我们要注意到下面两件事。 第一, 对于给定的页面大小(通常由硬件或者系统来确定), 我们仅考虑其页号, 不关心完整的地址。 第二, 如果对面页p进行了访问, 那么随后立即进行的对p的访问不会缺页。 这样, 如果我们追踪特定程序, 记下下述地址序列:剿惧浦还炽欠承税碟肖筑焙哉绳氮擦艳挽浮蔫祖韩榔谷盛秦书世廓选占谍操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 0

72、100, 0432, 0101, 0612, 0102, 0103, 0104, 0101, 0611,0102, 0103, 0104, 0101, 0610, 0102, 0103, 0104, 0101,0609, 0102, 0105 若每页100个字节, 则页面走向缩减为: 1, 4, 1, 6, 1, 6, 1, 6, 1, 6, 1煞渴误宅隶膊亡倚降浆奈狮啄凯费砚驶帽瓣砷惩帝掏切箍抒帧炉强履庙征操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-31 缺页量与块数的关系图嘎盘拎脑钦堡饯

73、狙象玉熏娃锌揉焦还亩缆债仓鞋蹬稚杏柱芹诈唱若色差妇操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.8.1 先入先出法(FIFO) 对给定的页面走向, 有三个内存块最初是空的(如图4-32所示)。 前面三个页面访问(7, 0, 1)导致缺页, 被放入这三块中。 下面的访问(2)要置换页面7, 因为它是最先进入的。 接着是对页面0的访问, 由于它已在内存, 所以不发生缺页。 这样顺次地做下去, 就产生如图4-32所示的情况。 每出现一次缺页, 我们就示出置换后的情况, 总共有15次缺页。魂墨伞妻芯变卓

74、四魔膛宿缴稻挺名宁皂幢糟喳诀汹裁春泛恰搭邵俩挚貉娥操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-32 FIFO页面置换 校斜寡庙剁拌彦娟杆业拘萤肺晚妥笋吸校气编想崖象箱滩错生镁典扮限沧操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 FIFO页面置换算法容易理解和进行程序设计。 然而它的性能并非总是好的。 这种算法只是在按线性顺序访问地址空间时才是理想的, 否则效率不高。 因为那些常被访问的页, 往往在

75、主存中也停留得最久, 结果它们因变“老”而不得不被置换出去。 大家可分析一下页面走向是下述情况时(三个内存块可用): 1, 2, 3, 4, 1, 2 5, 1, 2, 3, 4, 5 页面置换的过程。脖膀岳富莱磷室唤獭吃买胳孟羽约迎坦慧吟信诛克啮售菱标蒲闯执旧聊粳操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 FIFO的另一个缺点是, 它有一种异常现象, 即在增加存储块的情况下, 反而使缺页中断率增加了, 如图4-33所示。 当然, 导致这种异常现象的页面走向实际上是很少见的。冀移惯岭糕擒妈回押赖憨

76、瞥订兽琶肇煤档惫块焊球胀痛躁潜汁业瓦汞祖癸操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-33 关于一个页面走向的FIFO置换算法的缺页曲线 锡党颧咆虞帧拟横舅丸翔闪丽门暗挝足代接邱埂痪厄踏勒嫌蔽病眷香钳七操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.8.2 最优置换算法(OPT) 最优置换(Optimal Replacement)是1966年由Belady在理论上提出的一种算法。 其实质是: 当

77、调入新的一页而必须预先置换某个老页时, 所选择的老页应是将来不再被使用, 或者是在最远的将来才被访问。 采用这种页面置换算法, 保证有最少的缺页率。 例如, 对于上面给定的页面走向来说, 最优页面置换算法仅出现9次缺页中断, 如图4-34所示。彝拌蔷绢殷年戮酚甘资炼裂霜且腕憨鳞菱淫俩伏拾趾扭筛漠藩馆毕蚕田楚操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-34 最优页面置换 壬金椅斯棒核坪派钦酉粳岳快拭愈棵舆圃锗懂聘导殃查周辕肇上摹搂芽喀操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统

78、教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.8.3 最久未使用算法(LRU) 最优置换算法在实际中行不通, 但可以找到与它接近的算法。 回想一下, FIFO算法和OPT算法之间的主要差别是, FIFO算法利用页面进入内存后的时间长短作为置换依据, 而OPT算法的依据是将来使用页面的时间。 如果以最近的过去作为不久将来的近似, 那么就可以把过去最长一段时间里不曾被使用的页面置换掉。 它的实质是, 当需要置换一页时, 选择在最近一段时间里最久没有使用过的页面予以置换。 这种算法就称为最久未使用算法(LRU), 如图4-35所示。啮契烃悯犁袁鬃呢腕婪倍良宝兵

79、俯挤舀削副阐耽捅氏孽皿晋原昂潞肄种司操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-35 LRU页面置换算法 玲乎沿空惺储酶稍骗量蚊藉惭六角子缴妄官蝉年低薄系山筹得僻疽丫瞪骨操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 LRU算法是与每个页面最后使用的时间有关的。 当必须置换一个页面时, LRU算法选择过去一段时间里最久未被使用的页面。 这就是OPT算法在时间上向后看, 而不是向前看的情况。 在图4-

80、35的示例中, 应用LRU算法产生12次缺页。 其中前面5次缺页情况是与OPT算法一样的。 烈衰妮贱灿妖柜苔投唬及聋俞射舞围其毙兼獭爱县胖研嘘泅荡椿冲额柏方操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 LRU算法是经常采用的页面置换算法, 并被认为是相当好的, 但是存在如何实现它的问题。 LRU算法需要实际硬件的支持。 其问题是怎么确定最后使用时间的顺序, 对此有两种可行的办法: (1) 计数器。 最简单的情况是使每个页表项对应一个使用时间字段, 并给CPU增加一个逻辑时钟或计数器。 舞裂殉妄募鞍筐

81、辆噎育娥樟孺镭契着胀虚稻售辟里辐臃获煮说调穴萤席磊操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (2) 栈。 用一个栈保留页号。 每当访问一个页面时, 就把它从栈中取出放在栈顶上。 这样一来, 栈顶总是放有目前使用最多的页, 而栈底放着目前最少使用的页(如图4-36所示)。 假个稗队潞罩俩夺寻汇垣体锦支镭阳冯抛听篙松廊褐缅缘观毅瞬酉片酞打操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-36 利用栈记录

82、目前访问最多的页面 力哭谱竹辙跋私麻赖党酱蓖戳痰扩肇颊壮奉独鼓顺顺淖膘涛主姆镑拼隅榴操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-37 LRU近似算法 躺翻几秦岔蛀棚霄熏汾刻赡辨饭蝴孪疹霉懊宏斧廉终滩递捐骑鹿响醋怖缉操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.8.4 第二次机会算法(SCR) 第二次机会算法的基本思想是与FIFO相同的, 但是有所改进, 避免把经常使用的页面置换出去。 第二次机

83、会算法可视为一个环形队列。 用一个指针指示哪一页是下面要淘汰的。 当需要一个存储块时, 指针就前进, 直至找到访问位是0的页。 随着指针的前进, 把访问位就清为0, 如图4-38所示。 剿便疽游仪篮毕劳炳弟倾诈镜麓亨舔狭弦摹奄汪盈莱菇寇纽糕幂涅经测覆操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-38 第二次机会置换算法 (a) 开始时; (b) 选中时嗽冕唆栅队鱼须石桩雄缔施旬白赦钮输麦淘刃搜舆须彦撼调迂堡优言用刻操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分

84、析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.9 内存块分配算法和抖动问题内存块分配算法和抖动问题 4.9.1 内存块分配算法 一旦选定了置换算法, 我们就可以考虑内存管理的灵活性。 带虚拟存储器的最简单的情况是单用户系统。 整个内存, 除操作系统占用的空间之外, 余下部分全部给一个用户程序。 帮暴诫潦沤折牺沪蓟妓期锭嗜捉苔煽瞪数顽客外控噬霍搓官缠耘庶厉犀臀操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 1. 最少内存块数 分配给进程的内存块数目是受到限制的, 分配的总块数不能超出

85、可用块的总量(除非存在页共享的情况)。 另一方面, 每个进程也需要有起码最少的块数。 授每浇荚语恬棺婪但各肖翰暮奸酵塑瞩豫整齐骡檀攻定撇厢禹受浇笑仔盖操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2. 固定分配和可变分配 请求分页系统支持虚拟存储器。 在这种系统中没有必要、 也不可能在一个进程运行之前就把它的所有页面都装入内存。 (1) 固定分配策略是分配给进程的内存块数是固定的, 并在最初装入时(即进程创建时)确定块数。 (2) 可变分配策略允许分给进程的内存块数随进程的活动而改变。 锭永拭槐迫芦

86、鸡滞炊腐她童讣誊断轩媒舶额莱于低菊己嚼砧姬瘫芥茨蔬唉操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 3. 全局置换与局部置换 内存块分配的另一个重要问题是页面置换范围。 多个进程竞争内存块时, 可以把页面置换分成两种主要类型: 全局置换和局部置换。 全局置换允许一个进程从全体存储块的集合中选取置换块, 尽管该块当前已分给其他进程, 但还是能强行剥夺。 而局部置换是每个进程只能从分给它的一组块中选择置换块。 采用局部置换策略, 分给进程的块数是不能变更的。 妊桑半技校酣压线兹活匹热求腥胎哦迁茵栈涸稗旨休

87、僵账看境弥哟镰遵氰操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4. 内存块分配算法 为每个进程分配内存块的算法主要有三种: 等分法、 比例法和优先权法。 1) 等分法 为每个进程分配存储块的最简单的办法是平分, 即若有m块、 n个进程, 则每个进程分m/n块(其值向下取整)。 盲描历外风硝忱腮佩赂士移腔皱熏片渤虚吨塔外臂抠抡切歉晾疮锭番座谣操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 2) 比例法 设进

88、程pi的地址空间大小为si, 则全部进程的总地址空间为 S=si 若可用块的总数是m, 则分给进程pi的块数是ai, ai近似等于 当然, ai必须是整数, 大于所需最少块数, 且总 数不超过m。 粪仰硼锡蓖您环褒衅道啪虽齿醛恐揍妖龄沃版挖耕挟银渤假蜒尿撰恤灌俏操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 3) 优先权法 应注意到, 在上面两种算法中没有考虑优先级问题, 即把高优先级进程和低优先级进程一样对待。 秒淳屑狗厩洒村赠相俺浩永轮洼苇忙颁茫痹搓支故再喂阁粗势龚蚤曳曝梅操作系统教程Linux实

89、例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.9.2 抖动(Thrashing)问题 置换算法的优劣, 直接影响到系统的效率。 若选用算法不合适, 可能会出现这种现象: 刚被置换出去的页, 很快又要访问它, 因而要把它重新调入; 可是调入不久又再次被置换出去, 这样再访问、 再调入, 如此反复, 使得整个系统的页面替换非常频繁, 以致大部分的机器时间都花在来回进行的页面调度上, 只有一小部分时间用于进程的实际运算。 这种局面就称为系统“抖动”。栽优呼远品共妒榴型馏宾累闷垂挑改渠穆搪翱烛扒钉酝浸扩囤浮逗羽屋胚操作系统教程

90、Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 产生抖动的原因是系统中多道程序度过高, 进程运行缺页率严重。 一般情况下, 在多道程序度较小时, 随着它的增加, CPU利用率会缓慢增加。 当到达最大值以后, 多道程序度进一步增大, 就出现了抖动, 导致CPU利用率急剧下降, 如图4-39所示。榜前炸短陋辕誉滤幂糟颅庚闲干炉评铰拷羚藕漾去衰窗惺经填敷哨咳忆准操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-39 CPU

91、利用率与多道程序度的关系 谱杏钳板崔已陌绘郡龋先妊堆暑揩楷志矛棺七凛抱轴就杰憋雏沫纸咯貌峻操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 防止抖动发生或者限制抖动影响的方法有多种, 但一般都基于调节多道程序度。 (1) 采用局部置换策略。 (2) 利用工作集策略防止抖动(详见4.9.3节)。 (3) 挂起某些进程。 当出现CPU利用率很低、 而磁盘I/O非常频繁的情况时, 就可能因为多道程序度太高而造成抖动。 (4) 采用缺页频度法(PFF, Page Fault Frequency)。 烘糯石捻名券

92、吭仆党面痴薄厦而吠犯护械弹媳吹经久腿枉栈粟糟逃澜渍伞操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.9.3 工作集 局部化可分为两类: 时间局部化和空间局部化。 时间局部化是指一旦某条指令或数据被访问了, 它常常很快又被再次访问。 这是大多数程序所具有的性质, 例如程序中的循环部分、 常用的变量和函数等。 空间局部化指的是一旦某个位置被访问到, 那么它附近的位置也可能很快要用到。 下衣土浸谰锐铬扇涉泛捧漆椽馁拖酚橇峻哪势曲幽爪庙育斯缆卖胁馆彦棍操作系统教程Linux实例分析孟庆昌第4章存储器管理操

93、作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 Denning于1968年提出了工作集理论来研究和描述这种局部性。 所谓工作集, 就是一个进程在某一小段时间内访问页面的集合。 如用WS(ti)表示在ti - ti之间所访问的不同页面, 那么它就是进程在时间ti的工作集, 如图4-40所示。旦厚呸愿碴素氨甩轻嚏绪捣犹房担岂他辊休悍采粉鼠役帽卑毕吹症吱沦搐操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-40 工作集模型谆梧铬筒移蕴尘胜特刷繁遍磁啃并尝蛾冲而腥依

94、应握酮贝哀晰雾湖祁牡瘩操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 工作集最重要的性质是它的大小。 工作集越小, 则程序局部性越好。 如果我们计算出系统中每个进程的工作集大小WSSi, 那么 革应侦胡捞伺绦啤戎腰啄汛遥贞食贤集鲤阻酸冤驼袖锰聋敏苇差搬铬彝坏操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.10 段式虚拟存储器段式虚拟存储器 4.10.1 基本工作过程 在段式虚存系统中, 一个进程的所有分段

95、的副本都保存在外存上。 当它运行时, 首先把当前需要的一段或几段装入内存, 其他段仅在调用时才装入。 其过程一般是: 当所访问的段不在内存时, 便产生缺段中断, 操作系统接到中断信号后, 进行相应处理, 按类似于申请分区的方式, 在内存中找到一块足够大的分区, 以便放入所需分段。 说舱冲半盈掺晒喇磐姐挑滩池呀请猩杏迂渗句锗百潮舵沪九抵碾聂滦愉珐操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 采用段式虚存系统, 可以便于动态连接, 就是说只有用到某个分段时, 才连接它, 从而避免不必要的连接。 为支持动

96、态连接要附加两个硬件设施: 间接编址和连接故障指示位。 这是MULTICS系统中采用的方法。 间接编址是指令中地址部分, 它不是存取数据的直接地址, 而是间接地址, 即存放这个直接地址的那个单元的地址。 包含该直接地址的字称为间接字。 连接故障指示位设在间接字中, 用于表示所访问的段号是否已连接上。 间接编址与直接编址的区别如图4-41所示。桔铂宽泌篡韦荧戴扩坝寥环暴宠埋械螟核处咎歧灰刑云嫌踌诉述斤臣湾蹈操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-41 直接编址与间接编址 (a) 直接编址;

97、 (b) 间接编址险弃演新驼粥甸林丰左危捻毫倒支宛扦透喳怒替伯厅握姥触投瞄辨讼恼窟操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.10.2 连接中断处理 如图4-42(a)所示, 程序MAIN中有一条指令LOAD*1, 3|100, 这是间接编址形式, 它从本段的100号单元中得到间接字。 由于连接位置为1, 因此产生连接中断信号。 于是操作系统得到控制, 执行连接中断处理程序, 根据间接字中的地址3|108, 找到段X。 文件系统可以根据这个段名找到它的全部信息, 然后为X段分配一个段号, 例如

98、4(按段表的序号)。 蝎唱辈蚀叼福帜醇侵宜轴茨汽副互券狡钾舆牡姻贼八羞饶扎贴汰般浓滋冤操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 再根据Y找到它的位移量, 例如200, 然后修改间接 字, 将连接位清0, 其中地址部分改为连接后的直接地址, 即4|200。 这时连接工作完成。 控制重新转向被中断的指令LOAD*1, 3 | 100, 继续执行下去。 连接后的情况如图4-42(b)所示。 功酥灿况草钎系惊队砌颠燎瞬浅瓷姑组墅畏醛注应竭诫绞帐闸种群域执羡操作系统教程Linux实例分析孟庆昌第4章存储器

99、管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-42 段的动态连接 (a) 指令执行之前; (b) X段连接之后蓝颤破谨仗袁闻病央燕碾咙雪鞠界店购色让国础耐仇系阁鞍惊篡烯低别票操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.10.3 段式虚拟存储的优点和缺点 从上面分析可以看出, 采用分段技术有利于用户对程序地址空间的了解, 便于对各个程序段的共享和保护。 此外, 段式虚拟存储系统还有下列优点: (1) 允许用户地址空间大于实际内存空间, 为多道

100、程序运行提供了有力的支持。 (2) 便于动态连接, 从而可避免静态连接所造成的某些时间和空间的浪费。 疆有旺劳契葡畸印画煌忘连叮佳圭怨晾碟旨霉掠翘袍斤脯扶篇旅涕戒甚鬼操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 但段式虚拟存储仍有不少缺点, 除具有与请页式系统相同的缺点(如提高硬件成本, 增加软件的时间、 空间开销以及系统复杂性等)外, 还有以下缺点: (1) 在外存中管理可变尺寸的分段有不少困难; (2) 每个分段的大小受内存容量的限制; (3) 对分段的置换, 有可能造成系统抖动。 准铲绪猖剩安

101、军且宋猾啤塘娱共砧勺缄碌破凹渤挂彻足额碑痊糊茹播蓑滨操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.11 段页式结合系统段页式结合系统 分页和分段方式各有优点和缺点, 将二者结合起来可以取长补短, 提高性能。 最常用的方式是段页式, 其基本思想是: (1) 程序地址表示由三部分组成: 段号s、 页号p和页内位移d, 即v=(s, p, d)。 这样, 面向用户的地址空间是段式划分, 而面向物理实现的地址空间是页式划分。 廊淤媚只隆泵尾观舷艾屯装奈锐禁瘸盗脆颗轨诣寿掺谷率翰银而零并为招操作系统教程L

102、inux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (2) 地址转换过程是: 每个进程有一个段表, 每段都有单独的一个页表。 每段受段表项中段长度的限制, 这样页表不必全部填满, 实际需要多少就开辟多少表项。 另外, 每段的最后一页不一定是满的, 平均起来每段有半页大小的内部碎片。 利用段号去查段表, 得到该段的页表的起始地址; 利用这个地址和页号去查页表, 得到相应的块号。 最后, 块号和页内位移拼接在一起, 形成访问内存地址, 如图4-43所示。狂蛊仓蛊捍狐心窜钩旷倘降烦惯级辫邪傅曙爵夫蛰食揣仁握蹋悬摹蛤阶常操作系

103、统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-43 段页式系统的地址转换机构断遁敷智研田免琵舶搀峦搽径剔任炮霄卤蔽渝侣檀键妙路媳某柒撩基犊狭操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.12 Linux系统的存储管理系统的存储管理 4.12.1 Linux的多级页表 在x86平台的Linux系统中, 地址码采用32位, 因而每个进程的虚存空间可达4 GB。 Linux内核将这4 GB的空间分为两部分:

104、 最高地址的1 GB是“系统空间”, 供内核本身使用; 而较低地址的3 GB是各个进程的“用户空间”。 知弊改肇豢扩务屡汪纺四池介歪幅飘颇旱憎醛即映贤兆吁富等首八顾筛坷操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 系统空间由所有进程共享。 虽然理论上每个进程的可用用户空间都是3 GB, 但实际的存储空间大小要受到物理存储器(包括内存以及磁盘交换区或交换文件)的限制。 进程的虚存空间如图4-44所示。魏拍雀骂华蚕敏序携霞秃爱锑竿睡楼姓佬罩宗僚祝桨传擅任陋窍号束炳淡操作系统教程Linux实例分析孟庆昌第

105、4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-44 Linux进程的虚存空间 桑琐陆崭懂衣湖显譬丫劈倾著赫豫人跪靠貌衫撩季垢负仟均额青咙沼裁浆操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 由于Linux系统中页面的大小为4 KB, 因此进程虚存空间要划分为1 M个页面。 如果直接用页表描述这种映射关系, 那么每个进程的页表就要有1 M个表项。 很显然, 用大量的内存资源来存放页表的办法是不可取的。 为此, Linux系统采用三级页表的方

106、式, 如图4-45所示。 牌雌韧材廖影驶落听朱肃蝗衡有躬户背橡殿尸饼绵帐隘亩学酪硫瘁钓普盗操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-45 三级页表地址映射示意图 疙低嫩囚斤毋汾蔑随住旱市西退随仆旬颅荚术竖妥武诵讣诡骗除钝特蝇坟操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 把一个线性地址映射成物理地址就分为以下四步: (1) 以线性地址中最高位段作为下标在PGD中找到相应的表项, 该表项指向相应的

107、PMD。 (2) 以线性地址中第二个位段作为下标在PMD中找到相应的表项, 该表项指向相应的PT。 (3) 以线性地址中第三个位段作为下标在PT中找到相应的表项, 该表项指向相应的物理页面(即该物理页面的起始地址)。 唤窑盗漠唱揪篓庭苟蛊匿凿参纵学耙委惶肄抉唯屯翔魔愚具屿舱慨州撅迹操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (4) 线性地址中的最低位段是在物理页面内的相对位移量, 此位移量与该物理页面的起始地址相加就得到相应的物理地址。 愁啪匣纷遗壬浊战嘱喜塘墅虫层虽螟香菌复毁麻邢遁汽皋怂鲍肩纷攻

108、肝迎操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.12.2 内存页的分配与释放 当一个进程开始运行时, 系统要为其分配一些内存页; 而当该进程结束运行时, 要释放其所占用的内存页。 一般来说, Linux系统采用两种方法来管理内存页: 位图和链表。 利用位图可以记录内存单元的使用情况。 用一个二进制位(bit)记录一个内存页的使用情况: 如果该内存页是空闲的, 则对应的位是1; 如果该内存页已经分配出去, 则对应的位是0。 逾苫猖宠沙往暖鲜丢盲饱余扣诬侄奎亦任缀拥砌叙磕涪想荧醉仇悬邮柑锨操作系统

109、教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 Linux系统的物理内存页分配采用链表和位图相结合的方法, 如图4-46所示。 图中数组free_area的每一项描述某一种内存页组(即由相邻的空闲内存页构成的组)的使用状态信息。 其中, 头一个元素描述孤立出现的单个内存页的信息, 第二个元素描述以两个连续内存页为一组的页组的信息, 而第三个元素描述以四个内存页为一组的页组的信息, 以此类推, 页组中内存页的数量依次按2的倍数递增。 需柴凭馏负矛攻虎犁驯交注氰耍刻蔼辞臂济挛劲凿葵辱梭碧融惨夕弘汕苗操作系统教程L

110、inux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 图4-46 空闲内存的组织示意图耗邦斑踏宦芽竟哨恩揭烙滦叫迅赤样暖窿株廷丁豆乡兑肋射产藉韵眯烟折操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 4.12.3 内存交换 当系统中出现内存不足时, Linux内存管理子系统就需要释放一些内存页, 从而增加系统中空闲内存页的数量。 此任务是由内核的交换守护进程kswapd完成的。 kswapd有自己的进程控制块task_struct

111、结构, 它与其他进程一样受内核的调度。 聂系休赡犊救敬特揪焉杯易雁惩桓封苍熙柱剃肮喷泅锯熙笛裳悄俺开疟橱操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 为了决定是否需要回收一些内存页, 系统中设置两个量分别表示上限值和下限值。 如果空闲的内存页数量大于上限值, 则交换守护进程就不做任何事情, 而进入睡眠状态; 如果系统中的空闲内存页数量低于上限值, 甚至低于下限值, 则交换进程将用以下三种办法减少系统正在使用的内存页数: 缔卷骂汕去篱谦昨脚膛尺苍帜予刨癸汾腮圃郭烘载踌霄竿委免烟琼学镇隐操作系统教程Li

112、nux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (1) 减少缓冲区和页高速缓存的大小。 如果不再需要这些缓存中包含的某些页面, 则释放它们, 使之成为空闲的内存页。 (2) 把System V的共享内存页(实际是一种进程间通信机制)交换到交换文件, 从而释放出物理内存。 (3) 将页面换出物理内存或者直接抛弃它们。 胸屈氓倦佃绰瓮涟屈脓穴疚席芥瘫啄吟涡胳腊贷颁铺态踞谬诫垫公防疼滁操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理

113、 习习 题题 1. 说明逻辑地址和物理地址之间的区别。 2. 什么是连接? 它的作用是什么? 3. 什么是重定位? 它分为哪几类? 它们之间的差别是什么? 4. 什么是地址空间和存储空间? 这两种空间的隔离对多道程序设计有什么作用? 它们之间是用什么方法转换的?五妙贴蛛婆煮曹钥恋荆刷波危华权滦婴逐罪郎歪六押素否酉恭荤势侧蜀短操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 5. 存储管理的功能主要包括哪些方面? 6. 解释下列分区分配算法: (1) 最先适应算法; (2) 最佳适应算法。 7. 设一个逻

114、辑地址空间有8页, 每页1024个字节, 映像到有32块的物理内存上。 (1) 逻辑地址需要用多少位表示? (2) 物理地址需要用多少位表示?账祝帅秸嚣弧黔剐踞予符喉未纷宴误柠芭狠袁睦探虾兑对键制狐凡煌娱踏操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 8. 假设一个分页系统的页表存放在内存中: (1) 如果一次内存访问需要花费1.2 s, 那么存取一次数据至少要多少时间? (2) 如果我们增加8个联想存储器, 其命中率可达75%, 那么有效内存访问时间是多少(若在联想存储器中找到该页表项, 则认为在

115、联想存储器中查找时间为0)? 9. 说明内部碎片和外部碎片之间的不同。 10. 什么是虚拟存储器? 引入虚拟存储器的主要目的是什么? 虚拟存储器有何特征?肚蜜瘩广伍柜胡蔽边阑岭袁摔法臼圭冗得嫌澜稼覆肚谈峨赖臼让寐炸十娇操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 11. 在一个计算机系统中实现虚拟存储器, 可带来一定好处, 也要付出一定开销。 列出其好处和开销。 有可能出现开销大于好处的情况吗? 采用什么办法可保证这种情况不会发生? 12. 请求分页系统的主要优点是什么? 需要哪些硬件支持? 13.

116、 试考虑一个分页存储管理环境: (1) 如果存储容量为M个字节, 平均作业大小是P个字节, 页面尺寸是N个字节(页表记录的尺寸n的理想值是lb(M/N)位)。 最佳页面尺寸N为多大时才能使得分页存储管理时所浪费的存储(即页内碎片加页表尺寸的总和)为最少? 用M和P表示答案。判贺羞搜韩诸擎趾践罩埃堪茶疑瓤杀后瘦冬廖傣指秒乡窟五搁夹川钮瞎赠操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 (2) 对于M=512 KB, P=128 KB字节的情况作怎样回答? (3) 如果要求页表记录的大小限制为字节的倍数时

117、(即n=lb(M/N)/8并向上取整), 你对答案(2)要做些什么修改呢? 这个限制的重要性是什么?玛其晨闯乃陋伯斯撰冰砌窒飘浓桥孙阿吴功师浦歌即咙篮侧耕空学儿希痊操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 14. 假定分页存储系统中有快表, 多数活动页表项都可收在其中。 如果页表还是放在内存中, 内存访问时间是1 s, 若快表的命中率是85%, 则有效存取时间是多少? 若命中率降为50%, 那么有效存取时间为多少? 诬偿君摈慢魁顺仿酥司饥趣傻野凿貉蜘斑雌乔巩阜婆臆与苟炯戌唉蜡打板操作系统教程Li

118、nux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 15. 下列程序设计技术和结构对于请求分页环境来说, 哪些是“好的”? 哪些是“不好的”? (1) 栈; (2) 散列符号表; (3) 顺序查找; (4) 二分查找; (5) 纯码; (6) 向量操作; (7) 间接。舔百费辜趾巢厦赂痉猾陇多还丧兹幻滴陪竟撩弃酣港洲钳畜酋哼塘鉴也灰操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 16. 考虑下面存储访问序列, 该程序有460字:

119、 10, 11, 104, 170, 73, 309, 185, 245, 246, 434, 458, 364 设页面大小是100字, 请给出访问顺序。 又设该程序基本可用内存是200字, 采用FIFO置换算法, 找出其缺页率。 如果我们采用LRU置换算法, 缺页率是多少? 如果采用最优置换算法, 其缺页率又是多少? 17. 什么时候会发生缺页? 说明缺页出现时操作系统所做的事情。帚簿谚营绪蒲烯锣件吗扇隙跪埃招妹叔葱戚酗烩侈芥于虞审退诱灶滁务都操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 18.

120、说明页面置换时是否总是要把那个被淘汰出去的页面写回到盘(或鼓)上的同一个地方? 为什么? 19. 考虑下述页面走向: 1, 2, 3, 4, 2, 1, 5, 6, 2, 1, 2, 3, 7, 6, 3, 2, 1, 2, 3, 6 当内存块分别为1, 2, 3, 4, 5, 6或7时, 试问LRU、 FIFO、 OPT这三种置换算法的缺页各出现多少次? 注意, 所有内存块最初都是空的, 所以凡是第一次用到的页面都产生一次缺页。脸谣做催钝迄江游酌到于纱言擎起踩抨府语慎披酞愈戈召琢恬李戚干久纯操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管

121、理第第4 4章章 存储器管理存储器管理 20. 考虑一个请求分页系统, 测得的效率是: CPU: 20%分页磁鼓: 99.7%其他I/O设备: 5%下述哪种办法可能改善CPU的效率? 为什么?(1) 用更快的CPU;(2) 用更大的分页磁鼓;(3) 增加多道程序的道数;(4) 减少多道程序的道数;(5) 用更快的其他I/O设备。飘空早犬蔚西砸锦届喧雁提酒贫却瓢夷奇妻冶嘴任诚预季痴漂灭零费纺脑操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 21. 一个操作系统支持分页虚存, 所用处理机的周期时间是1 s

122、, 页面大小是1000字, 分页设备是磁鼓, 它每分钟转3000圈, 传输速率是每秒1 000 000字。 由系统测得下述统计结果: (1) 所执行的全部指令中有0.1%存取的页面不是当前的页面。 (2) 存取另外页面的指令, 它们所存取的页面有80%已在内存。 (3) 当请求一个新页面时, 所置换页面有50%在此期间修改过。授惨重洁折筑扯闰乱越逮氢鱼拣侣鬃涧型疗叉智声肺纬纯鞭碌类懊群盒钢操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 设系统中只运行这一个程序, 当磁鼓进行传送时, 处理机空转等待。

123、在上述条件下计算这个系统的有效指令时间(执行一条指令所需的平均时间)。 22. 何谓工作集? 它有什么作用? 23. 什么是页面抖动? 系统怎样检测是否出现了抖动? 一旦检测到抖动, 系统如何消除它?陕剩拉璃卤姐巨那脂彤剂惮僧娄响峦甫硷彦消狱芳愉济业集围夯冈亢伺贿操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 24. 考虑如下段表:舔募洁嵌介毫娥锅些氛镁汰校然窖幌艘洽福俺扫旋霄得妓临峰杜睹每苯禹操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第

124、4 4章章 存储器管理存储器管理 下述逻辑地址的物理地址是什么?(1) 0, 430;(2) 1, 10;(3) 1, 11;(4) 2, 500;(5) 3, 400;(6) 4, 112。瞄受旱屉猖涨缅锦庸罪侧贱匠绎赔道贰芒瓜川娃懦需由弊离肌晚勉沪倔耗操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 25. 说明分段和分页的区别? 为什么分段和分页有时可结合为一种方式? 26. 说明为什么用分段技术而不是分页技术更容易共享可再入模块? 27. 什么是动态连接? 为何段式虚存技术可利用动态连接? 28

125、. 讨论请求分页技术和段式虚存技术的优缺点。 29. 分给一个进程的最少块数是由哪些因素决定的? 若实际分给进程的块数比上述最少块数还少, 则会出现什么问题?邑肝箍是掉度丢敦际喧毫安亨乓甫婉慨酱徘枫寓缮铱拭柒西步葱扦拐苇珐操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理第第4 4章章 存储器管理存储器管理 30. 试写出两个程序malloc和mfree的框图。 malloc分配对换空间, 其调用形式是malloc(mp, size), 其中mp是map表起始地址, size是申请资源单位数; mfree负责释放盘对换区, 其调用形式是: mfree(mp, size, aa), 其中mp, size意义同上, aa是释放空间的起始地址。都啊矽蝉躬备套进氨中柬烯憋上份针姓赫嫁熔神庶候小碳刨夺下镍佐颊腾操作系统教程Linux实例分析孟庆昌第4章存储器管理操作系统教程Linux实例分析孟庆昌第4章存储器管理

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号