《操作系统课程设计》指导书分析_操作系统课程设计指导
《操作系统课程设计》指导书分析由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“操作系统课程设计指导”。
《操作系统课程设计》实验指导
课程设计一:进程调度
1、设计目的(1)要求学生设计一个模拟进程调度的算法(2)理解进程控制块的结构(3)理解进程运行的并发性
(4)掌握进程调度的三种基本算法 注:三种算法任选一种编程实现。
2、设计要求
在多道程序运行环境下,进程数目一般多于处理机数目,使得进程要通过竞争来使用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由进程调度程序完成的。一个进程被创建后,系统为了便于对进程进行管理,将系统中的所有进程按其状态,将其组织成不同的进程队列。于是系统有运行进程队列、就绪进程队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。进程调度的算法有多种,常用的有优先级调度算法、先来先服务算法、时间片轮转算法。
进程是程序在处理机上的执行过程。进程存在的标识是进程控制块(PCB),进程控制块结构如下:
Typeedef struct node {
Char name[10];
/*进程标识符*/
Int prio;
/*进程优先数*/
Int round;
/*进程时间片轮转时间片*/
Int cputime
/*进程占用CPU时间*/
Int needtime
/*进程到完成还需要的时间*/
Int count;
/*计数器*/
Char state;
/*进程的状态*/
Struct node
*next;
/*链指针*/ }PCB;系统创建一个进程,就是由系统为某个程序设置一个PCB,用于对该进程进行控制和管理。进程任务完成,由系统收回其PCB,该进程便消亡。每个进程可以有三个状态:运行态、就绪态和完成状态。
用VC编写一个程序实现进程调度算法,模拟进程调度的过程,加深对进程控制块概念和进程调度算法的理解。
(1)进程调度算法采用优先数调度算法。(2)采用动态优先数法确定进程的优先级别。
(3)设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。
(4)用户输入进程标识符以及进程所需要的时间,申请空间存放进程PCB信息。
优先数调度算法为每个进程设一个优先数,它总是把处理机给就绪队列中具有最高优先权的进程。常用的算法有静态优先数法和动态优先数法。
动态优先数法,使进程的优先权随时间而改变。初始的进程优先数取决于进程运行所需
要的时间,时间大,则优先数低。可采取将进程优先数定为一个较大的数(50)减去进程运行所需要的时间。随着进程的运行对优先数进行调整,每次运行时都是从就绪队列中选取优先数最大的进程运行,所以,就将就绪队列按照优先数的大小从高到低排序,这样,每次选队首进程即可。
进程每执行一次,优先数减一个数(自定),CPU时间数加1,进程还需要的时间减1。如果进程所需时间为0,说明进程运行完毕,将其状态变为完成状态“F”,将此进程PCB插入到完成队列中,若就绪队列不空,则将就绪队列中的第一个PCB变为运行状态。进程若没有完成,则将其优先数和就绪队列中的第一个PCB的优先数作比较,如果小,则将其变为就绪态,插入到就绪队列中适当的位置,将就绪队列中的第一个PCB变为运行态投入运行,重复上述过程,直到就绪队列为空,所以进程成为完成状态为止。时间片轮转算法完成进程的调度
设计要求:
(1)进程调度算法采用时间片轮转算法。
(2)设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。
(3)用户输入进程标识符以及进程所需要的时间,申请空间存放进程PCB信息。(4)输出格式和上面的一样
时间片轮转调度:具体做法是调度程序每次把CPU分配给就绪队列首进程使用一个时间片。当这个时间片结束时,就强迫一个进程让出处理器,让它排列到就绪队列的尾部,等候下一轮的调度。实现这种调度要使用一个间隔时钟。当一个进程开始运行时,就将时间片的值置入间隔时钟内,当发生间隔时钟中断时,就表明该进程连续运行的时间已超过一个规定的时间片。此时,中断处理程序就通知处理器调度进行处理器的切换工作。用先来先服务算法完成进程的调度
设计要求:
(1)进程调度算法采用先来先服务算法。
(2)设计三个链队列,分别用来表示运行队列、就绪队列和完成队列。
(3)用户输入进程标识符以及进程所需要的时间,申请空间存放进程PCB信息。(4)输出格式和上面的一样 先来先服务算法:按照进程进入就绪队列的先后次序来分配处理器。先进入就绪队列的进程优先被挑选,运行进程一旦占有处理器将一直运行下去直到运行结束或被阻塞,这是一种非剥夺式调度。
课程设计二:磁盘调度
1、设计目的(1)要求学生设计一个模拟磁盘调度的程序。(2)理解磁盘调度过程中的三个时间段(3)理解磁盘调度的三种算法
2、实验原理
共享设备的典型代表为磁盘,磁盘物理块的地址由柱面号、磁头号、扇区号来指定,完成磁盘某一个物理块的访问要经过三个阶段:寻道时间Ts、旋转延迟时间Tw和读写时间Trw。
寻道时间Ts是磁头从当前磁道移动到目标磁道所需要的时间;旋转延迟时间Tw是当磁头停留在目标磁道后,目标物理块从当前位置旋转到磁头位置的时间;读写时间Trw是目标物理块内容与内存中对应交换的时间。磁盘调度的原则是公平和高吞吐量,衡量指标有访问时间T和平均访问时间Ta:
T=Ts+Tw+Trw
Ta=Tsa+Twa+Trwa 寻道时间和旋转延迟时间成为调度算法的主要考虑因素。减少访问时间就是要减少寻道时间和旋转延迟时间。
3、设计要求
(1)设计一个函数完成先来先服务的磁盘调度功能。
(2)设计一个函数完成最短寻道时间优先的磁盘调度功能。(3)设计一个函数完成电梯算法的磁盘调度功能。
(4)从键盘输入一组磁盘访问序列,选择三种算法中的一种,输出其磁头移动的总的磁道数
课程设计三:主存空间的分配与回收
1、设计目的主存是中央处理器能直接存取指令和数据的存储器,能否合理地利用主存,在很大程度上将影响到整个计算机系统的性能。主存分配是指在多道作业和多进程环境下,如何共享主存空间。主存回收是指当作业执行完毕或进程运行结束后将主存空间归还给系统。主存分配与回收的实现是与主存储器的管理方式有关。本次设计主要是为了帮助理解主存空间的分配与回收的几种算法。
(1)掌握最先适应分配算法(2)掌握最优适应分配算法(3)掌握最坏适应分配算法
2、设计要求
用户提出内存空间请求,系统根据申请者要求,按照最先适应算法的分配策略分析主存空间的使用情况,找出能满足请求的空闲区,分给申请者,当程序执行完毕时,系统要收回它所占用的内存空间。
建立空闲区数据文件,空闲区数据文件包括若干行,每行有两个字段:起始地址、内存块大小(均为整数),各字段以逗号隔开。下面是一个空闲区数据文件的示例:
0,10,08 18,10 28,06 34,10 44,09 读取空闲区数据文件,建立空闲区表并在屏幕上显示空闲区内存状态,空闲区表记录了可供分配的空闲内存的起始地址和大小,用标志位指出该分区是否是未分配的空闲区。
接收用户的内存申请,格式为:作业名、申请空间的大小。
按照内存分配算法中的一种方法选择一个空闲区,分割并分配,修改空闲区表,填写内存已分配区表(起始地址、长度、标志位),其中标志位的一个作用是指出该区域分配给哪个作业。
作业结束后回收内存。分区表的结构如下: Typedef struct node { Int start;
Int length;
Char tag[20];}job
设计内容:设计一个内存分配回收的函数使用最优适应分配算法 2 设计一个内存分配回收的函数使用最坏适应分配算法 3设计一个内存分配回收的函数使用最先适应分配算法 用户提出内存空间请求,系统根据申请者要求,分别使用上述算法分析内存空间的使用情况,找出合适的空闲区,分给申请者,当作业执行完毕后,系统收回它所占用的内存空间。
课程设计四:P,V操作
设计要求:
编程模拟实现下列任一问题:
1.桌上有一盘子,可以存放一个水果。爸爸总是放苹果到盘子中,而妈妈总是放香蕉到盘子中;一个儿子专等吃盘中的香蕉,一个女儿专等吃盘中的苹果。请用P,V操作实现上述问题的解。
分析:在本题中,爸爸、妈妈、儿子和女儿共用一个盘子,盘子一次只能放一个水果。当盘子为空时,爸爸和妈妈都可以试着将一个水果放入盘中,但一次只能有一人成功放入水果。若放入盘子中的是香蕉,则允许儿子吃,女儿必须等待;若放入盘子中的是苹果,则允许女儿吃,儿子必须等待。
在本题中,应设置3个信号量dish、apple、banaba,信号量dish表示盘子是否为空,其初值为1;信号量apple表示盘中是否有苹果,其初值为0;信号量banana表示盘中是否有香蕉,其初值为0。进程之间的同步描述如下:
Semaphore dish=1;Semaphore apple,banana=0;Main(){
cobegin
father();
mother();
son();
daughter();
coend } Father()
mather(){
{
while(true)
while(true)
{
{
p(dish);
p(dish);
将苹果放入盘中;
将香蕉放入盘中;
v(apple);
v(banana);
}
} }
} Son()
daughter(){
{
while(true)
while(true)
{
{
p(banana);
p(apple);
从盘中取出香蕉;
从盘中取出苹果;
v(dish);
v(dish);
吃香蕉;
吃苹果;
}
}
}
2、设公共汽车上,司机和售票员的活动分别是: 司机的活动:启动车辆;正常行车;到站停车。
售票员的活动:关车门;售票;开车门。
在汽车不断的到站、停站、行驶过程中,用信号量和P,V操作实现它们的同步。
分析:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客下车。因此司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。
在本题中,应设置两个信号量s1、s2,s1表示是否允许司机启动汽车,其初值为0;s2表示是否允许售票员开车门,其初值为0。这两个活动的同步用P,V原语描述如下:
Semaphore s1,s2=0;
Main(){
cobegin
driver();
busman();
coend } Driver()
busman()
{
{
while(true)
while(true)
{
{
p(s1);
关车门;
启动车辆;
v(s1);
正常行车;
售票;
到站停车;
p(s2);
v(s2);
开车门;
}
上下乘客;
}
}
}
3,、读者写者问题(算法略)
4、多个生产者与消费者问题(算法略)
5、哲学家就餐问题(算法略)
课程设计五:银行家算法
1、设计目的(1)了解多道程序系统中,多个进程并发执行的资源分配。
(2)掌握死锁产生的原因、产生死锁的必要条件和处理死锁的基本方法。(3)掌握预防死锁的方法,系统安全状态的基本概念。
(4)掌握银行家算法,了解资源在进程并发执行中的资源分配策略。(5)理解避免死锁在当前计算机系统不常使用的原因
2、设计要求
在多道程序系统中,虽可借助于多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险----死锁。死锁是指多个进程在运行中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法向前推进。银行家算法是最具有代表性的避免死锁的算法,它的基本思想是分配资源之前,判断系统是否是安全的,若是才分配资源。
设计一个n个并发进程共享M个系统资源的程序实现银行家算法。要求包含:(1)简单的选择界面
(2)能显示当前系统资源的占用和剩余情况
(3)为进程分配资源,如果进程要求的资源大于系统剩余的资源,不予分配并且提示分配不成功。
(4)撤销作业,释放资源。
3、算法描述(略)
4、所用的数据结构说明(1)银行家所能提供的资源
Type struct node{ Int a;Int b;Int c;Int remain_a;Int remain_b;Int remain_c;}bank;
(2)进程所占用的资源
Typedef struct node1{ Chan name[20];Int a;Int b;Int c;Int need_a;Int need_b;Int need_c;}proce