课后练习P294页第5、
旋转圈数最少的调度顺序是5、3、2、1、4
5.对磁盘存在如下5个请求,假如当前磁头位于1号柱面,试分析对这5个请求如何调度可使得磁盘的旋转圈数最少?
答:按照次序5、3、2、1、4进行调度可使磁盘的旋转圈数最少。平均用1/2周定位,再加上1/4周读出记录,总处理时间=1/2+1/4+1/2+1/4+1+1/2+1/4+1=4.25圈。
7.假定一个磁盘有200个柱面,编号为0一199,在完成了磁道125外的请求后,当前正在磁道143处为一个请求服务。若请求队列的先后顺序为86,147,91,177,94,1 50,102,175,130;试问:为了完成上述请求,下列算法存取臂所以移动的总量是多少?并计算存取臂移动的顺序。(1)FCFS(先来先服务);(2)SSTF(最短寻道时间优先);(3)SCAN(扫描)算法;(4)电梯调度算法。
(1)FCFS(先来先服务)算法
磁头移动顺序为:143→86→147→91→177→94→150→102→175→130,
磁头移动总量是:(143-86)+(147-86)+(147-91)+(177-91)+(177-94)+(150-94)+(150-102)+(175-102)+(175-130)=565(柱面)
(2)SSTF(最短寻道时间优先)算法
磁头移动顺序为:143→147→150→130→102→94→91→86→175→177,
磁头移动总量是:(147-143)+(150-147)+(150-130)+(130-102)+(102-94)+(94-91)+(91-86)+(175-86)+(177-175)=162(柱面)
(3)SCAN(扫描)算法
磁头移动顺序为:143→147→150→175→177→199→130→102→94→91→86→0,
磁头移动总量是:(199-143)+200=256(柱面)
(4)电梯调度算法。
磁头移动顺序为:143→147→150→175→177→130→102→94→91→86,
磁头移动总量是:(177-143)+(177-86)=125(柱面)
以下为补交作业:
虚拟储存管理
P251,习题20
1.
因为页长为1kb,所以不看后10位
前6位为:000010 对应的十进制为2
得出分页框中的数为8对应的二进制为:001000
得出物理地址0010001011000101
得出22C5H为对应的物理地址
2.
同理 得出前6位二进制为:000110 对应的十进制为6
但是虚页中没有6,所以发生缺页中断
P252,习题31
1.
访问序列页面走向为:0 0 1 1 0 3 1 2 2 4 4 3
2. 程序可用内存为200个字
故页框有两行
FIFO
缺页中断率=6/12=50%
LRU
缺页中断率=7/12
OPT
缺页中断率=5/12
存储管理
1.试述计算机系统中的存储器层次。为什么要配置层次式的存储器?
答:(1)计算机系统的存储器层次结构自上而下依次分为:寄存器、高速缓存、内存储器、磁盘缓存、可移动存储介质5层。
存储介质的访问速度由下而上越来越快,容量越来越小,价格越来越高。其中,寄存器、缓存和内存均属于操作系统存储管理的管辖范畴,掉电后他们存储的信息不复存在,磁盘和磁带属于文件管理和设备管理的管辖对象,他们所存储的信息将持久性保存。
(2)多层次的存储体系十分有效和可靠,能达到很高的性能价格比。
2.什么是逻辑地址、物理地址?简述不同编译、链接、装载与地址定位过程。
答:
(1)逻辑地址(Logical Address)
是指由程序产生的与段相关的偏移地址部分。例如,在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。
物理地址(Physical Address) 是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。
(2)程序编译
:源程序经过编译程序或汇编程序的处理生成目标模块(也成目标代码)
(3)程序链接:
【1】静态链接:静态链接是在程序装载到内存和运行前,就已将他的所有目标模块及所需的库函数进行链接和装配成一个完整的可执行程序且此后不在拆分,静态方式使得链接过程和装载过程相对独立,链接程序和装载程序可独立设计,但不支持内存空间的中目标模块的单副本、不利于模块共享。
【2】动态链接:动态链接是指在程序装入内存前并未事先进行程序各目标模块的链接,而是在程序装载时一边装载一边链接,生成一个可执行程序。
【3】运行时链接:运行时链接是指将某些目标模块或库函数的链接推迟到执行时才进行。
(4)程序装载
【1】绝对装载。装载模块中的指令地址始终与其内存中的地址相同,即在模块中出现的所有地址都是内存的绝对地址。
【2】可重定位装载。根据内存当时使用情况,决定将装载代码模块放入到内存的物理地址,模块内使用的地址都是相对地址。
【3】动态运行时装载。为了提高内存使用率。装入内存的程序可换出到磁盘上,适当时候再换入到内存中,对换前后程序在内存中的位置可能不同,即允许进程的内存映像在不同时候处于不同位置,此时模块内使用的地址必为相对地址。
(5)程序定位:
【1】静态地址重定位。由装载程序实现装载代码模块的加载和地址转换,把他装入分配给进程的内存指定区域,其中所有逻辑地址修改成内存物理地址,称静态地址重定位。
【2】动态地址重定位。由装载程序实现装载代码模块的加载,把他装入分配给进程的内存指定区域,但对链接程序处理过的应用程序的逻辑地址则不做任何修改,程序内存气质地址被置入硬件专用寄存器–重定位寄存器。
【3】运行时链接地址重定位。对于静态和动态地址重定位装载方式而言,装载代码模块是由整个程序的所有目标模块及库函数目标模块经链接和整合构成的可执行程序,即在程序启东市指定已经完成了程序的链接过固定分区管理的缺点是什么?
3.固定分区管理的缺点是什么?
(1)由于预先已经规定好分区大小,使得大作业无法装入,用户不得不采用覆等技术加以补救,这样就加重了用户负担。
(2)内存空间利用率不高,作业很少会恰到好处填满分区。
(3)如果一个作业在运行过程中要求动态扩充内存空间,采用固定分区是相当困难的。
(4)分区数目实在系统初起时确定的,这就会限制多道运行的程序道数,特别应分分时系统交互型用户及内存需求变化很大的情景;
4.简述固定分区存储管理和可变分区存储管理的区别、
(1)固定分区
【1】基本思想:固定不变的分区
【2】数据结构:存储分配表
【3】作业进入固定分区排队策略:1、每个分区一个队列。2、所有作业一个队列
(2)可变分区
【1】基本思想:存储管理是按作业的实际大小来划分分区的,且分区个数也是随机的,实际多个作业对内存的共享,进一步提高内存资源利用率。
【2】分配算法:1、最先适应分配算法。2、下次适应分配算法。3、最先适应分配算法。4、最欢适应分配算法。5、快速适应分配算法
5.简述固定分区存储管理和可变分区存储管理的区别
固定分区存储管理是把主存器中的可分配的用户区域预先划分若干个连续区,每个连续去称为分区,一旦划分好后,主存储器中分区的个数就固定了。各个分区的大小可以相同,也可以不同,但每个分区的大小固定不变,每个分区可以装入一个作业,所以当有多个分区时,就可同时在每个愤分区装入一个作业,但不允许多个作业同时存入在同一个分区中
可变分区存储管理不是预先把主储存器中的用户区域划分区,而是在作业要求装入主存储器时,根据作业需要的主存空间大小和当时主存空间使用情况来决定是否为作业分配一个分区,因此分区的长度不是预先固定的,而是按作业的实际需求来划分的;分区的个数也不是预先确定的,而是装入的作业数来决定的。
6.某系统采用可变分区方式管理主存储器,在主存分配情况如图所示时,有4个作业要求装入主存,它们各自所需的主存空间为:J1:8KB,J2:15KB,J3:30KB,J4:115KB,系统不允许移动。
用最先适应分配算法,按2341的作业顺序装入,描述作业装入内存的过程。
一、实验目的
(
1
)加深对进程并发执行的理解,认识多进程并发执行的实质。
(
2
)观察进程争夺资源的现象,学习解决进程互斥的方法。
二、实验要求:
本实验要求用高级语言,启动多进程并发运行,设计相应代码,显示进程无关并发、进程共享变量并发的运行结果。并完成实验报告。
三、实验内容:
分别实现以下四种情况的并发:
1.并发的进程之间无关,显示进程名称,开始与结束时间。
模拟多终端售票情况,并发的多个终端进程之间共享剩余票数这个共享变量。
2.用全局变量实现。
3.用进程间共享数据机制实现。
4.用进程间共享数据机制和加锁机制实现。
四、实验过程与结果
算法思想与设计
算法实现代码
from multiprocessing import Process,Manager def sell(dic,name): dic['count']-=1 print(name,dic) if __name__=='__main__': mgr=Manager() dic=mgr.dict({'count':100}) p_lst=[] for i in range(50): p=Process(target=sell,args=(dic,'进程%s'%i,)) p.start() p_lst.append(p) for i in p_lst: i.join() print('主进程',dic)
运行结果
用信号量及其PV操作处理实际问题
1.书上课后练习P187-43
semaphore empty=1;橘子精=0;糖=0;水=0;
Process product(){
While(true){
P(empty);
产生一个随机数s;代表这生产商供应哪种原料
If(s==0)V(橘子精);
If(s==1) V(水);
If(s==2) V(糖);
}
}
Process P1(){
While(true){
P(橘子精);
取走橘子精;
V(empty);
}
}
Process P2(){
while(true){
P(糖);
取走糖;
V(empty);
}
}
Process P3(){
while(true){
P(水);
取走水;
V(empty);
}
}
Coend
2.IPO问题:有多个输入进程、多个处理进程和多个输出进程。输入进程把数据逐步输入到一个有M个单位缓冲区B1上,经处理进程处理之后放到有N个单位的缓冲区B2上,由输出进程进行输出。
- 这个问题有哪些进程?进程之间有什么样的制约关系?
- 用信号量及PV操作写出这些进程之间的同步算法。
进程互斥与同步
1
.
解释并发与并行,并说明两者关系。
并发和并行都是完成多任务更加有效率的方式,但还是有一些区别的,并发,并行,可见他们的确是有区别的。
并发是指原本按照事先安排好的顺序执行,当有更重要的事情是,会先执行重要的事情,交替做不同事情。举一个简单的例子,有三个同学需要一个老师对其进行作业辅导,老师先给A同学讲完思路后,然后让A自己去完成,在A自己完成的过程中老师给B同学讲思路,让B自己去完成,在B完成的过程中老师给C讲思路。这就是并发。而并行呢,是指几个进程同时进行。就例如老师同时给ABC三名同学讲解思路,然后他们自己完成作业。这就是并行。
2.
进程间有哪几种关系?分别要采取什么策略?
在多道程序环境下,当程序并发执行时,由于资源共享和进程合作,使处于同一个系统中的诸多进程之间可能存在着以下两种形式的制约关系:(1)、间接相互制约关系。所谓间接相互制约源于资源共享;(2)、直接相互制约关系。这种制约主要源于进程间的合作。
同步是因合作进程之间协调彼此的工作而控制自己的执行速度,即因相互合作,相互等待而产生的制约关系。而互斥是进程之间竞争临界资源而禁止两个以上的进程同时进入临界区所发生的制约关系。
3.
为什么说进程的互斥也是一种同步?
互斥指的是某种资源一次只允许一个进程使用,即你在使用的时候我不使用,我在使用的时候你不使用,这就是一种协调,一种“步伐”上的一致,因而也就是一种同步。但是,为了求解实际问题,将“同步”与“互斥”加以区别是有好处的,因为这两种问题的求解方法是不同的。
4.
解释死锁与“饥饿”,并说明两者关系。
死锁是一个进程集合中的每个进程都在等待只能有此集合中的其他进程才能引发的事件,而无限陷入僵持的局面。假如双方都拥有部分资源(P1拥有A,P2拥有B,且A,B均只有一个),但这时P1还需要B,P2还需要A,于是P1与P2都会处在无限等待状态,发生了死锁。
饥饿时指系统不能保证某个进程的等待时间上界,从而使该进程长时间等待,当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿。当饥饿到一定程度的进程所赋予的任务即使完成也不再具有实际意义时称该进程被饿死。
由于饥饿和饿死与资源分配策略有关,因而解决饥饿与饿死问题可从资源分配策略的公平性考虑,确保所有进程不被忽视。如时间片轮转算法(RR)。它将CPU的处理时间分成一个个时间片,就绪队列中的诸进程轮流运行一个时间片,当时间片结束时,就强迫运行程序让出CPU,该进程进入就绪队列,等待下一次调度。同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。如此方式轮流调度。这样就可以在不考虑其他系统开销的情况下解决饥饿的问题。
5.
什么叫做临界区?如何解决进程对临界资源的访问冲突?
每个进程中访问临界资源的那段程序称为临界区,每次只准许一个进程进入临界区,进
入后不允许其他进程进入。
任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则
其它所有试图进入临界区的进程必须等待。 任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其它所有试图进入临界区的进程必须等待。
转载于:https://www.cnblogs.com/wzzs/p/11025512.html