2014年操作系统课程设计题目与要求

更新时间:2024-06-11 10:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

操作系统课程设计题目与要求

课程设计要求:

1、 可以依据教材中的算法自行选题,也可以从下面给出的题目中选题。要求每

两名同学之间课程设计内容应该不同。如果有选择相同题目的小组,则设计方案不同,否则视为抄袭。(可以两人一组,也可以一人一题) 。选题确定后,不得更改。

2、 分析设计要求,给出解决方案,建立必要的数据结构,然后设计总体流程(包

括界面)、详细设计必要的算法,并最终显示出结果。 基于Windows 或 Linux操作系统都可以,用何种编程语言都可以。 3、 提交设计报告,包括设计要求、设计思想及流程、设计所涉及的主要数据结构、

程序清单、运行结果、设计心得、参考资料等。

4、 最终成绩决定因素=设计质量(40)+设计报告(30)+答辩(30) 5、 课程设计参考评分内容:

设计思想说明;数据结构的说明;各模块的算法流程图;程序清单:注意加注释(包含关键字、方法、变量等),在每个模块前加注释;体会,总结及体会建议。 6、 设计报告内容与他人相同者无成绩。

7、 要求同学们在上机前,尽量多做准备,编写好程序代码,上机时进行修改调

试,以提高上机效率。

8、 第15,16周周末提交设计报告,并进行答辩。地点在机房。不允许超过时间。

二、设计题目

1. Windows多线程控制台程序(1人)

目的:学习和掌握如何编写Windows多线程控制台程序。通过编写程序,加深对进程和线程关系的理解,掌握多线程程序的执行和编写技巧。

设计要求:写一个单进程多线程的Windows控制台程序,该程序在一个进程内建立N个线程来执行指定的任务。N由命令行传递给系统。

Win32控制台程序中,主函数的格式如:

Void main(int argc,char *argv[]),可以获取命令行参数。

通过VC++“工程/设置”的C/C++属性页设置应用程序为“MTD”多线程。 利用win32 API CreateThread()来生成线程。 2. 睡眠理发师问题(2人)

目的:了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。

设计要求:

(1)编写程序实现理发师与顾客进程的同步。

操作系统课程设计指导

问题描述:这是一种经典的IPC问题,理发店有一位理发师,一把理发椅和n把用来等候理发的椅子。如果没有顾客,则理发师在理发椅上睡觉,顾客理来时,如理发师闲则理发,否则如有空椅则坐等,没有空椅则离开,编写程序实现理发师和顾客程序,实现进程控制,要求不能出现竞争。

(2)将(1)题中问题修改为有两位理发师,设计程序实现同步控制。

问题提示:可以用一个变量waitting来记录等候理发的顾客数,另使用三个信号量:用来记录等候理发的顾客数customers;用来记录理发师是否空闲的信号量barbers,一个用于互斥访问waitting变量的mutex.。

3. 进程调度模拟程序(1人)

目的:深入掌握进程调度的概念原理和实现方法。

设计要求:编写一个进程调度程序,允许多个进程并行执行。

进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)、先来先服务算法、按时间片轮转调度算法,最终总结该算法的优缺点,写出设计体会。

每个进程有一个进程控制块(PCB)表示,进程控制块可以包含如下信息: 进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

进程的优先数及需要的运行时间可以事先人为指定(也可以由随机数产生)。进程的到达时间为输入进程的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(wait)、运行R(run)或完成F(finish)三种状态之一。

4. 进程调度模拟程序2(1人)

目的:深入掌握进程调度的概念原理和实现方法。

设计要求:编写一个进程调度程序,允许多个进程并行执行。

进程调度算法:采用最高优先数优先与按时间片轮转调度结合算法,最终总结该算法的优缺点,写出设计体会。

如果运行下个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进行已占用CPU时间还未达到所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所有进程都完成为止。

5. 读者与写者问题(进程同步问题)(1人)

目的:了解进程同步的概念,理解信号量机制的原理,掌握运用信号量解决进程同步问题的方法,进而学会运用进程的同步与互斥。

设计要求:编程模拟读者与写者问题,要求显示结果。

2

操作系统课程设计指导

问题描述:

(1)多个进程共享一个文件,其中只读文件的称之为读者,其余只写文件的称为写者。读者可以同时读,但是写者只能独立写。

(2)对(1)修改,使得它对写者优先,即一旦有写者到,后续的读者都必须等待,而无论是否有读者在读文件。

6. 模拟文件管理系统(1人)

目的:深入了解文件管理系统,初步掌握文件管理系统的实现方法。

设计要求:编写一程序,模拟一个简单的文件管理系统。树型结构,目录下可以是目录,也可以是文件。

在此文件管理系统,可实现的操作有: 改变目录:格式:cd <目录名> 显示目录:格式:dir[<目录名>] 创建目录:格式:md <目录名> 删除目录:格式:rd<目录名> 新建文件:格式:edit<文件名> 删除文件:格式:del<文件名> 退出文件系统:exit 实现参考:

(1) 文件系统采用二叉树型存储结构,结点结构如下: Struct FileNode {

Char filename[FILENAME_LEN];//文件名/目录名 Int isdir ;//目录、文件的识别标志 Int i_nlink;//文件链接数 Int adr;//文件的地址

Struct FileNode *parent,*child;//指向父亲的指针和左孩子的指针

Struct FileNode *sibling_prev,*sibling_next;//指向前一个兄弟的指针和后一个兄弟的指针。 }

(2) 目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开 (3) 功能具体描述:

改变目录:改变当前工作目录,目录不存在是给出出错信息

显示目录:显示指定目录下或当前目录下所有文件和一级目录(选做:带/s参数的dir命令,

3

操作系统课程设计指导

显示所有子目录)

创建目录:在指定路径或当前路径下创建指定目录。重名时给出出错信息。

删除目录:删除指定目录下所有文件和子目录。要删目录不空时,要给出提示是否要删除。 创建文件:创建指定名字的文件,只要创建表示文件的节点即可,内容及大小不考虑。 删除文件:删除指定文件,不存在时给出出错信息。 退出文件系统:exit (4) 总体流程: 初始化文件目录

输出提示符,等待接受命令,分析键入的命令;

对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令。直到键入exit退出为止。

7. 内存的申请与释放(2人) 目的:了解操作系统内存分配的算法。 设计要求:

(1) 定义一个自由存储块链表,按块地址排序,表中记录块的大小。当请求分配内存时,扫描自由存储块链表,址到找到一个足够大的可供分配的内存块,若找到的块大小正好等于所请求的大小时,就把这一块从自由链表中取下来,返回给申请者。若找到的块太大,即对其分割,并从该块的高地址部分往低地址部分分割,取出大小合适的块返回给申请者,余下的低地址部分留在链表中。若找不到足够大的块,就从操作系统中请求另外一块足够大的内存区域,并把它链接到自由块链表中,然后再继续搜索。

释放存储块也要搜索自由链表,目的是找到适当的位置将要释放的块插进去,如果被释放的块的任何一边与链表中的某一块临接,即对其进行合并操作,直到没有合并的临接块为止,这样可以防止存储空间变得过于零碎。

(2) 空闲区采用分区说明表的方法实现(1)中的功能。要求同上。 8. Windows磁盘直接读写实验(1人) 目的:了解磁盘设备编程的特点。

设计要求:通过本实验了解在windows系统中如何直接使用磁盘的读写功能;所编应用程序能够响应用户指定的读写磁盘扇区的请求,也能提供查看磁盘相关参数的功能。技术的关键是使用了windows提供的API(应用程序接口)来实现所要求的功能。用户可以利用API进行底层的磁盘操作。

相关知识:(下列函数的详细使用方法参看VC++的MSDN文档)

(1) CreateFile:用来创建或者打开一个文件、管道、磁盘设备等,它返回一个句柄用于

4

操作系统课程设计指导

以后对这信对象的访问。

(2) DeviceControl:本API直接向相应设备的驱动程序发出指令,以完成在函数参数中所指定的动作。

(3) WriteFile:本API用于向文件中写入数据,写入操作可以采用同步方式或者异步方式,写入操作从文件指针处开始,写操作后会被相应调整。磁盘设备被当作文件看待。

(4) ReadFile:本API用于文件中读出数据,读出操作从文件指针处开始,文件指针在读操作后会被相应调整。用法同写文件函数相似。

(5) SetFilePointer:用于移动一个打开的文件中的读写指针。 9. 处理机调度(2人)

目的:加深作业概念的理解,深入了解多道程序设计系统中如何组织作业、管理作业和调度作业,加深对作业调度算法的理解。

设计要求:采用短作业优先调度算法、先来先服务调度算法和最高响应比调度算法实现处理机对作业的调度。

作业调度算法的关键是在已有的作业后备队列上按照一定的规则选择一个作业,如何在已有的数据结构上进行操作的问题。 10. 页面置换算法(2人)

目的:深入掌握内存调度算法的概念原理和实现方法。 设计要求:编写程序实现:

(1) 先进先出页面置换算法(FIFO) (2) 最近最久未使用页面置换算法(LRU) (3) 最佳置换页面置换算法(OPT)

专题:设计一个虚拟存储区和内存工作区,编程序演示以上三种算法的具体实现过程,并计算访问命中率。演示页面置换的三种算法。通过随机数产生一个指令序列,将指令序列转换成为页地址流。计算并输出各种算法在不同内存容量下的命中率。 11. 售票员与乘客(信号量操作)(1人)

目的:了解进程同步的概念,理解信号量机制的原理,掌握运用信号量解决进程同步问题的方法,进而学会运用进程的同步与互斥。

设计要求:编程序模拟车站售票厅内进程同步问题,售票厅任何时刻最多可容纳20名购票者进入,否则需要在外面等待。每个购票者可看成一个进程。 12. 生产者—消费者问题(2人)

目的:掌握信号的使用方法和PV操作的定义,掌握使用PV操作实现进程之间同步与互斥的方法,加深对进程同步互斥概念的理解。

5

操作系统课程设计指导

设计要求:设计一程序,由一个进程创建三个子进程,三个子进程一个是生产者进程,两个是消费者进程,父子进程都使用父进程创建的共享存储区进行通信,由生产者进程将一个数组中的十个数值发送到由5个缓冲区组成的共享内存中,两个消费者进程轮流接收并输出这十个数值,同时将两个消费者进程读出的数值进行累加求各和。 13. 驱动调度(2人)

目的:掌握驱动调度算法的原理

设计要求:模拟电梯调度算法,实现对磁盘的驱动调度。

要求模拟设计一个驱动调度程序,观察驱动程序的动态运行过程。通过实验理解和掌握驱动调度的职能。

通过输入一个0~1的数来确定函数执行“接受请求”命令,还是执行“驱动调度”命令。同时可以根据自已需要确定是否继续执行。

调用数组对输入的进程进行存储,并运用循环进行显示同时对I/O请求列表进行初始化。 运用电梯调度算法,对I/O列表中的磁盘请求进行调度,同时对I/O列表进行排序,调度完成后显示新的列表。 14. 银行家算法(1人)

目的:了解多道程序系统中,多个进程并发执行的资源分配。

设计要求:管理员可以把一定数量的作业供多个用户周转使用,为保证作业的安全,管理员规定:当一个用户对作业的最大需求量不超过管理员现有的资金就要接纳该用户;用户可以分期贷款,但贷款的总数不能超过最大需求量;当管理员现有的作业不能满足用户的所需数时,对用户的请求可以推迟支付,但总能使用户在有限的时间里得到请求。当用户得到所需的全部作业后,一定能在有限的时间里归还所有的作业。 15. 交通信号灯模拟(2人)

目的:了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。

设计要求:编程模拟交通信号灯的控制。

问题描述:一个十字路口,共有四组红绿灯,每个路口的车辆都遵循“红灯停,绿灯行”的原则,假设将每一台汽车都作为一个进程,请设计良好的机制,展示出合理的“十字路口交通管理”情况。

车辆通行设定:路口宽度不限,对一个路口而言,只有当一辆车通过路口(越过对面路口的交通灯后),其后续车辆才能继续通过交通灯,车辆通过路口的时间可以固定,可以自行计算。

进程的互斥:交通灯进程实际上是互斥的,即不能同时为红或者同时为绿。

进程的消息通信或其通信方式:对车辆进程而言,每一个车辆在通过路口前,必须确认前

6

操作系统课程设计指导

面的车辆已经通过了路口。

进程的调度:停留在一个路口的车辆,决定其前进或等候的因素是交通灯和前面车辆的状态,需要设计一个良好的进程调度机制来控制所有车辆的通行。 16. 哲学家进餐问题(1人)

目的:通过实现哲学家进餐问题的互步,深入了解和掌握进程互斥的原理。

设计要求:哲学家有N个,规定全体到齐后开始讨论,在讨论的间隙哲学家进餐,每人进餐时都需使用刀、叉合一把,所有哲学家刀和叉都拿到后才能进餐。哲学家的人数、餐桌上的布置自行设定,实现刀和叉的互斥使用算法的程序实现。 17. 司机与售票员(信号量操作)(1人)

目的:掌握信号的使用方法和PV操作的定义,掌握使用PV操作实现进程之间同步和互斥的方法,加深对进程同步互斥概念的理解。

设计要求:设计程序模拟在公共汽车上,司机和售票员操作的同步。司机:启动车辆,正常行车,到站停车。售票员:上乘客,关车门,售票,开车门,下乘客。用PV操作对其控制。 18. 磁盘调度算法(2人)

目的:了解磁盘管理的原理,掌握磁盘调度种算法。

设计要求:编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度:要求设计主界面可以灵活选择算法,且以下算法都要实现。

(1) 先来先服务算法(FCFS) (2) 最短寻道时间优先算法(SSTF) (3) 扫描算法(SCAN) (4) 循环扫描算法(CSCAN)

19. 收银员与顾客问题(信号量操作)(1人)

目的:了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。

设计要求:编程模拟下面同步问题:在某超市有下收银员,且同时最多允许有n个顾客购物,我们可以将顾客和收银员看成是两类不同的进程,且工作流程如下图所示。为了利用PV操作正确地协调这两类进程之间的工作,设置了三个信号量S1、S2和Sn,且初值分别为0、0、和n。

20. 信号量的操作2(1人)

目的:了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。

设计要求:通过对windows系统的内核同步对象mutexes和semaphores的使用来实现进程

7

操作系统课程设计指导

同步的控制。利用CreateSemaphore、WaitForSingleObject等函数检测内核同步对象的状态。

21. 信号量的操作

实验目的:了解信号量机制,了解并掌握进行同步和机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。

实验要求:通过对Windows系统的内核同步对象Mutexes和Semaphores的使用来实现进程同步的控制。利用CreateSemaphore、 WaitForSingleObject等函数检测内核同步对象的状态。

假设某宿舍楼有一共用浴室,学校颁布法令:当有一个女生正在使用浴室,则其他女生可以进入,但是男生不行,反之亦然。在每个浴室门上有一个滑动指示符号,表示当前处于以下三种可能状态之一:

1. 空 2. 有女生 3. 有男生

选用一种程序设计语言编写下面的过程:woman_wants_to_enter, man_wants_to_enter, woman_leaves, man_leaves.

22. 进程间的通信(2人)

目的:了解进程间通信的机制,实现进程的两种通信方式,多次执行,观察结果,并对两种通信方式进行比较。

设计要求:利用系统提供的通信系统调用,进行一种方式的进程通信的程序设计,并对结果进行分析,同时了解另一种通信方式,将两种方式进行比较分析。

(1) 消息的创建发送和接收

使用系统调用msgget()、msgsnd()、msgrev()、msgctl()来编写长度为500字节的发送和接收程序。用一个程序先后创建两个子进程server和client,进行消息队列方式通信。由server建立消息队列,等待其他进程发来消息,当遇到类型为1的消息,则作为通信结束的信号,取消消息队列,退出。Server每接收到一个消息显示在屏幕上。

Client判断一个数据中的整数是否为素数,然后使用server建立的消息队列,将某数是否为素数的消息依次发送给server,然后退出。Client每次发送时把消息显示在屏幕上。

(2) 共享存储区的创建,附接和断接

使用系统调用shmget(),shmat(),shmctl()编写一个与上面(1)中相同功能的程序。 23. 虚拟文件系统的实现(3人)

目的:过一个简单的多用户文件系统的设计,加深文件系统内部功能以及内部实现。 设计要求:

在Windows或者Linux下设计一个二级(或者树型)结构文件系统,要求至少实现以下功能:

8

操作系统课程设计指导

login 用户登录 dir 列出文件目录 create 创建文件 del 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 cd 进入子目录 rd 删除子目录 md 创建子目录

设计提示:实现虚拟文件系统的一般思路是调用系统的文件创建(如c中的fopen函数的w方式即可)一个新文件,将此文件作为虚拟磁盘,在完成本设计要求的内容时,要求所生成的文件目录以及文件等内容都是存储在此磁盘中。 24. 分时系统实现

目的: 了解计算机系统的启动过程,实模式和保护模式的区别,进程管理功能的具体实现。 设计要求:

(1)制作计算机启动盘。

(2)实现由实模式进入到保护模式。

(3) 静态建立几个进程,采用时间片轮转调度策略调度进程执行。 25. 苹果问题(2人)

目的:了解信号量机制,了解并掌握进程同步和互斥机制,熟悉信号量的操作函数,利用信号量实现对共享资源的控制。

设计要求:编程模拟实现这一问题的程序控制,分析处理过程,

问题描述:桌子上有一只盘子,最多可容纳两个水果,每次只能放入或取出一个水果。爸爸专向盘子放苹果(apple),妈妈专向盘子中放桔子(orange);两个儿子专等吃盘子中的桔子,两个女儿专等吃盘子中的苹果。请用P、V操作来实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系。

26. 设计一个虚拟存储区和内存工作区,编程序演示下述算法的具体实现过程,并计算访问

命中率:

1、先进先出的算法(FIFO) 2、最近最少使用算法(LRU)

9

操作系统课程设计指导

3、最佳淘汰算法(LFU) 4、最少访问页面算法(NUR) 5、最近最不经常使用算法(NUR)

27.编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度:

1、先来先服务算法(FCFS) 2、最短寻道时间优先算法(SSTF) 3、扫描算法(SCAN) 4、循环扫描算法(CSCAN)

28.编程序模拟银行家算法,要求能体现算法的全过程。

29.编程序模拟至少三种进程调度算法,要求能体现算法的全过程。

题目1:时间片轮转调度算法模拟

要求:用实验方法模拟单处理机系统的进程调度,并采用时间片轮转调度算法作为进程调度算法。 具体任务:

1、理解掌握进程调度实现所涉及到的主要问题:如何组织进程、如何实现处理机调度。

进程控制块的作用和结构,进程控制块的链表组织。

进程调度程序包含从进程就绪队列选择并摘取进程、给该进程分配处理机。 2、设计进程控制块相关数据结构,进程状态跃迁的相关模拟; 3、实现时间片进程调度算法模拟程序设计、编码及调试。

题目2:静态优先级调度算法模拟

要求:用实验方法模拟单处理机系统的进程调度,并采用静态优先级调度算法作为进程调度算法。

10

操作系统课程设计指导

具体任务:

1、理解掌握进程调度实现所涉及到的主要问题:如何组织进程、如何实现处理机调度。

进程控制块的作用和结构,进程控制块的链表组织。

进程调度程序包含从进程就绪队列选择并摘取进程、给该进程分配处理机。 2、设计进程控制块相关数据结构,进程状态跃迁的相关模拟; 3、实现静态优先级调度算法模拟程序设计、编码及调试。

题目3:最短剩余时间优先(动态优先)调度算法模拟

要求:用实验方法模拟单处理机系统的进程调度,并采用最短剩余时间优先调度算法作为进程调度算法。 具体任务:

1、理解掌握进程调度实现所涉及到的主要问题:如何组织进程、如何实现处理机调度。

进程控制块的作用和结构,进程控制块的链表组织。

进程调度程序包含从进程就绪队列选择并摘取进程、给该进程分配处理机。 2、设计进程控制块相关数据结构,进程状态跃迁的相关模拟; 3、实现最短剩余时间优先调度算法模拟程序设计、编码及调试。

题目4 作业调度设计

1、目的

本实验的目的是通过模拟作业调度算法的设计加深对作业管理基本原理的理解。 2、内容

11

操作系统课程设计指导

⑴在后备作业队列中,输入5个作业各自运行所需要的时间及存储空间。 ①按先来先服务的原则进行调度,输出作业调度的顺序及等待的时间。

②按最短作业(即运行时间最短)优先的原则进行调度,输出作业调度的顺序及等待时间。

③按最小作业(即存储空间最小)优先的原则进行调度,输出作业调度的顺序及等待的时间。根据运行情况,比较各种算法。

⑵在后备作业队列中,先输入5个作业各自运行所需要的时间,然后每输入一个作业的运行时间,就按响应比高优先的原则进行调度,直到输入作业的运行时间为0时,依次输出响应比高的其它作业。 3、要求

⑴对输入的每个作业必须编号,输出时要有作业序号、运行时间、存储空间及等待时间(包括总的等待时间);

⑵报告中的运行情况要包括输入和输出情况; ⑶比较上面几种调度算法的优劣。 4、举例

建主程序、三个子程序(例如:先来先服务FCFS、最短作业优先LSFS、最短运行时间作业优先SRFS)、打印程序及原始数据。

五个作业运行时间,建文件DATA.DAT,其中包含num、runtime、storage、waittime和The waiting time。

题目5 存储管理页面置换算法模拟实现及比较

1、目的

通过请求页式管理中页面置换算法了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。 2、内容

12

操作系统课程设计指导

⑴通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成: ①一半的指令是顺序执行的;

②四分之一的指令是均匀分布在前地址部分; ③四分之一的指令是均匀分布在前地址部分。 具体的实施办法是:

①在[0,319]之间选一起点m;

②顺序执行一条指令,即m+1条; ③向前地址[0,m—1]中执行一条指令m'; ④顺序执行一条指令,即m'+1条; ⑤向后地址(m'+2,319]执行一条指令m'' ⑵将指令序列变换成为页地址流。 假设:

①页面大小为1KB;

②用户实寸容量为4页到32页; ③用户虚存容量为32KB。

用户虚存容量32KB,每1KB中放10条指令,共320条指令(0~319)。其中0~9为0页,10~19为1页?310~319为31页。

⑶使用不同的页面调度算法处理缺页中断,并计算不同实存容量下(4~32KB)的命中率。

①先进先出算法(FIFO); ②最近最少使用算法(LRU);

③最佳淘汰算法(OPT);先淘汰最不常用的页地址; ④最少访问页面算法(LFU)。 命中率的算法为:

13

操作系统课程设计指导

命中率=缺页中断次数/页地址流长度 3、要求

⑴实验报告中要有程序的详细框图,特别是有关算法本身的框图; ⑵实验报告中要有程序清单及执行的结果; ⑶对不同算法的性能进行评价。

题目6 linux进程间同步与互斥

1、目的

调用linux系统调用实现多进程的创建、进程间同步与互斥。 2、内容 ⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

如果在程序中使用系统调用nice( )来改变各进程的优先级,会出现什么现象? ⑵进程的控制

修改已编制的程序,将每个进程输出一个字符修改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象。并分析出现问题的原因。进一步理解各个进程争夺临界资源的情况。

如果在程序中使用系统调用locking( )来给每一个进程加锁,可以实现进程之间的互斥,试观察并分析出现的现象。 ⑶进程的软中断通讯

编制一段程序,实现进程的软中断通讯:使用系统调用fork( )创建两个子进程;再使用系统调用。signal( )让父进程捕捉键盘上来的中断信号(即按Del键);在捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发信号;子进程捕捉到信号后分别输出下列信息后终止:

14

操作系统课程设计指导

child process1 is killed by parent! child process2 is killed by parent!

父进程等待两个子进程都终止以后,输出如下信息后终止。 parent process in killed! 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

题目7 linux进程间管道通信实现生产者-消费者问题

1、目的

调用linux系统调用实现多进程的创建、进程间利用管道进行通信。 2、内容

⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

如果在程序中使用系统调用nice( )来改变各进程的优先级,会出现什么现象? (2)进程的管道通讯

编制一段程序,实现进程的管道通讯:使用系统调用pipe( )建立一条管道线;两个子进程分别循环向这条管道写一句话: child 1 is sending a message! child 2 is sending a message!

15

操作系统课程设计指导

而父进程则循环从管道中读出信息,显示在屏幕上。

用管道进行通讯,实质上是一个多生产者单消费者的问题,必须考虑其中都有哪些同步和互斥,同时向管道输入端写的字节数必须和从输出端读的字节数一致,若不一致,则会出现什么问题。 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

题目8 linux进程软中断实现进程间通信

1、目的

调用linux系统调用实现多进程的创建、进程间利用软中断进行通信。 2、内容 ⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

如果在程序中使用系统调用nice( )来改变各进程的优先级,会出现什么现象? (2)进程的“软中断”通信

它可用于同一用户的进程之间通信。其方式是:一个进程通过系统调用

kill(pid,sig) 向同一用户的其它进程pid发送一个软中断信号:另一进程通过系统调用signal(sig,func)捕捉到信号sig后,执行予先约定的动作func,从而实现这两个进程间的通信。

①发送信号kill(pid,sig),本进程将指定信号sig发送给指定进程pid,其中参数为pid进程号,pid与sig均为整数值。

16

操作系统课程设计指导

②接收信号signal(sig,func),本进程接收到其它进程发送给它的信号后,完成指定的功能func。func一般是函数。

在程序中系统调用sleep(second)用于进程的同步与互斥,自变量是暂停秒数。其功能是使现行进程暂停执行由自变量规定的秒数。

类似的系统调用有pause(),它的功能是暂停执行本进程,等待kill发来的信号,收到信号后再继续执行。

在特殊情况下,常用到如下语句signal(SIGINT,SIG_IGN)。它表示遇到了中断信号SIGINT(按Del键)。本进程不做任何动作,即勿略该中断信号对本进程的影响。 (3) 编写一个程序,实现进程的“软中断”通信。使用系统调用fork()创建2个子进程,再使用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键),在捕捉到中断信号后,父进程用系统调用kill()向2个子进程发信号,子进程捕捉到信号后分别输出下列信息后终止: Child process 1 is killed by parent ! Child process 3 is killed by parent !

父进程等待2个子进程都终止后,输出如下信息后终止: Parent process is killed ! 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

题目9 linux进程锁实现进程间同步与互斥

1、目的

调用linux系统调用实现多进程的创建、进程间利用软中断进行通信。 2、内容

17

操作系统课程设计指导

⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

(2)系统调用locking进程的控制

利用系统调用locking(fd,mode,size),对指定文件的指定区域(由size指示)进行加锁或解锁,以实现进程的同步与互斥。其中fd是文件描述字;mode是锁定方式,=1表示加锁,=0表示解锁,size是指定文件fd的指定区域,用0表示从当前位置到文件尾。 常用程序段

fd = open( “a.out”,2 ); i = fork(); if( i==0 )

{ locking(fd,1,0); ???

locking(fd,0,0); }

(3) 编写一个程序,创建一个文件,文件名为lock.dat,同时父进程创建2个子进程,通过系统调用locking(),分别让2个子进程对文件加锁,再输出有关信息,然后解锁。 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

18

操作系统课程设计指导

题目10 利用进程同步与互斥实现吃水果问题

1、目的

调用linux系统调用实现多进程的创建、进程间同步与互斥解决具体问题。 2、内容 ⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

(2)利用进程同步与互斥编程实现吃水果问题:

桌上有一盘子,桌上有一个空盘,允许存放一只水果,爸爸可向盘内放苹果,妈妈可向盘内放桔子,儿子专等吃盘内的桔子,女儿专等吃盘中的苹果。 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

题目11 利用进程同步与互斥实现理发师问题

1、目的

调用linux系统调用实现多进程的创建、进程间同步与互斥解决具体问题。 2、内容 ⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:

19

操作系统课程设计指导

父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

(2)利用进程同步与互斥编程实现理发师问题: (1)一个理发店接待室有n张椅子,工作室有1张椅子; (2)没有顾客时,理发师睡觉;

(3)第一个顾客来到时,必须将理发师唤醒;

(4)顾客来时如果还有空座的话,他就坐在一个座位上等待; (5)如果顾客来时没有空座位了,他就离开,不理发了;

(6)当理发师处理完所有顾客,而又没有新顾客来时,他又开始睡觉。 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

题目12 利用进程同步与互斥实现面包房算法

1、目的

调用linux系统调用实现多进程的创建、进程间同步与互斥解决具体问题。 2、内容 ⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

(2)利用进程同步与互斥编程实现面包房算法:

20

操作系统课程设计指导

这是由Lamport于1974年提出的解决互斥问题的另一个软件算法。面包房不断制作面包,由若干个(n个)销售员销售;每个来到面包房的顾客按次序领到一个号码(号码每次加1),并等着叫号,当一个销售员空闲下来,就叫下一个最小的号码并为顾客服务。 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

题目13 利用进程同步与互斥实现银行叫号

1、目的

调用linux系统调用实现多进程的创建、进程间同步与互斥解决具体问题。 2、内容 ⑴进程的创建

编制一段程序,使用系统调用fork( )创建两个子进程,这样在此程序运行时,在系统中就有一个父进程和两个自进程在活动。让每一个进程在屏幕上显示一个字符:父进程显示字符a,自进程分别显示字符 b和字符c。试观察、记录并分析屏幕上进程调度的情况。

(2)利用进程同步与互斥编程实现银行排队叫号算法:

银行有n个窗口(n个职员),每个职员只能对一个顾客办理业务。顾客随机到来,并排号。每个顾客办理业务的时间也是随机不等的。每个职员办完前一个顾客后,从排的顾客中选取排号最小的人进行服务,过时作废。请完成上述过程的程序。 3、要求

⑴仔细观察设计中的各种现象及出现的问题。分析产生各种现象的原因。寻找解决问题的办法。

⑵报告应至少包括带注释的程序清单、输出的结果及对各种现象的分析意见。

21

操作系统课程设计指导

题目14 最佳适配内存分配算法模拟

1、目的

用程序实现可变分区内存管理过程,并按最佳适配算法进行分配。 2、内容 (1)基本思想

可变分区是指系统不预先划分固定分区,而是在装入程序的时候划分内存区域,使得为程序分配的分区大小恰好等于该程序的需求量,且分区的个数是可变的。显然可变分区有较大的灵活性,较之固定分区能获得好的内存利用率。 (2)数据结构

可变分区管理可以用两种数据结构实现,一种是已分配区表和空闲区表,也就是用预先定义好的系统空间来存放空间分配信息。

另一种也是最常用的就是空闲链表,由于对分区的操作是动态的,所以很难估计数据结构所占用的空间,而且空闲区表会占用宝贵的系统空间,所以提出了空闲链表的概念。 (3).设计要求

请实现一个完整的可变分区管理器,包括最佳适配内存分配算法进行分配,回

收,分区碎片整理等。

题目15 最差适配内存分配算法模拟

1、目的

用程序实现可变分区内存管理过程,并按最差适配算法进行分配。 2、内容

22

操作系统课程设计指导

(1)基本思想

可变分区是指系统不预先划分固定分区,而是在装入程序的时候划分内存区域,使得为程序分配的分区大小恰好等于该程序的需求量,且分区的个数是可变的。显然可变分区有较大的灵活性,较之固定分区能获得好的内存利用率。 (2)数据结构

可变分区管理可以用两种数据结构实现,一种是已分配区表和空闲区表,也就是用预先定义好的系统空间来存放空间分配信息。

另一种也是最常用的就是空闲链表,由于对分区的操作是动态的,所以很难估计数据结构所占用的空间,而且空闲区表会占用宝贵的系统空间,所以提出了空闲链表的概念。 (3).设计要求

请实现一个完整的可变分区管理器,包括最差适配内存分配算法进行分配,并

进行回收,分区碎片整理等。

题目16 分页式内存管理模拟

1、目的

用程序实现分页式内存管理过程。 2、内容

分页机制把线性地址空间和物理地址空间分别划分为大小相同的块。这样的块称之为页。通过在线性地址空间的页与物理地址空间的页之间建立 的映射,分页机制实现线性地址到物理地址的转换。线性地址空间的页与物理地址空间的页之间的映射可根据需要而确定,可根据需要而改变。线性地址空间的任何 一页,可以映射为物理地址空间中的任何一页。

采用分页管理机制实现线性地址到物理地址转换映射的主要目的是便于实现虚拟存储器。不象段的大小可变,页的大小是相等并固定的。根据程序的逻辑划分段,而根据实现虚拟存储器的方便划分页。

23

操作系统课程设计指导

请实现一个完整的分页式内存管理器,包括相应程序逻辑地址与内存物理地址页面的数据结构、页面地址变换、并进行回收等。并实现FIFO、LRU、NRU三种页面置换算法。

题目17 文件系统设计

通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。

内容:为Linux系统设计一个简单的二级文件系统,以实现下列功能: 1.可以实现下列几条命令 (1) login 用户登录 (2) dir 文件目录列表 (3) creat 创建文件 (4) delete 删除文件 (5) open 打开文件 (6) close 关闭文件 (7) read 读文件 (8) write 写文件 2.实验提示

(1)首先确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放在磁盘,这样便于查找和修改。

(2)用户创建的文件,可以编号存储于磁盘上。如file0、file1、file2??等,并以编号作为物理地址,在目录中进行登记。

题目17 磁盘调度算法的编程实现及评估

目的:

通过编程实现磁盘调度算法设计,加深理解磁盘调度算法的理解及提高编程能力。 内容:

编程实现下列三种磁盘调度算法,并求出每种算法的平均寻道时间,并比较性能优劣。

(1) 先来先服务

(2) 最短寻道时间优先 (3) 扫描调度算法

题目18 Windows资源管理器的模拟实现

目的:

通过编程实现windows资源管理器,加深对磁盘、文件夹、文件的理解及编程能力。

24

操作系统课程设计指导

内容:

指定有磁盘或文件夹,通过递归的方法搜索该位置下的所有资源并列出相应信息(属性、大小、日期等)。

题目19 Linux操作系统内核配置与编译

目的:

了解Linux操作系统内核的结构,并根据需要进行内核的配置与编译。 内容:

1. 了解linux操作系统的目录结构 2. 掌握linux操作系统内核的选项作用 3. 进行操作系统内核配置 4. 编译操作系统内核

5. 利用新的内核进行启动操作系统。

题目20 Linux操作系统模块编译与使用

目的:

了解Linux操作系统模块程序的结构,并根据需要进行简单内核模块的编译与使用。 内容:

1. 了解linux操作系统的模块程序的结构 2. 进行操作系统模块程序内核配置 3. 编译操作系统模块

4. 将新的模块插入到操作系统,并使用该模块,查看模块相关信息 5. 最终卸载该模块。

题目21 资源管理器搜索功能的实现

目的:

通过编程实现windows资源管理器的搜索功能,加深对磁盘、文件夹、文件的理解及编程能力。 内容:

指定有磁盘或文件夹,通过递归的方法搜索该位置下符合条件的资源并列出相应信息(属性、大小、日期等)。

题目22 进程管理器的模拟实现

目的:

编程模拟实现进程管理器,加深对进程、程序概念掌握,并提高编程能力。 内容:

利用Windows相关编程工具,实现进程管理器的相关功能: (1) 显示当前正在运行的进程及其占用的资源

25

操作系统课程设计指导

(2) 可以对某一进程进行停止;

题目23 linux内核进程调度算法源码分析

通过阅读linux源代码,分析研究linux的进程调度策略和算法。要求以源码为依据,回答下面的问题:

1) 进程调度队列是如何组织的

2) 三种调度类型(SCHED_FIFO, SCHED_RR, SCHED_OHTER)的实现过程 3) 优先级是如何定义和动态变化的 4) 时间片的赋值?它与优先级的关系?

重点分析内核数据结构task_struct(在include/linux/sched.h中)和调度函数schedule()(在kernel/sched.c中

题目24 linux虚拟的管道字符设备驱动程序实现

要求:

(1)管道:一个FIFO的信息流。

·允许多个进程向管道写入数据,允许多个进程从管道读出数据。 ·在读/写过程中,保证数据的写入顺序与读出顺序是一致的。 (2)以字符设备的形式实现管道 ·字符设备的驱动程序实现对管道的打开、关闭、读、写操作

·使用内存缓冲区(例如1024字节)存放管道中的数据 (3)字符设备的驱动程序接口 ·功能函数接口定义(linux/fs.h) struct file_operations vfifo_fops={

owner: THIS_MODULE, open: vfifo_open,

release: vfifo_release, read: vfifo_read, write: vfifo_write, };

·注册驱动程序 ret=register_chrdev(vfifo_major, \ (4)读、写进程之间的同步和互斥 ·使用核心信号量和等待队列函数(参见实验6)

·当缓冲区中没有数据时,读进程只在没有写进程时才被阻塞,否则,“读”系统调用返回(读出的数据长度=0)

·当缓冲区中满时,写进程被阻塞。

题目25 linux内核进程管理算法源码分析

通过阅读linux源代码,分析研究linux的进程状态及管理。要求以源码为依据,回答下面的问题:

1) 进程是如何组织的 2) 进程状态是如何变化的

3) 进程的创建与消亡是如何实现的。

题目26 linux设备管理源码分析

26

操作系统课程设计指导

通过阅读linux源代码,分析研究linux的设备文件的管理。要求以源码为依据,回答下面的问题:

1) 设备文件是如何描述的 2) 设备文件如何打开与关闭

3) 字符设备文件(以LED驱动程序为例)是如何与系统联系起来的。 4) 设备文件如何使用?

题目27 linux虚拟文件系统源码分析

通过阅读linux源代码,分析研究linux的设备文件的管理。要求以源码为依据,回答下面的问题:

1) vfs的文件模型 2) 虚拟文件系统相关数据结构含义; 3) 具体文件系统的安装与注册 4) 各种对象的操作接口 5)

题目28编辑器中快捷键的功能实现。

某些软件中需要利用某些组合按键或特定按键实现快捷功能,如Ctrl+Q可以退出,Ctrl+S实现保存。Linux中可以利用signal( )来捕捉某些特定信号,并触发相应处理函数。

请编写一个编辑器软件可以实现如下功能,并将其功能用快捷键方式实现。 (1) 基本编辑功能:增加、修改、删除、复制、粘贴、撤消; (2) 存盘功能:新建、保存、另存为、退出、不存盘退出; (3) 上述功能可定义相应快捷键,并实现快捷功能。

参考书目:

《Windows操作系统核心编程实验教程》,宋晓宇,中国铁道出版社。

27

本文来源:https://www.bwwdw.com/article/z786.html

Top