os操作系统实验指导(3)

2019-08-31 15:43

实验单元1 进程管理

实验1.1 进程创建

- 内容:编写一段程序,使用系统调用fork( )创建两个子进程,再用系统调用signal( )让

父进程捕捉键盘上来的中断信号(即按ctrl+c键),当捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止: Child process 1 is killed by parent! Child process 2 is killed by parent!

父进程等待两个子进程终止后,输出以下信息后终止: Parent process is killed! - 实验要求:

(1) 运行程序并分析结果。

(2) 在程序中哪些地方分别用了系统调用fork(),wait(), kill()和exit(), 有什么作用?

实验1.2 模拟进程调度算法

内容:实现教材中所描述的先来先服务算法,短进程优先调度算法和时间片轮转调度算法。

要求:

编写一模拟程序,实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度 算法,计算进程的平均周转时间,比较算法的优劣。

实验内容:

编程实现本实验的程序,要求:

【a】编程实现进程的进程控制块,定义一个进程控制块的数据结构(PCB)应包括:

? 进程名称(ID) ? 进程需要执行时间 ? 进入就绪队列时间

? 进程执行开始时间,进程执行结束时间 ? 进程的优先级

【b】进程调度实现 先来先服务算法、短进程优先调度算法、时间片轮转调度算法。 【c】进程及相关信息从文件中读入。(读入信息包括:进入就绪时间,需要执行时间,优先级) ;模拟5个进程序列,每个序列包括10个进程 【d】时间片与时间流逝的模拟。(运行一个时间片,表示为已占用CPU时间加1,需要执行时间减1。) 【e】一组进程序列执行完毕,打印出结果信息: 按照进程的ID输出其执行序列,计算出每个进程的开始时间、 结束时间、周转时间,并为整个进程序列计算平均周转时间。 程序的计算结果按一定的格式显示在计算机屏幕上或输出到文件中。

实验1.3 多进程(线程)实现快速排序

- 内容:编多进程及多线程程序实现对10000个随机数的快速排序算法。 - 要求:

产生10000个随机数,编写一个多进程(线程)实现快速排序算法; 要求说明你的程序运行的系统资源配置,给出测试结果并对测试程序和结果做出说明. 回答用多进程实现和多线程实现体现了什么差异,产生的原因是什么?

? 实现提示:

每次数据分割后产生两个新的进程(线程)处理分割后的数据; 每个进程(线程)处理的数据小于500以后不再分割

实验单元2 存储管理

内容:

编程序模拟请求页面调度中的页面置换算法,基于同样的页面序列对比它们的命中率,观察当物理内存容量变化时算法的结果有什么不同。

要求:设页面大小为1K,用户虚存容量32K,物理内存大小从4K到32K分别进行算法测试,每次测试请给出FIFO, LRU, OPT的命中率。分析实验结果,对比三种算法性能,以及当物理内存大小变化时命中率的变化。

方法:

1. 页面序列生成:

a) 生成320条指令组成的序列,其地址顺序假定为:1)当前指令的下一条指令是顺

序执行的,概率0.5;2)下一条指令均匀分布在前地址部分,概率0.25; 3)下一条指令均匀分布在后地址部分,概率0.25; 执行下面算法直到序列长度达到320:

随机选取p∈【0,319】; iaddress[0]=? p; for (i=1;i<320;i++) {

p ? iaddress[i-1];

生成随机数r,0

else if (r<0.75) iaddress [i] ?随机选取p’∈【0,p-1】; else iaddress [i] ?随机选取p’∈【p+1,319】; }

b) 将指令序列转换成页面序列:每个页面包含10个指令。

for (i=0;i<320;i++)

page[i]= iaddress[i] / 10;

随机数生成函数rand(); 初始化srand(int seed);

2. 测试不同物理内存帧数(4--32)情况下FIFO, LRU, OPT的命中率 (= 1- 缺页次数/

页面序列长度)。

for(frame=4; rame<=32;frame++) {

FIFO(frame);//计算并输出FIFO算法命中率 LRU(frame);//计算并输出LRU算法命中率 OPT(frame); //计算并输出OPT算法命中率 }

实验单元3 文件系统

实验目的

通过一个简化的多用户文件系统模型的设计,进一步理解unix文件系统的结构及其功能的实现。

实验内容

在LINUX环境下设计一个简单的二级文件系统,给出程序运行过程和结果。要求做到以下几点:

1、可以实现下列几条命令(至少4条)(不必写命令行解释程序,直接在main函数中调用命令的实现函数。参考后面的源码。)

Login 用户登录 Dir 列文件目录 Create 创建文件 Delete 删除文件 Open 打开文件 Close 关闭文件 Read 读文件 Write 写文件

2、列目录时要列出文件名、物理地址、保护码和文件长度 3、源文件可以进行读写保护

实验准备

1、首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录

都以文件的形式存放于磁盘,这样便于查找和修改;

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

实验指导

一、文件管理

要将文件存储在磁盘(带)上,必须为之分配相应的存储空间,这就涉及到对文件存储空间的管理;采取何种方式存储,又涉及到文件的物理结构;为了简化对文件的访问和共享,还应设置相应的用户文件描述表及文件表。 1、文件存储空间的管理 (1)文件卷的组织

UNIX中,把每个磁盘(带)看作是一个文件卷,每个文件卷上可存放一个具有独立目录结构的文件系统。一个文件卷包含许多物理块,并按块号排列如下图:

0# 1# 2# 3# ??K# K+1# ??N#

其中,0#块用于系统引导或空闲,1#为超级块(superblock),存放文件卷的资源管理信息,如整个文件卷的盘块数、磁盘索引结点的盘块数、空闲盘块号栈及指针等。2#~K#存放磁盘索引结点。每个索引结点64B,第K+1#~N#存放文件数据。 (2)空闲盘块的组织

UNIX采用成组链接法组织空闲盘块。它将若干个空闲盘块划归一个组,将每组中所有盘块号存放在其前一组的第一个空闲盘块中,而第一组中所有空闲盘块号放入超级块的空闲盘块号栈中。

例: 超级块表

109 106 103 100 95

211 208

310 307 205 202 304 301

(3)空闲盘块的分配与回收

内核要从文件系统中分配一盘块时,先检查超级块空闲盘块号栈是否已上锁。是则调用sleep睡眠,否则将超级块中空闲盘块栈栈顶盘块号分配出去。 回收时,若空闲盘块号栈未满,直接将回收盘块编号记入空闲盘块号栈中。若回收时栈已满,须先将栈中的所有空闲盘块号复制到新回收的盘块中,再将新回收盘块的编号作为新栈的栈底块号进栈。

2、文件的物理结构

UNIX未采用传统的三种文件结构形式,而是将文件所占用盘块的盘块号,直接或间接地存放在该文件索引结点的地址项中。查找文件时,只需找到该文件的索引结点,便可直接或间接的寻址方式获得指定文件的盘块。

过程bmap可将逻辑文件的字节偏移量转换为文件的物理块号。先将字节偏移量转换为文件逻辑块号及块内偏移量,再把逻辑块号转换为文件的物理块号。 3、用户文件描述符表和文件表的管理

每个进程的U区中设置一张用户文件描述符表。只在首次打开文件时才需给出路径名。内核在该进程的用户文件描述符表中,分配一空项,取其在该表中的位移量作为文件描述符fd(file discriptor)返还给用户。当用户再次访问该文件时,只需提供fd,系统根据fd便可找到相应文件的内存索引结点。fd表项的分配由ufalloc完成。

为了方便用户对文件进行读/写及共享,系统中设置了一张文件表。每个用户在打开文件时,都要在文件表中获得一表项,其中包含下述内容: f.flag:文件标志,指示该文件打开是为了读或写; f.inode:指向打开文件的内存索引结点指针; f.offset:文件读写指针偏移值; f.count:文件引用计数。 二、目录管理

UNIX中,为了加速对文件目录的查找,将文件名和文件说明分开,由文件说明形成一个称为索引结点的数据结构,而相应的文件目录项则只由文件符号名和指向索引结点的指针


os操作系统实验指导(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:六年级下册英语素材-英语名词单复数变化规律及练习题 - 通用版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: