内存管理(如何将程序装入内存,一次全部装入或者说按照策略装入)
程序执行过程:编译、链接、装入(由编译程序将用户源代码编译成若干个目标模块,由链接程序将编译后形成的一组目标模块以及所需库函数链接在一起,形成完整的装入模块,由装入程序将装入模块装入内存运行。)
链接的三种方式
1、静态链接,在程序运行前,将目标模块和库函数链接到一起,以后不再分开
2、装入时动态链接,将编译好的目标模块在装入内存时,边装边链接
3、运行时动态链接,运行时,需要某一目标模块了再与之链接
装入的三种方式
1、绝对装入(单道),逻辑地址和物理地址完全一致
2、可重定位装入(静态重定位,多道),逻辑地址和物理地址可重新定位,不要求一致
3、动态运行时装入(动态重定位),不立即将相对地址转换为绝对地址,而是真正需要执行的时候才进行转化。(需要重定位寄存器支持、程序执行时的装入方式)
【重定位】装入程序将执行代码装入内存时,通过地址转换将逻辑地址转化为物理地址。
逻辑地址空间和物理地址空间
逻辑地址(相对地址),每个目标模块都是从0号单元开始编址的。当链接程序将各个模块链接成一个完整的可执行的目标程序时,链接程序会顺序依次按各个模块的相对地址构成统一的从0号开始编址的逻辑地址空间。
物理地址空间是指内存中物理单元的集合,是地址转化的最终地址。
扩充内存技术
1、覆盖技术
由于程序并非任何时候都需要访问程序和数据的所有部分,因此将用户空间划分为一个固定区和若干个覆盖区。将经常活跃的程序部分放在固定区,其余部分按照调用关系分段,即将要访问的段放在覆盖区,其他的放在外存中,需要调用前,先调入覆盖区,替换覆盖区原有段。
2、交换技术
将处于等待状态(或在CPU调度原则下被剥夺运行权利的)程序从内存移到辅存(外存、硬盘),把内存空间腾出来,也称“换出”。 挂起
连续分配管理方式
1、单一连续分配
2、固定分区分配
3、动态分区分配(1)首次适应(2)最佳适应(3)最坏适应(4)邻位适应
1、单一连续分配(无外部碎片,仅内部碎片)(系统一部分、用户一部分)
将内存分为系统区和用户区,系统区仅供于操作系统,通常在低址部分;用户区提供给用户的,除开系统区之外的内存空间。无需内存保护,因为内存中只有一道程序,肯定不会被越界干扰。
优点,简单、无外部碎片,可以覆盖,不需要额外技术支持。
缺点,只等用于单用户、单任务,有内部碎片,储存器利用率极低。
2、固定分区分配(无外部碎片,仅有内部碎片)(2222222、246810)
(1)分区大小相等
(2)分区大小不等
存在的问题:1⃣️程序太大,放不到任何一个分区中,就不得不采用覆盖技术了2⃣️主存利用率低,当程序小于分区大小时,也占用一整个分区,产生内部碎片。
3、动态分区分配(不产生内部碎片,仅有外部碎片)任意任意,任意的话就得施加策略
不预先进行内存划分,而是在程序装入时,根据进程大小进行动态建立分区,使得分区大小正好合适进程需要。随时推进,外部碎片增多。而——紧凑技术——来解决外部碎片。
而进程装入内存或者换入内存时,有很多个空闲块可以供使用,那么操作系统就必须做决定,分配哪一个可供使用,这就是“动态分区的分配策略”。
(1)首次适应,空闲分区以地址递增次序链接,找到第一个满足的分区。(通常情况最好的、最快的方法)
(2)最佳适应,空闲分区按容量递增次序链接,找到第一个满足的分区。
(3)最坏适应,空闲分区按容量递减次序链接,找到第一个满足的分区。(最大适应法)
(4)邻位适应,从上次查找结束的位置开始查找,进行首次适应。
非连续分配管理方式
1、基本分页储存管理方式(固定的小分区,称为“块”)
进程以块为单位进行划分,以块为单位逐个申请内存空间。于是,只会在最后一个不完整的块申请一个主存空间时,才产生极少的(块的)内部碎片,称页内碎片。
分页中的概念:
- 进程中的块称为“页”,内存中的块称为“页框(页帧)”,外存中的块称为“块”。
-
地址结构:页号P pages(页容量)
偏移量W windows(单页容量)
- 页表:系统为进程建立一张页表,用于记录页面在内存中对应的物理块号,页表一般在内存中。逻辑空间按页表映射到物理空间中的页号对应的块号的块上。
2、基本分段储存管理方式
(1)分段。段式管理方式,按照用户进程中的自然段划分逻辑空间,均从0开始编址分配连续的地址空间。(段内要求连续,段间不要求)
(2)段表:逻辑空间和内存的映射关系表。
3、段页式管理方式(分页分段结合)
虚拟内存管理
1、传统储存管理方式的特征(1)一次性:作业必须一次性装入内存后,方能开始运行.导致<1>作业太大,无法装入,则无法运行<2>作业数量很大,无法装入过多作业,导致多道程序度下降(2)驻留性:作业装入后,驻留内存,不会被换出。运行的进程会阻塞,可能进行长期等待。
2、局部性原理
(1)时间局部性:如果程序中的某条指令一旦执行,不久后该指令可能再次执行;如果某数据被访问过,不久后该数据可能再被访问。(原因:程序中存在大量的循环操作。)
(2)空间局部性:一旦程序访问了某个存储单元,不久后,其附近的储存单元也将被访问,程序在一段时间内所访问的地址,可能集中在一定的范围之内。(原因:指令通常都是顺序存放,顺序执行的,数据也一般以数组、向量、表等形式簇聚储存的。
3、虚拟储存器
定义:基于局部性原理,在程序装入时,可以将程序的一部分装入内存,而将其与部分留在外存,就可以启动程序执行。在程序执行过程中,所访问的信息不在内存时,由操作系统将需要的部分调入内存,然后继续执行。且操作系统还将内存中暂时不需要的内容换出外存,从而有空间存放更多信息。(功能支持:部分装入、请求调入、置换)
特征:(1)多次性(2)对换性(3)虚拟性
4、由于如果采用连续分配内存管理方式的话,会使相当大一部分内存空间暂时或者“永久”的空闲,极度浪费内存资源,也无法从逻辑上扩充内存。
故,虚拟内存的实现,依赖于,非连续分配的管理方式,即页式、段式、段页式。
(1)请求分页式储存管理(最常用的方法)
(2)请求分段式储存管理
(3)请求段页式储存管理
硬件支持:
(1)一定容量的内存和外存
(2)页表或者段表机制的存在,作为主要的数据结构
(3)中断机构
(4)地址变化机构
请求分页式管理方式
基本问题:如何发现和处理“页面不存在内存”的情况。
(1)页表机制,在页表项中又加入P、A、W、外存地址4个字段
P:指示该页是否调入内存
A:本页一段时间被访问的次数
W:调入内存后,是否发生修改
外存地址:指示该页在外存的地址,通常是物理块号
(2)缺页中断
当访问的页面不存在内存时,产生一个页面中断,请求操作系统将所缺页调入内存。此时应当阻塞缺页进程(唤醒),如果内存中有空闲块,则分配一个块,装入调入页,并修改页表中的项;如果没有空下快,则要淘汰某页(若该页被修改过,则还需写回外存)。
缺页中断和一般中断的明显区别:
(1)输入内部中断
(2)一次执行,可能多次中断
#(3)地址变化机构
- 若找到了访问的页,便修改页表项中的访问位(写指令还需重置修改位),然后用页表项中的物理快号和业内地址形成物理地址地址。
- 若未找到该页的页表项,应到内存中查找页表,对于页表项中的状态为P,看看是否已经调入内存,未调入则产生缺页中断,请求外存把该页调入内存。
页面置换算法
进程运行时,若其访问的页面不存在内存则需要将其调入,但内存已无空闲空间,就需要从内存中调出一页程序或者数据,送入磁盘对换区。选择调出页的策略,就称是页面置换算法。
(1)Optimal最佳置换算法:选择的页面是,以后永久不使用的,或者是在最长时间内不会再被访问的页面。但由于人们无法预知进程的执行,因此算法无法实现。
如页面引用串号是:701203043203212017,但只有3个物理块供使用;则是701~201(因为7最长不会被访问到,故第四位串号2置换串号7)
但optimal算法可以用来评价其他算法。
(2)FIFO先进先出页面置换算法(我还会Belady哦)
优先淘汰最在进入内存的页面。虽然听起来很不科学,但是算法实现简单,只需要将调入内存的页面根据先后次序接成队列即可。
(3)LRU最近最久未使用算法(我不会Belady)(Longest Recently Used)
根据页表项中的访问字段A(记录本页一段时间内被访问的次数,或记录本页多久未被访问),淘汰时间最长的那个页面。
如页面引用串号是:701203043203212017,但只有3个物理块供使用;则是701~201~201~203~403…
(4)CLOCK算法(NRU,Not Recently Used)最近未使用
性能上最接近最佳置换算法,但是开销大,实现困难。
页面分配策略(物理块分配策略)
1、驻留集大小
分页式虚拟内存中,由操作系统决定,读取多少页。取决于
(1)分配给一个进程的存储量越小,在任何时候驻留在主存中的进程数就越多,从而提高处理机的时间利用效率。
(2)如果一个进程在主存中页数过少,虽然有局部性原理,但错误了依然会相对较高。
(3)如果页数过多,根据局部性原理,对错误率也没太多影响。
故
- 策略一:固定分配局部置换
- 为每个进程分配数量一定的物理块,运行期间不变。当发生缺页,只能进行页面置换。
- 优:实现简单。
- 缺:难以制定策略进行数目分配抉择:物理块太少则缺页频繁,物理块太多又会使CPU和其他资源利用率下降。
- 策略二:可变分配全局置换
- 为每个进程分配数量一定的物理块,操作系统自身也保持一个空闲物理块队列。当发生缺页时,系统从空闲物理块队列取出一个物理块分配给进程,将缺页装入此块。
- 优:比固定分配局部置换更加灵活,可动态增加进程物理块。
- 缺:盲目增加物理块,倒是系统多道程序并发能力下降。
- 策略三:可变分配局部置换
- 结合固定分配局部置换和可变分配全局置换。
- 为每个进程分配数量一定的物理块,当发生缺页,只能进行页面置换。
- 若频繁缺页,则加块。
- 若缺页率低,可适当减少块
- 优:棒啊!
- 缺:实现复杂。
调入时机:
(1)预调页策略
(2)请求调页策略
频繁的页面调度称为:抖动~~~~~~
文件管理
文件储存空间管理(1)空闲表法(2)空闲链表法(3)位示图法(4)成组链接法
磁盘调度算法(1)先来先服务(2)最短寻找时间优先(3)扫描算法(4)循环扫描