欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《计算机操作系统》实验指导书.docx

    • 资源ID:95012261       资源大小:90.57KB        全文页数:36页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《计算机操作系统》实验指导书.docx

    计算机操作系统试验指导书适合于计算机科学与技术专业湖南工业大学计算机与通信学院二O 一四 年 十月前言计算机操作系统是计算机科学与技术专业的主要专业根底课程,其实践性、应用性很强。实践教学环节是必不行少的一个重要环节。计算机操作系统的试验目的是加深对理论教学内容的理解和 把握,使学生较系统地把握操作系统的根本原理,加深对操作系统根本方法的理解,加深对课堂知 识的理解,为学生综合运用所学学问,在Linux 环境下调用一些常用的函数编写功能较简洁的程序来实现操作系统的根本方法、并在实践应用方面打下肯定根底。要求学生在试验指导教师的帮助下 自行完成各个操作环节,并能实现且到达举一反三的目的,完成一个试验解决一类问题。要求学生 能够全面、深入理解和娴熟把握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好 地理解和把握,并且能够进展简洁分析和推断;能够娴熟使用Linux 用户界面;把握操作系统中进程的概念和掌握方法;了解进程的并发,进程之间的通信方式,了解虚拟存储治理的根本思想。同 时培育学生进展分析问题、解决问题的力量;培育学生完成试验分析、试验方法、试验操作与测试、试验过程的观看、理解和归纳力量。为了收到良好的试验效果,编写了这本试验指导书。在指导书中,每一个试验均依据该课程实 验大纲的要求编写,力求紧扣理论学问点、突出设计方法、明确设计思路,通过多种形式完成试验 任务,最终引导学生有目的、有方向地完成试验任务,得出试验结果。任课教师在试验前对试验任 务进展肯定的分析和讲解,要求学生依据每一个试验的具体要求提前完成预备工作,如:查找资料、设计程序、完成程序、写出预习报告等,做到有预备地上机。进展试验时,指导教师应检查学生的 预习状况,并对调试过程赐予乐观指导。试验完毕后,学生应依据试验数据及结果,完成试验报告, 由学习委员统一收齐后交指导教师批阅评定。试验成绩考核:试验成绩占计算机操作系统课程总评成绩的20%。指导教师每次试验对学生进展出勤考核,对 试验效果作记录,并准时批改试验报告,综合评定每一次的试验成绩,在学期终了以平均成绩作为该生的试验成绩。有以下情形之一者,试验成绩为不及格:1. 迟到、早退、无故缺勤总共 3 次及以上者;2. 未按时完成试验达 3 次及以上者;3. 缺交试验报告 2 次及以上者。ii目录第一局部 试验环境及所用系统函数介绍11.1 Linux 操作系统简介11.2 Linux 的使用11.2.1 vi 的使用11.2.2 gcc 的使用21.2.3 主要系统调用函数2其次局部 试验内容5试验一 生疏 LINUX 根本命令及编程环境5试验二 进程治理8试验三 进程调度12试验四 进程间通信17试验五 存储治理试验20第一局部 试验环境及所用系统函数介绍DOS 操作系统是单道操作系统,无法进展多道程序设计,Windows 环境下的 Visual C+虽然也可用于多道程序设计,但是并不是完全的多道,由于它也可用于 DOS 编程。所以我们的试验选用 Linux 操作系统。Linux 操作系统是一个类 UINX 操作系统,是一个纯多道并发的网络操作系统。1.1 Linux 操作系统简介Linux 是一个多用户操作系统,是 UNIX 的一个克隆版本(界面一样但内部实现不同),同时它是一个自由软件,是免费的、源代码开放的,这是它与UNIX 的不同之处。现在,Linux 凭借优秀的设计,非凡的性能,加上IBM、Intel、CA、CORE、Oracle 等国际知名企业的大力支持,市场份额逐步扩大,已成为与 Windows 和 UNIX 并存的三大主流操作系统之一。1.2 Linux 的使用1.2.1 vi 的使用1) vi 的简洁应用vi 是 linux 环境下赫赫知名的文本编辑工具之一。进入vi 编辑器的方法:vifilename.c注:文件名必需带有扩展名.c,如 filename.c否则无法通过编译;进入 vi 后要按:按“i”键从命令方式切换到输入方式; 从输入方式切换到命令方式的方法:按“Esc”键保存文件:w保存文件并退出:wq不保存文件退出:q!注:以上操作必需在命令方式下进展。2) 其他常用 vi 操作命令j,k,h,l:上下左右0: 行首$:行尾 ctrl+f :后翻页ctrl+b:前翻页G : 文件尾数字 G: 数字所指定行i,I : 插入命令,i 在当前光标处插入, I 行首插入.1.a,A: 追加命令,a 在当前光标后追加,A 在行末追加o,O: 翻开命令,o 在当前行下翻开一行,O 在当前行上插入一行x: 删除光标处字符dd: 删除当前行d0: 删除光标前半行d$: 删除光标后半行r,R : 替换命令,r 替换当前光标处字符,R 从光标处开头替换/string: 查找字符串n : 连续查找N : 反向连续查找%:查找对应括号u:取消上次操作注:以上操作必需在命令方式下进展。1.2.2 gcc 的使用gcc 是 linux 下的一种 c 程序编译工具,使用方法如下有提示符#的状况:编译: gccofilename1 filename.c其中: filename.c 是源文件名,filename1 是目标文件名,o 代表 object执行:./filenamel例如:键入一简洁的程序:vi ab.c 按回车键输入以下代码段, #include<stdio.h> #include<unisted.h>mainprintf(“aaaa”)按 ESC 键,再按“:WQ”(W 是保存,Q 是退出) 消灭提示符:root GGG-LINUX root#键入:gcc o ab ab.c 进展编译。执行:./ab1.2.3 主要系统调用函数1.2.1 系统调用 fork 功能:创立一个的进程. 头文件:#include <unistd.h>说明:本系统调用产生一个的进程 , 叫子进程, 是调用进程的一个复制品 . 调用进程叫父进程, 子进程继承了父进程的几乎全部的属性。(1) 该子进程继承了父进程的程序空间,复制了父进程的数据段和栈段。也就是说不管是父进程还是子进程,在占有处理机后,都从fork调用的返回点开头运行;(2) 调用成功则对父进程返回子进程标识号 pid;(3) 调用成功对子进程返回 0, 这也是最便利的区分父子进程的方法。(4) 假设调用失败则返回-1 给父进程, 子进程不生成。留意:假设 fork值>0,>0 的数即是子进程号。但这时是父进程占有处理机。1.2.2 系统调用 wait&status:功能: 等待子进程完毕。(1) 当有多个子进程时,任一个子进程完毕马上掌握返回调用者,并将子进程调用exit status时的 status 值送到&status 指针所指单元中。(2) 在掌握返回调用者时,同时将所等到的子进程pid 作为 wait系统调用函数的返回值。(3) waitpidpid,:等待 pid 所指定的进程完毕。(4) 返回值:等待到一个子进程返回时,返回值为该子进程号;否则返回值为1。说明: 允许调用进程即父进程取得子进程的状态信息,调用进程将会挂起直到其一个子进程终止。1.2.3 系统调用 exit功能: 终止进程.语法: #include <stdlib.h> void exit(status)int status功能:调用进程被该系统调用终止。该系统调用发出后,操作系统将从系统中删除调用 exit 的进程,并将 status 值传给等待它完毕的父进程。返回值: 无1.2.4 系统调用 kill功能: 向一个或一组进程发送一个信号。语法:#include <signal.h>int kill(pid, sig); pid_t pid; int sig;说明:向一个或一组进程发送一个信号,该信号由参数 sig 指定,为系统给出的信号表中的一个。Sig 是 signal 的缩写。返回值: 调用成功则返回 0,否则返回-1.kill -STOP pid: 发送SIGSTOP (17,19,23)停顿一个进程,而并不消灭这个进程。kill -CONT pid: 发送 SIGCONT (19,18,25)重开头一个停顿的进程。kill -KILL pid: 发送 SIGKILL (9)强迫进程马上停顿,并且不实施清理操作。kill -9 -1: 终止拥有的全部进程。SIGKILL 和 SIGSTOP 信号不能被捕获、封锁或者无视。1.2.5 系统调用 lockf功能:应用、检测或删除翻开文件的一个 POSIX 锁语法:#include <unistd.h>int lockf(int fd, int cmd, off_t len);说明:应用、检测或删除翻开文件某局部的一个POSIX 锁,文件通过fd 指明,文件的描述符的恳求操作通过 cmd 指明。#define F_ULOCK 0 解锁一个区域#define F_LOCK 1 上锁一个区域#define F_TLOCK 2 检测并上锁一个区域#define F_TEST 3 检测一个区域是否上锁文件上锁区域的恳求起始于隐含的偏移并包好len 字节,假设 len 为负,从pospos+len-1,这里 pos 为当前文件位置,假设 len 为零,则位置从当前文件位置延长延长到无限长,包括当前和以后的文件最终的位置。在全部状况下,位置可延长到以前当前的文件的最终位置。在 Linux 中,这称为 fcntl(2)的接口一般会指明 lockf 和 fcntl 的关系。1.2.6 系统调用 pipe是用来建立管道的。语法: #include <unistd.h>int pipe(int fd2); 这里 fd1为写入端,fd0为读出端。功能:从管道里写或从管道里读。 计算机操作系统试验指导书其次局部 试验内容试验一 生疏 LINUX 根本命令及编程环境一、试验类型本试验为验证性试验。二、试验目的与任务1) 生疏使用 Linux 字符界面,窗口系统的常用命令;2) 生疏运用 Linux 常用的编程工具;3) 生疏运用 Linux 的在线求助系统。三、预习要求1) 生疏一种操作系统的使用和安装,如windows 操作系统的安装,DOS 系统的使用2) 了解进程的概念及进程的状态3) 生疏 c 语言程序设计4) 生疏 c 语言程序编译过程四、试验根本原理进入 Linux 操作系统后,掌握终端的命令行输入方式下输入各种命令,并显示各种命令操作后的输出结果,操作包括文件操作命令的使用,vi 命令的使用以及 gcc 编译器的使用,具体的各种命令及使用方式见第一局部的介绍。五、试验仪器与设备或工具软件试验设备:计算机一台,软件环境要求:安装 Red Hat Linux 操作系统和 gcc编译器。六、试验内容1使用常用的操作命令 ls, cp, rm, mkdir, man, vi 等。 2生疏怎么编辑一个程序编辑,调试,运行见,输入一个简洁的 C 程序进展练习,参考练习程序如下: 程序 1#include<stdio.h>.14.mainint p1; while(p1=fork)=-1); if(p1=0)putchar(B); else putchar(A);程序 2 #include<stdio.h> #include “stdafx.h“ mainint row,column,num,n=6; for(row=1;row<n;row+)for(column=1;column<n-row;column+) printf(“ “);for(num=row;num>=1;num-) printf(“%d“,num); for(num=2;num<=row;num+)printf(“%d“,num);printf(“n“);七、试验步骤1) 进入 Linux 操作系统开机后,选择进入Linux 操作系统方式,输入用户名和密码,即可进入Linux 操作系统。2) 进入掌握终端的命令行输入方式在 Linux 操作系统环境下,点击“小红帽”菜单,选择“系统”下拉菜单,选择“终端”选项,进入命令行输入方式。3) 输入命令后按回车键在命令行输入方式下,输入各种文件操作命令,并按回车查看显示结果。八、留意事项1) gcc 编译器不能编译不带扩展名的 c 语言程序。2) 留意编译和运行程序的根本过程。3) 留意娴熟使用 man 命令来查看某条命令的含义及使用方式。九、试验报告要求要求列出多条命令的使用和相应结果,需要列出运行了的程序清单及相应结果,并对结果进展分析和争论。试验二 进程治理一、试验类型本试验为设计性试验。二、试验目的与任务1) 加深对进程概念的理解,明确进程和程序的区分。2) 进一步生疏并发执行的实质三、预习要求1) 进程的概念2) 进程掌握的概念及内容3) 进程的并发执行4) 生疏互斥的概念5) 用到的 Linux 函数有:fork,lockf等。四、试验根本原理使用 fork系统调用来创立一个子进程,父进程和子进程并发执行,交替输出结果。使用 lockf系统调用对临界区进展加锁操作,实现对共享资源的互斥使用。五、试验仪器与设备或工具软件试验设备:计算机一台,软件环境要求:安装 Red Hat Linux 操作系统和 gcc 编译器。六、试验内容1) 进程的创立编写一段程序,使用系统调用 fork( ) 创立两个子程序。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。运行程序 10 次,观看记录屏幕上的显示结果,并分析缘由。2) 进程的掌握修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话,再观看程序执行时屏幕上消灭的现象,并分析缘由。假设在程序中使用系统调用 lockf来给每一个进程加锁,可以实现进程间的互斥,观看并分析消灭的现象。(1) 进程的创立参考程序如下:#include<stdio.h> mainint p1,p2; while(p1=fork)=-1);if(p1!=0)while(p2=fork)=-1);if(p2=0) putchar(”b”); else putchar(”c”);else putchar(”a”);运行结果:bca(或 bac)分析:从进程并发执行来看,输出 bac,acb 等状况都有可能。缘由:fork创立进程所需的时间要多于输出一个字符的时间,因此在主程序创立进程的同时,进程 2 就输出了”b”,而进程 2 和主程序的输出次序是随机的,所以消灭上述结果。(2) 进程的掌握参考程序如下#include<stdio.h>mainint p1,p2,i;while (p1=fork)=-1); if(p1=0)for(i=0;i<500;i+) printf(“child %dn“,i);elsewhile(p2=fork)=-1); if(p2=0) for(i=0;i<500;i+)printf(“son %dn“,i); else for(i=0;i<500;i+)printf(“daughter %dn“,i);运行结果:略分析:由于函数 printf输出和字符串之间不会被中断,因此字符串内部的字符挨次输出不变。但是由于进程并发执行时的调度挨次和父进程的抢占处理机问题,输出字符串的挨次和先后随着执行的不同而发生变化。进程加锁后的参考程序如下:#include<stdio.h> mainint p1,p2,i;while (p1=fork)=-1); if(p1=0)lock(1,1,0); for(i=0;i<500;i+)printf(“child %dn“,i); lock(1,0,0);elsewhile(p2=fork)=-1); if(p2=0)lock(1,1,0) for(i=0;i<500;i+)printf(“son %dn“,i); lock(1,0,0)elselock(1,1,0) for(i=0;i<500;i+)printf(“daughter %dn“,i); lock(1,0,0)运行结果:略 分析:学生自己完成七、试验步骤1) 进入 vi 编辑器2) 在编译器中输入所要运行的程序代码3) 退出编辑器,返回命令行输入方式,使用 gcc 编译器编译程序,获得能运行的目标程序。4) 运行目标程序,查看运行结果。八、留意事项1) 假设使用 gcc 编译程序有错的话,需要重修改程序,直到无错为止。2) 留意系统是如何创立进程的?3) 查看结果是否是交替输出,假设修改输出的次数是否会消灭交替现象?4) 相关函数的介绍见第一局部的介绍。九、试验报告要求需要列出运行了的程序清单及相应结果,并对结果进展分析和争论。对结果的分析主要争论结果为什么会交替消灭?并发进程是如何执行的?试验三 进程调度一、试验类型本试验为综合性试验二、试验目的与任务在承受多道程序设计的系统中,往往有假设干个进程同时处于就绪状态。当就绪进程个数大于处理机数时,就必需依照某种策略来打算那些进程优先占用处理机。本试验模拟在单处理机状况下的处理机调度,帮助学生加深了解处理机调度的工作。三、预习要求1) 生疏进程掌握块和进程组织方式2) 生疏进程调度的概念3) 生疏时间片轮转调度算法等4) 生疏 c 语言编程,指针及构造体等学问5) 数据构造中的链表的建立及根本操作四、试验根本原理进程掌握块通过链表队列的方式组织起来,系统中存在运行队列和就绪队列为简洁起见,不设堵塞队列,进程的调度就是进程掌握块在运行队列和就绪队列之间的切换。当需要调度时,从就绪队列中选择一个进程占用处理机,即从就绪队列中删除一个进程,插入到运行队列中,当占用处理机的进程运行的时间片完成后,放弃处理机,即在运行队列中的进程掌握块等待一段时间时间片后,从该队列上删除,假设该进程运行完毕,则删除该进程节点;否则,则插入到就绪队列中。五、试验仪器与设备或工具软件试验设备:计算机一台,软件环境要求:安装 Red Hat Linux 操作系统和 gcc 编译器。六、试验内容设计一个时间片轮转调度算法实现处理机调度的程序,具体内容如下1) 试验中使用的数据构造(1) PCB 进程掌握块内容包括参数进程名 name;要求运行时间 runtime;优先数 prior;状态state;已运行时间 runedtime。PCBi运行队列(2) 为简洁起见,只设运行队列,就绪链表两种数据构造,进程的调度在这两个队列中切换,如图 3.1 所示PCBjPCBj1PCBj1就绪队列图 3.1PCB 链表2) 每个进程运行时间随机产生,为 120 之间的整数。3) 时间片的大小由试验者自己定义,可为 3 或 54) 可参考的程序流程图如图 3.2建立就绪队列,每个进程设置相应参数,如运行时间,进程名字等建立运行队列指针,初始值指向空从就绪队列中按时间先后顺序选一个进程插入运行队列每个进程占用处理机一个时间片,即runtime=runtime-时间片大小是假设 runtime0?Runtime=0否修改相应参数产生一次调度,即按时间先后挨次从头节点删除一个节点插入运行队列中修改相应参数将该进程插入就绪队列中完毕该进程,即释放节点空就绪队列为空吗?否是完毕程序图 3.2 模拟进程调度的流程图5) 参考程序#include “stdio.h“ #include “stdlib.h“typedef struct PCBint name; int runtime;int runedtime; int state;int killtime; struct PCB *next;PCB;#define NUM 10void mainint timeslice=3;PCB *runqueue;PCB *top,*tail,*temp; int i;srand(10); for(i=0;i<NUM;i+)temp=new PCB; temp->name=i;temp->runtime=rand%20; temp->runedtime=0;temp->next=NULL; temp->killtime=0;if(i=0) top=temp; tail=temp; elsetail->next=temp; tail=temp;printf(“process name %d, runtime=%d, runedtime=%d,killtime=%dn“,tail->name,tail->runtime,tail->runedtime,tail->killtime);while(top!=NULL)runqueue=top; top=top->next;runqueue->next=NULL;runqueue->runtime= runqueue->runtime-timeslice; if(runqueue->runtime<=0)runqueue->killtime=runqueue->runtime+timeslice;runqueue->runedtime=runqueue->runedtime+runqueue->killtime; runqueue->runtime=0;printf(“process name %d, runtime=%d, runedtime=%d,killtime=%dn“,runqueue->name,runqueue->runtime,runqueue->runedtime,runqueue->killtime);elserunqueue->killtime=timeslice;runqueue->runedtime=runqueue->runedtime+runqueue->killtime; printf(“process name %d, runtime=%d, runedtime=%d,killtime=%dn“,runqueue->name,runqueue->runtime,runqueue->runedtime,runqueue->killtime); tail->next=runqueue;tail=tail->next;图 4.36) 运行结果,包括各个进程的运行挨次,每次占用处理机的运行时间,可以参考以下输出如图 4.3。七、试验步骤1) 进入 vi 编辑器2) 在编译器中输入所要运行的程序代码3) 退出编辑器,返回命令行输入方式,使用 gcc 编译器编译程序,获得能运行的目标程序。4) 运行目标程序,查看运行结果。八、留意事项1) 修改时间片大小,查看对试验结果的影响。2) 随机数的产生由 rand函数实现,rand的输出随机数范围在 0215之间,需要转换到 020 范围。3) 留意链表节点的插入,删除方法。九、试验报告要求需要列出运行了的程序清单及相应结果,并对结果进展分析和争论。对结果的分析主要争论时间片大小对程序执行的影响?试验四 进程间通信一、试验类型本试验为设计性试验二、试验目的与任务了解 Linux 系统中的进程管道通信的根本原理,并能编写简洁的管道通信的程序。三、预习要求1) 生疏进程通信的概念2) 生疏管道通信的根本原理3) 用到的系统调用有 pipe四、试验根本原理试验利用 Linux 操作系统供给的系统调用 pipe来实现两个进程之间的通信。输入进程从管道的一端输入数据,另一个进程从管道的另一端读数据,通过这种方式来实现进程间的通信。五、试验仪器与设备或工具软件试验设备:计算机一台,软件环境要求:安装 Red Hat Linux 操作系统和 gcc 编译器。六、试验内容编制一段程序,实现进程管道通信。使用系统调用pipe建立一条管道。两个子进程 P1 和 P2 分别向管道各写一句话:Child process 1 is sending message! Child process 2 is sending message!而父进程则从管道中读出来自两个子进程的信息,显示在屏幕上。参考程序程序如下#include<unistd.h> #include<signal.h> #include<stdio.h> int pid1,pid2; mainint fd2;char OutPipe100,InPipe100; pipe(fd); while(pid1=fork)=-1); if(pid1=0)lockf(fd1,1,0);sprintf(OutPipe,“n Child process 1 is sending message!n“); write(fd1,OutPipe,50);sleep(5); lockf(fd1,0,0); exit(0);else while(pid2=fork)=-1); if(pid2=0) lockf(fd1,1,0);sprintf(OutPipe,“n Child process 2 is sending message!n“); write(fd1,OutPipe,50);sleep(5); lockf(fd1,0,0); exit(0);else wait(0);read(fd0,InPipe,50); printf(“%sn“,InPipe); wait(0); read(fd0,InPipe,50); printf(“%sn“,InPipe); exit(0);七、试验步骤1) 进入 vi 编辑器2) 在编译器中输入所要运行的程序代码3) 退出编辑器,返回命令行输入方式,使用 gcc 编译器编译程序,获得能运行的目标程序。4) 运行目标程序,查看运行结果。八、留意事项1) 管道按怎样的方式传送消息?是否能够双向传送消息?2) 在管道通信方式中,如何来实现进程同步与互斥的?3) pipe函数的使用可参看第一局部的介绍。九、试验报告要求需要列出运行了的程序清单及相应结果,并对结果进展分析和争论。对结果的分析主要争论管道通信方式的特点,试验结果是否表达该特点。试验五 存储治理试验一、试验类型本试验为综合性试验。二、试验目的与任务1) 理解动态异长存储分区资源治理2) 把握所需数据构造和治理程序3) 了解各种存储安排算法的优点和缺点。4) 编程实现动态不等长存储治理的模拟程序。三、预习要求1) 进程掌握的概念及内容2) 生疏存储治理的概念3) 了解动态分区治理的思想,生疏安排算法和回收算法4) 生疏 c 语言编程,指针及构造体等学问5) 数据构造中的链表的建立及根本操作四、试验根本原理使用一个一维数组来模拟内存储空间,建立内存块来记录内存安排使用状况,通过随机产生进程及其所需要的内存来模拟真实的进程。通过给进程安排内存及回收来实现对动态不等长存储治理方法。五、试验仪器与设备或工具软件试验设备:计算机一台,软件环境要求:安装 Red Hat Linux 操作系统和 gcc 编译器。六、试验内容1) 试验中使用的数据构造(1) 内存块表,包括参数进程名 name;起始地址 address;长度 length;标志 flag,表示该块是否被安排。(2) 为简洁起见,只设内存安排记录链表数据构造,用来记录内存安排与空闲情况。2) 试验中假设有假设干个进程,如 5 个,每个需要空间随机产生,为 020 之间的整数,进程名字试验者自己定义,可以是一个整数。3) 其他一些参数,如内存空间的大小试验者自己定义,建议为 100;4) 为了得到清楚的试验结果,建议先给每个进程安排存储空间,后进展回收。5程序的流程图如图 5.1, 图 5.2, 图 5.3建立链表初始化链表,表示整个存储空间对 5 个进程分别安排空间回收 1 个进程完毕程序图 5.1 总的流程图查找链表,找到一个大于或等于进程所需空间的空闲节点否是|节点空间 - 进程空间|<minsize将节点安排给该进程,即修改相应参数将该节点空间分割成两局部,分别修改其参数,插入链表安排完毕图 5.2 安排流程图查找链表,找到相应记录进程使用内存的节点回收该节点,即修改有关参数分四种状况回收空间左右都为空左右都不为空闲节点仅左都为空仅右都为空与合并左右节点,即修改相应参数, 删除多余节点与左节点合并,即修改相应参数,删除多余节点与右节点合并,即修改相应参数,删除多余节点直接修改该节点的参数回收完毕图 5.3 回收流程图6) 参考程序#include “math.h“ #include “stdafx.h“ #include “stdio.h“#include “stdlib.h“typedef struct MEMORY_BLOCKint name; int address; int length; int flag;MEMORY_BLOCK *next;MEMORY_BLOCK;int allocation(MEMORY_BLOCK *Header,int name,int time); int reclaim(int processname, MEMORY_BLOCK *Header); int main#define NUM 10 int time,i;MEMORY_BLOCK *Header,*t;Header=new MEMORY_BLOCK;/初始化存储空间Header->name=-1;Header->address=0; Header->length=100; Header->flag=0; Header->next=NULL; srand(100); for(i=0;i<NUM;i+)time=rand%20;/ time=time%20; allocation(Header,i,time);t=Header; while(t!=NULL)printf(“process name %d, address=%d, length=%d,flag=%dn“,t->name,t->address,t->length,t->flag); t=t->next;int processname=3;/回收printf(“回收 process name %dn“,processname); reclaim(processname,Header);t=Header;while(t!=0)printf(“process name %d, address=%d, length=%d,flag=%dn“,t->name,t->address,t->length,t->flag); t=t->next;processname=4;printf(“回收 process name %dn“,processname); reclaim(processname,Header);t=Header; while(t!=0)printf(“process name %d, address=%d, length=%d,flag=%dn“,t->name,t->address,t->length,t->flag); t=t->next;return 1;int reclaim(int processname, MEMORY_BLOCK *Header)MEMORY_BLOCK *temp,*t,*tt; t=Header;temp=t;while(t->name!=processname)temp=t; t=t->next;if(t=0) printf(“no process“);return 0; else if(t->next!=NULL)if(temp->flag=0&&t->next->flag=0)/左右为空temp->name=-1;temp->length=temp->length+t->length+t->next->length; tt=t->next;temp->next=tt->next; delete tt;de

    注意事项

    本文(《计算机操作系统》实验指导书.docx)为本站会员(1564****060)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开