在第四章中,主要掌握一些分页管理、分段管理等的存储管理方式,当然也需要朋友们对基础知识有所了解,看这篇文章的时候,会更加能够吸收相应的“简答”题型或者是会“计算”相应的题型。本章的内容参考《计算机操作系统》(第四版 汤子瀛)的书籍相应章节。阿婆主只是知识的搬运工~
目录(检索你需要知道的知识点)
第四章操作系统的基础知识点
4.1 存储器基本概念中的典型问题分析
4.1.1 存储器管理的基本任务,是为多道程序的并发执行提供良好的存储器环境。问“良好的存储器环境”应包含哪几个方面?
4.1.2 在什么情况下需要进行重定位?为什么要引入动态重定位?
4.1.3 动态重定位的实现方式有哪几种?
4.1.4 内存保护是否可以完全由软件实现?为什么?
4.1.5 提高内存利用率的途径主要有哪些?
4.2 连续分配方式中的典型问题分析
4.2.1 某系统采用动态分区分配方式管理内存,内存空间为640K,高端40K用来存放操作系统。在内存分配时,系统优先使用空闲区低端的空间。对下列的请求序列:
作业1申请130K、作业2申请60K、作业3申请100K、作业2释放60K、作业4申请200K、作业3释放100K、作业1释放130K、作业5申请140K、作业6申请60K、作业7申请50K、作业6释放60K,请分别画图表示出使用首次试应算法和最佳适应算法进行内存分配和回收后,内存的实际使用情况。
4.2.2 某系统主存空间为1024KB,采用伙伴(Buddy System)系统分配其内存,对于下列请求序列:
作业1请求240KB、作业2请求120KB、作业3请求60KB、作业2释放120KB、作业4请求130KB、作业3释放60KB,请画出进行上述分配和回收后,内存实际使用的情况。
4.2.3 假设某多道程序设计系统中有供用户使用的内存100K,打印机1台。系统采用可变分区方式管理内存;对打印机采用静态分配,并假设输入输出操作的时间忽略不计;采用最短剩余时间优先的进程调度算法,进程剩余执行时间相同时采用先来先服务算法;进程调度时机选择在执行进程结束时或有新进程到达时。
4.2.4 在以进程为单位进行对换时,每次是否将整个进程换出?为什么?
4.3 基本分页系统中的典型问题分析
4.3.1 为实现分页存储管理,需要哪些硬件的支持?
4.3.2 对一个将页表存放在内存中的分页系统:
(1)如果访问内存需要0.2us,有效访问时间为多少?
(2)如果加一快表,且假定在快表中找到页表项的几率高达90%,则有效访问时间又是多少(假定查快表需花的时间为0)?
4.3.3 某系统采用页式存储管理策略,拥有逻辑空间32页,每页2KB,拥有物理空间1MB。
(1)写出逻辑地址的格式。
(2)若不考虑访问权限等,进程的页表有多少项?每项至少有多少位?
(3)如果物理空间减少一半,页表结构应相应作怎样的改变?
4.3.4 已知某分页系统,主存容量为64K字节,页面大小为1K,对一个4页大的作业,其0、1、2、3页分别被分配到主存的2、4、6、7块中,试:
(1)将十进制的逻辑地址1023、2500、3500、4500转换成物理地址;
(2)以十进制的逻辑地址1023为 例画出地址变换过程图。
4.3.5 已知某系统页面长4KB,每个页表项4B,采用多层分页策略映射64位的用户地址空间。若限定最高层页表只占1页,问它可采用几层分页策略。
4.4 基本分段系统中的典型问题分析
4.4.1 对于下表所示的段表,请将逻辑地址(0,137),(1,4000),(2,3600),(5,230)转换成物理地址。
4.4.2 什么是动态链接?用何种内存分配方法可以实现这种链接技术?
4.4.3 试全面比较连续分配和离散分配。
第四章操作系统的基础知识点
4.1 存储器基本概念中的典型问题分析
4.1.1 存储器管理的基本任务,是为多道程序的并发执行提供良好的存储器环境。问“良好的存储器环境”应包含哪几个方面?
答:存储器管理是为多道程序的并发运行提供良好的存储器环境。它包括以下内容:
(1)能让每道程序“各得其所”,并在不受干扰的环境中运行;还可以使用户从存储空间的分配、保护等繁琐事务中解脱出来。
(2)向用户提供更大的存储空间,使更多的作业能同时投入运行;或使更大的作业能在较小的内存空间中运行。
(3)为用户对信息的访问、保护、共享以及动态链接等方面提供方便。
(4)良好的存储器环境,还应包括能使存储器有较高的利用率。
4.1.2 在什么情况下需要进行重定位?为什么要引入动态重定位?
答:源程序经过编译、链接产生的装入模块一般总是从0开始编址的,其中的地址都是相对于起始地址的相对地址。在将它装入内存时,其分配到的内存空间的起始地址通常不为0,因此指令和数据的实际物理地址与装入模块中的相对地址是不一致的,此时,为了使程序能够正确执行,必须将相对地址转换成物理地址,即进行重定位。
进程在运行过程中经常要在内存中移动位置(如对换、紧凑时),引入动态重定位的目的就是为了满足程序的这种需要。动态重定位的实现需要一定的硬件支持,重定位的过程是由硬件地址变换机构在程序执行每条指令时自动完成的。
4.1.3 动态重定位的实现方式有哪几种?
答:动态重定位的实现必须有硬件地址变换机构的支持,其具体的实现方式主要有:
(1)连续分配方式下的动态重定位。该方式需要在整个系统中设置一个重定位寄存器,用来存放正在执行的作业在内存中的起始地址。当CPU要存取指令或数据时,硬件的地址变换机构自动将逻辑地址与重定位寄存器的值相加,形成指令或数据的物理地址。
(2)离散分配方式下的动态重定位。离散分配方式主要是指分页和分段存储管理方式,此时,系统首先必须为每个作业配置一张页(段)表,用来记录作业的每个页(段)对应的内存块号(内存始址和段长),页(段)表被存放在内存中。而在整个系统中则只需设置一个页(段)表控制寄存器,用来存放正在执行的作业的页(段)表始址和长度。当CPU要存取指令或数据时,硬件的地址变换机构自动将逻辑地址分成页号和页内地址两部分(或直接从逻辑地址中获得段号),并根据页(段)号到控制寄存器所指示的页(段)表中获得对应的物理块号(或段的内存始址),并与页内地址(或段内存地址)拼接(或相加),形成物理地址。
4.1.4 内存保护是否可以完全由软件实现?为什么?
答:内存保护的主要任务,是确保每道程序都只能在自己的内存区内运行。这就要求系统能对每条指令所访问的地址是否超出自己内存区的范围进行越界检查。若发生越界,系统应能立即发现,并发出越界中断请求,以抛弃该指令。若此检查完全用软件实现,则每执行一条指令时,都需要增加若干条指令去执行是否越界的检查功能,无疑会大大降低程序的执行速度。因此,越界检查通常由硬件实现,并使指令的执行与越界检查功能并行执行,从而不会使程序的运行速度降低。当然,越界以后的处理,仍需要由软件来配合完成。因此,内存保护功能是由硬件和软件协同完成的。
4.1.5 提高内存利用率的途径主要有哪些?
答:内存利用率不高,主要表现为以下四种形式:
(1)内存中存在着大量的、分散的、难以利用的碎片。
(2)暂时或长期不能运行的程序和数据,占据了大量的存储空间。
(3)当作业较大时,内存中只能装入少量作业,当它们被阻塞时,将使CPU空闲,从而也就降低了内存的利用率。
(4)内存中存在着重读的拷贝。
针对上述问题,可分别采用下述方法提高内存的利用率:
(1)改连续分配方式为离散分配方式,以减少内存中的零头。
(2)增加对换机制,将那些暂时不能运行的进程,或暂时不需要的程序和数据,换出至外存,以腾出内存来装入可运行的进程。
(3)引入动态链接机制,当程序在运行中需要调用某段程序时,才将该段程序由外存装入内存。这样,可以避免装入本次运行中不会用到的那部分程序和数据。
(4)引入虚拟存储机制,使更多的作业能装入内存,并使CPU更加忙碌。引入虚拟存储机制,还可以避免装入本次运行中不用的程序。
(5)引入存储器共享机制,允许一个正文段或数据段被若干个进程共享,以减少内存中重复的拷贝。
4.2 连续分配方式中的典型问题分析
4.2.1 某系统采用动态分区分配方式管理内存,内存空间为640K,高端40K用来存放操作系统。在内存分配时,系统优先使用空闲区低端的空间。对下列的请求序列:
作业1申请130K、作业2申请60K、作业3申请100K、作业2释放60K、作业4申请200K、作业3释放100K、作业1释放130K、作业5申请140K、作业6申请60K、作业7申请50K、作业6释放60K,请分别画图表示出使用首次试应算法和最佳适应算法进行内存分配和回收后,内存的实际使用情况。
分析:首次适应算法将空闲区按起始地址递增的次序拉链,而最佳适应算法则将空闲区按分区大小递增的次序拉链。在分配时,它们都是从链首开始顺序查找,直至找到一个足够大的空闲分区为止,然后按作业大小从该分区中划出一块内存空间分配给请求者,余下的分区(如果有的话)仍按上述原则留在空闲分区链中;而在释放时,则需要分别按地址递增或大小递增的次序将空闲分区插入空闲分区链,并都需要进行空闲分区的合并。下表给出了使用这两种算法进行上述内存分配和回收的具体过程。
答:使用首次适应算法和最佳适应算法进行上述内存的分配和回收后,内存的实际使用情况分别如下图所示。
表 内存分配和回收的过程
图 内存的实际使用情况图
4.2.2 某系统主存空间为1024KB,采用伙伴(Buddy System)系统分配其内存,对于下列请求序列:
作业1请求240KB、作业2请求120KB、作业3请求60KB、作业2释放120KB、作业4请求130KB、作业3释放60KB,请画出进行上述分配和回收后,内存实际使用的情况。
分析:伙伴系统中,当一个进程申请K字节内存空间时,系统会把一个大小为字节的内存块()分配给它。如果没找到这样的内存块,但系统中还有更大的空闲块,则需将最接近要求的那个较大空闲块分为两个大小相等的块(这两个块被称作一对伙伴),直至找到合适大小的空闲块为止;回收时,如果两个相邻的空闲块为一对伙伴,则需要将它们合并成一个更大的空闲块。
答:对上述6个请求序列,进行内存分配和回收后,内存的使用情况分别如下图的(a)、(b)、(c)、(d)、(e)所示,其中阴影部分表示内部碎片。
图 伙伴系统内存分配、回收示意图
4.2.3 假设某多道程序设计系统中有供用户使用的内存100K,打印机1台。系统采用可变分区方式管理内存;对打印机采用静态分配,并假设输入输出操作的时间忽略不计;采用最短剩余时间优先的进程调度算法,进程剩余执行时间相同时采用先来先服务算法;进程调度时机选择在执行进程结束时或有新进程到达时。现有一进程序列如下表所示。
进程号 | 进程到达时间 | 要求执行时间 | 要求主存量 | 申请打印机数(台) |
---|---|---|---|---|
1 | 0 | 8 | 15K | 1 |
2 | 4 | 4 | 30K | 1 |
3 | 10 | 1 | 60K | 0 |
4 | 11 | 20 | 20K | 1 |
5 | 16 | 14 | 10K | 1 |
假设系统优先分配内存的低地址区域,且不准移动已在主存中的进程,请:
(1)给出进程调度算法选中进程的次序,并说明理由。
(2)全部进程执行结束所用的时间是多少?
分析:本题将进程调度算法与内存分配的情况结合起来,思考的关键在于:只有处于就绪状态的进程才能参与CPU的竞争,也就是说,一个进程必须得到除了CPU以外的所需全部资源,才能被调度。因此,在做题过程中,只要将资源分配情况和进程的状态列出来,就可以很清楚地判断哪个进程在进程调度时可以得到CPU。
答:(1)整个过程中内存、打印机的使用情况和进程的状态信息如下表所示。下图则展示出了进程到达和调度的情况。
时间段 | 已分配分区 (进程,始址,大小) |
空闲分区 (始址,大小) |
打印机R | 进程状态 |
---|---|---|---|---|
0~4 | (1,0,15K) | (15K,85K) | P1执行 | |
4~8 | (1,0,15K) (2,15K,30K) |
(45K,55K) | P1执行 P2阻塞 |
|
8~10 | (2,15K,30K) | (0,15K) (45K,55K) |
P1完成 P2执行 |
|
10~11 | (2,15K,30K) | (0,15K) (45K,55K) |
|
P1完成,P2执行 P3后备 |
11~12 | (2,15K,30K) (4,45K,20K) |
(0,15K) (65K,35K) |
P1完成,P2执行 P3后备, P4阻塞 |
|
12~16 |
(4,45K,20K) | (0,45K) (65K,35K) |
P1完成, P2完成 P3后备, P4执行 |
|
16~32 | (4,45K,20K) (5,0,10K) |
(10K,35K) (65K,35K) |
P1完成, P2完成 P3后备, P4执行 P5阻塞 |
|
32~33 | (5,0,10K) (3,10K,60K) |
(70K,30K) | P1完成, P2完成 P3执行, P4完成 P5就绪 |
|
33~47 | (5,0,10K) | (10K,90K) | P1完成, P2完成 P3完成, P4完成 P5执行 |
|
47~ | (0,100K) | 空闲 | P1、P2、 P3、 P4、 P5全完成 |
从上可看出,选中进程的顺序为P1、P2、P4、P3、P5。
(2)时刻47,所有的进程执行完毕。
4.2.4 在以进程为单位进行对换时,每次是否将整个进程换出?为什么?
答:在以进程为单位进行对换时,并非每次都将整个进程欢出。这是因为:
(1)从结构上讲,进程是由程序段、数据段和进程控制块组成的,其中进程控制块总有部分或全部常驻内存,不被换出。
(2)程序段和数据段可能正被若干进程共享,此时它们也不能换出。
4.3 基本分页系统中的典型问题分析
4.3.1 为实现分页存储管理,需要哪些硬件的支持?
答:为了实现分页存储管理,需要得到页表机制和地址变换机构等硬件支持。
4.3.2 对一个将页表存放在内存中的分页系统:
(1)如果访问内存需要0.2us,有效访问时间为多少?
(2)如果加一快表,且假定在快表中找到页表项的几率高达90%,则有效访问时间又是多少(假定查快表需花的时间为0)?
分析:每次访问数据时,若不使用快表,则需要两次访问内存,即先从内存的页表中读出页对应的块号,然后再根据形成的物理地址去存取数据;使用快表时,若能从快表中直接找到对应的页表项,则可立即形成物理地址去访问相应的数据,否则,仍需两次访问内存。
答:
(1)有效访问时间为:2*0.2 = 0.4us。
(2)有效访问时间为:0.9*0.2+(1-0.9)*2*0.2 = 0.22us。
4.3.3 某系统采用页式存储管理策略,拥有逻辑空间32页,每页2KB,拥有物理空间1MB。
(1)写出逻辑地址的格式。
(2)若不考虑访问权限等,进程的页表有多少项?每项至少有多少位?
(3)如果物理空间减少一半,页表结构应相应作怎样的改变?
答:
(1)该系统拥有逻辑空间32页,故逻辑地址中页号必须用5位来描述;而每页为2KB,因此,页内地址必须用11位来描述,这样可得到它的逻辑地址格式;
(2)每个进程最多有32个页面,因此,进程的页表项最多为32项;若不考虑访问权限等,则页表项中只需给出页所对应的物理块块号,1MB的物理空间可分成个内存块,故每个页表项至少有9位。
(3)如果物理空间减少一半,则页表中页表项数仍不变,但每项的长度可减少1位。
4.3.4 已知某分页系统,主存容量为64K字节,页面大小为1K,对一个4页大的作业,其0、1、2、3页分别被分配到主存的2、4、6、7块中,试:
(1)将十进制的逻辑地址1023、2500、3500、4500转换成物理地址;
(2)以十进制的逻辑地址1023为 例画出地址变换过程图。
分析:在分页系统中进行地址转换时,地址变换机构将自动把逻辑地址转化为页号和页内地址,如果页号不小于页表长度,则产生越界中断;否则便以页号为索引去检索页表,从中得到对应的块号,并把块号和页内地址分别送入物理地址寄存器的块号和块内地址字段中,形成物理地址。
答:
(1)对上述逻辑地址,可先计算出它们的页号和页内地址(逻辑地址除以页面大小,得到的商为页号,余数为页内地址),然后通过页表转换成对应的物理地址。
a、逻辑地址1023。1023/1K,得到页号为0,页内地址为1023,查页表找到对应的物理块号为2,故物理地址为2*1K+1023 = 3071。
b、逻辑地址2500。2500/1K,得到页号为2,页内地址为452,查页表找到对应的物理块号为6,故物理地址为6*1K+452 = 6596。
c、逻辑地址3500。3500/1K,得到页号为3,页内地址为428,查页表找到对应的物理块号为7,故物理地址为7*1K+428 = 7596。
d、逻辑地址4500。4500/1K,得到页号为4,页内地址为404,因页号不小于页表长度,故产生越界中断。
(2)逻辑地址1023的地址变换过程如下图所示,其中的页表项中没考虑每页的访问权限。
图 地址变换过程图
4.3.5 已知某系统页面长4KB,每个页表项4B,采用多层分页策略映射64位的用户地址空间。若限定最高层页表只占1页,问它可采用几层分页策略。
答:由题意可知,该系统的用户地址空间为(即)B。因此,又可将页表分成个页表页,并为它建立两级页表,两级页表的大小为B。依此类推,可知道它的3、4、5、6级页表的长度分别是B、B、B、B,故必须采取6层分页策略。
4.4 基本分段系统中的典型问题分析
4.4.1 对于下表所示的段表,请将逻辑地址(0,137),(1,4000),(2,3600),(5,230)转换成物理地址。
段号 | 内存始址(K) | 段长(K) |
---|---|---|
0 | 50 | 10 |
1 | 60 | 3 |
2 | 70 | 5 |
3 | 120 | 8 |
4 | 150 | 4 |
分析:在分段系统中进行地址转换时,地址变换机构首先将逻辑地址中的段号与段表长度作比较,如果段号超长,则产生越界中断;否则便以段号为索引去检索段表,从中得到段在内存的始址和段长;然后再将逻辑地址中的段内地址与段表项中的段长作比较,若不越界,则由段的始址与段内地址相加,形成物理地址。
答:
(1)段号0小于段表长5,故段号合法;由段表的第0项可获得段的内存始址为50K,段长为10K;由于段内地址137,小于段长10K,故段内地址也是合法的,因此可得出对应的物理地址为50K+137 = 51337。
(2)段号1小于段表长,故段号合法;由段表的第1项可获得段的内存始址为60K,段长为3K;经检查,段内地址4000超过段长3K,因此产生越界中断。
(3)段号2小于段表长,故段号合法;由段表的第2项可获得段的内存始址为70K,段长为5K;故段内地址3600也合法。因此,可得出对应的物理地址为70K+3600 = 75280。
(4)段号5等于段表长,故段号不合法,产生越界中断。
4.4.2 什么是动态链接?用何种内存分配方法可以实现这种链接技术?
答:动态链接有装入时动态链接和运行时动态链接两种方式。装入时动态链接是指链接在装入时进行,即在装入一个目标模块时,若发生一个外部模块调用事件,则由装入程序去找出相应的外部模块,将它装入内存,并把它链接到调用者模块上去。运行时动态链接是指链接在运行时进行,即在执行过程中,当发现一个被调用模块尚未装入内存时,立即由OS去找出该模块,将它装入内存,并把它链接到调用者模块上。
采用分段存储管理方式可实现动态链接。分段方式中,段的划分由程序员或编译程序进行,每一段是一组具有相对完整意义的逻辑信息,因此用户可方便地将某个调用模块组织成一个独立的段,从而让系统在装入程序或运行程序时将相应的模块链接到调用者模块上。
4.4.3 试全面比较连续分配和离散分配。
答:如下表所示,可从以下六方面对连续分配和离散分配进行比较:
技术性能 | 连续分配 | 离散分配 |
---|---|---|
大批量数据的存取速度 | 较快 | 较慢 |
机制的复杂性 | 较简单 | 较复杂 |
内存碎片 | 较大 | 较小 |
实现虚拟技术 | 较难 | 较易 |
实现动态链接 | 较难 | 较易 |