《2022年操作系统实验报告全 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验报告全 .pdf(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、河南省高等教育自学考试实 验 报 告 册计算机及应用专业(本科段)操作系统姓名准考证号所属地市实验地点实验日期实验总成绩指导教师签名实验单位(实验室)意见:主考院校审核意见:河南科技大学自学考试办公室二 零 一 零 年 三 月名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -实验一单处理器系统的进程调度模拟#include stdio.h#define running 1/*用 running 表示进程处于运行态*/#define aready 2/*用 aready 表示进程处于就绪态*/#define blocking 3/*用 blocking表示进程处于等待态*
2、/#define sometime 5/*用 sometime 表示时间片大小*/#define n 10/*假定系统允许进程个数为10*/struct int name;/*进程标识符*/int status;/*进程状态*/int ax,bx,cx,dx;/*进程现场信息,通用寄存器内容*/int pc;/*进程现场信息,程序计数器内容*/int psw;/*进程现场信息,程序状态字寄存器内容*/int next;/*下一个进程控制块的位置*/pcbarean;/*定义模拟进程控制块区域的数组*/int PSW,AX,BX,CX,DX,PC,TIME;/*模拟寄存器*/int run;/*
3、定义指向正在运行进程的进程控制块的指针*/struct int head;int tail;ready;/*定义指向就绪队列的头指针head 和尾指针tail*/int block;/*定义指向等待队列的指针*/int pfree;/*定义指向空闲进程控制块队列的指针*/sheduling()/*进程调度函数*/int i;if(ready.head=-1)/*空闲进程控制块队列为空,退出*/printf(无就绪进程 n);return 0;i=ready.head;/*就绪队列头指针赋给i*/ready.head=pcbareaready.head.next;/*就绪队列头指针后移*/if(
4、ready.head=-1)ready.tail=-1;/*就绪队列为空,修正尾指针ready.tail*/pcbareai.status=running;/*修改进程控制块状态*/TIME=sometime;/*设置相对时钟寄存器*/*恢复该进程现场信息:*/AX=pcbarearun.ax;BX=pcbarearun.bx;CX=pcbarearun.cx;DX=pcbarearun.dx;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -PC=pcbarearun.pc;PSW=pcbarearun.psw;/*修改指向运行进程的指针*/run=i;return
5、0;/*进程调度函数结束*/create(int x)/*创建进程*/int i;if(pfree=-1)/*空闲进程控制块队列为空*/printf(无空闲进程控制块,进程创建失败n);return 0;i=pfree;/*取空闲进程控制块队列的第一个*/pfree=pcbareapfree.next;/*pfree后移*/*填写该进程控制块内容:*/pcbareai.name=x;pcbareai.status=aready;pcbareai.ax=x;pcbareai.bx=x;pcbareai.cx=x;pcbareai.dx=x;pcbareai.pc=x;pcbareai.psw=x
6、;if(ready.head!=-1)/*就绪队列不空时,挂入就绪队列方式*/pcbareaready.tail.next=i;ready.tail=i;pcbareaready.tail.next=-1;else /*就绪队列空时,挂入就绪队列方式:*/ready.head=i;ready.tail=i;pcbareaready.tail.next=-1;/*进程创建函数结束*/main()/*系统初始化*/名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -int num,j;run=ready.head=ready.tail=block=-1;pfree=0;for
7、(j=0;j0)create(num);scanf(%d,&num);sheduling();if(run!=-1)printf(进程名进程状态寄存器内容:ax bx cx dx pc psw:n);printf(%4d%10d%14d%3d%3d%3d%3d%3dn,pcbarearun.name,pcbarearun.status,pcbarearun.ax,pcbarearun.bx,pcbarearun.cx,pcbarearun.dx,pcbarearun.pc,pcbarearun.psw);return 0;/*main()结束*/实验二可变分区管理方式的主存分配回收模拟一、实验
8、目的深入了解动态分区存储管理方式主存分配回收的实现。/动态分区存储管理方式的主存分配回收#include#include#include#include#include#define n 10/假定系统允许的最大作业为,假定模拟实验中n 值为 10#define m 10/假定系统允许的空闲区表最大为m,假定模拟实验中m值为 10#define minisize 100 ofstream out(output.txt);typedef struct 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -float address;/已分分区起始地址float length;
9、/已分分区长度,单位为字节int flag;/已分配区表登记栏标志,用0 表示空栏目,实验中只支持一个字符的作业名used;/已分配区表 used used_tablen;typedef struct float address;/空闲区起始地址float length;/空闲区长度,单位为字节int flag;/空闲区表登记栏标志,用0 表示空栏目,用1 表示未分配freed;/空闲区表freed free_tablem;/采用最优分配算法分配xk 大小的空间void allocate(char J,float xk)int i,k;float ad;k=-1;for(i=0;i=xk&fr
10、ee_tablei.flag=1)if(k=-1|free_tablei.lengthfree_tablek.length)k=i;if(k=-1)/未找到可用空闲区,返回 cout 无可用空闲区endl;return;/找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于msize 大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配if(free_tablek.length-xk=minisize)free_tablek.flag=0;ad=free_tablek.address;xk=free_tablek.length;els
11、e free_tablek.length=free_tablek.length-xk;ad=free_tablek.address+free_tablek.length;/修改已分配区表i=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 10 页 -/寻找空表目while(used_tablei.flag!=0&i=n)cout 已分配区表长度不足,分配失败,出错endl;/修正空闲区表if(free_tablek.flag=0)free_tablek.flag=1;/前面找到的是某个空闲分区的一部分else free_tablek.length=free_tablek.le
12、ngth+xk;return;/修改已分配表else used_tablei.address=ad;used_tablei.length=xk;used_tablei.flag=J;return;/回收作业名为J 的作业所占主存空间void reclaim(char J)int i,k,j,s,t;float S,L;/寻找已分配表中对应登记项s=0;while(used_tables.flag!=J|used_tables.flag=0)&s=n)cout 未找到作业,回收失败endl;return;/修改已分配表used_tables.flag=0;/取得归还分区的起始地址S 和长度 L
13、S=used_tables.address;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 10 页 -L=used_tables.length;j=-1;k=-1;/寻找回收分区的空闲上下邻,上邻表目k,下邻表目j i=0;while(im&(j=-1|k=-1)if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length=S)k=i;/找到上邻if(free_tablei.address=S+L)j=i;/找到下邻 i+;if(k!=-1)if(j!=-1)/上邻空闲区,下邻空闲区,三项合并 free_tabl
14、ek.length=free_tablej.length+free_tablek.length+L;free_tablej.flag=0;else /上邻空闲区,下邻非空闲区,与上邻合并 free_tablek.length=free_tablek.length+L;else if(j!=-1)/上邻非空闲区,下邻为空闲区,与下邻合并 free_tablej.address=S;free_tablej.length=free_tablej.length+L;else /上下邻均为非空闲区,回收区域直接填入 /在空闲区表中寻找空栏目 t=0;while(free_tablet.flag=1&t=
15、m)/空闲区表满,回收空间失败,将已分配表复原 cout主存空闲表没有空间,回收空间失败 endl;used_tables.flag=J;return;free_tablet.address=S;free_tablet.length=L;free_tablet.flag=1;return;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 10 页 -/主函数void main()int i,j;float xk;char s;ifstream in(input.txt);/空闲分区表初始化free_table0.address=10240;free_table0.length=10
16、2400;free_table0.flag=1;for(i=1;im;i+)free_tablei.flag=0;/已分配表初始化for(i=0;in;i+)used_tablei.flag=0;while(1)cout 请输入演示功能项:endl;cout=endlendl;cout 0.退出 endlendl;cout 1.分配主存 endlendl;cout 2.回收主存 endlendl;cout 3.显示主存 endlendl;cout=endlendl;cout 请输入(0 3):j;coutjendl;coutendl;switch(j)case 0:exit(0);case 1
17、:cout输入作业名s(注意:只能是一个字符):s;coutsendl;cout作业所需长度xk:xk;coutxkendl;allocate(s,xk);break;名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 10 页 -case 2:cout输入要回收分区的作业名(注意:只能是一个字符)s;coutsendl;reclaim(s);break;case 3:cout输出空闲区表:n 起始地址分区长度标志 n;for(i=0;im;i+)coutsetw(6)free_tablei.addresssetw(9)free_tablei.lengthsetw(6)free_ta
18、blei.flagendl;cout 输出已分配区表:n 起始地址分区长度标志 n;for(i=0;in;i+)if(used_tablei.flag!=0)coutsetw(6)used_tablei.addresssetw(9)used_tablei.lengthsetw(6)char(used_tablei.flag)endl;else coutsetw(6)used_tablei.addresssetw(9)used_tablei.lengthsetw(6)used_tablei.flagendl;break;default:cout没有该选项 endl;/case/while/主函数
19、结束实验三文件操作模拟读取 file1的内容以行为单位倒置输出到file2中(改进)这两个加一起是一个的答案import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 10 页 -public class Test publi
20、c static void main(String args)throws IOException File file1=new File(D:/f1.txt);File file2=new File(D:/f2.txt);int c;InputStream input1=System.in;InputStreamReader reader1=new InputStreamReader(input1);FileWriter writer1=new FileWriter(file1);while(c=reader1.read()!=-1)writer1.write(c);writer1.close();FileReader reader2=new FileReader(file1);FileWriter writer2=new FileWriter(file2);ArrayList list=new ArrayList();while(c=reader2.read()!=-1)list.add(c);for(int i=list.size()-1;i=0;-i)writer2.write(list.get(i);writer2.close();名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 10 页 -