操作系统实验1~9

上传人:z****2 文档编号:221136509 上传时间:2023-07-04 格式:DOCX 页数:22 大小:105.16KB
收藏 版权申诉 举报 下载
操作系统实验1~9_第1页
第1页 / 共22页
操作系统实验1~9_第2页
第2页 / 共22页
操作系统实验1~9_第3页
第3页 / 共22页
资源描述:

《操作系统实验1~9》由会员分享,可在线阅读,更多相关《操作系统实验1~9(22页珍藏版)》请在装配图网上搜索。

1、实验指导书班级: 姓名: 学号序言计算机操作系统是计算机专业及其相关专业的核心专业课程,是计 算机科学及其相关技术的重要部分,学好操作系统的原理并会应用其中 学习的原理与方法可以是学习者大大提高各类软件设计的质量与水平, 也可以懂得如何提高系统效率一起资源的利用率。为了培养学生的时间动手能力,帮助学习很体会与验证学习的知 识,特设计此实验体系。实验共计需要30与学时,课程规模限制,集 中安排16学时,其余需求学生可以课下完成,或者在教师的指导下有 选择地完成实验。实验报告要求:1提供各个实验程序的流程图,并填入实验报告中;2实验报告附上运行结果图的截图;3对实验的结果进行分析,写出自己的分析结

2、果;4实验的源代码需要打包交到班级刻盘保存;个人文件的命名以个人的姓名+学号命名;班级的以班级编号命名。5需要程序可视性要好,要有试验程序证明作品的正确性。6所有的实验报告采用A4打印,字体字号采用模版规定。7源程序要加注释,要有测试数据及结果。8.每个实验的报告要另起一页。实验一进程同步和互斥一、实验目的1. 掌握临界资源、临界区概念及并发进程互斥、同步访问原理。2. 学会使用高级语言进行多线程编程的方法。3. 掌握利用VC+或Java语言线程库实现线程的互斥、条件竞争,并编码 实现P、V操作,利用P、V操作实现两个并发线程对有界临界区的同步访问。4. 通过该实验,学生可在源代码级完成进程同

3、步互斥方案的分析、功能设 计、编程实现,控制进程间的同步、互斥关系。二、实验要求1. 知识基础:学生应在完成进程和线程及调度等章节的学习后进行。2. 开发环境与工具:硬件平台个人计算机。软件平台-Windows操作系统,vc+语言或Java语言开发环境。3. 运用高级语言VC+或Java语言线程库及多线程编程技术进行设计实现。三、实验内容1. 实现临界资源、临界区、进程或线程的定义与创建。2. 利用两个并发运行的进程,实现互斥算法和有界缓冲区同步算法。四、实验方案指导该实验方案由以下几个关键设计项目组成:1. 并发访问出错即设计一个共享资源,创建两个并发线程,二者并发访问该共享资源。当没 有采

4、用同步算法设计时,线程所要完成的某些操作会丢失。2. 互斥锁并发线程使用线程库提供的互斥锁,对共享资源进行访问。3 软件方法设计并编程实现计数信号量、P操作函数、V操作函数,并发线程通过调用 P,V操作函数实现线程的互斥。4同步访问多缓冲区利用上面的软件方法完成P, V操作可实现两个线程对多缓冲区的同步访问。五、实验方案实现范例以下是对该项目中包含的部分设计功能的实现方法、实现过程、技术手段的 描述,供参考。1 .模拟线程并发运行。假设我们使用POSIX线程库,而POSIX并没有真正提供线程间的并发运行 需求。我们设计的系统应支持符合RR调度策略的并发线程,每个线程运行一段 时间后自动挂起,另

5、一个线程开始运行。这样一个进程内所有线程以不确定的速 度并发执行。2 模拟一个竞争条件全局变量。创建两个线程tl和t2,父线程主函数main()定义两个全局变量accntl和 accnt2,每个变量表示一个银行账户,初始化为0。每个线程模拟一个银行事务: 将一定数额的资金从一个账户转到另一个账户。每个线程读入一个随机值,代表 资金数额,在一个账户上做减法,在另一个账户上做加法,用两个变量记录两个 账户的收支情况。良性情况下收支应平衡,即两个全局变量之和应为0。下面是每个线程的代码:counter=0;dotmpl=accntl;tmp2=accnt2; r=random();accnt1=tm

6、p1+r; accnt2=tmp2-r; counter+;while(accnt1+accnt2=0); printf(”d”,counter);两个线程运行的代码相同,只要各自代码不被交叉执行,两个收支余额之和 就应一直为0,如果线程被交叉执行,某个线程可能会读入一个旧的accntl值和 一个新的accnt2值,或者相反,这样会导致某个值的丢失。当这种情况出现时, 线程停止运行,并把出现情况的位置Counter的值)打印出来。3 模拟一个竞争条件共享文件。主线程创建两个共享文件fl和f2,每个文件包含一个当前银行账户。线程 使用随机数对文件进行读/写,方式同上。注意:文件在读/写过程中不要

7、加互 斥访问锁,避免出现不会出现交叉访问的情况。4. 测试出现一个竞争条件的时间。我们的编程环境中,一般无法支持线程的RR调度,必须编程实现两个线程 间在两个赋值语句之间插入以下代码:在指定区间(比如0到1)生成一个随机 数,小于一个极限值(如0.1),调用线程自动挂起函数jield(),自动放弃CPU, 另一运行,于是导致一个数据更新的丢失。5. 互斥锁。POSIX线程库提供一个二值信号量,称为MUTEX,它可以加锁或解锁。如 果已被另一个线程加上锁的MUTEX加锁,就会引发该线程被阻塞,MUTEX解 锁时唤醒它。使用这些原语,很容易实现互斥进入CS (临界区)。进入CS区时 加锁,离开CS

8、区时解锁。系统负责阻塞或唤醒线程。6. 用软件方法实现互斥访问临界区。用标准编程语言设置变量的值,用线程“忙等待”实现互斥访问CS。设计两 线程部分代码如下:int cl=0,c2=0,will_wait;p1:while(l) cl=l;will_wait=l;while(c2&(will_wait =1);/* 忙等待 */csl;cl=0;programl;p2:while(l) c2=1;will_wait= 2;while(cl&(will_wait=2);/* 忙等待*/cs2;c2=0;program2;该软件方法使用三个变量cl, c2, will_wait,解决两个线程的同步

9、问题。两 个线程分别将cl和c2设置为1,表示自己试图进入临界区,并将will_wait分别 设置为1和2,以消除任何竞争条件。通过“忙等待”循环实现线程的阻塞。当线 程退出CS区时,分别将变量cl和c2设置为0。我们可以比较互斥锁和软件方法这两种解决方法的效率。可以通过重复相同 的循环次数,测量各自的执行时间,尽量减少可能的外部干扰,重复测试几次, 并计算平均值。以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析实验二进程及其资源管理一、实验目的1. 理解资源共享与互斥特性以及操作系统管理资源的基本方法。2. 学会使用高级语言进行多线程编程的方法。3. 掌握利用VC+或Java线程

10、库实现一个管理器,用来实现操作系统对进 程及其资源的管理功能。4. 通过该实验,学生可在源代码级完成进程及其资源管理方案的分析、功 能设计、编程实现,控制进程间的同步、互斥关系。二、实验要求1. 知识基础:学生应在完成对进程和线程、调度、死锁等章节的学习后进 行。2. 开发环境与工具:硬件平台个人计算机。软件平台Windows操作系统,根据需要,任选安装VC+语言、java 语言或C语言开发环境。三、实验内容1. 开发一个函数,建立进程控制块和资源控制块结构,并实现相关数据结 构的初始化。2. 开发一系列操作,由进程调用这些操作,达到控制进程申请或释放各种 资源的目的。四、实验方案指导该实验方

11、案由以下几个关键设计项目组成:1. 进程数据结构表示。2. 资源数据结构表示。3. 进程对资源的操作。4. 调度程序。5用户功能shell界面。五、实验方案实现范例以下是对该项目中包含的设计功能的实现方法、实现过程、技术手段的描述, 供参考。1. 进程数据结构表示。使用结构类型设计实现进程PCB表,它包含以下成员: 进程ID进程的唯一标识,供其他进程引用该进程; 内存是一个指针链表,它在创建进程时已申请完毕,可用链表实现; 其他资源指除去内存之外的所有资源; 进程状态包括两个数据类型,一个是状态码,另一个是状态队列链表 指针; 生成树包括两个数据类型,本进程的父进程和本进程的子进程; 优先级供

12、进程调度程序使用,用来确定下一个运行进程,可以设定为 静态整数。2. 资源数据结构。每个资源都用一个称为资源控制块的数据结构表示。使用结构类型设计实现 资源控制块RCB。资源控制块包括以下字段成员: RID-资源的唯一标识,由进程引用; 资源状态一一空闲/已分配; 等待队列是被本资源阻塞的进程链表,本资源正被其他所有资源都设 定为静态数据,系统启动时初始化。3. 进程管理及进程对资源的操作。进程操作及进程状态转换归纳如下: 进程创建一一(无)一就绪; 申请资源一一运行一阻塞; 资源释放一一阻塞一就绪; 删除进程(任何状态)(无);5. 调度程序就绪f运行或运行f就绪。具体实现步骤如下:(1)

13、根据上述数据结构,用高级语言设计相应函数,分别实现创建进程、删 除进程、挂起进程、唤醒进程等功能。(2) 设计一个函数,实现调度程序,在每个进程操作执行完毕后,自动调用执 行。(3) 实现两个资源操作:申请资源和释放资源。相关参考算法如下:request(RID)/*申请资源算法*/ r=get_RCB(RID);/*获取资源控制块首地址*/f (r-status= =free ) /* 资源可用*/r-status=allocated;/*分配给调用进程,*/insert(self-other_resources,r); /*插入一个 RCB 指针指向进程资源链表; */else self-

14、status.type=blocked; self-status.list=r;.remove(RL,self);insert(r-waiting_list,self); scheduled );程*/release(RID)/*资源不可用*/*记录阻塞*/*指向所请求资源的RCB*/*将进程从就绪队列中删除*/*插入资源等待队列*/*调度程序运行选择下一个运行进/*释放资源算法*/ r=get_RCB(RID);/*获取资源控制块首地址*/remove(self-other_resource,r);/*从进程资源链表中删除该资源*/if(waiting_list=NULL) r-status

15、=free,; /*等待队列为空,置资源状态为空闲 */else remove(r-waiting_list,q); q-status.type=ready; q-status.list=RL; insert(RL,q); scheduled );/*等待队列不为空*/*从等待队列中移出一个进程q*/*将进程q的状态设为就绪*/*进程q的状态指针指向就绪队列*/*进程q插入就绪队列*/*调度程序运行选择下一个运行进程*/ 4调度程序。调度策略采用固定优先级和可剥夺优先级调度算法。即调度程序必须维护n 个不同优先级的就绪队列,各就绪队列可为空,也可包含多个进程。0级进程优 先级最低,n-l级进程

16、优先级最高。创建进程时就赋予了固定的优先级,并在进 程的生存期内保持不变。当新进程创建或阻塞进程被唤醒时,它就被插入同级的 就绪队列中。调度程序按“先来先服务”和优先级“从高到低”的方式处理就绪队列。即从最 高优先级的非空就绪队列的队首选择一个进程进入运行态。这样的调度策略很容 易导致饥饿,进程出现。因为对进程q来说,只有当优先级高于自己的所有进 程都运行完毕,或都进入阻塞状态时,它才能得到运行权。为了简化调度程序,我们假定系统中至少有一个进程处于就绪态。为确保这 一点,设计一个特殊进程init,该进程在系统初始化时自动创建,并赋予最低优 先级0级。init进程有两个作用:充当闲逛进程,该进程

17、运行时不申请任何资源, 以免被阻塞;作为第一个被创建的进程,它没有父进程,可创建比自己优先级高 的其他进程。所以init进程是进程生成树的根进程。采用优先级策略的调度程序的常见结构知下所示:scheduler。找出最高优先级进程p;If(self-priorityvp-priority)llself-status.type!=runningllself= nil)preempt(p,self); /*调度进程p,替换当前进程self*/每当任一进程的操作执行完毕,必须执行进程调度程序,它是当前运行进程 的一部分。进程调用该函数,后者决定该进程是继续执行还是被其他进程剥夺 运行权。作出判断的依据

18、是:是否存在高优先级进程p,如果存在,p将剥夺self 的运行权。当前进程的运行权被剥夺的情况有以下两种: 当前进程刚刚完成release(操作,由此被唤醒进程的优先级可能高于当前 进程。 当前进程刚刚完成create()操作,新创建进程的优先级可能高于当前进程。 在以下两种情况下,新挑选的进程必须剥夺当前进程的运行权:当前进程刚刚完成reques()操作,并且申请的资源timeout则当前进程的状 态就改为“阻塞”;或者由于分时运行进程的需要,调度程序被一个timeout操作 调用运行。在timeout操作中当前进程的状态改为“就绪”。在上述情况中,当前 进程的状态都不是“运行”。所以当前进

19、程必须停止运行,此时就绪队列中最高优 先级的进程p得到执行。当进程刚刚完成destroy操作,进程自己删除自身,它的PCB表不再存在。 此时调度程序被执行,从就绪队列中选出最高优先级的进程p,并令其执行。剥夺操作包括以下工作:将选中的最高优先级进程p的状态改为“运行。如 果当前进程依然存在且没有阻塞,则将其状态改为“就绪”,以便随后能得到执行。 最后,进行上下文切换,保留当前CPU的各个寄存器值,放入PCB表。装入中 选进程p的寄存器值。本实现方案没有对实际的CPU进行访问来保存或恢复寄存器的值,因此上 下文切换的任务只是将正在运行进程的名字显示在终端屏幕上。从这一点可以认 为,用户终端屏幕开

20、始扮演当前运行进程功能的角色。5.用户shell界面。为RCB试和演示管理器的CPU能,本方案设计开发一个shell界面,它可以重复接受终端输入的命令,唤醒管理器执行相应的功能,并在屏幕上显示结果。使用上述系统,终端就能展示当前进程。只要输入一个命令,就中断当前进 程序的执行,shell界面调用进程资源管理器中的函数F,并传递终端输入的参数。 该函数执行后将改变PCB、RCB及其他数据结构中的信息。当调度程序执行时, 决定下一个要运行的进程,并改变其状态值。保存当前进程的CPU各寄存器值 (虚拟CPU),然后恢复中选进程的值。调度程序将系统状态信息显示在屏幕上, 提示下一步操作。特别地,它始终

21、提示正在运行的进程是什么,即终端和键盘正 在为哪个进程服务。另外,函数F也可能返回一个错误码,shell也将它显示在 屏幕上。shell命令的语法格式规定如下:命令名参数例如,执行命令行“crAl”时将调用对应的管理器函数create(A,1),即创建 一个名为A、优先级为1的进程。同理,命令“rq R”将调用函数request(R)执行。以下显示说明shell界面的交互内容(假定进程A的优先级为1,并且正在 运行)。由“*”开始的行视为shell的输崮结果。提示符“”后面是提示用户输入的 命令。* process A is running cr B 2* process B is runni

22、ng cr C 1* process B is running re q R1* process B is blocked;process A is running6. 进程及资源管理器的升级版。可对上述基本型进程功能资源管理器进行功能扩展,使管理器能够处理时钟 到时中断和I/O处理完成中断。(1)相对时钟到时中断。假设系统提供一个硬件时钟。周期性产生一个时钟 到时中断。引发调用函数timeout()的执行。(2) 110处理完成中断。使用名为10的资源表示所有的I/O设备。该资源的 RCB由以下两部分组成:I0Waiting_list(3) 扩展shel 1。显示当前运行进程,并添加一个系统

23、调用request_100。终端 也能表示硬件,用户能够模拟两种类型的中断:时钟到时、I/O完成处理。为了 实现以上功能,必须添加新的shell命令,调用以下三个系统调用:request_IO(), I0_ competion, timeout()。以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析实验三存储管理一、实验目的1. 掌握内存管理的基本功能和分区法内存分配的基本原理。2. 学会Linux(或者windows)操作系统下使用c语言函数和系统调用进行 编程的方法。3. 利用c语言设计实现分区法内存分配算法。4. 验证无虚存的存储管理机制。二、实验要求1. 学生应完成如下章节的

24、学习:进程和线程、调度、存储管理。2. 安装Linux操作系统(无条件时可以用其他操作系统平台),使用c语言 编程,调用相关系统调用进行设计实现。三、实验内容1. 创建空闲存储管理表和模拟内存。2. 设计并实现一个内存分配程序,分配策略可以分别采用最先适应算法、 最佳适应算法和最坏适应算法等,并评价不同分配算法的优劣。3. 提供一个用户界面,利用它用户可输入不同的分配策略。4. 进程向内存管理程序发出申请、释放指定数量的内存请求,内存管理程 序调用对应函数,响应请求。四、实验方案指导该实验方案由以下几个关键设计项目组成。1设计实现一个空闲分区表。2设计实现模拟内存。考虑实现的便利,本方案不访问

25、真正的内存。定义一个字符数组char mmmem_size或使用 Linux系统调用 mm=malloc(mem_size),用来模拟内存。利用指针对模拟内存进行访问。3. 设计一组管理物理内存空间的函数。用户接口由以下三个函数组成: void*mm_request(int n)申请n个字节的内存空间。如申请成功,则返回所分配空间的首地址;如不 能满足申请,则返回空值。void mm_release(void*p)释放先前申请的内存。如果释放的内存与空闲区相邻,则合并为一个大空闲 区;如果与空闲区不相邻,则成为一个单独的空闲区。void*mm_init(int mem_size)内存初始化。返

26、回mm指针指向的空闲区。4. 设计实现不同策略的内存分配程序。对于采用不同分配策略的内存管理程序,从以下两个方面进行调度程序性能 的比对:内存利用率以及找到一个合适的分配空间所需查找的步骤。设置一个模拟实验。分别构建一个随机生成的请求与释放队列。释放队列中 的操作总是得到满足,队列总为空;请求队列的操作能否被满足,取决于空闲区能否满足申请的空间大小。若不能满足,则该操作在队列中等待相应释放操作唤 醒。请求队列采用FIFO管理,以避免饥饿现象的发生。内存管理程序应对内存初始化,随机设定内存空间的占有、空闲情况,随机 设定申请和释放的操作队列。调用释放操作开始运行,调用申请操作,如能满足, 则分配

27、空间,否则等待释放操作唤醒。下面给出一个模拟内存管理的程序框架(伪码形式)。可对性能数据指标进 行统计。for(i=0;ivsim_step;i+)do*/get size n of next request; mm_request(n);while(request successful); record memory utilization; select block p to be release; release(p);/*设定模拟程序执行次数*/*循环调用请求操作,直到请求不成功/*设定请求空间大小*/*调用请求操作*/*请求成功,循环继续*/*统计内存使用率*/*释放某空间p*/*调

28、用释放操作*/以上程序由主循环控制固定次数的模拟步骤。每次循环,程序完成如下处理 步骤:内循环尽可能多地满足内存请求,请求内存大小值随机生成。一旦请求失 败,挂起内存管理程序,直至释放操作被执行。此时进行系统内存利用率的统计、 计算,随机挑选一个内存分配空间完成释放操作。本次主循环执行完毕,开始下 一次循环。需要在程序中完成以下设计:确定请求分配空间大小,统计性能数据,选择 一个内存区释放。以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析实验四页面置换算法一、实验目的1. 掌握内存管理基本功能和请求分页式管理的基本原理以及页面置换算法。2. 学会在Linux操作系统下使用C函数和系

29、统调用的编程方法。3. 掌握利用C语言设计实现不同置换策略的页面置换算法。4验证虚存存储管理机制及其性能。对于生成的引用串,计算、比对不同 页面置换算 法的缺页率。二、实验要求1 .学生应完成如下章节的学习:进程和线程、调度、存储管理。2. 安装Linux操作系统,使用C语言编程,利用相关系统调用实现设计。三、实验内容1. 创建空闲存储管理表、模拟内存、页表等。2. 提供一个用户界面,用户利用它可输入不同的页面置换策略和其他附加 参数。3. 运行置换程序,输出缺页率结果。四、实验方案指导熟悉页面置换算法及其实现,了解计算机系统性能评价方法,编制页面置换 算法的模拟程序。方案设计重点提示如下。1

30、. 假定系统有固定数目的内存块F,物理块号依次为0F-1。进程的大小 为P页,其逻辑页号依次为0P-1。随机生成一个引用串RS,即从0P-1组成 的整数序列。定义一个整型数组int MF 表示所有物理块,如果Mi= n,表示逻 辑页n存放在物理块i中。2生成引用串。用随机数方法产生页面走向,页面走向长度为L。3根据页面走向,分别采用FIFO和LRU算法进行页面置换,设计一个函 数自动统计缺页率。4假定可用内存块和页表长度(进程的页面数)分别为m和k。初始时, 进程的页面都不在内存。5参考其他设计项目,将不同置换算法设计实现为函数,能在界面上方便调 用执行。以下部分由学生填写:1. 程序流程图2

31、. 实验结果3结果分析实验五进程调度一、实验目的1. 掌握进程调度程序的功能和调度程序采用的调度算法。2. 学会在Linux操作系统下使用C函数和系统调用的编程方法。3. 掌握利用C语言设计实现不同调度策略的进程调度算法。4. 验证不同进程调度算法对性能的影响。二、实验要求1. 学生应完成如下章节的学习:进程和线程、调度。2. 安装Linux操作系统,使用C语言编程,利用相关系统调用完成设计实 现。三、实验内容1 定义、初始化进程数据结构及其就绪队列。2. 提供一个用户界面,用户利用它可输入不同的分配策略及相关参数。3设计实现调度程序,调用下面的功能函数。4. 设计函数,实现计算平均周转时间,

32、实现不同调度算法。四、实验方案指导关键设计内容如下,供参考。1. 用C语言的结构类型及其链表,完成PCB表数据结构设计,并动态生成 一组进程组成的就绪队列链表。每个进程都由PCB记录运行时间,优先级、到 达系统时间等数据。也可根据需要,自行添加不同调度算法需要的数据。2. 设计实现不同调度算法的函数,如先来先服务法、短作业优先法、优先 级法等。设计一个函数,计算出这组进程的平均周转时间。3设计总控函数,实现进程调度程序。根据用户界面的输入,调用相应的调 度算法,实现进程调度,计算调度性能指标。以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析实验六银行家算法一、实验目的1. 理解死锁

33、概念、银行家算法及安全性检测算法。2. 学会在Linux操作系统下使用C语言函数和指针进行编程的方法。3. 掌握利用C语言设计实现银行家算法的基本过程。4. 验证银行家算法对于避免死锁的作用。二、实验要求1. 学生应完成如下章节的学习:进程和线程的调度。死锁。2. 安装Linux操作系统,使用C语言编程完成设计实现。三、实验内容1. 定义并初始化进程及其资源数据结构。2. 提供一个用户界面,用户利用它可动态输入进程和资源种类等相关参数3. 设计实现安全状态检测和银行家死锁避免算法的功能函数。四、实验方案指导以如下几组初始数据为例,设计相应程序,判断下列状态是否安全。1.3个进程共享12个同类资

34、源状态 a 下:allocation=(1,4,5), max=(4,4,8)。判断系统是否安全。状态 b 下:allocation=(1,4,6),max=(4,6,8)。判断系统是否安全。2. 5个进程共享多类资源状态c下:判断系统是否安全?若安全,给出安全序列。若进程2请求(0, 4,2,0),可否立即分配?分配矩阵最大需求矩阵可用资源矩阵0012001215 2 010001750135423560632065200140656实现方案的主要作是如何输入,如何初始数据,如何调用对应功能函数,如何输出结果。下面给出一个实现方案,供参考。1. 开发一个交互程序,首先从文件中读入系统描述信息

35、,包括进程的数目、 资源的种类和数量、每个进程的最大资源请求。程序自动根据文件内容创建一个 当前系统描述例如,每类资源的数目用维数组Rm描述,m为资源的种类。 每个Rj记录资源Rj的数量。进程的最大需求矩阵用Pnm表示,Pilj记录 进程Pi对资源Rj的最人需求。分配矩阵和请求矩阵可使用二维数组表示。2. 用户输入一个请求,格式类似:resquest(i,j,k),或release(i,j,k),在这里,i 表示进程Pi,j表示资源Rj,k是申请/释放的数量。对每一个请求,系统回应是满 足要求还是拒绝分配。3设定一个申请和释放序列,无任何检测和避免死锁的算法,分配会导致死 锁。4设定一个申请和

36、释放序列,按照安全性算法进行设计,回应系统是否安全。 然后实现银行家算法,确保没有死锁的分配。以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析实验七磁盘调度算法、实验目的1. 理解文件读/写基本原理和磁盘调度算法的作用。2. 学会在Linux操作系统下使用C语言函数和指针进行编程的方法。3. 利用C语言设计实现不同磁盘调度算法,如FIFO, SSTF,SCAN等算法。4 验证不同磁盘调度算法对性能的影响。二、实验要求1 .学生应完成如下章节的学习:进程和线程、调度、存储管理、I/O管理。2. 安装Linux操作系统,使用C语言编程完成设计实现。三、实验内容1 设计一个函数,其功能是

37、动态创建I/O请求队列及其相关参数,如磁道 口樂号等。2. 提供一个用户界面,用户可输入不同的分配策略以相关参数。3. 设计相应程序计算平均移臂距离。四、实验方案指导实现本实验的关键内容如下,供参考。1. 实现电梯算法。2. 实现FIFO,SSTF算法。3. 写一个驱动程序,测试不同的算法。设置多次循环,每次循环中,驱动 程序随机调用函数request(n)和release()。如果执行request(n),系统会将n转换成 1T之间的一个随机值,T是磁盘的磁道数。对每种算法,计算平均移臂距离。 以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析实验八设备处理程序设计一、实验目的1理

38、解设备处理程序的一般设计过程,加深对缓冲和中断概念的理解。2学会在Linux操作系统下使用C语言编程与有关进程的系统调用方法。3掌握利用C语言设计实现键盘缓冲区的读/写操作的方法。4. 验证键盘缓冲区和中断处理程序是否同步。二、实验要求1. 学生应完成如下章节的学习:进程和线程、调度、存储管理、I/O管理。2. 安装Linux操作系统,使用C语言和相关系统调用,编程完成设计实现。三、实验内容1. 主程序实现键盘读/写、键盘中断处理程序。2. 可修改缓冲区数目,运行此程序。四、实验方案指导1. 将主程序看成消费者进程,将中断程序看成生产者进程,两者通过什么 方法取得同步?其数据结构是什么?2.

39、当缓冲区数目分别为2, 5, 10时,运行此程序,是否发生输入字符没有 被显示的情况(加快输入速度)?为什么?若在主程序显示字符子程序中加入一段延迟程序,对整个程序有何影响?和 问题)k=A讨论,并做实验。以上设计方案供读者选择。两个程序的流程为图 A-1所示。图A-1键盘缓冲区读/写与中断处理程序的同步以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析实验九文件系统一、实验目的1 理解并实现文件的构造、命名、存取、使用、保护等功能,加深对文件 操作、文件存储的理解。2. 掌握文件系统的功能,通过数据结构定义文件系统,并完成相应操作。3. 学会在Linux操作系统下使用C语言编程和有

40、关文件的系统调用的方法。4. 掌握利用C语言设计实现文件读/写等操作的方法。5. 验证文件存储空间管理功能,验证磁盘调度算法的实现。二、实验要求1. 用c语言中链表结构模拟定义I节点数据结构及其相关数据块数据结构。2. 设计函数,实现随机大小的文件的磁盘空间分配,并显示分配结果。3. 设计函数,实现文件指定磁盘空间的查找,并显示结果。三、实验内容1.设计一个用户界面,用户可输入不同的参数,表示运行不同的函数功能。 如空闲存 锗空间、磁盘调度分配策略等。2设计一个函数,实现空闲存储空间的管理。3设计一个函数,实现I节点方式的文件存储。4. 设计多个函数,实现按不同调度策略计算平均移臂距离。四、实

41、验方案指导空闲存储空间的管理与实现。以成组链接法为例,编程模拟实现磁盘空闲区 的管理。空闲块成组链接如图6-22所示。有以下几个关键实验步骤:(1) 用c语言链表结构自动生成以上空闲块成组链接表。(2) 设计实现空闲块成组链接法空闲块分配函数,函数功能是对超级块进行 以下操作:重复进行栈深减1操作,取出磁盘块号。当栈深为1时,堆栈当前指 针指向本组第一块,即正好取(3)个组的组长盘块号,将其内容写入堆栈,重 复栈深减1的操作,继续分配磁盘块。(3) 设计实现空闲块成组链接法空闲块释放函数,函数功能是对超级块进行 以下操作:重复进行栈深加1操作,存入磁盘块号。当栈深为50时,此时又释 放一个磁盘

42、块,并将当前栈中内容写入该磁盘块(组长),并将栈深设定为1, 堆栈的第一个索引位置(0)填入该磁盘块块号,它是新一组的组长块。此时如继 续释放,进行栈深加1操作(2)存入磁盘块号(1)。(4) 随机对成组链表初始化,调用分配函数或回收函数,输出成组链表结果。 验证分配和回收的正确性。读者可能会问:一个文件在存储设备上如何存放?采用哪种存取方法?文件 的存储分配涉及以下三个问题:创建新文件时,是否一次性分配所需的最大空 间?为文件分配的空间是否连续?为了记录分配给各个文件的磁盘空间,应 该使用何种数据结构来记录?已知每个文件有一个I节点,其中列出了文件属性和文件分配的各块号,存 放物理块号的方式如下:开始的10个磁盘块号放在I节点中(直接块),对于稍 大的文件,I节点中有一个一次间接地址,指向存放磁盘块地址的磁盘块(间接 块),如果文件更大,I节点中有一个二次间接地址,指向一次间接地址块,再由 它们指向存放磁盘块地址的盘块。如图6-19所示。以下部分由学生填写:1. 程序流程图2. 实验结果3结果分析

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!