操作系统-内存基础

一、内存管理的目的和功能

  • 内存管理的目的:为了提高内存利用率,更好的支持多道程序并发
  • 内存管理的功能:①内存分配与回收②地址转换(硬件实现)③内存共享④内存保护

二、程序重定位

重定位就是在符号引用的地方填入准确的物理地址

编译时重定位

在编译产生可执行代码时,就重定位了。这时,程序就只能加载到内存的指定位置。

显然,只有执行固定任务的计算机才能在编译时就预先已知将来在内存的执行位置

装载时重定位

就是在程序载入内存时,根据载入的物理内存地址,来修改程序中的逻辑地址。

缺点是,一旦载入内存后,程序就不能在内存中移动了,否则填入的准确的物理地址会失效

运行时重定位

就是只有当指令执行时,才将指令中的逻辑地址转换为物理地址。这样程序就可以在内存中移动。

具体做法是,装载到哪个内存区域,就记录下这个区域的始址(基址),每执行一条指令,都先将指令中的逻辑地址加上基址以后再放到地址总线上(地址转换)。MMU可以完成这个地址计算过程,基址寄存器用来保存基址。(每个进程在内存的基址要保存在其PCB中,进程切换时,将其PCB中存放的基址取出来赋给基址寄存器,这个就叫地址空间的切换)

三、连续分配管理

在程序载入内存之前,需要在内存中分割出一段空闲内存分配给进程

  • 单一连续分配:内存分为系统区、用户区。系统区仅供操作系统使用,用户区仅有一道用户程序。
  • 固定分区分配:把内存划分成若干分区,分区大小不一定要相等,维护一张“分区使用表”,表项可为“分区号、始址、大小、状态(是否空闲)”。(会有内部碎片)
  • 动态分区分配:进程装入内存时,动态为之分配与之所需相等的内存区域。算法:first fit、next fit、best fit、worst fit(会有外部碎片)

四、基本段页式管理

程序不必在主存里连续存放了,可以离散的装载到内存的各个区域。当然,这就需要额外的空间去存储这些离散区域的索引

段页式系统地址变换机构

五、请求页式管理——虚拟内存

32位的寄存器只能产生4GB大小的地址,如果把所有段的基地址设为0,段的长度设为0xFFFFF,段长度的粒度设为4KB,一个段就是4GB,分段就成为了一种“虚设”,这就是保护模式的平坦模型(此时,逻辑地址就是线性地址)。在分页机制中,物理页也有属性值,可以进行内存保护。

基本分页管理:运行时要把进程的所有页面都装入内存,且任何页面不会被换出,直到进程终止

请求分页管理:运行时不必把进程的所有页面都装入内存,当前需要用到哪页,就发个缺页中断,然后请求调页,把需要的页载入内存

虚拟内存的本质就是页表构建起来的一个地址空间

虚拟内存的特征:①部分装入②请求调页③对换功能,这三个特征合力实现逻辑上的“大容量”内存

虚拟内存是软件技术,实现它需要的硬件支持:①内存和外存②MMU地址变换部件③中断部件

磁盘是仓库,内存是店面,仓库里的所有东西的清单就是虚拟内存。“换入”就是把东西从磁盘读到内存,然后在清单(页表)上标注已装载(有效位为1),并记录装载的物理页框号

“换出”就是把东西从内存移除,然后在清单上标注未装载(有效位为0)

虚拟内存通过换入/换出技术,利用外存的空间逻辑上扩充了内存的空间

页面换入就是请求调页,但不可能一直换入,物理内存将满时就要换出。页面换出有很多算法(FIFO、LRU、CLOCK),核心都是想把未来最长时间内不再被访问的页面换出(将最近的一段未来有可能访问的页面尽量保存在内存中)

缺页中断时页面调入过程:当进程所访问的页面不在内存中时(状态位为0),便向CPU发出缺页中断,中断响应后便转入缺页中断处理程序。该程序通过查找页表得到该页的物理块,此时如果内存未满则启动磁盘I0,将所缺页面调入内存,并修改页表。如果内存己满,则先按某种置换算法从内存中选出一页准备换出;如果该页未被修改过(修改位为0),则无须将该页写回磁盘,直接覆盖;但是,如果该页已被修改(修改位为1),则必须将该页写回磁盘,然后将所缺页调入内存,并修改页表中的相应表项,置其存在位为1。调入完成后,进程就可利用修改后的页表形成所要访问数据的内存地址

六、进程的页框分配、对换区、抖动和工作集

进程页框的分配

  • 进程的驻留集:给一个进程分配的物理页框的集合
  • 驻留集太大,系统并发进程数减小;驻留集太小,进程缺页率会很高
  • 固定分配:该进程的驻留集大小从进程开始运行到终止都不改变
  • 可变分配:该进程的驻留集大小在进程运行期间根据缺页中断频率动态改变
  • 局部置换:如果进程在运行中发生缺页,只能从该进程驻留集中选页替换
  • 全局置换:如果进程在运行中发生缺页,系统从全局空闲页框链表中取出一块分配给它(操作系统会定期对分配给所有进程的页面进程clock算法扫描,发现一段时间内没有被访问的页面,就换出到磁盘,并把对应页框记录到空闲页框链表中)

可见,只要引入了全局置换策略,分配策略上一定是可变分配,因为全局置换增加了进程的驻留集大小

如果采用固定分配策略,则只能采用局部置换策略配套

对换区

磁盘分为对换区和文件区。对换区采用连续分配方式,文件区离散分配方式。因此,对换区的IO速度就比文件区更快

缺页时系统从何处调页分为三种情况

1)系统拥有足够的对换区空间。可以全部从对换区调入所需页面,以提高调页速度。为此,在进程运行前,需将与该进程有关的文件从文件区复制到对换区

2)系统缺少足够的对换区空间。凡是不会被修改的文件都直接从文件区调入;而当换出这些页面时,由于它们未被修改而不必再将它们换出,直接覆盖。但对于被修改的页面,在将它们换出时须调到对换区,以后需要时再丛对换区调入。

3)UNIX方式。与进程有关的文件都放在文件区,因此未运行过的页面都应从文件区调入。曾经运行过但又被换出的页面,由于是放在对换区,因此在下次调入时应从对换区调入。进程请求的共享页面诺被其他进程调入内存,则无须再从对换区调入

抖动

刚刚换出的页面马上又要换入内存。频繁缺页会造成频繁磁盘IO,频繁磁盘IO会造成CPU空闲时间增多,利用率下降。系统抖动也叫系统颠簸(thrashing),根本原因是给进程分配的物理页框数太少,少到无法覆盖当前进程执行时的“局部”(工作集)

工作集

工作集(work set)是指在某段时间间隔内,进程要访问页面的集合

工作集模型是解决抖动的数学方法

工作集W = {时刻t,工作集窗口大小Δ}

Δ需要随着某些系统参数自适应调整

工作集反映了进程在接下来一段时间内很有可能会频繁访问的页面集合

进程的驻留集(系统给进程分配的页框数)大小要大于工作集窗口大小

工作集模型的原理是,让操作系统跟踪每个进程的工作集,并为进程分配大于其工作集的驻留集。落在工作集内的页面需要调入驻留集中,而落在工作集外的页面可从驻留集中换出。若还有空闲物理块,则可再调一个进程到内存。若所有进程的工作集之和超过了可用物理块总数,则操作系统会暂停一个进程,将其页面调出并将物理块分配给其他进程,防止出现抖动现象

想要基于工作集模型准确求出局部实际是很难的,除了窗口大小Δ难以准确设置外,工作集还随时刻t的变化而变化

虚拟存储器性能的影响因素

缺页率就是影响虚拟存储器性能的主要因素

而影响缺页率的因素有:①页面大小②进程驻留集大小(取决于工作集)③页面置换算法④程序编制方式

  • 页面大,缺页率低,页表长度减少,页内碎片增大;页面小,缺页率高,页表长度增加,页内碎片减小
  • 驻留集越大,缺页率就越小。当驻留集大小达到工作集大小时,已经可以覆盖进程执行的局部了,再增大驻留集对缺页率影响就很小了
  • 页面置换算法核心就是将最近的一段未来有可能访问的页面尽量保存在内存中
  • 编写程序的局部化程度越高,执行时的缺页率就越低

此外,减少写回磁盘的频率也可提高虚拟存储器性能:换出已修改过的页面时,应当写回磁盘,如果每当一个页面被换出时就将它写回磁盘,那么每换出一个页面就需要启动一次磁盘I/O,效率极低。为此在系统中建立一个已修改换出页面的链表,对每个要被换出的页面(已修改),可以暂不将它们写回磁盘,而将它们挂在该链表上,仅当被换出页面数达到给定值时,才将它们一起写回磁盘,这样就可显著减少磁盘I/O的次数,即减少已修改页面换出的开销。此外,如果有进程在这批数据还未写回磁盘时需要再次访问这些页面,就不需丛外存调入,而直接从已修改换出页面链表上获取,这样也可以减少页面从磁盘读入内存的频率,减少页面换进的开销

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值