1、操作系统实验指导书烟台大学计算机学院操作系统课程组2008-9-201第一部分 操作系统上机指导Linux 操作系统环境:RedHat Enterprise Linux ES release 3 (Taroon Update 1) (2.4.21-9.EL)Red Flag Linux release 4.0 (HOT) (2.4)登录到系统常用命令练习:用 root 账号(超级用户)注册,口令为 computer(注意大小写) 。注册成功出现#号(超级用户系统提示符,普通用户的系统提示符为$) 。1 注销(退出)系统:logout 或 exit3练习使用命令 ls(注意 Linux 命令区分
2、大小写。 )使用 ls 查看当前目录内容;使用 ls 查看指定目录内容,如 /目录,/etc 目录使用 ls all 查看当前目录内容;使用 dir 查看当前目录内容4使用 cd 改变当前目录cd . 回到上层目录 ;cd / 回到根目录5pwd 显示当前路径 6建立目录 mkdirLast login:web Oct 20 15:35:17 tty1rootlocalhost root#注意密码没有回显登录成功Localhost Login:Password:登录界面*用户名:root*密码:computer在GRUB中选择Red Flag Linux (Console Mode) /*命令
3、行模式*/启动GrubRed Flag Linux在GRUB中选择RedHat Enterprise Linux ES(2.4.21-9.EL)启动GrubRedHat Linux2mkdir 目录名 ; mkdir /home/s2001/newdir 7删除目录:rmdir;8复制文件 cp: 如 cp 文件名 1 文件名 29移动文件或目录: mv 10删除文件 rm11. 显示文件内容:more (分页显示); 12. 显示文件:cat 文件名 建立文件:cat 文件名,ctrl+d 结束输入使用编辑器 vi 编辑文件1. 进入 linux 的文本模式之后,在命令行键入 vi file
4、name.c 然后回车。下面作一些简单的解释:首先vi 命令是打开 vi 编辑器。后面的 filename.c 是用户即将编辑的 c 文件名字,注意扩展名字是.c;当然,vi 编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用 vi 打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。2. 最基本的命令 I :当进入刚打开的文件时,不能写入信息,这时按一下键盘上的 I 键(insert) ,插入的意思,就可以进入编辑模式了。如下图所示: 3. a 与 i 是相同的用法4. 当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一
5、下键盘上的 Esc 键;2)键入冒号(:),紧跟在冒号后面是 wq(意思是保存并退出) 。如果不想保存退出,则在第二步键入冒号之后,键入 q!(不带 w,机尾部保存) 。如下图所示:5. 退出 vi 编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gcc filename.c -o 3outputfilename.out,其中 gcc 是 c 的编译器。参数:filename.c 是要编译的源文件的名称,outputfilename 表示输出文件名称,中括号表示括号内部的内容可输入也可以不输入(中括号本身不再命令行中出现) 。如果不输入 outputfilename.out,默
6、认的输出文件是 a.out 。6. 最后一步是运行程序,方法如下:./outputfilename.out添加新用户、修改文件属性1 添加新用户(在 root 下,按默认值回答)adduser 用户名;如 adduser s2001 ; 以新用户登录到系统2修改用户口令 passwd 用户名3控制文件属性使用 ls l 查看文件属性改变用户的所有权:chown 用户名 文件名改变文件权限:chmod g+w 文件名;chmod o-r 文件名或使用数字方式修改:如 chmod 644 文件名;chmod 755 文件名u (user 用户 ),g ( group 组) ,o (other 其他
7、); w 写访问权限 ,r 读访问权限, x 执行权限4查看相关命令的帮助:man 命令名5显示当前系统中已注册的用户信息:who6显示当前注册的用户信息:whoami Tip:Unix 文件目录的属性显示格式:如:-rw-rw-rw- 1 steve users 138 Apr 5 19:34 readmedrwxrwxrwx 3 steve users 80 Apr 5 19:43 dir1 三种权限: owner group others文件或目录名最后修改的日期和时间文件的拥有者用户所在的组与文件链接的数文件的访问权限4第二部分 操作系统实验实验 1 Linux基本环境1、实验目的(1
8、)熟悉Linux下的基本操作,学会使用各种Shell命令去操作Linux,对Linux有一个感性认识。(2)学会使用vi编辑器编辑简单的C语言程序,并能对其编译和调试。2、实验预备内容(1)参阅相关Linux操作系统的安装手册,熟悉Linux的基本安装和配置;(2)参阅相关Linux的命令参考手册,熟悉Linux下的操作命令。3、实验内容(1) 以root用户身份登陆,并使用“ls”,“cat”“cd”等命令来实现基本的文件操作并观察Linux文件系统的特点;(2) 使用vi编辑器编写一C程序,并用gcc命令进行编译和链接,并用a.out来进行输出结果。4、思考(1)Linux系统在用户登陆和
9、操作界面以及文件系统上有哪些特点?实验 2 进程管理1、实验目的(1)加深对进程概念的理解,明确进程和程序的区别。(2)进一步认识并发执行的实质。(3)分析进程竞争资源现象,学习解决进程互斥的方法。(4)了解Linux系统中进程通信的基本原理。2、实验预备内容(1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。(2)阅读Linux的fork.c源文件,分析进程的创建过程。3、实验内容(1)进程的创建编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字
10、符“b”和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。(2)进程的控制修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现的现象,并分析原因。如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。(3)编写一段程序,使其现实进程的软中断通信。要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child Processll
11、is Killed by Parent!Child Processl2 is Killed by Parent!父进程等待两个子进程终止后,输出如下的信息后终止Parent Process is Killed!5在上面的程序中增加语句signal (SIGNAL, SIG-IGN) 和signal (SIGQUIT, SIG-IGN), 观察执行结果,并分析原因。(4)进程的管道通信编制一段程序,实现进程的管理通信。使用系统调用pipe()建立一条管道线;两个子进程P1 和P2 分别向管道中写一句话:Child 1 is sending a message!Child 2 is sending
12、 a message!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。要求父进程先接收子进程P1 发来的消息,然后再接收子进程P2 发来的消息。4、思考(1)系统是怎样创建进程的?(2)可执行文件加载时进行了哪些处理?(3)当首次调用新创建进程时,其入口在哪里?(4)进程通信有什么特点?实验 3 进程间通信1、实验目的Linux系统的进程通信机构 (IPC) 允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的消息通讯机制及信息量机制。2、实验预备内容阅读Linux系统的msg.c、sem.c和shm.c等源码文件,熟悉Linux的三种机制。3、实验内容(1)
13、消息的创建,发送和接收。使用系统调用msgget (), msgsnd (), msgrev (), 及msgctl () 编制一长度为 1k的消息的发送和接收程序。观察上面的程序,说明控制消息队列系统调用msgctl () 在此起什么作用?(2)共享存储区的创建、附接和段接。使用系统调用shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序。(3) 比较上述(1),(2)两种消息通信机制中数据传输的时间。实验 4 存储管理1、实验目的存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中
14、页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌握请求页式存储管理的页面置换算法。2、实验内容(1)通过随机数产生一个指令序列,共 320条指令。指令的地址按下述原则生成:50%的指令是顺序执行的;50%的指令是均匀分布在前地址部分;50%的指令是均匀分布在后地址部分。具体的实施方法是:在 0,319 的指令之间随即选取一起点m;顺序执行一条指令,即执行地址为m+1 的指令;在前地址0,m+1中随机选取一条指令并执行,该指令的地址为m;6顺序执行一条指令,其地址为 m+ 1;在后地址m+ 2,319中随机选取一条指令并执行;重复上述步骤-,直到执行 320次指令。(2)将指令序列变换为页地
15、址流设:页面大小为 1k;用户内存容量为 4页到 32页;用户虚存容量为 32k。在用户虚存中,按每k存放 10条指令排在虚存地址,即 320条指令在虚存中的存放方式为:第 0条-第 9条指令为第 0页(对应虚存地址为0,9);第 10条-第 19条指令为第一页(对应虚存地址为10,19); 第 310条第 319条指令为第 31页(对应虚地址为310,319)。按以上方式,用户指令可组成 32页。(3)计算并输出下述各种算法在不同内存容量下的命中率。先进先出的算法(FIFO);最近最少使用算法(LRR);最佳淘汰算法(OPT)先淘汰最不常用的页地址;最少访问页面算法(LFR);最近最不经常使
16、用算法(NUR)。其中和为选择内容。命中率=1-页面失效次数/页地址流长度在本实验中,页地址流长度为 320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。3、随机数产生办法,Linux或UNIX系统提供函数strand()和rand(),分别进行初始化和产生随机数。例如:srand ();语句可初始化一个随机数;a0=10*rand()/65535*319+1;a1=10*rand()/65535*a0;语句可用来产生a0与a1中的随机数。实验 5 文件系统设计1、实验目的通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。2、实验内容为linux系统
17、设计一个简单的二级文件系统。要求做到以下几点:(1)可以实现下列几条命令(至少 4条);login 用户登陆dir 列文件目录create 创建文件delete 删除文件open 打开文件7close 关闭文件read 读文件write 写文件(2)列目录时要列出文件名、物理地址、保护码和文件长度;(3)源文件可以进行读写保护。3、实验提示(1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。(2)用户创建的文件,可以编号存储于磁盘上。如file0,file1,file2.并以编号作为物理地址,在目录中进行登记。实验 6 处
18、理器调度一、实验内容选择一个调度算法,实现处理器调度。二、实验目的在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。三、实验题目本实验有两个题,学生可选择其中的一题做实验。第一题:设计一个按优先数调度算法实现处理器调度的程序。提示:(1) 假定系统有五个进程,每一个进程用一个进程控制块 PCB 来代表,进程控制块的格式为:进程名指针要求运行时间优先数状态其中,进程名作为进程的标识,假设五个进程的进程名分别为 P1,P 2,P 3,P
19、 4,P 5。指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0” 。要求运行时间假设进程需要运行的单位时间数。优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态可假设有两种状态, “就绪”状态和“结束”状态。五个进程的初始状态都为“就绪” ,用“R”表示,当一个进程运行结束后,它的状态为“结束 ”,用“E”表示。(2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间” 。(3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针指出队列的连接情况。
20、例:8队首标志K2 K1 P1 K2 P2 K3 P3 K4 P4 K5 P50 K4 K5 K3 K12 3 1 2 41 5 3 4 2R R R R RPCB1 PCB2 PCB3 PCB4 PCB5(4) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先数就减“1” 。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:优先数-1要求运行时间-1来模拟进程的一次运行。提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。(5) 进程运行一次后,若
21、要求运行时间 0,则再将它加入队列(按优先数大小插入,且置队首标志) ;若要求运行时间=0 ,则把它的状态修改成“结束” (E) ,且退出队列。(6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结束”状态。(7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。(8) 为五个进程任意确定一组“优先数”和“要求运行时间” ,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。第二题:设计一个按时间片轮转法实现处理器调度的程序。提示:(1) 假定系统有五个进程,每一个
22、进程用一个进程控制块 PCB 来代表。进程控制块的格式为:进程名指针要求运行时间已运行时间状态其中,进程名作为进程的标识,假设五个进程的进程名分别为 Q1,Q 2,Q 3,Q 4,Q 5。指针进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。要求运行时间假设进程需要运行的单位时间数。已运行时间假设进程已经运行的单位时间数,初始值为“0” 。状态有两种状态, “就绪”和“结束” ,初始状态都为“就绪” ,用“R”表示。当一个进程运行结束后,它的状态为“结束” ,用“E”表示。(2) 每次运行所设计的处理器调度程序前,为每个进程任
23、意确定它的“要求运行时间” 。(3) 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。例如,当前轮到 P2执行,则有:标志单元K2 9K1 Q1 K2 Q2 K3 Q3 K4 Q4 K5 Q5K2 K3 K4 K5 K12 3 1 2 41 0 0 0 0R R R R RPCB1 PCB2 PCB3 PCB4 PCB5(4) 处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:已运行时间+1来模拟进程的一次运行,表示进程已经运行过一个单位的时间。请同学注意:在实际的系统中,当一个
24、进程被选中运行时,必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片。在这时省去了这些工作,仅用“已运行时间+1”来表示进程已经运行满一个时间片。(5) 进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间 已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束” (E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。
25、(6) 若“就绪”状态的进程队列不为空,则重复上面的(4)和(5)的步骤,直到所有的进程都成为“结束”状态。(7) 在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及运行一次后进程队列的变化。(8) 为五个进程任意确定一组“要求运行时间” ,启动所设计的处理器调度程序,显示或打印逐次被选中的进程名以及进程控制块的动态变化过程。四、实验报告(1) 实验题目。(2) 程序中使用的数据结构及符号说明。(3) 流程图。(4) 打印一份源程序并附上注释。(5) 打印程序运行时的初值和运行结果。要求如下: 进程控制块的初始状态。 选中运行的进程名以及选中进程运行后的各进程控制块状态。对于要求每选中一个进程运行后都要打印。实验 7 主存储器空间的分配和回收一、实验内容主存储器空间的分配和回收。二、实验目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合