《操作系统概论》综合题

操作系统概论

文章目录

  • 操作系统概论
    • 重点知识
    • 信号量编程
    • 三种调度算法
    • 动态分区分配三种算法
    • 基本分页的地址计算
    • 快表有效访问时间与命中率
    • 页面置换算法
    • i结点支持的单个文件最大长度
    • 磁盘调度算法

重点知识

  • 综合题:信号量编程
  • 综合题:三种调度算法
  • 简答题:实时调度进程个数与周期长度
  • 未出:实时调度的最低松弛度算法
  • 简答题:银行家算法
  • 未出:动态分区分配三种算法和回收四种情况
  • 综合题:基本分页的地址计算
  • 未出:快表有效访问时间与命中率
  • 未出:二级页表地址计算
  • 未出:四种页面置换算法
  • 未出:请求分页有效访问时间与命中率
  • 简答题:i结点支持的单个文件最大长度
  • 综合题:四种磁盘调度算法

信号量编程

题型1单个进程两个信号量,初始值1或n,两次检查

某展会任何时刻最多可容纳500名参观者,当展厅中少于500名参观者时,则厅外的参观者可立即进入,否则需在外面等待。参观者进入展厅时,都必须在入口处登记(并领取资料和礼品),假定入口处有5位工作人员,每位工作人员每次只能接待一个参观者登记,请用记录型信号量机制时间参观者进程的同步算法。register()是完成登记并领取资料的函数;visit()是完成参观展览的函数;leave()是表示参观完毕离开的函数。下面已经给出了部分代码,请填写1-2空白处的代码。注:每一空可能不止一行代码。

struct semaphore cap;		//表示展会容量
struct semaphore officer;	//表示工作人员的信号量
_____________(1)_________
void process Vistor()
{
    ________(2)_______
}
(1)	cap.value=500;			//cap表示容量,500
	officer.value=5;		//officer表示检查,5

(2)	wait(cap);				//先检查容量看看能否进去
	wait(officer);			//再检查登记看能否登记
	register();				
	signal(officer);		//完成登记,解锁让给下一位
	visit();
	leave();
	signal(cap);			//完成参观,离开让给下一位

*题型2:双进程,生产消费者问题变型,考核数组指针

设无穷多个整数缓冲区,A进程读入整数并写入级缓冲区,B进程则从缓冲区取出整数进行打印,存放整数的变量为item,缓冲区名为buffer

读取过程函数getAltem(int *itm)

打印整数函数printAltem(int item)

来完成。

用记录型信号量机制实现上述两个进程的同步算法。补充程序每个空缺部分代码(可能是多行)

struct semaphore full;
int buffer[];			//缓冲区
int in,out;				//缓冲区入口指针量和出口指针量
____________(1)_________
void processA()
{
	int item;			//存放整数的变量
    _________(2)_______
}
void processB()
{
    int item;			//存放整数的变量
    ________(3)______
}

题目中已经给出单信号量和两指针,由于无限空间而且题目只给单个信号量,说明不必考虑缓冲区互斥,只考虑是否有数据可以取

A进程不必检查,只管放数据

B进程要检查是否有数据,再取出

full表示检查是否有数据

full是私有信号量,跨越两进程

由于无限空间,in和out都是++

注意getAItem函数的参数带*,所以传递参数时要用&

(1)	in=0;
	out=0;
	full.value=0;
(2)	while(TRUE){
    getAItem(&item);
    buffer[in++]=item;
}
(3)	while(TRUE){
    wait(full);
    item=buffer[out++];
    printAItem(item);
}

题型3单进程双信号量,初始值1或n,三次检查

某阅览室可容纳100个读者,读者进入和离开都需要在门口的登记表上登记,每次只允许一个人登记。

用wait和signal操作编写读者进程的同步算法,补充完成程序。

begin
    _________(1)________:semaphore
    _________(2)__________________
cobegin
process Readeri(i=1,2,...,n)
	begin
	到达阅览室入口处;
	_______(3)______
	_______(4)______
	在入口处进行登记;
	_______(5)______
	进入阅览室,进行阅读‘
	阅读结束,到达阅览室出口处;
	_______(6)______
	在出口处进行注销登记;
	_______(7)______
	离开阅览室;
	_______(8)______
	end;
coend;
end;
(1)	capacity,mutex:semaphore			//定义信号量capacity(剩余空位)和mutex(登记互斥信号量)
(2)	capacity.value=100;mutex.value=1	//capacity初值为100,mutex初值为1
(3)	wait(capacity)						//检查阅览室是否有空位
(4)	wait(mutex)							//检查是否可以登记(进入)
(5)	signal(mutex)						//登记完解锁,让给下一位登记者(进入)
(6) wait(mutex)							//检查是否可以登记(离开)
(7)	signal(mutex)						//登记完解锁,让给下一位登记者(离开)
(8)	sinal(capacity)						//完成阅读离开,让出位置

三种调度算法

题型:计算平均周转时间和平均带权周转时间

掌握方法:找出调度顺序,计算各进程完成时间,再代入公式:

周转时间=完成时间-到达时间

平均周转时间=各个进程周转时间总和/进程数

带权周转时间=周转时间/运行时间

平均带权周转时间=各个进程带权周转时间/进程数

有四个进程ABCD他们的到达时间、预计运行事件以及优先级数值(优先级数值越小,表示优先级越高)如表所示:

进程名 到达时间 预计运行时间 优先数
A 0 34 3
B 1 7 1
C 2 15 2
D 3 4 4

(1)请计算采用短进程优先调度算法的平均周转时间和平均带权周转时间。

(2)请计算采用抢占式优先权调度算法的平均周转时间和平均带权周转时间。(注:精确到小数点后2位)

动态分区分配三种算法

​ 假设系统中有三个空闲分区,3个空闲分区的起始地址和大小分别为(20KB,120KB)、(200KB,100KB)、(400KB,50KB)。若某进程p1先请求30KB的内存空间,p2后请求20KB的内存空间分别采用首次适应算法、循环适应算法、最佳适应算法分配后,3个空闲分区的情况为?

解:

采用首次适应算法,

给p1分配30KB后3个空闲分区的情况为:

50KB,90KB)、(200KB,100KB)、(400KB,60KB)

给p2分配20KB后3个空闲分区的情况为:

70KB,70KB)、(200KB,100KB)、(400KB,60KB)

采用循环首次适应算法,给p1分配30KB后3个空闲分区的情况为:

50KB,90KB)、(200KB,100KB)、(400KB,60KB)

给p2分配20KB后3个空闲分区的情况为:

50KB,90KB)、(220KB,80KB)、(400KB,60KB)

采用最佳适应算法,给p1分配30KB后3个空闲分区的情况为:

430KB,30KB)、(200KB,100KB)、(20KB,120KB)

给p2分配20KB后3个空闲分区的情况为:

450KB,10KB)、(200KB,100KB)、(20KB,120KB)

分析:

题目中给出了起始地址和大小分别为(20KB,120KB)、(200KB,100KB)、(400KB,50KB)

第一个值代表起始地址,第二个代表范围。

第一个:我们知道(首次适应算法:在进行内存分配时,从链首开始顺序查找,直到找到一个能满足进程大小要求的空闲分区为止。然后在按照进程请求内存的大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。)p1开始查找符合他所请求的大小的分区,我们发现第一个可以容纳,分配之。p2申请时重新从首地址开始查找,我们发现第一块空间符合要求,分配之。空间大小随之减少

第二个:我们知道(循环首次适应算法NF(Next Fit):为进程分配内存空间时,不再每次从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,知道找到第一个能满足要求的空闲分区,并从中划出一块玉请求的大小相等的内存空间分配给进程。)p1首先开始申请分区,我们看到第一个就符合p1的需求,继续分析p2,因为这个算法是从上次找到的空闲分区的下一个空闲分区开始查找,所以我们虽然第一块空闲分区够用,但也要跳过第一个,选择第二个空闲分区,分配之,空间大小随之减少

第三个:我们知道(最佳适应算法BF(Best Fit):该算法每次作业分配内存,总是把大小与进程所请求的内存空间大小最接近的空闲分区分配给进程,避免了“大材小用”。为了加速寻找,该算法要求将所有的空闲按分区大小递增顺序形成一个空闲区链)因为算法规定了要先按大小排序,排序后先看p1的需求,第一块空间与进程请求的空间最接近且满足需求,分配之,再看p2,也是第一个分区满足需求,分配给他,空间随之减少。

基本分页的地址计算

题型1:计算页表结构

逻 辑 地 址 长 度 = 页 号 长 度 + 页 长 度 ( 按 2 进 制 算 位 数 ) 逻辑地址长度 = 页号长度 + 页长度(按2进制算位数) =+2

页表长度即页的最大数量,转页号长度就是把页表长度转2进制算位数

采用基本分页存储管理策略,拥有逻辑地址空间32页,每页2K,拥有物理地址空间1M

(1)请写出逻辑地址格式。

(2)若不考虑访问权限,且页号不放入页表中,请问进程的页表有多少项?每项至少多少位?

(3)如果物理空间减少一半,页表结构应该做怎样的改变?

解答:

(1)逻辑地址格式

逻辑地址空间32页,即2的5次方,所以页号必须用5位来描述。

每页2K,即2的11次方,所以页内偏移量必须用11位描述。

因此,逻辑地址格式为

页号 页内偏移量
15----------------------------------------------11 10-------------------------------------------------------0

(2)页表有多少项,每项多少位?

因为页表存放的是运行的进程,进程的页号对应逻辑地址空间,所以页表有32项。

因为物理地址空间1M,所以1M/2K=512,也就是说物理空间最多可以划分出521个页,即2的9次方,所以页表每项要有9位,才能对应物理空间的所有页

(3)物理空间减少一半,页表结构做和改变?

如果物理空间减少一半也就是512K,

所以512K/2K=256,也就是说物理空间最多可以划分出256个页,即2的8次方,所以页表项要有8位

所以页表项数不变,但每项长度减少1位

题型2:已知逻辑地址,求物理地址

逻 辑 地 址 / 页 长 度 = 商 . . . . . . 余 数 逻辑地址/页长度=商......余数 /=......

商是页号,余数是页内偏移量即块内地址。

查页表从页号找到块号(页号从0开始),页长度就是块大小

物 理 地 址 = 块 号 ∗ 块 大 小 + 块 内 地 址 物理地址=块号*块大小+块内地址 =+

题1:
设某计算机的逻辑地址和物理地址空间均为64KB,按字节编址,某进程页大小为1KB。共六个页,页号对应的块号依次为:47、14、32、9、86、25。当前进程访问的逻辑地址为17CAH,求物理地址。要求写出具体过程,结果用十进制表示。

解答:

因为逻辑地址空间64K,即2的16次方,所以逻辑地址长度为16位
因为页大小1KB,即2的10次方,所以页内偏移为10位
所以逻辑地址的结构是:前6位为页号,后10位为页内偏移
逻辑地址17CAH转二进制是0001 0111 1100 1010
前6位是000101,后10位是1111001010,转成十进制得到页号是5,页内偏移量是970
页号是从0开始的,所以页号5实际上是第六个,对应25
物理地址=1024*25+970=266570

题2:
某基本分页存储系统中,内存容量为64K,每页的大小为1K,对一个4页大的作业,其0,1,2,3页分别被分配到内存的2、4、6、7页框中。请简述地址转换的基本思想,然后根据上边的已知条件计算出下列逻辑地址对应的物理地址是什么?
(1)1023 (2)2500 (3)4500
解答:
1K即1024
(1)1023/1024=0…1023,商0即页号为0,余数即页内偏移量为1023,页号0对应页框2,所以物理地址=2*1024+1023=3071
(2)2500/1024=2…452,商2即页号为2,余数即页内偏移量为452,页号2对应页框6,所以物理地址=6*1024+452=6596
(3)4500/1024=4…404,商4即页号为4,余数即页内偏移量为404,因页号大于页表长度,产生地址越界

快表有效访问时间与命中率

若CPU访问内存的速度为120ns,访问快表的速度为20ns,试比较有快表和无快表系统的平均有效访存时间。假定快表的命中率为90%。

(1)有快表系统的有效访存时间 => ( 120 + 120 + 20 ) ∗ 10 % + ( 120 + 20 ) ∗ 90 (120+ 120+20)*10\%+(120+20)*90%=152ns (120+120+20)10%+(120+20)90

(2)无快表系统的有效访存时间 => 120 + 120 = 240 n s 120+120=240ns 120+120=240ns

页面置换算法

题型:求页面置换过程,计算置换次数

最佳置换:看未来,寻找当前页中未来不访问或隔很久才访问的页

先进先出:页面轮流切换

LRU:统计每个页已经未访问的周期数,找出最大周期的页

改进型Clock:四轮扫描寻找AM都为0,第二轮扫描失败A全清0

已知某程序访问一下页面:0、1、4、2、0、2、6、5、1、2、3、2、1、2、6、2、1、3、6、2,如果程序有3个页框可用,所有内存开始时都是空的,采用下列算法,画出置换过程和计算置换次数

(1)最佳置换,共6次置换
《操作系统概论》综合题_第1张图片

(2)先进先出,共10次置换

《操作系统概论》综合题_第2张图片

(3)LRU置换,共11次置换

《操作系统概论》综合题_第3张图片

(4)改进型Clock算法

《操作系统概论》综合题_第4张图片

i结点支持的单个文件最大长度

某文件系统的i-结点包括12个地址项,每个地址项存64位地址(8个字节),其中10个地址项用来存直接地址,一个地址项存一次间接地址,一个地址项存二次间接地址,当簇大小为4KB时,请问,系统能管理的单个文件最大长度是多少?

**分析:**计算每种寻址方式的最大文件长度,再求总和

公式:一次寻址空间=索引表长度*簇大小

解答:

直接寻址,最大文件长度=10*4KB=40KB

簇大小为4KB,每个地址项8B,得到4KB/8B=512,所以索引表最多包含512个簇

一次间接地址,最大文件长度= 1 ∗ 512 ∗ 4 K B = 2 M B 1*512*4KB=2MB 15124KB=2MB

512个地址都存表的话就是512*单个簇大小

二次间接地址,最大文件长度= 1 ∗ 512 ∗ 512 ∗ 4 K B = 1 G B 1*512*512*4KB=1GB 15125124KB=1GB

512个地址都存表,然后这512个表再都存一张表,这张表再存簇的的话,就是512*512*单个簇大小

当前所有寻址方式都用上,则单个文件最大长度= 40 K B + 2 M B + 1 G B 40KB+2MB+1GB 40KB+2MB+1GB

10个直接地址+1个一次间接地址+1个二次间接地址

磁盘调度算法

题型:求磁道访问顺序,计算平均寻道长度

先来先服务算法FCFS:只看顺序

最短寻道优先SSTF:找距离最近

扫描SCAN(电梯调度):先看移动方向一致,再找距离最近

循环扫描CSCAN:只有一个移动方向,找距离最近的

假设某个磁盘有400个磁道,磁盘请求中是一些随即请求,它们按照到达的次序分别处于358、129、383、418、59、256、450、238、179、420号磁道上,当前磁头在220号磁道上,并向磁道号增加的方向移动。请给出四种算法进行磁盘调度时满足请求的次序,并计算出它们的平均寻道长度。

(1)先来先服务FCFS

访问顺序:220、358、129、383、418、59、256、450、238、179、420

从当前磁头位置220开始

磁道距离:138+229+254+35+359+197+212+59+241=1918

平均寻道:1918/10=191.8

(2)最短寻道优先SSTF

访问顺序:220-238-256-179-129-59-358-383-418-420-450

从磁头开始找最接近的

磁道距离:36+197+391=624

平均寻道:624/10=62.4

(3)扫描SCAN

分析:因为磁道号增加方向,所以要寻找

访问顺序:220-038-256-358-353-418-450-179-129-59

从磁头开始找一个顺序的,而且最接近

磁道距离:230+391=621

平均寻道:621/10=62.1

(4)循环扫描CSCAN

分析:因为向磁道号增加方向,而且是循环扫描

访问顺序:220-238-256-383-418-420-450-59-129-179

和扫描算法一样,但是第二轮需要从头扫描

磁道距离:230+391+120=741

平均寻道:741/10=74.1

你可能感兴趣的:(自考)