题目1:动态分区分配方式的模拟1 1 设计目的
了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。
2 设计内容
1)用C语言实现采用首次适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。 2)假设初始状态如下,可用的内存空间为640KB,并有下列的请求序列; 作业1申请130KB 作业2申请60KB 作业3申请100KB 作业2释放60KB 作业4申请200 KB 作业3释放100 KB 作业1释放130 KB 作业5申请140 KB 作业6申请60 KB 作业7申请50KB 作业6释放60 KB
请采用首次适应算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。 3 思考
1)采用首次适应算法和最优置换算法,对内存的分配和回收速度会造成什么不同的影响?
2)如何解决因碎片而造成内存分配速度降低的问题?
题目2:动态分区分配方式的模拟2 3 设计目的
了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。
4 设计内容
1)用C语言实现采用循环首次适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。
2)假设初始状态如下,可用的内存空间为640KB,并有下列的请求序列; 作业1申请130KB 作业2申请60KB 作业3申请100KB 作业2释放60KB 作业4申请200 KB 作业3释放100 KB 作业1释放130 KB 作业5申请140 KB 作业6申请60 KB 作业7申请50KB 作业6释放60 KB
请采用循环首次适应算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。 3 思考
1)采用循环首次适应算法和最优置换算法,对内存的分配和回收速度会造成什么不同的影响?
2)如何解决因碎片而造成内存分配速度降低的问题?
题目3:动态分区分配方式的模拟3 1设计目的
了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。
2设计内容
1)用C语言分别实现采用最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。
2)假设初始状态如下,可用的内存空间为640KB,并有下列的请求序列; 作业1申请130KB 作业2申请60KB 作业3申请100KB 作业2释放60KB 作业4申请200 KB 作业3释放100 KB 作业1释放130 KB 作业5申请140 KB 作业6申请60 KB 作业7申请50KB 作业6释放60 KB
请采用最佳适应算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。 3 思考
1)采用最佳适应算法和最优置换算法,对内存的分配和回收速度会造成什么不同的影响?
2)如何解决因碎片而造成内存分配速度降低的问题?
题目4:动态分区分配方式的模拟4 1设计目的
了解动态分区分配中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。
2设计内容
1)用C语言分别实现采用最坏适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链表来管理,在进行内存分配时,系统优先使用空闲区低端的空间。
2)假设初始状态如下,可用的内存空间为640KB,并有下列的请求序列; 作业1申请130KB 作业2申请60KB 作业3申请100KB 作业2释放60KB 作业4申请200 KB 作业3释放100 KB 作业1释放130 KB 作业5申请140 KB 作业6申请60 KB 作业7申请50KB 作业6释放60 KB
请采用最坏适应算法进行内存块的分配和回收,同时显示内存块分配和回收后空闲内存分区链的情况。 3 思考
1)采用最坏适应算法和最优置换算法,对内存的分配和回收速度会造成什么不同的影响?
2)如何解决因碎片而造成内存分配速度降低的问题?
题目5: 进程调度模拟算法
1 设计目的
通过算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。
1. 2.设计内容
(1) 用C语言来实现对N个进程采用动态优先权优先算法的进程调度。 (2) 每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:
进程标识数ID;
进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高; 进程已占用的CPU时间CPUTIME;
进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0; 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片
后,进程将进入阻塞状态;
进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个
时间片后,进程将转换成就绪状态; 进程状态STATE;
队列指针NEXT,用来将PCB排成队列。 (3) 优先数改变的原则:
进程在就绪队列中呆一个时间片,优先数增加1; 进程每运行一个时间片,优先数减3。
(4) 假设在调度前,系统中有5个进程,它们的初始状态如下: ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 ALLTIME 3 3 6 3 4 STARTBLOCK 2 -1 -1 -1 -1 BLOCKTIME 3 0 0 0 0 STATE READY READY READY READY READY
(5) 为了清楚地观察进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照的具体格式如下: RUNNING PROG: i READY_QUEUE:->id1->id2 BLOCK_QUEUE:->id3->id4 =============================================== ID 0 1 2 3 4 PRIORITY P0 P1 P2 P3 P4 CPUTIME C0 C1 C2 C3 C4 ALLTIME A0 A1 A2 A3 A4 STARTBLOCK T0 T1 T2 T3 T4 BLOCKTIME B0 B1 B2 B3 B4 STATE S0 S1 S2 S3 S4
2. 思考
(1) 在实际的进程调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作;
(2) 为什么对进程的优先数可按上述原则进行修改?
题目6:请求调页存储管理方式的模拟1 1 设计目的
通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
2 设计内容
1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。
2)用c语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。
在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 3)置换算法:采用先进先出(FIFO)置换算法。
3 思考题
1)如果增加分配给作业的内存块数,将会对作业运行过程中的缺页率产生什么影响? 2)为什么在一般情况下,LRU具有比FIFO更好的性能? 提示:
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
① 50%的指令是顺序执行的;
② 25%的指令是均匀分布在前地址部分; ③ 25%的指令是均匀分布在后地址部分; 具体的实施方法是:
① 在[0,319]的指令地址之间随机选取一起点m; ② 顺序执行一条指令,即执行地址为m+1的指令;
③ 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′; ④ 顺序执行一条指令,其地址为m′+1的指令; ⑤ 在后地址[m′+2,319]中随机选取一条指令并执行; ⑥ 重复上述步骤①~⑤,直到执行320次指令。 (2)将指令序列变换为页地址流 ① 设页面大小为1K;
② 用户内存容量为4页到32页; ③ 用户虚存容里为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]); 第10条~第19条指令为第1页(对应虚存地址为[10,19]); „„ „„
第310条~第319条指令为第31页(对应虚存地址为[310,319])。 按以上方式,用户指令可组成32页。
(3)计算先进先出(FIFO)算法在不同内存容量下的命中率。
其中,命中率=1-页面失效次数/页地址流长度
题目7:请求调页存储管理方式的模拟2 1 设计目的
通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
2 设计内容
1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。
2)用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。
在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 3)置换算法:最近最久未使用(LRU)算法。
3 思考题
1)如果增加分配给作业的内存块数,将会对作业运行过程中的缺页率产生什么影响? 2)为什么在一般情况下,LRU具有比FIFO更好的性能? 提示:
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
① 50%的指令是顺序执行的;
② 25%的指令是均匀分布在前地址部分; ③ 25%的指令是均匀分布在后地址部分; 具体的实施方法是:
① 在[0,319]的指令地址之间随机选取一起点m; ② 顺序执行一条指令,即执行地址为m+1的指令;
③ 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′; ④ 顺序执行一条指令,其地址为m′+1的指令; ⑤ 在后地址[m′+2,319]中随机选取一条指令并执行; ⑥ 重复上述步骤①~⑤,直到执行320次指令。 (2)将指令序列变换为页地址流 ① 设页面大小为1K;
② 用户内存容量为4页到32页;
③ 用户虚存容里为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]); 第10条~第19条指令为第1页(对应虚存地址为[10,19]); „„ „„
第310条~第319条指令为第31页(对应虚存地址为[310,319])。 按以上方式,用户指令可组成32页。
(3)计算最近最少使用(LRU)算法在不同内存容量下的命中率。
其中,命中率=1-页面失效次数/页地址流长度
题目8:请求调页存储管理方式的模拟3 1 设计目的
通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
2 设计内容
1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。
2)用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。
在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 3)置换算法:最佳置换(OPT)算法。
3 思考题
1)如果增加分配给作业的内存块数,将会对作业运行过程中的缺页率产生什么影响? 提示:
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
① 50%的指令是顺序执行的;
② 25%的指令是均匀分布在前地址部分; ③ 25%的指令是均匀分布在后地址部分; 具体的实施方法是:
① 在[0,319]的指令地址之间随机选取一起点m; ② 顺序执行一条指令,即执行地址为m+1的指令;
③ 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′; ④ 顺序执行一条指令,其地址为m′+1的指令; ⑤ 在后地址[m′+2,319]中随机选取一条指令并执行; ⑥ 重复上述步骤①~⑤,直到执行320次指令。 (2)将指令序列变换为页地址流 ① 设页面大小为1K;
② 用户内存容量为4页到32页; ③ 用户虚存容里为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存
中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]); 第10条~第19条指令为第1页(对应虚存地址为[10,19]); „„ „„
第310条~第319条指令为第31页(对应虚存地址为[310,319])。 按以上方式,用户指令可组成32页。
(3)计算最佳置换(OPT)算法在不同内存容量下的命中率。
其中,命中率=1-页面失效次数/页地址流长度
题目9:请求调页存储管理方式的模拟4 1 设计目的
通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
2 设计内容
1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。
2)用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。
在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 3)置换算法:最少访问(LFU)算法。
3 思考题
1)如果增加分配给作业的内存块数,将会对作业运行过程中的缺页率产生什么影响? 提示:
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
① 50%的指令是顺序执行的;
② 25%的指令是均匀分布在前地址部分; ③ 25%的指令是均匀分布在后地址部分; 具体的实施方法是:
① 在[0,319]的指令地址之间随机选取一起点m; ② 顺序执行一条指令,即执行地址为m+1的指令;
③ 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′; ④ 顺序执行一条指令,其地址为m′+1的指令; ⑤ 在后地址[m′+2,319]中随机选取一条指令并执行; ⑥ 重复上述步骤①~⑤,直到执行320次指令。 (2)将指令序列变换为页地址流 ① 设页面大小为1K;
② 用户内存容量为4页到32页; ③ 用户虚存容里为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存
中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]); 第10条~第19条指令为第1页(对应虚存地址为[10,19]); „„ „„
第310条~第319条指令为第31页(对应虚存地址为[310,319])。 按以上方式,用户指令可组成32页。
(3)计算最少访问(LFU)算法在不同内存容量下的命中率。
其中,命中率=1-页面失效次数/页地址流长度
题目10:请求调页存储管理方式的模拟5 1 设计目的
通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
2 设计内容
1)假设每个页面中可存放10条指令,分配给作业的内存块数为4。
2)用C语言模拟一个作业的执行过程,该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块均已装入该作业,则需进行页面置换,最后显示其物理地址,并转下一条指令。
在所有320指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。 3)置换算法:最近最不经常使用(NRU)算法。
3 思考题
1)如果增加分配给作业的内存块数,将会对作业运行过程中的缺页率产生什么影响? 提示:
(1)通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
① 50%的指令是顺序执行的;
② 25%的指令是均匀分布在前地址部分; ③ 25%的指令是均匀分布在后地址部分; 具体的实施方法是:
① 在[0,319]的指令地址之间随机选取一起点m; ② 顺序执行一条指令,即执行地址为m+1的指令;
③ 在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m′; ④ 顺序执行一条指令,其地址为m′+1的指令; ⑤ 在后地址[m′+2,319]中随机选取一条指令并执行; ⑥ 重复上述步骤①~⑤,直到执行320次指令。 (2)将指令序列变换为页地址流 ① 设页面大小为1K;
② 用户内存容量为4页到32页; ③ 用户虚存容里为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存
中的存放方式为:
第0条~第9条指令为第0页(对应虚存地址为[0,9]); 第10条~第19条指令为第1页(对应虚存地址为[10,19]); „„ „„
第310条~第319条指令为第31页(对应虚存地址为[310,319])。 按以上方式,用户指令可组成32页。
(3)计算最近最不经常使用(NRU)算法在不同内存容量下的命中率。
其中,命中率=1-页面失效次数/页地址流长度
题目11: P、V操作及进程同步的实现1 1 设计目的
掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。
2 设计内容
1)用语言编程实现P、V原语并用P、V原语描述如下生产者-消费者问题:
有一个理发师,一把理发椅和n把提供给等候理发的顾客座的椅子。如果没有顾客,则理发师便在理发椅子上睡觉;当第一个顾客到来时,必须唤醒该理发师进行理发;如果理发师正在理发时又有顾客到来,则如果有空椅子可坐,他就坐下来等待,如果没有空椅子,他就离开理发店。
为理发师和顾客各编一段程序描述他们的行为,要求不能带有竞争条件,试用P、V操作实现。
2)实验要求及说明
① 定义信号量并将P、V操作定义为带参数
② 以输出字符串的形式表示理发师和顾客的行为。
③ 设计适当的数据结构和函数描述顾客等待队列和“唤醒”理发师理发过程,以及没有顾客时的“阻塞”理发师过程。
④ 编程时需考虑理发师和顾客对应的程序是并发操作的。 提示:可利用随机函数模拟并发操作。
⑤ 理发师和顾客两个进程各自调用一个函数模拟生产及消费的操作。 消费者进程开始时首先测试生产者是否存在,若不存在,则循环测试直到生产者出现为止。消费者如果是第一次执行即转为睡眠状态,则直到生产者完成产品后再唤醒消费者,然后两者协调地工作下去。
3 思考题
1)你自己设计的程序是否会产生理发师与顾客都“一睡不起”的情况? 2)假设题目中由2名理发师和2把理发椅,上述程序应做哪些修改?
题目12: P、V操作及进程同步的实现2 1 设计目的
掌握信号量通信方式的一般方法,了解系统实现“阻塞”和“唤醒”功能的方法和技巧。同时掌握进程同步和互斥的概念及实现技术。
2 设计内容
用语言编程实现P、V原语并用P、V原语哲学家就餐问题:
为每个哲学家各编一段程序描述他们的行为,试用P、V操作实现。
题目13: shell编程 1 设计目的
1)了解shell在操作系统中的作用 2)学会编写简单的shell脚本程序 3)学会运行shell命令文件
2 设计内容
1)自学命令 cut, grep, sort, test。编写SHELL脚本,能将文件d1和d2整合为文件d3。
2)编写两个shell 脚本s1、s2,其中s1能够启动3个进程,进程名称分别为a,b,c,每个进程的代码如下:
int main() { while(1) {
}; return 0; }
s2 能够杀死这3个进程,并且要求s2的执行不允许人为指定参数。
3 思考题
Shell编程于一般编程的区别?
题目14:银行家算法 1 设计目的
1)了解多道程序系统中,多个进程并发执行的资源分配。
2)掌握银行家算法,了解资源在进程并发执行中的资源分配情况。 3)掌握预防死锁的方法,系统安全状态的基本概念。
2 设计内容
设计一个n个并发进程共享m个系统资源的程序以实现银行家算法。要求: 1) 简单的选择界面;
2) 能显示当前系统资源的占用和剩余情况。
3) 为进程分配资源,如果进程要求的资源大于系统剩余的资源,不与分配并且提示分
配不成功;
4) 撤销作业,释放资源。
编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。
银行家算法分配资源的原则是:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需求资源最大量时,就满足进程的当前申请。这样就可以保证至少有一个进程可能得到全部资源而执行到结束,然后归还它所占有的全部资源供其它进程使用。
银行家算法中的数据结构
(1)可利用资源向量Available(一维数组)
是一个含有m个元素,其中的每一个元素代表一类可利用的资源数目,其初值是系统中所配置的该类全部可用资源数目。如果Available[j]=k, 表示系统中现有Rj类资源k个。
(2)最大需求矩阵Max(二维数组)
m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k, 表示进程i需要Rj类资源的最大数目为k。
(3)分配矩阵Allocation(二维数组)
m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation(i,j)=k, 表示进程i当前已分得Rj类资源k个。
(4)需求矩阵Need (二维数组)
是一个含有n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need(i,j)=k, 表示进程i还需要Rj类资源k个,方能完成其任务。
Need(i,j)= Max(i,j)-Allocation(i,j)
3 思考题
1) 理解避免死锁在当前计算机系统中不常使用? 2)现在的计算机系统是如何解决死锁问题的?
题目15:SPOOLING技术 1 设计目的
设计一个SPOOLING假脱机输出的模拟程序,更好地理解和掌握SPOOLING技术的实现原理。
2 设计内容
SPOOLING技术广泛地应用于各种计算机的I/O。该技术通过预输出和缓输出的方法,使用共享设备的一部分来模拟独占设备。
1)设计一个实现SPOOLING技术的进程
设计一个SPOOLING输出服务进程、一个SPOOLING输出进程、两个用户请求进程。用户进程请求输出一系列信息,调用输出服务进程,由输出服务进程将该信息送入输出井。等待SPOOLING进程进行输出。SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息将其输出。
2)设计进程调度算法
进程调度采用随机算法,两个请求输出的用户进程的调度概率各为45%,SPOOLING输出进程为10%,这由随机数发生器产生的随机数来模拟决定。
2) 进程状态
3) 进程基本状态有可执行、等待、结束三种。可执行状态就是进程正在运行或等待调
度的状态;等待状态又分为等待状态1、等待状态2、等待状态3。 状态变化的条件为:
① 进程执行完成时,置为“结束”态。
② 服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状
态1”。
③ SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”。
④ SPOOLING进程输出一个信息块后,应立即释放该信息块所占的输出井空间,并将
正在等待输出的进程置为“可执行状态”。
⑤ 服务程序在输出信息到输出井并形成输出请求信息块后,若SPOOLING进程处于等
待态,则将其置为“可执行态”。
⑥ 当用户进程申请请求输出块时,若没有可用请求时,调用进程进入“等待状态3”。
题目16:进程间通信 1 设计目的
Linux系统的进程通信机构(IPC)允许在任意进程间大批量的交换数据。本实验的目的是了解和熟悉Linux支持的通信机制、共享存储区机制及信号量机制。
2 设计内容
(1) 共享存储区的创建,链接和断开 (2) 消息的创建,发送和接收
(3) 编写程序1,实现利用共享存储区进行进程通信。使用系统调用shmget(),
shmat(), shmdt()及shmctl()编制一长度为1k的消息发送和接收程序。
(4) 编写程序2,实现利用消息队列进行进程通信。使用系统调用shmget(),shmat(),
shmdt()及shmctl()编制一长度为1k的消息发送和接收程序。
<程序设计提示>
(1) 为了便于操作和观察结果,用一个程序作为“引子”,先后fork()两个子进程,
SERVER和CLIENT,进行通信。
(2) SERVER端建立一个Key为75的共享区,并将第一个字节置为-1,作为数据空
的标志,等待其他进程发来的消息。当该字节的值发生变化时,表示收到了消息,进行处理。然后再次把它的值设为-1。如果遇到的值为0,则视为结束信号,取消该队列,并退出SERVER。SERVER每接收到一个消息后显示一句“(server)received”。
(3) CLIENT端使用Key为75的共享区,当共享取得第一个字节为-1时,SERVER
端空闲,可发送请求。CLIENT随即填入9到0。期间等待SERVER端再次空闲。进行完这些操作后,CLIENT退出。CLIENT每发送一条信息后显示一句“(client)sent”。
(4) 父进程在SERVER和CLIENT均退出后结束。
3 思考题
(1)比较消息通信机制和共享存储区机制中数据传输的时间。
题目17:进程的管道通信和软中断通信
1 设计目的
加深对进程概念的理解,明确进程和程序的区别。进一步认识并发执行的实质,并了解Linux系统中进程通信的基本原理。 2 设计内容
(1)编制一段程序,实现进程的管道通信。
使用系统调用pipe()建立一条管道线,两个子进程P1和P2分别向管道各写一句话:
Child 1 is sending a message! Child 2 is sending a message!
而父进程则从管道中读出来自两个子进程的信息,显示在屏幕上。 要求父进程先接收子进程P1发来的消息,再接收子进程P2发来的消息。 (2)编制一段程序,实现进程的软中断通信。
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child 1 is killed by parent! Child 2 is killed by parent!
父进程等待两个子进程终止后,输出下列信息后终止。 Parent is killed! 3 思考
进程通信有什么特点?
题目18:文件系统设计1(3人一组) 1、设计目的:
通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
2、设计内容:
(1)为Linux系统设计一个简单的二级文件系统,要求做到:
login 用户登录 dir 列文件目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件
(2)列目录时要列出文件名、物理地址、保护码和文件长度。 (3)源文件可以进行读写保护
题目19:文件系统2—hash结构文件(2个人一组) 1、设计目的:
理解Linux文件系统的内部技术,掌握Linux与文件有关的系统调用命令,并在此基础上建立面向随机检索的hash结构文件 2、设计内容:
(1)参考hash文件构造算法,设计一组hash文件函数,包括hash文件创建、打开、关闭、读、写等操作。
(2)编写一个测试程序,通过记录保存、查找、删除等操作,检查上述hash文件是否实现相关功能。
题目20:设备管理—linux设备驱动程序安装 1、设计目的
认识Linux设备的种类和设备工作方式,理解设备驱动程序的工作原理,掌握设备驱动程序的编写规范,能编写并安装简单的设备驱动程序。 2、设计内容
在Linux系统中,编写一个简单的字符型设备驱动程序模块,设备具有独占特性,可执行读和写操作,相关系统调用为open,close,read,write。Open和close分别相当于请求和释放设备,read和write将内容保存在设备模块内的缓冲区中。设备模块可动态注册和卸载,并建立与之对应的特殊文件/dev/mydev。
题目21:linux进程与线程通讯 1、设计目的:
深刻理解线程和进程的概念,掌握线程和进程在组成成分上的差别以及与其相适应的通信方式和应用目标。 2、设计内容:
以Linux系统进程和线程机制为背景,掌握fork()和clone()系统调用的形式和功能以及与其相适应的高级通信方式。由fork派生的子进程之间通过pipe通信,由clone创建的线程之间通过共享内存通信。
以生产者-消费者为例,通过实验理解fork和clone两个系统调用的区别。程序要求能够创建4个进程或线程,其中包括两个生产者和两个消费者,生产者和消费者之间能够传递数据。
题目22:动态不等长存储资源分配算法 1、设计目的:
理解动态异常存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优缺点。
2、设计内容:
(1)分析Unix最先适应(first fit,ff)存储分配算法。即map数据结构、存储分配函数ma lloc()和存储释放函数mfree(),找出与算法有关的成分。
(2)修改上述算法有关成分,使其分别体现BF(best fit,最佳适应)分配原则WF(worst fit,最坏适应)分配原则。
题目23:实现系统状态监测工具 1、设计目的:
实现程序,通过获取/proc 文件系统所提供的系统信息,检查系统当前的各种状态信息
2、设计内容:
通过在命令行运行程序,可获取以下信息: 1、 CPU 类型、型号、内核版本等信息 2、 从系统启动至今的时间等 3、 内存总容量及当前可用内存量 4、 系统平均负载
5、 支持的文件系统类型 6、 系统正在使用的module 信息
题目24:编程演示三种存储管理方式的地址换算过程 1、设计目的:
理解页式、段式、段页式的逻辑地址向物理地址的转换过程。理解重定位的含义。 要求演示正确、清晰,编程所用工具不限
2、设计内容:
编程实现演示页式、段式、段页式的地址转换过程 1、分页方式的地址换算 2、分段方式的地址换算 3、段页式的地址换算
题目25:编程模拟多进程共享临界资源 1、设计目的:
理解多进程共享临界资源的原理,并编程实现
2、设计内容:
要求产生3 个进程:
1、 两个进程模拟需要进入临界区的用户进程,当需要进入临界区时,显示:“进程x请求进
入临界区…”,同时向管理进程提出申请;申请返回,表示进入了临界区。在临界区中等待一段随机时间,并显示:“进程x 正在临界区…”;当时间结束,显示:“进程x 退出临界区…”,同时向管理进程提出退出申请;当申请返回,显示:“进程x 已退出临界区。”
2、一个进程作为原语的管理进程,接受其他进程的临界区进入请求:如果允许进入,则设置相应变量,然后返回;如果不允许进入,则进入循环等待,直到允许为止; 3、对临界区的访问应遵循空闲让进、忙则等待、有限等待、让权等待的准则。 4、进程间通信可以采用信号、消息传递、管道或网络通信方式。
题目26:磁盘调度算法1 1、设计目的:
理解磁盘调度算法,并进一步加深对调度算法及其实现过程的理解。
2、设计内容:
设计主界面以灵活选择某算法,且以下算法都要实现 1、先来先服务算法(FCFS) 2、最短寻道时间优先算法(SSTF) 并求出每种算法的平均寻道长度:
题目27:磁盘调度算法2 1、设计目的:
理解磁盘调度算法,并进一步加深对调度算法及其实现过程的理解。
2、设计内容:
设计主界面以灵活选择某算法,且以下算法都要实现 1、扫描算法(SCAN) 2、循环扫描算法(CSCAN) 并求出每种算法的平均寻道长度
题目28:处理机调度程序(本题目最多可由3人选作,每人实现一种算法) 1、设计目的:
设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。
2、设计内容:
选择一个调度算法,实现处理机调度。
1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。 2)可选择进程数量
3)本程序包括三种算法,用C 语言实现,执行时在主界面选择算法(可用函数实现), 进入子页面后输入进程数,(运行时间,优先数由随机函数产生),执行,显示结果。
因篇幅问题不能全部显示,请点此查看更多更全内容