文档库 最新最全的文档下载
当前位置:文档库 › 操作系统原理实验报告

操作系统原理实验报告

操作系统原理实验报告
操作系统原理实验报告

操作系统原理实验报告

一、课程设计的题目:

根据“操作系统原理”课程的课堂教学内容,结合自己的知识积累情况,题目可从下述拟题中选择,亦可自定。

二、实验设计的内容:

在Linux或Windows操作系统下,用C语言进行操作系统相关的设计开发,内容可关于“并发程序设计”、“处理机管理”、“用户接口”、“存储管理”、“文件系统管理”、“设备管理”等等。

三、参考资料:

1、清华大学出版,张尧学《计算机操作系统教程》配套的《习题解答与实验指导书》中范例;

2、清华大学出版,任爱华《操作系统实用教程》中的实例设计;

3、《Linux下C语言编程入门教程》、《Linux软件工程师(C语言)实用教程》等;

4、网上与操作系统设计与开发相关的文献资料。

四、重要操作环节

1、步骤:

选题(2~3人一小组)--→提交小组名单--→分析、编写程序--→上机调试--→分析结果--→评价结果--→写出设计报告

2、设计报告的主要内容:

①、设计说明:设计主要完成的任务、解决的主要问题;

②、工作原理:找出教材中的相关工作原理并简要说明;

③、详细设计:包括调用的主要系统函数说明、程序流程图、程序代码、关键语句注释;

④、运行结果:要求写出运行结果或抓图给出;

⑤、分析结果:要求用操作系统原理有关理论解释说明;

⑥、调试步骤以及调试过程中出现的问题及解决方法;

⑦、参考文献:5篇以上;

⑧、以学年论文格式提交文档资料,要有统一的封面和实验心得体会。

五、成绩评定

1、各小组轮流演示小组作品,演示完毕,由其他小组的同学提2个以上问题,

回答完毕打分;

3、打分遵循原则如下:

注意:

①以下必做实验每小组都要做

②以下选做实验,1个实验题目至多允许2个小组选,各小组也可以自拟题目

必做实验(四个,都要做)

实验一

1. 实验名称:Linux登录、注销、关机和基本操作一。

2. 实验要求:掌握Linux系统的登录、注销、关机方法;掌握列出文件清单命令的使用方法:ls;掌握目录的切换命令的使用:cd;掌握目录的建立、删除命令的使用:mkdir、rmdir;掌握文件的拷贝、删除、移动命令的使用:cp、rm、mv 。

3. 实验仪器:安装有Linux操作系统的微机。

4. 实验内容:

(1)登录Linux系统,注销、关机;

(2)按不同方式列出当前目录下的文件清单;

(3)目录的切换;

(4)目录的建立、删除;

(5)文件拷贝、删除、移动。

5. 实验重点:掌握Linux的常用命令。

实验二

1. 实验名称:Linux基本操作二

2. 实验要求:掌握文件内容查询命令的使用:grep;掌握文件查找命令的使用:find;掌握文件的建立和内容输入命令的使用:cat;掌握查看用户和设置口令命令的使用:who、passwd;掌握显示进程命令和终止进程命令的使用:ps、kill 。

3. 实验仪器:安装有Linux操作系统的微机。

4. 实验内容:

(1)按条件查找文件的操作;

(2)建立和查看文件内容;

(3)查看用户和设置密码;

(4)进程的显示和终止。

5. 实验重点:掌握Linux的常用命令。

实验三

1. 实验名称:文件权限及用户管理

2. 实验要求:掌握修改文件权限命令的使用:chmod;掌握改变文件属主命令的使用:chown;掌握用户的创建和删除方法:adduser、userdel;掌握组的创建和删除方法:groupadd、groupdel 。

3. 实验仪器:安装有Linux操作系统的微机

4. 实验内容:

(1)文件权限的修改;

(2)改变文件属主;

(3)创建用户和用户组。

5. 实验重点:掌握Linux的常用命令。

实验四

1. 实验名称:Linux系统用户接口和编程界面实验

2. 实验要求:

1)熟悉使用Linux字符界面、窗口系统的常用命令。

2)熟悉运用Linux常用的编程工具。

3)熟悉运用Linux的在线求助系统。

4)掌握在Linux操作系统环境上编辑、编译、调试、运行一个C语言程序的全过程。

3. 实验仪器:安装有Linux操作系统的微机。

4. 实验内容

1) 熟悉开机后登录Linux系统和退出系统的过程;

2) 熟悉Linux字符界面——虚拟终端窗口和shell,以及图形界面——X-Window(如gnome或KDE):练习并掌握常用的Linux操作命令,如ls、cat、ps、df、find、grep、cd、more、cp、rm、kill、at、vi、cc、man、help、control+d/c、等;熟悉常用shell的提示符;熟悉字符窗口与图形界面之间的切换。

3) 学习使用Linux的在线求助系统,如man和help命令等。

4) 掌握一种Linux的编辑器,特别是字符界面的vi工具的使用。

5) 用vi编辑一个打印“Hello,I am a C program”字串的C语言程序,然后编译并运行它,记下整个过程。熟悉gcc、gdb等编译器、调试器的使用。

选做实验(2~3人一小组,每小组选一个选题(也可自拟题目),以下每一选题最多只能有两个小组选)

实验一进程管理一

1. 实验要求:

(1)了解系统调用fork()、exec()、exit()等功能和实现过程;

(2)编写一段程序,使用系统调用fork()创建两个子进程,由父进程重复显示字符串parent,子进程重复显示字符串child ;

(3)编写一段程序,使用系统调用fork()创建一个子进程,子进程通过系统调用exec()更换自己的执行代码,显示新的代码new program;然后调用exit()结束。

(4)修改已编写的程序,将每一个进程输出的字符改为一句话,观察程序执行时屏幕上出现的现象,并分析原因。如果在程序中使用系统调用lockf( )来给每一个进程加锁,可以实现进程的互斥,观察并分析出现的现象。

2. 实验内容

通过编程实现进程的创建、撤销和运行,加深对进程概念和并发执行的理解,明确进程与程序之间的区别。

3. 实验目的

熟练掌握进程并发执行的特点。

实验二进程管理二

1. 实验目的:

(1)加深对进程概念的理解,明确进程和程序的区别

(2)进一步认识并发的本质

(3)分析进程争用资源的现象,学习解决进程互斥的方法

(4)了解Linux系统中进程通信的基本原理

2. 实验内容:编写一段程序,实现进程的软中断通信

3. 实验要求:使用系统调用fork( )创建两个子进程,再调用系统调用signal( ) 让父进程捕捉键盘上来的中断信号(即按住DEL键);当捕捉到中断信号后,父进程用系统调用Kill( )向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

Child Process1 is killed by parent1

Child Process2 is killed by parent1

Parent Process is killed

在上面的程序中增加语句signal(SIGINT, SIG-IGN)和

signal(SIGQUIT,SIG-IGN),观察执行结果并分析原因。

实验三观察内存分配结果

1. 实验目的:学习如何利用Linux的malloc函数动态申请一段内存空间。

2. 实验内容

(1)了解malloc函数的功能和Linux虚拟内存管理的原理。

(2)编写一C语言程序,用malloc函数申请一段存储空间,并在终端上显示起始地址。

(3)运行该程序,观察、记录其运行结果,并分析说明结果的地址是否为物理地址。

实验四进程间的通信

1. 实验目的

了解和熟悉LINUX支持的消息通信机制,共享存储区以及信号量机制

2. 实验预备内容

阅读LINUX系统的mdg.c,sem.c和shm.c等源码文件,熟悉LINUX 的三种通信机制。

3. 实验主要内容(消息的创建,发送和接收)

(1)使用系统调用msgget( ),msgsnd( ),msgrev( ),以及msgctl( )编制一长度为1k的消息发送和接收程序;

(2)观察上面程序,说明控制消息队列的系统调用msgctl( )在此起什么作用。

实验五进程调度实验

一、实验目的和要求

进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。

二、实验主要内容

1、设计进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。

PCB结构通常包括以下信息:进程名,进程优先数(或轮转时间片),进程所占用的CPU时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可以作适当的增删。

2、建立进程就绪队列。对两种不同算法编制入链子程序。

3、编制两种进程调度算法:1)优先度调度;2)循环轮转调度。

4、本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。

5、为了便于处理,程序中的运行时间以时间片为单位计算,各进程的优先数或轮转时间数以及进程需要运行的时间片数的初值与算法均由用户给定。要求:进程在就绪队列呆一个时间片,优先数增加1,进程每运行一个时间片,优先数减3。

实验六请求调页存储管理方法的模拟实验

一、实验目标和要求

存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。

本实验要求用C/C++语言编写和调试一个简单的存储管理程序。

二、实验内容

(1)假设每个页面中可存放10条指令,分配给一作业的内存块数为4。

(2)用C语言模拟一作业的执行过程。该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已在内存,则显示其物理地址,并转入下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块中均已装入该作业,则需进行页面置换。最后显示其物理地址,并转下一条指令。在所有320条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。

(3)先进先出算法(FIFO)、最近最少使用算法(LRU)。

(4)作业中指令的访问次序按下述原则生成:

●50%的指令是顺序执行的

●25%的指令是均匀分布在前地址部分

●25%的指令是均匀分布在后地址部分

(4)具体实施方法

①在[0,319]之间随机选取一条起始执行指令,其序号为m

②顺序执行下一条指令,即序号为m+1的指令

③通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1

④顺序执行下一条指令,即序号为m1+1的指令

⑤通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为m2

⑥顺序执行下一条指令,即序号为m2+1的指令

重复跳转到前地址部分、顺序执行、跳转到后地址部分、顺序执行的过程,直到执行320条指令

实验七进程同步实验(生产者与消费者问题算法实现)一、实验目标和要求

进程的同步是操作系统处理机管理的重要内容,本实验要求学生理解生产者与消费者问题模型,掌握解决该问题的算法思想,学会使用同步机制。

二、实验内容

一组生产者向一组消费者提供消息,它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。假定这些生产者和消费者互相等效,只要缓冲池未满,生产者可将消息送入缓冲池;只要缓冲池未空,消费者可从缓冲池取走一个消息。

放消息取消息

n个缓冲区

(Buffer)

根据进程同步机制,编写一个解决上述问题的可视化程序,可显示缓冲池状态、放数据、取数据等过程。

三、实验方法或步骤

1.给出所采用的同步方法;

2.写出数据定义和详细说明;

有3个生产者进程,分别为P1、P2和P3;

有4个消费者进程,分别是C1、C2、C3和C4;

缓冲区单元个数N=15;

不同的生产进程可生产不同的产品(比如字母、数字、符号);不同的消费进程可有不同的消费方式(比如“显示”、“打印”、“拼接成字符串”、“改变大小写”等)。自己可任意定义。

3.调试完成源程序;

4.屏幕观察运行结果。

实验八 Linux进程的异步并发执行一.实验目的

1.了解进程与程序的区别,加深对进程概念的理解;

2.掌握进程并发执行的原理,理解进程并发执行的特点,区分进

程并发执行与串行执行;3.了解fork( )系统调用的返回值,掌握用fork()创建进程的方法;

4.熟悉wait、exit等系统调用。

二.实验内容

1.编写一C语言程序,实现在程序运行时通过系统调用fork( )创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“I am father”,儿子进程执行时屏幕显示“I am son”,女儿进程执行时屏幕显示“I am daughter”。

2.多次连续反复运行这个程序,观察屏幕显示结果的顺序,直至出现不一样的情况为止。记下这种情况,试简单分析其原因。

3.修改程序,利用nice ( ) 改变各进程的优先级,观察不同情况下进程调度效果的区别。

4.修改程序,在父、子进程中分别使用wait、exit等系统调用“实现”其同步推进,多次反复运行改进后的程序,观察并记录运行结果。

实验九读者-写者问题实验

一、实验目标和要求

读者-写者问题是经典的进程同步问题之一。本实验要求学生掌握进程同步的基本概念,体会同步信号量的作用,加深对信号量机制实现进程同步与互斥的理解。

二、实验内容

在Windows操作环境下,创建一个包含n个线程的控制台进程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制实现读者-写者的进程同步问题。问题描述如课堂讨论内容。

运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确信所有处理都遵守相应的读写操作限制。

三、实验方法或步骤

读者-写者问题的读写操作限制:

1)写-写互斥;

2)读·写互斥;

3)读·读允许。

实验十在Linux中使用优盘

一.实验目的

1.了解mount和umount命令的功能;

2.了解Linux设备文件的命名;

3.用上述所了解的内容解决在Linux中使用优盘的问题。

二.实验内容

1.用mount命令把优盘的设备文件安装到/mnt目录(可能需要root用户口令,请勿乱用)。

2.进入/mnt目录,使用优盘(比如,往里拷贝一个文件)。

3.退出/mnt目录,用umount命令把优盘从系统中卸载掉。

4.按ctrl+d组合键,退出超级用户模式。

5.总结在Linux中使用优盘的过程。

实验十一Linux进程间的通信

一、实验目的

学习如何利用管道机制、消息缓冲队列、共享存储区机制进行进程间的通信,并加深对上述通信机制的理解。

二、实验内容

1.了解系统调用pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程。

2.编写一C语言程序,使其用管道来实现父子进程间通信。子进程向父进程发送字符串“is sending a message to parent!”;父进程则从管道中读出子进程发来的消息,并将其显示到屏幕上,然后终止。

3.运行该程序,观察、记录并简单分析其运行结果。

实验十二动态内存分配

一、实验目标与要求

学习动态分区分配方式中的数据结构和分配算法——首次适应算法。对各种存储算法进行分析比较,评测其性能优劣,加深理解。

二、实验内容

(1)掌握动态内存分配过程alloc( )和回收过程free( );

(2)在给定初始状态下,采用首次适应算法和最佳适应算法(应有两种选择)进行内存块的分配和回收,要求每次分配和回收后显示空闲内存分区链的情况。

实验十三进程调度模拟程序设计

一.实验目的

加深对进程概念和进程调度过程/算法的理解。

二、实验内容

1.给出进程调度的算法描述(如基于动态优先级和时间片轮转调度算法的描述)。

2.用C语言设计一个对n个并发进程进行调度的程序,每个进程由一个进程控制块(PCB)结构表示,该进程控制块应包括下述信息:进程标识ID、进程优先数PRIORITY(并规定优先数与优先权成正比)、时间片数CHIP、进程已经占用CPU的时间CPUTIME,进程还需要运行的时间ALLTIME(当进程运行完毕时,其值为0)、进程的状态STATE(为简化起见。设每个进程处于运行E(excecuting)、就绪R(ready)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态R。),以及进程队列指针NEXT(用来将PCB排成队列)等,可按照调度算法的不同而增删。

3.调度程序应当包含2种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。

4.程序应能显示或打印各种进程状态和参数变化情况,便于观察。即要显示每个时间片内各进程的情况,并且指出运行进程及就绪和阻塞队列中的内容。

实验十四文件系统模拟设计

一、实验目的

加深对文件系统的内部功能及其实现的理解。

二、实验内容

用C语言设计一个简单的二级文件系统。要求做到以下几点:1. 可以实现下列几条命令(至少4条):

login 用户登录

dir 列文件目录

creat 创建文件

delete 删除文件

open 打开文件

close 关闭文件

read 读文件

write 写文件

2 . 列目录时要列出文件名、物理地址、保护码和文件长度。

3. 源文件可以进行读写保护。

20

相关文档
相关文档 最新文档