现代操作系统 第4版 第3章笔记

本文详细介绍了操作系统中的内存管理,包括无存储器抽象、地址空间的概念,重点阐述了分页机制,包括页表、页表项、高速缓存(TLB)的作用,以及解决大内存页表的多级页表方法。此外,讨论了虚拟内存的原理,解释了分页系统中的页面置换算法,如FIFO、LRU等,以及设计问题和实现细节。
摘要由CSDN通过智能技术生成

‘‘Programs expand to fill the memory available to hold them.’’ —— Parkinson’sLaw

为什么提出分层存储器体系(memory hierarchy)的概念?
因为任何一个存储器都达不到“高速度,大容量,低价格”的目标,只能采用分层结构,形成存储体系。
在这里插入图片描述

操作系统中管理分层存储器体系的部分称为存储管理器(memory manager).
内存管理的概念:操作系统对内存的划分和动态分配。

3.1 无存储器抽象

链接:
抽象:程序员必备的能力

最简单的存储器抽象就是根本没有抽象,如:早期大型计算机(20世纪60年代前)、小型计算机(20世纪70年代前)和个人计算机(20世纪80年代前)。
每一个程序都直接访问物理内存。
因此,存储器模型就是简单的物理内存:从0到某个上限的地址集合,每一个地址对应一个可容纳一定数目二进制位的存储单元,通常是8个。而且要想在内存中同时运行两个程序是不可能的。
在这里插入图片描述
按以上的方式组织系统时,通常同一时刻只能有一个进程在运行。

在没有存储器抽象的系统中实现并行的一种方法是使用多线程来编程,因为一个进程中的所有线程间可以共享同一内存映像。但是由于人们通常希望能够在同一时间运行没有关联的程序,而这正是线程抽象所不能提供的;而且一个没有存储器抽象的系统也不大可能具有线程抽象的功能,因此该想法并没有被广泛使用。
如何在不使用存储器抽象的情况下运行多个程序?
1.只要在某一个时间内存中只有一个程序,那么就不会发生冲突。(操作系统将当前内存中所有内容保存到磁盘文件中,然后把下一个程序读入到内存中在运行即可.)
2.将内存划分,并给每个单位分配一个4位的保护键(存储在CPU的特殊寄存器中),一个运行中的进程无法访问保护键与其PSW码不同的内存。
缺陷:两个程序都引用了绝对物理地址,会造成冲突。而我们希望每个程序都使用一套私有的本地地址来进行内存寻址。
解决:静态重定位(当一个程序被装载到地址16384时,将常数16384加到每个程序的地址上。)
问题:不通用;减慢装载速度;难以区分哪些内存字中有(可重定位的)地址(即地址or常数).

3.2 一种存储器抽象:地址空间

物理地址暴露给进程带来的问题:
1.用户程序易破坏操作系统
2.很难同时运行多个程序

要使多个应用程序同时处于内存中并且不互相影响,需要解决两个问题:保护和重定位
这就需要创造一个新的存储器抽象:地址空间(一个进程可用于寻址内存的一套地址集合,e.g.电话号码、以“.com”结尾的网络域名的集合)。每个进程有自己一个地址空间,并且它独立于其他进程的地址空间。

如何给每个进程提供私有的地址空间?
方法:使用基址寄存器和界限寄存器(动态重定位)
程序装载到内存中连续的空闲位置且装载期间无须重定位。当一个进程运行时,程序的起始物理地址装载到基址寄存器,程序长度装到界限寄存器。每次一个进程访问内存时,CPU会在把地址发到内存总线前,自动把基址值加到进程发出的地址值上,并检查访问的地址是否超过界限。
缺点:每次访问内存都要进行加法(慢)和比较运算(快)。

如何处理内存超载?
方法一:交换(swapping)技术
把一个进程完整调入内存中运行一段时间,之后存回磁盘。空闲进程主要存储在磁盘上。
在这里插入图片描述
内存紧缩(memory compaction):交换在内存中产生了多个空闲区(空洞,hole),通过把所有的进程尽可能向下移动,合并成一大块。
缺点:要耗费大量的CPU时间。

第一种——如果进程的数据段可以增长,相邻的是一个空闲区,就可把该空闲区分配给进程供其增大;但相邻的是另一个进程,那么要么把需要增长的进程移到内存中一个足够大的区域中去,要么把一个或多个进程交换出去生成一个足够大的空闲区。若一个进程在内存中不能增长,磁盘上的交换区也满了,那该进程只能挂起(或结束)。
第二种——如果大部分进程在运行时都要增长,可以在换入或移动进程时为它分配一些额外内存(来减少因内存区域不够而引起的进程交换和移动所产生的开销)。但当进程被换出到磁盘上时,应只交换进程实际上使用的内存中的内容。
第三种——如果进程有两个可增长的段,如数据段和堆栈段,那么堆栈段向下增长,数据段向上增长,两者之间的内存供两者使用。如果也用完了,同第一种,进程必须移动到足够大的空闲区中(或结束)。
在这里插入图片描述
方法二࿱

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值