




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统实验指导书 操操作作系系统统课课程程组组 2 20 00 08 8- -9 9- -2 20 0 1 第第一一部部分分操操作作系系统统上上机机指指导导 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 或 exit 3练习使用命令ls(注意 Linux 命令区分大小写。 ) 使用ls 查看当前目录内容;使用ls 查看指定目录内容,如/目录,/etc目录 使用lsall 查看当前目录内容;使用 dir 查看当前目录内容 4使用cd改变当前目录 cd . . .回到上层目录;cd/回到根目录 5pwd显示当前路径 6建立目录 mkdir Lastlogin:webOct20 15:35:17 tty1 注 意 密 码 没 有 回 显 登 录 成 功 Localhost Login: Password: 登 录 界 面 * 用 户 名 : root * 密 码 : computer 在GRUB中选择 Red Flag Linux (Console Mode) /*命令行模式* / 启 动 Grub R Re ed d F Fl la ag g 在GRUB中选择 RedHat Enterprise Linux ES(2.4.21-9.EL) 启 动 Grub R Re ed dH Ha at t L Li in nu ux x 2 mkdir目录名 ;mkdir/home/s2001/newdir 7删除目录:rmdir; 8复制文件cp: 如cp文件名 1文件名2 9移动文件或目录: mv 10删除文件rm 11. 显示文件内容:more(分页显示); 12. 显示文件:cat 文件名建立文件:cat文件名,ctrl+d结束输入 使使用用编编辑辑器器v vi i 编编辑辑文文件件 1.进入linux 的文本模式之后,在命令行键入vi filename.c 然后回车。下面作一些简单的解释:首 先vi 命令是打开vi编辑器。 后面的filename.c是用户即将编辑的c文件名字,注意扩展名字是.c; 当然,vi编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也 可以直接用 vi 打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。 2.最基本的命令I :当进入刚打开的文件时,不能写入信息,这时按一下键盘上的 I 键(insert) ,插 入的意思,就可以进入编辑模式了。如下图所示: 3.a与i 是相同的用法 4.当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上的 Esc 键;2) 键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出) 。如果不想保存退出,则在第二步键入 冒号之后,键入 q! (不带w,机尾部保存) 。如下图所示: 5.退出 vi 编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gcc filename.c 3 -o outputfilename.out, 其中gcc是c的编译器。 参数:filename.c 是要编译的源文件的名称, outputfilename表示输出文件名称,中括号表示括号内部的内容可输入也可以不输入(中括号本 身不再命令行中出现) 。如果不输入outputfilename.out,默认的输出文件是a.out 。 6.最后一步是运行程序,方法如下:./outputfilename.out 添添加加新新用用户户、修修改改文文件件属属性性 1添加新用户(在 root 下,按默认值回答) adduser用户名;如 addusers2001; 以新用户登录到系统 2修改用户口令passwd 用户名 3控制文件属性 使用lsl 查看文件属性 改变用户的所有权:chown用户名 文件名 改变文件权限:chmodg+w文件名;chmodo-r 文件名 或使用数字方式修改:如 chmod644 文件名;chmod755文件名 u(user用户),g( group组),o(other其他); w 写访问权限,r 读访问权限, x 执行权限 4查看相关命令的帮助:man 命令名 5显示当前系统中已注册的用户信息:who 6显示当前注册的用户信息:whoami Tip: Unix 文件目录的属性显示格式: 如:-rw-rw-rw-1steveusers138Apr519:34readme drwxrwxrwx3steveusers80Apr519:43dir1 三种权限:owner group others 文件或目录名 最后修改的日期和时间 文件的拥有者 用户所在的组 与文件链接的数 文件的访问权限 4 第第二二部部分分操操作作系系统统实实验验 实实验验 1 1L Li in nu ux x基基本本环环境境 1、实验目的 (1)熟悉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系统在用户登陆和操作界面以及文件系统上有哪些特点? 实实验验 2 2进进程程管管理理 1、实验目的 (1)加深对进程概念的理解,明确进程和程序的区别。 (2)进一步认识并发执行的实质。 (3)分析进程竞争资源现象,学习解决进程互斥的方法。 (4)了解Linux系统中进程通信的基本原理。 2、实验预备内容 (1)阅读Linux的sched.h源文件,加深对进程管理概念的理解。 (2)阅读Linux的fork.c源文件,分析进程的创建过程。 3、实验内容 (1)进程的创建 编写一段源程序,使系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两 个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b” 和字符“c”。试观察纪录屏幕上的显示结果,并分析原因。 (2)进程的控制 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,在观察程序执行时屏幕出现 的现象,并分析原因。 如果在程序中使用调用lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的 现象。 (3)编写一段程序,使其现实进程的软中断通信。 要求:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信 号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉 到信号后分别输出下列信息后终止: Child Processll 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 a message! 而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。 4、思考 (1)系统是怎样创建进程的? (2)可执行文件加载时进行了哪些处理? (3)当首次调用新创建进程时,其入口在哪里? (4)进程通信有什么特点? 实实验验 3 3 进进程程间间通通信信 1、实验目的 Linux系统的进程通信机构 (IPC) 允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉 Linux支持的消息通讯机制及信息量机制。 2、实验预备内容 阅读Linux系统的msg.c、sem.c和shm.c等源码文件,熟悉Linux的三种机制。 3、实验内容 (1)消息的创建,发送和接收。 使用系统调用msgget (), msgsnd (), msgrev (), 及msgctl () 编制一长度为 1k的消息的发送和 接收程序。 观察上面的程序,说明控制消息队列系统调用msgctl () 在此起什么作用? (2)共享存储区的创建、附接和段接。 使用系统调用shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序。 (3)比较上述(1),(2)两种消息通信机制中数据传输的时间。 实实验验 4 4 存存储储管管理理 1、实验目的 存储管理的主要功能之一是合理地分配空间。请求页式管理是一种常用的虚拟存储管理技术。 本实验的目的是通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的技术特点,掌 握请求页式存储管理的页面置换算法。 2、实验内容 (1)通过随机数产生一个指令序列,共320 条指令。指令的地址按下述原则生成: 50%的指令是顺序执行的; 50%的指令是均匀分布在前地址部分; 50%的指令是均匀分布在后地址部分。 具体的实施方法是: 在 0,319 的指令之间随即选取一起点m; 顺序执行一条指令,即执行地址为m+1 的指令; 在前地址0,m+1中随机选取一条指令并执行,该指令的地址为m; 6 顺序执行一条指令,其地址为 m+ 1; 在后地址m+ 2,319中随机选取一条指令并执行; 重复上述步骤-,直到执行320 次指令。 (2)将指令序列变换为页地址流 设:页面大小为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); 最近最不经常使用算法(NUR)。 其中和为选择内容。 命中率=1-页面失效次数/页地址流长度 在本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存 的次数。 3、随机数产生办法, Linux或UNIX系统提供函数strand()和rand(),分别进行初始化和产生随机数。例如: srand (); 语句可初始化一个随机数; a0=10*rand()/65535*319+1; a1=10*rand()/65535*a0; 语句可用来产生a0与a1中的随机数。 实实验验 5 5 文文件件系系统统设设计计 1、实验目的 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。 2、实验内容 为linux系统设计一个简单的二级文件系统。要求做到以下几点: (1)可以实现下列几条命令(至少 4条); login用户登陆 dir列文件目录 create创建文件 delete删除文件 open打开文件 close关闭文件 7 read读文件 write写文件 (2)列目录时要列出文件名、物理地址、保护码和文件长度; (3)源文件可以进行读写保护。 3、实验提示 (1)首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形 式存放于磁盘,这样便于查找和修改。 (2)用户创建的文件,可以编号存储于磁盘上。如file0,file1,file2.并以编号作为物理地址,在 目录中进行登记。 实实验验 6 6处处理理器器调调度度 一一、实实验验内内容容 选择一个调度算法,实现处理器调度。 二二、实实验验目目的的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数 时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度, 帮助学生加深了解处理器调度的工作。 三三、实实验验题题目目 本实验有两个题,学生可选择其中的一题做实验。 第第一一题题:设设计计一一个个按按优优先先数数调调度度算算法法实实现现处处理理器器调调度度的的程程序序。 提示: (1) 假定系统有五个进程,每一个进程用一个进程控制块 PCB来代表,进程控制块的格式为: 进程名 指针 要求运行时间 优先数 状态 其中,进程名作为进程的标识,假设五个进程的进程名分别为 P1,P2,P3,P4,P5。 指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后 一个进程中的指针为“0” 。 要求运行时间假设进程需要运行的单位时间数。 优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态可假设有两种状态, “就绪” 状态和 “结束” 状态。五个进程的初始状态都为 “就绪” ,用 “R” 表示,当一个进程运行结束后,它的状态为“结束” ,用“E”表示。 (2) 在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行 时间” 。 (3) 为了调度方便,把五个进程按给定的优先数从大到小连成队列。用一单元指出队首进程,用指针 指出队列的连接情况。例: 8 队首标志 K2 K1P1K2P2K3P3K4P4K5P5 0K4K5K3K1 23124 15342 RRRRR PCB1PCB2PCB3PCB4PCB5 (4) 处理器调度总是选队首进程运行。 采用动态改变优先数的办法, 进程每运行一次优先数就减 “1” 。 由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行: 优先数-1 要求运行时间-1 来模拟进程的一次运行。 提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,让它占有处理器 运行,直到出现等待事件或运行结束。在这里省去了这些工作。 (5) 进程运行一次后,若要求运行时间 0,则再将它加入队列(按优先数大小插入,且置队首标志) ; 若要求运行时间=0,则把它的状态修改成“结束” (E) ,且退出队列。 (6) 若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进程都成为“结 束”状态。 (7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后 进程队列的变化。 (8) 为五个进程任意确定一组“优先数”和“要求运行时间” ,启动所设计的处理器调度程序,显示或 打印逐次被选中进程的进程名以及进程控制块的动态变化过程。 第第二二题题:设设计计一一个个按按时时间间片片轮轮转转法法实实现现处处理理器器调调度度的的程程序序。 提示: (1) 假定系统有五个进程,每一个进程用一个进程控制块 PCB来代表。进程控制块的格式为: 进程名 指针 要求运行时间 已运行时间 状态 其中,进程名作为进程的标识,假设五个进程的进程名分别为Q1,Q2,Q3,Q4,Q5。 指针进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的 指针指出第一个进程的进程控制块首地址。 要求运行时间假设进程需要运行的单位时间数。 已运行时间假设进程已经运行的单位时间数,初始值为“0” 。 状态有两种状态, “就绪”和“结束” ,初始状态都为“就绪” ,用“R”表示。当一个进程运行结 束后,它的状态为“结束” ,用“E”表示。 (2) 每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间” 。 (3) 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进 程。例如,当前轮到 P2执行,则有: 标志单元 K2 9 K1Q1K2Q2K3Q3K4Q4K5Q5 K2K3K4K5K1 23124 10000 RRRRR PCB1PCB2PCB3PCB4PCB5 (4) 处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对 被选中的进程并不实际的启动运行,而是执行: 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位的时间。 请同学注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以运行的时间片值,以 及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片。在这时省去了这些工 作,仅用“已运行时间+1”来表示进程已经运行满一个时间片。 (5) 进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的 进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间已运行时间,则表 示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行 结束,应指导它的状态修改成“结束” (E)且退出队列。此时,应把该进程的进程控制块中的指针值送到 前面一个进程的指针位置。 (6) 若“就绪”状态的进程队列不为空,则重复上面的(4)和(5)的步骤,直到所有的进程都成为 “结束”状态。 (7) 在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及运行一次后进 程队列的变化。 (8) 为五个进程任意确定一组 “要求运行时间” ,启动所设计的处理器调度程序,显示或打印逐次被选 中的进程名以及进程控制块的动态变化过程。 四四、实实验验报报告告 (1) 实验题目。 (2) 程序中使用的数据结构及符号说明。 (3) 流程图。 (4) 打印一份源程序并附上注释。 (5) 打印程序运行时的初值和运行结果。要求如下: 进程控制块的初始状态。 选中运行的进程名以及选中进程运行后的各进程控制块状态。 对于要求每选中一个进程运行后都要打印。 实实验验 7 7主主存存储储器器空空间间的的分分配配和和回回收收 一一、实实验验内内容容 主存储器空间的分配和回收。 二二、实实验验目目的的 一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理 地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的 10 0 5k 10k 14k 26k 32k 128 策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时, 则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管 理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。 三三、实实验验题题目目 本实验模拟在两种存储管理方式下的主存分配和回收。 第第一一题题:在在可可变变分分区区管管理理方方式式下下采采用用最最先先适适应应算算法法实实现现主主存存分分配配和和实实现现主主存存回回收收。 提示: 可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主 存量查看是否有足够的空闲空间,若有, 则按需要量分割一个分区分配给该作业;若无,则作业不能装入。 随着作业的装入、撤离, 主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的。 例如: 操作系统 作业 1 作业 3 空闲区 作业 2 空闲区 为了说明哪些区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,格式如下: 起址长度状态 第一栏14 K12 K未 分 配 第二栏32 K96 K未 分 配 空 表 目 空 表 目 其中,起址指出一个空闲区的主存起始地址。 长度指出从起始地址开始的一个连续空闲的长度。 状态有两种状态,一种是 “未分配” 状态, 指出对应的由起址指出的某个长度的区域是空闲区; 另一种是“空表目”状态,表示表中对应的登记项目是空白(无效) ,可用来登记新的空闲区(例如,作 业撤离后,它所占的区域就成了空闲区,应找一个“空表目”栏登记归还区的起址和长度且修改状态) 。 由于分区的个数不定,所以空闲区说明表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢 出”无法登记。 上述的这张说明表的登记情况是按提示(1)中的例所装入的三个作业占用的主存区域后填写的。 (2) 当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找 到的空闲区可能大于作业需要量,这时应把原来的空闲区变成两部分:一部分分给作业占用;另一部分又 成为一个较小的空闲区。为了尽量减少由于分割造成的空闲区,而尽量保存高地址部分有较大的连续空闲 区域,以利于大型作业的装入。为此,在空闲区说明表中,把每个空闲区按其地址顺序登记,即每个后继 的空闲区其起始地址总是比前者大。为了方便查找还可使表格“紧缩” ,总是让“空表目”栏集中在表格 的后部。 11 (3) 采用最先适应算法(顺序分配算法)分配主存空间。 按照作业的需要量,查空闲区说明表,顺序查看登记栏,找到第一个能满足要求的空闲区。当空闲区 大于需要量时,一部分用来装入作业,另一部分仍为空闲区登记在空闲区说明表中。 由于本实验是模拟主存的分配,所以把主存区分配给作业后并不实际启动装入程序装入作业,而用输 出“分配情况”来代替。最先适应分配算法如图 4-1。 (4) 当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如果与其它空闲区相邻,则 应合成一个较大的空闲区,登记在空闲区说明表中。例如,在提示(1)中列举的情况下,如果作业2 撤 离,归还所占主存区域时,应与上、下相邻的空闲区一起合成一个大的空闲区登记在空闲区说明表中。归 还主存时的回收算法如图 4-2。 (5) 请按最先适应算法设计主存分配和回收的程序。然后按(1)中假设主存中已装入三个作业,且 形成两个空闲区,确定空闲区说明表的初值。现有一个需要主存量为6K的作业4 申请装入主存;然后作 业3 撤离;再作业2撤离。请你为它们进行主存分配和回收,把空闲区说明表的初值以及每次分配或回收 后的变化显示出来或打印出来。 第第二二题题:在在分分页页式式管管理理方方式式下下采采用用位位示示图图来来表表示示主主存存分分配配情情况况,实实现现主主存存空空间间的的分分配配和和回回收收。 提示: (1) 分页式存储器把主存分成大小相等的若干块,作业的信息也按块的大小分页,作业装入主存时可 把作业的信息按页分散存放在主存的空闲块中,为了说明主存中哪些块已经被占用,哪些块是尚未分配的 空闲块,可用一张位示图来指出。位示图可由若干存储单元来构成,其中每一位与一个物理块对应,用 0 /1表示对应块为空闲/已占用。 (2) 假设某系统的主存被分成大小相等的64块,则位示图可用 8个字节来构成,另用一单元记录当 前空闲块数。如果已有第 0,1,4,5,6,9,11,13,24,31,共 10 个主存块被占用了,那么位示 图情况如下: 字位 节数 号01234567 011001110 101010100 200000000 310000001 400000000 500000000 600000000 700000000 12 图 4-1 最先适应分配模拟算法 图 4-2 主存回收算法 (3) 当要装入一个作业时,根据作业对主存的需要量,先查当前空闲块数是否能满足作业要求,若不 能满足则输出分配不成功。若能满足, 则查位示图,找出为“0”的一些位,置上占用标志“1” ,从“当 13 前空闲块数”中减去本次占用块数。 按找到的计算出对应的块号,其计算公式为: 块号= j 8+i 其中,j表示找到的是第n个字节,I 表示对应的是第n位。 根据分配给作业的块号,为作业建立一张页表,页表格式: 页号块号 0 1 2 (4) 当一个作业执行结束,归还主存时,根据该作业的页表可以知道应归还的块号,由块号可计算出 在位示图中的对应位置,把对应位的占用标志清成“0” ,表示对应的块已成为空闲块。归还的块数加入到 当前空闲块数中。由块号计算在位示图中的位置的公式如下: 字节号 j=块号/8(表示取整) 位数i=块号/8(表示取余) (5) 设计实现主存分配和回收的程序。假定位示图的初始状态如(2)所述,现有一信息量为5 页的 作业要装入,运行你所设计的分配程序,为作业分配主存且建立页表(格式如(3)所述) 。然后假定有另 一作业执行结束,它占用的块号为第 4,5,6和31块,运行你所设计的回收程序,收回作业归还的主存 块。 要求能显示和打印分配或回收前后的位示图和当前空闲块数,对完成一次分配后还要显示或打印为作 业建立的页表。 四四、实实验验报报告告 (1) 实验题目。 (2) 程序中使用的数据结构及符号说明。 (3) 流程图。 (4) 打印一份源程序并附上注释。 (5) 打印程序运行时的初值和运行结果,要求如下: 第一题:打印空闲区说明表的初始状态,作业4的申请量以及为作业4分配后的空闲区说明表状态; 再依次打印作业 3和作业2的归还量以及回收作业3,作业 2所占主存后的空闲区说明表。 第二题:打印位示图和当前空闲块数的初值;要求装入的作业对主存的申请量,为作业分配后的位示 图、当前空闲块数和页表;作业归还的块号、回收作业所占主存后的位示图和当前空闲块数。 14 第第三三部部分分操操作作系系统统实实验验指指导导 实实验验 2 2 指指导导 实实验验内内容容 1进程的创建 任务 编写一段程序,使用系统调用 fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和 两个子进程活动。 让每一个进程在屏幕上显示一个字符; 父进程显示字符“a”, 子进程分别显示字符“b” 和“c”。试观察记录屏幕上的显示结果,并分析原因。 程序 #include main() int p1,p2; if(p1=fork()/*子进程创建成功*/ putchar(b); else if(p2=fork()/*子进程创建成功*/ putchar(c); else putchar(a);/*父进程执行*/ bca(有时会出现 abc的任意的排列) 分析:从进程执行并发来看,输出 abc的排列都是有可能的。 原因:fork()创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不是 一定是顺序的,所以输出 abc的排列都是有可能的。 2进程的控制 修改已编写好的程序, 将每个程序的输出由单个字符改为一句话, 再观察程序执行时屏幕上出现的现象, 并分析其原因。如果在程序中使用系统调用 lockf()来给每个程序加锁,可以实现进程之间的互斥,观察 并分析出现的现象。 程序 1 #include main() int p1,p2,i; if(p1=fork() 15 for(i=0;i500;i+) printf(parent%dn,i); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); else if(p2=fork() for(i=0;i500;i+) printf(son %dn,i); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); /*向父进程信号0 且该进程推出*/ else for(i=0;i500;i+) printf(“grandchild %dn,i); exit(0); 运行结果 parent. son grandchild grandchild 或 grandchild son grandchild son parent 分析:由于函数 printf()输出的字符串之间不会被中断,因此,每个字符串内部的字符顺序输出时不 变。但是 , 由于进程并发执行时的调度顺序和父子进程的抢占处理机问题,输出字符串的顺序和先后随 着执行的不同而发生变化。这与打印单字符的结果相同。 程序 2 #include main() int p1,p2,i; if(p1=fork() lockf(1,1,0); for(i=0;i500;i+) 16 printf(parent%dn,i); lockf(1,0,0); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); else if(p2=fork() lockf(1,1,0); for(i=0;i500;i+) printf(son %dn,i); lockf(1,0,0); wait(0); /* 保证在子进程终止前,父进程不会终止*/ exit(0); else lockf(1,1,0); for(i=0;i500;i+) printf(daughter%dn,i); lockf(1,0,0); exit(0); =1;i-) msg.mtype=i; printf(client)sentn); 23 msgsnd(msgqid,/*发送消息 msg入 msgid 消息队列*/ exit(0); void SERVER() msgqid=msgget(MSGKEY,0777|IPC_CREAT); /*由关键字获得消息队列*/ do msgrcv(msgqid,/*从队列 msgid接受消息msg*/ printf(server)receiven); while(msg.mtype!=1);/*消息类型为1时,释放队列*/ msgctl(msgqid, IPC_RMID,0); main() if(fork() SERVER(); wait(0); else CLIENT( ); 从理想的结果来说,应当是每当Client 发送一个消息后, server接收该消息,Client再发送下一条。 也就是说“(Client)sent”和“(server)received”的字样应该在屏幕上交替出现。实际的结果大多是, 先由 Client 发送两条消息,然后 Server 接收一条消息。此后Client Server 交替发送和接收消息.最后一次接收两条消息. Client 和Server 分别发送和接收了10 条消 息,与预期设想一致 message的传送和控制并不保证完全同步,当一个程序不再激活状态的时候,它完全可能继续睡眠,造 成上面现象,在多次send message 后才 receive message.这一点有助于理解消息转送的实现机理. 2.共享存储区的创建,附接和断接 使用系统调用 shmget(),sgmat(),smgdt(),shmctl()编制一个与上述功能相同的程序. (1)为了便于操作 和观察结果,用一个 程序为“引子”,先后 fork( )两个子进程,SERVER 和 CLIENT,进行通信。 (2)SERVER端建立一个KEY为75 的共享区,并将第一个字节置为-1.作为数据空的标志.等待其他进程发来 24 的消息.当该字节的值发生变化时,表示收到了该消息,进行处理.然后再次把它的值设为-1.如果遇到 的值为 0,则视为结束信号,取消该队列,并退出 SERVER.SERVER 每接 收到一次数据后显示”(server) received”. (3)CLIENT 端建立一个为75 的共享区,当共享取得第一个字节为-1时, Server 端空闲,可发送 请 求 . CLIENT 随即填入9 到0.期间等待Server端再次空闲.进行完这些操作后, CLIENT退出. CLIENT 每发 送一次数据后显示”(client)sent”. (4)父进程在SERVER和CLIENT 均退出后结束. #include #include #include #define SHMKEY75/*定义共享区关键词*/ intshmid,i; int*addr; CLIENT() inti; shmid=shmget(SHMKEY,1024, 0777|IPC_CREAT);/*获取共享区,长度 1024,关键词 SHMKEY*/ addr=shmat(shmid,0,0);/*共享区起始地址为 addr*/ for(i=9;i=0;i-) while(*addr!= -1); printf(client)sentn);/*打印(client)sent*/ *addr=i;/*把 i赋给 addr*/ exit(0); SERVER() do while(*addr= =-1); printf(server)receivedn%d,*addr);/*服务进程使用共享区*/ if(*addr!=0) *addr=-1; while(*addr); wait(0); shmctl(shmid,IPC_RMID,0); main() 25 shmid=shmget(SHMKEY,1024,0777|IPC_CREAT);/*创建共享区*/ addr=shmat(shmid,0,0);/*共享区起始地址为 addr*/ *addr=-1; if(fork() SERVER(); else CLIENT(); 结果 运行的结果
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论