操作系统原理实验报告汇总

上传人:痛*** 文档编号:84431747 上传时间:2022-05-03 格式:DOC 页数:28 大小:750.50KB
返回 下载 相关 举报
操作系统原理实验报告汇总_第1页
第1页 / 共28页
操作系统原理实验报告汇总_第2页
第2页 / 共28页
操作系统原理实验报告汇总_第3页
第3页 / 共28页
点击查看更多>>
资源描述
键入文字 XX 学校实验报告课程名称:学院:专业班:姓名:学号:指导教师:2011年3月目录实验 1进程管理3一、实验目的3二、实验内容3三、实验要求3四、程序说明和程序流程图4五、程序代码5六、程序运行结果及分析7七指导教师评议8实验 2进程通信9一、实验目的9二、实验内容9三、实验要求9四、程序说明和程序流程图9五、程序代码11七指导教师评议14实验 3存储管理15一、实验目的15二、实验内容15三、实验要求15四、程序说明和程序流程图16六、程序运行结果及分析231七指导教师评议23实验 4文件系统24一、实验目的24二、实验内容24三、实验要求24四、程序说明和程序流程图24五、程序代码26六、程序运行结果及分析26七指导教师评议272实验 1进程管理一、实验目的1. 弄清进程和程序的区别,加深对进程概念的理解。2. 了解并发进程的执行过程,进一步认识并发执行的实质。3. 掌握解决进程互斥使用资源的方法。二、实验内容1. 管道通信使用系统调用pipe( )建立一个管道, 然后使用系统调用fork( ) 创建 2 个子进程p1 和 p2。这 2 个子进程分别向管道中写入字符串:“ Child process p1 is sending message!”和“ Childprocess p2 is sending message !”,而父进程则从管道中读出来自两个子进程的信息,并显示在屏幕上。2. 软中断通信使用系统调用fork( )创建 2 个子进程p1 和 p2,在父进程中使用系统调用signal( )捕捉来自键盘上的软中断信号SIGINT( 即按 Ctrl-C) ,当捕捉到软中断信号SIGINT 后,父进程使用系统调用kill()分别向 2 个子进程发出软中断信号SIGUSR1 和 SIGUSR2 ,子进程捕捉到信号后分别输出信息“Child process p1 is killed by parent !”和“ Child process p2 is killed byparent!”后终止。而父进程等待 2 个子进程终止后,输出信息“ Parent process is killed !”后终止。三、实验要求1. 根据实验内容编写 C 程序。2. 上机调试程序。3. 记录并分析程序运行结果。3四、程序说明和程序流程图实验 1 管道通信所涉及的流程图:实验 2 软中断信号所涉及的流程图:4五、程序代码/*expe1_1.c*/#include void main( )int i, r, p1, p2, fd2;char buf50, s50;pipe(fd);/* 父进程建立管道*/while (p1=fork()=-1);/* 创建子进程P1,失败时循环*/if (p1=0)/*由子进程P1 返回,执行子进程P1 */lockf(fd1, 1, 0);/* 加锁锁定写入端*/sprintf(buf, Child process P1 is sending messages! n);printf(Child process P1! n);write(fd1, buf, 50);/*把 buf 中的 50 个字符写入管道*/sleep(5);/* 睡眠 5 秒,让父进程读*/lockf(fd1, 0, 0);/* 释放管道写入端*/exit(0);/*关闭 P1*/else/* 从父进程返回,执行父进程*/while (p2=fork()=-1);/* 创建子进程P2,失败时循环*/if (p2=0)/*从子进程P2 返回,执行子进程P2 */lockf(fd1, 1, 0);/* 锁定写入端*/sprintf(buf, Child process P2 is sending messages! n);printf(Child process P2! n);write(fd1, buf, 50);/*把 buf 中的字符写入管道*/sleep(5);/* 睡眠 5 秒,让父进程读*/lockf(fd1, 0, 0);/* 释放管道写入端*/exit(0);/*关闭 P2*/wait(0);if (r=read(fd0, s, 50)= -1)printf(cannot read pipe! n);else printf(%s, s);wait(0);if (r=read(fd0, s, 50)= -1)printf(cannot read pipe! n);else printf(%s, s);exit(0);5/*exp1-2.c*/#include#include#includeint p1,p2;void main()void ppdo();void p1do();void p2do();signal(SIGINT,ppdo);p1=fork();if(p1=0)signal(SIGUSR1,p1do);for(;);else p2=fork();if(p2=0) signal(SIGUSR2,p2do);for(;);wait(0);wait(0);printf(nParent process is killed!n);exit(0);void ppdo()kill(p1,SIGUSR1);kill(p2,SIGUSR2);void p1do()printf(nChild process p1 is killed by parent!n);exit(0);void p2do()printf(nChild process p2 is killed by parent!n);exit(0);6六、程序运行结果及分析实验 1 管道通信运行结果截图实验 1 管道通信结果分析父进程建立后,创建了子进程P1, P2,然后 P1, P2 分别向管道中写入字符串“Childprocess p1 is sending message!”和“Child process p2 is sending message!”,父进程从管道中读取字符串。实验 2 软中断通信运行结果截图实验 2 软中断通信结果分析先预设中断信号SIGINT ,再先后创建子进程P1 和 P2,预设中断信号SIGUSR1 ,SIGUER2 ,当我们按下“ Ctrl+C ”时,父进程发出中断信号SIGUSR1 和 SIGUSR2 ,通知子进程 P1 和 P2,子进程捕捉到信号后分别输出相应的信息后,终止,最后输出 “Parent processis killed! ”后终止。实验后思考:通过这次实验, 深刻地了解到了管道通信和软中断通信的详细过程,深化了老师课堂上的讲解,对整个过程的把握也更加清晰了。7很值得的一次学习经历,做完实验, 再画流程图, 程序运行的细节熟悉于心,了如指掌。七指导教师评议成绩等级8实验 2进程通信一、实验目的1. 了解进程间通信 IPC 的三种方式:消息队列、共享内存和信号量。2. 掌握使用消息队列进行进程间通信的有关系统调用和编程方法。3. 掌握使用共享内存进行进程间通信的有关系统调用和编程方法。二、实验内容1. 消息队列使用系统调用msgget( )、msgsnd( )、msgrcv( )和 msgctl( ) ,用消息队列机制实现客户进程和服务器进程间的通信。客户进程首先建立一个描述符为msgqid 的消息队列,接着向服务器进程发送一个消息正文为自己的进程标识pid 且类型为1 的消息,然后接收来自服务器进程的消息,并在屏幕上显示:“ Client receives a message from xxxx !”,其中“ xxxx ”为服务器进程的进程标识。服务器进程首先捕捉软中断信号(除不能捕捉的SIGKILL) ,若捕捉到时则调用函数cleanup( )删除消息队列,终止服务器进程。否则重复下列操作:接收所有类型为 1 的消息,并在屏幕上显示:“ Server receives a message from xxxx !”,其中“ xxxx ”为客户进程的进程标识;然后服务器进程将客户进程的进程标识作为返回消息的类型,而将自己的进程标识作为消息正文发送给客户进程。2. 共享内存使用系统调用 shmget( )、 shmat( )和 shmctl( ),用共享内存机制实现进程间的通信。其中一个进程向共享内存中写入数据,另一个进程从共享内存中读出数据并显示在屏幕上。三、实验要求1. 根据实验内容编写 C 程序。2. 上机调试程序。3. 记录并分析程序运行结果。四、程序说明和程序流程图实验 1 消息队列流程图910五、程序代码实验 1 消息队列/* msg_client.c */#include #include #include #define MSGKEY 75struct msgformlong mtype;char mtext256;main()struct msgform msg;int msgqid,pid,*pint;/*文件主同组用户其他用户rwxrwxrwx */msgqid=msgget(MSGKEY,0777);/* rw-rw-rw- */pid=getpid();pint=(int*)msg.mtext;*pint=pid;msg.mtype=1;msgsnd(msgqid,&msg,sizeof(int),0);msgrcv(msgqid,&msg,256,pid,0);printf(client: receive from pid %dn,*pint);/* msg_server.c */#include #include #include #define MSGKEY 75struct msgform long mtype;char mtext256;msg;int msgqid;main()int i,pid,*pint;extern cleanup();for (i=0;i20;i+)signal(i,cleanup);msgqid=msgget(MSGKEY ,0777|IPC_CREAT);for (;) msgrcv(msgqid,&msg,256,1,0);11pint=(int*)msg.mtext;pid=*pint;printf(server: receive from pid %dn,pid);msg.mtype=pid;*pint=getpid();msgsnd(msgqid,&msg,sizeof(int),0);cleanup()msgctl(msgqid,IPC_RMID,0);exit(0);实验 2 共享内存#include#include#include#define SHMKEY 75#define K 1024int shmid;main()int i, * pint;char * addr;extern char * shmat();shmid = shmget(SHMKEY, 8 * K, 0777);addr = shmat (shmid,0,0);pint = (int *)addr;while ( * pint=0 )for (i=0; i256; *pint+)printf(%dn, *pint+);#include#include#include#define SHMKEY 75#define K 1024int shmid;main()int i, * pint;char * addr;extern char * shmat();12extern cleanup();for(i=0; i20; i+)sinal (i, cleanup);shmid = shmget (SHMKEY, 16 * K, 0777|IPC_CREAT);addr = shmat (shmid,0,0);printf(addr 0x%x n, addr);pint = (int *)addr;for(i=0; i256; i+)*pint+ =i;pint = (int *)addr;*pint = 256;pause();cleanup()shmctl (shmid, IPC_RMID, 0);exit(0);六、程序运行结果及分析实验 1 消息队列运行结果截图客户端:服务器端:13实验 1 消息队列结果分析服务端程序监听软中断,建立消息队列,循环在队列中接收类型为1 的消息,每接收一个消息向队列中增加一个类型为客户进程ID 的消息。当发生软中断时,删除消息队列。客户端进程创建和服务端相同的消息队列,并向消息队列中发送类型为1 的消息,然后接收类型为客户进程ID 的消息。实验后思考:对消息队列的运行情况有所了解,但关于内存共享部分尚需仔细研究。七指导教师评议成绩等级14实验 3存储管理一、实验目的1. 了解虚拟存储管理技术的原理与特点。2. 掌握请求页式存储管理的页面置换算法。二、实验内容1. 通过随机数产生一个指令序列,共320 条指令。指令的地址按下述原则生成:(1) 50%的指令是顺序执行的;(2) 25%的指令均匀分布在前地址部分;(3) 25%的指令均匀分布在后地址部分。实现方法:(1) 在 0, 319 的指令地址中随机选取一起点s;(2) 执行指令 s;(3) 顺序执行一条指令,即执行地址为s+1 的指令;(4)在前地址 0, s中随机选取一条地址为m 的指令执行;(5)顺序执行一条指令,即执行地址为m+1的指令;(6)在后地址 m+2 ,319 中随机选取一条指令s;(7) 重复 (2) (6) ,直到执行 320 次指令。2. 将指令序列变换为页地址流,设:(1) 页面大小为 1K ;(2) 用户内存容量为 4 32 页面 (page frame);(3) 用户虚存容量为32K( 即 32 页 )。若 10 条指令为 1 页,则 320 条指令在虚存中的存放方式为:第 0 页(虚存地址 0,9) 第 0 条第 9 条指令;第 1 页 (虚存地址 10 , 19) 第 10 条第 19 条指令;?第 31 页 (虚存地址 310, 319) 第 310 条 第 319 条指令。3. 计算并输出下列算法在不同内存容量下的命中率(命中率 =1-缺页率 )。(1) FIFO First In First Out Page Replacement Algorithm(2) LRU Least Recently Used Page Replacement Algorithm三、实验要求1. 根据实验内容编写 C 程序。2. 上机调试程序。3. 记录并分析程序运行结果。15四、程序说明和程序流程图程序说明为:1. 通过随机数产生一个指令序列,共320 条指令。指令的地址按下述原则生成:(1) 50%的指令是顺序执行的;(2) 25%的指令均匀分布在前地址部分;(3) 25%的指令均匀分布在后地址部分。实现方法:(1) 在 0, 319 的指令地址中随机选取一起点s;(2) 执行指令 s;(3) 顺序执行一条指令,即执行地址为s+1 的指令;(4)在前地址 0, s中随机选取一条地址为m 的指令执行;(5)顺序执行一条指令,即执行地址为m+1的指令;(6)在后地址 m+2 ,319 中随机选取一条指令s;(7) 重复 (2) (6) ,直到执行 320 次指令。2. 将指令序列变换为页地址流,设:(1) 页面大小为 1K ;(2) 用户内存容量为 4 32 页面 (page frame);(3) 用户虚存容量为32K( 即 32 页 )。若 10 条指令为 1 页,则 320 条指令在虚存中的存放方式为:第 0 页(虚存地址 0,9) 第 0 条第 9 条指令;第 1 页 (虚存地址 10 , 19) 第 10 条第 19 条指令;?第 31 页 (虚存地址 310, 319) 第 310 条 第 319 条指令。3. 计算并输出下列算法在不同内存容量下的命中率(命中率 =1-缺页率 )。(1) FIFO First In First Out Page Replacement Algorithm(2) LRU Least Recently Used Page Replacement Algorithm流程图:16五、程序代码#include #include / #include /* Windows环境, getpid()原型在 process.h 中 */#define TRUE 1#define FALSE 0#define INV ALID -1#define NULL 0#define total_instruction 320/* 指令条数 */#define total_vp 32/*虚页数 */#define clear_period 50/*NRU 清 0周期 */typedef struct /*页表结构 */int pn,pfn,counter,time;/* counter(LFU) ,time(LRU) */ pl_type;pl_type pltotal_vp;/* 页表 */struct pfc_struct /*存储页面表 */int pn,pfn;struct pfc_struct *next;17;typedef struct pfc_struct pfc_type;pfc_type pfctotal_vp,*freepf_head,*busypf_head,*busypf_tail;int diseffect,atotal_instruction; /* 缺页次数,指令流 */ int pagetotal_instruction,offsettotal_instruction;void initialize(int);void fifo(int);void lru(int);void opt(int); void lfu(int); void nur(int);void main()int s,i,j;srand(getpid()*10);/* 进程标识作为随机数种子*/s=(float)319*rand()/2147483647;/* 0319 */ s=(float)319*rand()/32767;/* 0319 */for (i=0; itotal_instruction; i+=4) ai=s;/* s=0319 */ai+1=ai+1;/* s+1 */ai+2=(float)ai*rand()/2147483647;/*m=0s*/ ai+2=(float)ai*rand()/32767;/*m=0s*/ai+3=ai+2+1;/* m+1*/s=(float)rand()*(317-ai+2)/2147483147+ai+2+2;/* m+2319 */ s=(float)rand()*(317-ai+2)/32767+ai+2+2;/* m+2319 */for (i=0;itotal_instruction;i+)pagei=ai/10;offseti=ai%10;for (i=4;i=32;i+)/* 用户内存工作区4-32 个页面*/printf(%2d page frames,i);fifo(i);lru(i);opt(i); lfu(i); nur(i);printf(n);void initialize(int total_pf)int i;diseffect=0;for (i=0;itotal_vp;i+)18pli.pn=i;pli.pfn=INVALID;pli.counter=0;pli.time=-1;for (i=1;itotal_pf;i+)pfci-1.next=&pfci;pfci-1.pfn=i-1;pfctotal_pf-1.next=NULL;pfctotal_pf-1.pfn=total_pf-1;freepf_head=&pfc0;void fifo(int total_pf)int i,j;pfc_type *p;initialize(total_pf);busypf_head=busypf_tail=NULL;/*置忙页面队列为空*/for (i=0;inext;plbusypf_head-pn.pfn=INVALID;freepf_head=busypf_head;/* 释放忙队列中的第1 个页面 (淘汰 1 页 ),即出队*/freepf_head-next=NULL;busypf_head=p;/* 插入到空闲页面链表*/p=freepf_head-next;freepf_head-next=NULL;freepf_head-pn=pagei;plpagei.pfn=freepf_head-pfn;if (busypf_tail=NULL)/* 忙队列为空时,入队*/busypf_head=busypf_tail=freepf_head;else/*忙队列为非空时,入队*/ busypf_tail-next=freepf_head;busypf_tail=freepf_head;freepf_head=p;printf( FIFO: %6.4f,1-(float)diseffect/320);void lru(int total_pf)int min,minj,i,j,present_time;initialize(total_pf);present_time=0;19for (i=0;itotal_instruction;i+)if (plpagei.pfn=INVALID)diseffect+;if (freepf_head=NULL)min=32767;for (j=0;jplj.time&plj.pfn!=INVALID) min=plj.time;minj=j;freepf_head=&pfcplminj.pfn;/*插入空闲链表*/plminj.pfn=INVALID;plminj.time=-1;freepf_head-next=NULL;plpagei.pfn=freepf_head-pfn;plpagei.time=present_time;freepf_head=freepf_head-next;else plpagei.time=present_time;present_time+;printf( LRU: %6.4f,1-(float)diseffect/320);void opt(int total_pf)int i,j,max,maxpage,d,disttotal_vp;initialize(total_pf);for (i=0;itotal_instruction;i+) if (plpagei.pfn=INVALID) diseffect+;if (freepf_head=NULL) for (j=0;jtotal_vp;j+)if (plj.pfn!=INVALID) distj=32767;else distj=0;/* 页在内存中距离非0,不在内存距离为0 */d=1;/*计算内存中页面与当前访问页面的距离*/for (j=i+1;jtotal_instruction;j+) if (plpagej.pfn!=INVALID) distpagej=d;d+;max=-1;/* 淘汰距离最远的页*/20for (j=0;jtotal_vp;j+)if (maxnext=NULL;plmaxpage.pfn=INV ALID;plpagei.pfn=freepf_head-pfn;freepf_head=freepf_head-next;printf( OPT: %6.4f,1-(float)diseffect/320);void lfu(int total_pf)int i,j,min,minpage;initialize(total_pf);for (i=0;itotal_instruction;i+) if (plpagei.pfn=INVALID) diseffect+;if (freepf_head=NULL) min=32767;for (j=0;jplj.counter & plj.pfn!=INVALID) min=plj.counter;minpage=j;plj.counter=0;freepf_head=&pfcplminpage.pfn;plminpage.pfn=INV ALID;freepf_head-next=NULL;plpagei.pfn=freepf_head-pfn;freepf_head=freepf_head-next;elseplpagei.counter+;printf( LFU: %6.4f,1-(float)diseffect/320);void nur(int total_pf) int i,j,dp,cont_flag,old_dp;initialize(total_pf);dp=0;for (i=0;itotal_instruction;i+)21 if (plpagei.pfn=INVALID) diseffect+;if (freepf_head=NULL) cont_flag=TRUE;old_dp=dp;while (cont_flag)if (pldp.counter=0&pldp.pfn!=INVALID)cont_flag=FALSE;else dp+; if (dp=total_vp) dp=0; if (dp=old_dp)for (j=0;jnext=NULL;plpagei.pfn=freepf_head-pfn;freepf_head=freepf_head-next;else plpagei.counter=1;if (i%clear_period=0)for (j=0;jtotal_vp;j+) plj.counter=0;printf( NUR: %6.4f,1-(float)diseffect/320);22六、程序运行结果及分析实验运行结果截图:实验结果分析:先随机产生320 条指令,然后转化为页地址流,分别执行FIFO , LRU , OPT, LFU ,NUR 算法,计算出不同算法的命中率,结果显示如上图。实验后思考:把单单从课堂上学到的知识, 更加熟练的应用出来, 体会到了计算机学科 (操作系统与计算机组成)之间的互相联系。七指导教师评议成绩等级23实验 4文件系统一、实验目的1. 了解文件系统的功能和内部实现。2. 熟悉有关文件系统的系统调用。3. 掌握简单文件系统的设计方法。二、实验内容1. 使用有关文件系统的系统调用 creat( )、open( )、close( ) 、read( )和 write( ) 将文件 file1.c 和 file2.c 合并为 file3.c 。2. 为 Linux 系统设计一个二级目录结构的文件系统,要求具有下列功能:(1) 向用户提供以下命令:login 用户登录dir列文件目录create创建文件delete删除文件open打开文件close关闭文件read读文件write 写文件(2) 文件可进行读写保护。(3) 列文件目录时须列出文件名、文件属性(保护信息 )、文件长度和物理地址。三、实验要求1. 根据实验内容编写 C 程序。2. 上机调试程序。3. 记录并分析程序运行结果。四、程序说明和程序流程图程序说明:首先先打开文件 file1.c , file2.c ,再创建文件 file3.c ,从前面的两个文件中读出相应的内容,写如第三个文件中,之后再关闭三个文件。流程图:2425五、程序代码#include void main(argc, argv)int argc;char *argv;int fd1, fd2, fd3, n;char buf512, ch=n;fd1=open(argv1, 0);/* 打开 argv1 对应的文件,返回标识符fd1 */fd2=open(argv2, 0);/* 打开 argv2 对应的文件,返回标识符fd2 */fd3=creat(argv3, 0664);/*创建 argv3 对应的文件,返回标识符fd3 */while (n=read(fd1, buf, 512)0) write(fd3, buf, n);write(fd3, &ch, 1);while (n=read(fd2, buf, 512)0) write(fd3, buf, n);close(fd1);close(fd2);close(fd3);六、程序运行结果及分析运行结果截图:图 4-1 file1.c 文件中的内容图 4-2 file2.c 文件中的内容26图 4-3 运行后 file3.c 文件中的内容实验结果分析:首先先打开文件file1.c , file2.c ,再创建文件file3.c ,从前面的两个文件中读出相应的内容,写如第三个文件中,之后再关闭三个文件,最终file3.c 文件中出现图4-3 内容。实验后思考:通过本次实验,清楚地了解了Linu 文件系统的部分指令。七指导教师评议成绩等级27
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


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

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


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