课程名称:
实验项目:
实验地点:
专业班级:
学生姓名:指导教师:
操作系统实验学号:
实验一几种操作系统的界面
一、实验目的和要求
(一)目的
本实验的目的是使学生熟悉1—2种操作系统的界面,在熟练使用机器的基础上,能了解各种操作命令和系统调用在系统中的大致工作过程。也就是通过操作系统的外部特征,逐步深入到操作系统的内部实质内容中去。
(二)要求
1.能熟练的在1—2种操作系统的环境下工作,学会使用各种命令,熟悉系统提供的各种功能,主动而有效地使用计算机。
2.熟悉系统实用程序的调用方法和各种系统调用模块的功能和作
二、实验内容和原理
在某种操作系统的环境下建立、修改、运行、打印源程序和结果,最后撤消一个完整的程序。
提示:可按下述步骤进行
1.编写一个完整的源程序,通过编辑命令送入机器,建立源程序文件;
2.编译该源文件,建立相应的目标文件;
3.编译有错时,再用编辑命令修改源文件,消除全部词法和语法错误;
4.连接目标文件,形成可执行文件;
5.执行该文件,得到结果;
6.打印输出源程序和运行结果;
7.撤消本次实验中形成的所有文件。
三、主要仪器设备
HP、ubuntu
四、操作方法与实验步骤
include
defineSEM_NAME"mysem"
defineOPEN_FLAGO_RDWR|O_CREAT
defineOPEN_MODE00777
defineINIT_V0
staticsem_tsem=NULL;
staticvoidmysem(charstr)
inti=0;
while(' '!=str[i])
printf("%c ",str[i++]);
sleep(1);
intmain(void)
pid_tpid=-1;
intret=-1;
intstatus=-1;
/创建一个命名信号量
sem=sem_open(SEM_NAME,OPEN_FLAG,OPEN_MODE,INIT_V);
/创建子进程
pid=fork();
if(-1==(ret=pid))
perror("forkfailed:");
goto_OUT;
if(0==pid)
mysem("abcd");
/V操作
sem_post(sem);
if(0/P操作sem_wait(sem);mysem("1234");/等待子进程结束wait(status);/删掉在系统创建的信号量sem_unlink(SEM_NAME);/彻底销毁打开的信号量sem_close(sem);_OUT:returnret;五、实验数据记录和处理六、实验结果与分析实验二进程调度程序设计一、目的和要求(一)目的进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进程调度和各种调度算法的理解。(二)要求1.设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。2.调度程序应包含2—3种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。3.系统应能显示或打印各进程状态和参数的变化情况,便于观察。二、实验内容和原理1.题目本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假定起始状态都是就绪状态W。为了便于处理,程序中进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。进程控制块结构如表2-1所示:表2-1PCB进程控制块链结构如图2-1所示:RUNHEADTAIL图2-1进程控制块链结构其中:RUN—当前运行进程指针;HEAD—进程就绪链链首指针;TAIL—进程就绪链链尾指针。2.算法与框图程序框图如图2-2所示。图2-2进程调度框图(1)优先数法。进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3。理由是该进程如果在一个时间片中完成不了,优先级应降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2)简单轮转法。进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相应于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:includeincludedefinefurthest5structprocess/PCBSTRUCTURE/{intid;intpriority;intcputime;intalltime;charstate;intne_t;}prochain[furthest-1];intprocnum;intrand();intalgo;intrun,head,tail,j;main()/MAINPROGRAM/agan:printf(“typethealgorithmis(1:RR,2:PRIO):”);scanf(“%d”,algo);if(algo==2){printf(“outputofpriority. ”);init();prisch();}else{if(algo==1){printf(“outputofroundrobin. ”);init();timesch();}else{printf(“tryagain,please ”);gotoagan;}for(j=1;j<=40;j++){printf(“=”);}printf(“ ”);for(j=1;j<=40;j++){printf(“=”);}printf(“ ”);printf(“systemfinished );print()/PRINTTHERUNNINGPROCESS,WAITINGQUEUEANDPCBSEQUENCELIST/{intk,p;for(k=1;k<=40;k++)printf(“=”);printf(“ runningproc.”);printf(“waitingqueue.”);printf(“ %d”,prochain[run].id);p=head;while(p!=0){printf(“%5d”,p);p=prochain[p].ne_t;}printf(“ ”);for(k=1;k<=40;k++)printf(“=”);printf(“ ”);printf(“id“);for(k=1;kprintf(“%5d”,prochain[k].id);printf(“ ”);printf(“priority”);for(k=1;kprintf(“%5d”,prochain[k].priority);printf(“ ”);printf(“cputime”);for(k=1;kprintf(“%5d”,prochain[k].cputime);printf(“ ”);printf(“alltime”);for(k=1;kprintf(“%5d”,prochain[k].alltime);printf(“ ”);printf(“state”);for(k=1;kprintf(“%5c”,prochain[k].state);printf(“ ”);printf(“ne_t”);for(k=1;kprintf(“%5d”,prochain[k].ne_t);printf(“ ”);insert(intq)/INSERTAPROCESS/{intp,s;p=head;s=prochain[head].ne_twhile((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
/P操作
sem_wait(sem);
mysem("1234");
/等待子进程结束
wait(status);
/删掉在系统创建的信号量
sem_unlink(SEM_NAME);
/彻底销毁打开的信号量
sem_close(sem);
_OUT:
returnret;
五、实验数据记录和处理
六、实验结果与分析
实验二进程调度程序设计
一、目的和要求
进程是操作系统最重要的概念之一,进程调度是操作系统的主要内容,本实验要求学生地用高级语言编写一个进程调度程序,调度算法可任意选择或自行设计,本实验可使学生加深对进程调度和各种调度算法的理解。
1.设计一个有几个进程并发执行的进程调度程序,每个进程由一个进程控制块(PCB)表示,进程控制块通常应包括下述信息:进程名,进程优先数,进程需要运行的时间,占用CPU的时间以及进程的状态等,且可按照调度算法的不同而增删。
2.调度程序应包含2—3种不同的调度算法,运行时可以任选一种,以利于各种方法的分析和比较。
3.系统应能显示或打印各进程状态和参数的变化情况,便于观察。
1.题目本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假定起始状态都是就绪状态W。
为了便于处理,程序中进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。
进程控制块结构如表2-1所示:
表2-1PCB
进程控制块链结构如图2-1所示:
RUNHEADTAIL
图2-1进程控制块链结构
其中:RUN—当前运行进程指针;
HEAD—进程就绪链链首指针;
TAIL—进程就绪链链尾指针。
2.算法与框图程序框图如图2-2所示。
图2-2进程调度框图
(1)优先数法。进程就绪链按优先数大小从大到小排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3。理由是该进程如果在一个时间片中完成不了,优先级应降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续运行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。
(2)简单轮转法。进程就绪链按各进程进入的先后次序排列,链首进程首先投入运行。进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相
应于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。
程序清单:
definefurthest5
structprocess/PCBSTRUCTURE/
{intid;
intpriority;
intcputime;
intalltime;
charstate;
intne_t;}prochain[furthest-1];
intprocnum;
intrand();
intalgo;
intrun,head,tail,j;
main()/MAINPROGRAM/
agan:printf(“typethealgorithmis(1:RR,2:PRIO):”);
scanf(“%d”,algo);
if(algo==2)
{printf(“outputofpriority. ”);
init();
prisch();}
else
{if(algo==1)
{printf(“outputofroundrobin. ”);
timesch();}
{printf(“tryagain,please ”);
gotoagan;}
for(j=1;j<=40;j++)
{printf(“=”);}
printf(“ ”);
printf(“systemfinished );
print()/PRINTTHERUNNINGPROCESS,WAITING
QUEUEANDPCBSEQUENCELIST/{intk,p;
for(k=1;k<=40;k++)
printf(“=”);
printf(“ runningproc.”);printf(“waitingqueue.”);
printf(“ %d”,prochain[run].id);p=head;
while(p!=0)
{printf(“%5d”,p);
p=prochain[p].ne_t;}
printf(“id“);
for(k=1;kprintf(“%5d”,prochain[k].id);printf(“ ”);printf(“priority”);for(k=1;kprintf(“%5d”,prochain[k].priority);printf(“ ”);printf(“cputime”);for(k=1;kprintf(“%5d”,prochain[k].cputime);printf(“ ”);printf(“alltime”);for(k=1;kprintf(“%5d”,prochain[k].alltime);printf(“ ”);printf(“state”);for(k=1;kprintf(“%5c”,prochain[k].state);printf(“ ”);printf(“ne_t”);for(k=1;kprintf(“%5d”,prochain[k].ne_t);printf(“ ”);insert(intq)/INSERTAPROCESS/{intp,s;p=head;s=prochain[head].ne_twhile((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
printf(“%5d”,prochain[k].id);
printf(“priority”);
for(k=1;kprintf(“%5d”,prochain[k].priority);printf(“ ”);printf(“cputime”);for(k=1;kprintf(“%5d”,prochain[k].cputime);printf(“ ”);printf(“alltime”);for(k=1;kprintf(“%5d”,prochain[k].alltime);printf(“ ”);printf(“state”);for(k=1;kprintf(“%5c”,prochain[k].state);printf(“ ”);printf(“ne_t”);for(k=1;kprintf(“%5d”,prochain[k].ne_t);printf(“ ”);insert(intq)/INSERTAPROCESS/{intp,s;p=head;s=prochain[head].ne_twhile((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
printf(“%5d”,prochain[k].priority);
printf(“cputime”);
for(k=1;kprintf(“%5d”,prochain[k].cputime);printf(“ ”);printf(“alltime”);for(k=1;kprintf(“%5d”,prochain[k].alltime);printf(“ ”);printf(“state”);for(k=1;kprintf(“%5c”,prochain[k].state);printf(“ ”);printf(“ne_t”);for(k=1;kprintf(“%5d”,prochain[k].ne_t);printf(“ ”);insert(intq)/INSERTAPROCESS/{intp,s;p=head;s=prochain[head].ne_twhile((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
printf(“%5d”,prochain[k].cputime);
printf(“alltime”);
for(k=1;kprintf(“%5d”,prochain[k].alltime);printf(“ ”);printf(“state”);for(k=1;kprintf(“%5c”,prochain[k].state);printf(“ ”);printf(“ne_t”);for(k=1;kprintf(“%5d”,prochain[k].ne_t);printf(“ ”);insert(intq)/INSERTAPROCESS/{intp,s;p=head;s=prochain[head].ne_twhile((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
printf(“%5d”,prochain[k].alltime);
printf(“state”);
for(k=1;kprintf(“%5c”,prochain[k].state);printf(“ ”);printf(“ne_t”);for(k=1;kprintf(“%5d”,prochain[k].ne_t);printf(“ ”);insert(intq)/INSERTAPROCESS/{intp,s;p=head;s=prochain[head].ne_twhile((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
printf(“%5c”,prochain[k].state);
printf(“ne_t”);
for(k=1;kprintf(“%5d”,prochain[k].ne_t);printf(“ ”);insert(intq)/INSERTAPROCESS/{intp,s;p=head;s=prochain[head].ne_twhile((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
printf(“%5d”,prochain[k].ne_t);
insert(intq)/INSERTAPROCESS/
{intp,s;
p=head;
s=prochain[head].ne_t
while((prochain[q].priority{p=s;s=prochain[s].ne_t;}prochain[p].ne_t=q;prochain[q].ne_t=s;insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;tail=run;prochain[run].ne_t=0;init()/CREATEAWAITINGQUEUE/{inti;head=0;if(alog==2){for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
{p=s;
s=prochain[s].ne_t;}
prochain[p].ne_t=q;
prochain[q].ne_t=s;
insert2()/PUTAPROCESSONTOTHETAILOFTHEQUEUE/{prochain[tail].ne_t=run;
tail=run;
prochain[run].ne_t=0;
init()/CREATEAWAITINGQUEUE/
{inti;
head=0;
if(alog==2)
{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+11)%41;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=0;if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
{prochain[i].id=i;
prochain[i].priority=(rand()+11)%41;
prochain[i].cputime=0;
prochain[i].alltime=(rand()+1)%7;
prochain[i].state=’W’;
prochain[i].ne_t=0;
if(prochain[i].prioritypriority)(head!=0))insert(prochain[i].id);else{prochain[i].ne_t=head;head=prochain[i].id;}else{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
priority)(head!=0))
insert(prochain[i].id);
{prochain[i].ne_t=head;
head=prochain[i].id;}
{for(i=1;i{prochain[i].id=i;prochain[i].priority=(rand()+1)%3+1;prochain[i].cputime=0;prochain[i].alltime=(rand()+1)%7;prochain[i].state=’W’;prochain[i].ne_t=(i+1)%(furthest+1);}head=1;tail=furthest;prochain[furthest].ne_t=0;run=head;prochain[run].state=’R’;head=prochain[head].ne_t;prochain[run].ne_t=0;print();prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0){prochain[run].cputime+=1;prochain[run].priority-=3;prochain[run].alltime-=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
prochain[i].priority=(rand()+1)%3+1;
prochain[i].ne_t=(i+1)%(furthest+1);}
head=1;
tail=furthest;
prochain[furthest].ne_t=0;
run=head;
prochain[run].state=’R’;
head=prochain[head].ne_t;
print();
prisch()/THEPROCESSWITHPRIOALGORITHM/{while(run!=0)
{prochain[run].cputime+=1;
prochain[run].priority-=3;
prochain[run].alltime-=1;
if(prochain[run].alltime==0)
{prochain[run].state=’F’;
if(head!=0)
{run=head;
head=prochain[head].ne_t;}
{prochain[0].id=prochain[run].id;
run=0;}
{if((prochain[run].priority{prochain[run].state=’W’;insert(run);run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0){prochain[run].alltime-=1;prochain[run].cputime+=1;if(prochain[run].alltime==0){prochain[run].state=’F’;prochain[run].ne_t=0;if(head!=0){run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}else{prochain[0].id=prochain[run].id;run=0;}else{if((prochain[run].cputime==prochain[run].priority)(head!=0)){prochain[run].state=’W’;prochain[run].cputime=0;insert2();run=head;prochain[run].state=’R’;head=prochain[head].ne_t;}print();五、实验数据记录和处理六、实验结果与分析实验三存储管理程序设计一、目的和要求(一)目的存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。(二)要求模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。二、实验内容和原理(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:P[0],P[1],,P[m-1]它们的初值为P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。图3-1地址转换和FIFO页面调度流程当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行P[k]∶=要装入的新页页号k∶=(k+1)modm在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。表3-2作业的页表如果该作业依次执行的指令序列如表3-3所示。表3-3作业依次执行的指令序列依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。三、主要仪器设备HP、ubuntu四、操作方法与实验步骤程序清单:include"stdio.h"definesize1024structplist{};intnumber;intflag;intblock;intmodify;intlocation;structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};structiliststructilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};main()Intcharoperation[10];intpagenumber;intaddress;i,lpage,pflage,replacedpage,pmodify;/intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");五、实验数据记录和处理六、实验结果与分析
{prochain[run].state=’W’;
insert(run);
timesch()/THEPROCESSWITHRRALRORITHM/{while(run!=0)
{prochain[run].alltime-=1;
prochain[run].cputime+=1;
{if((prochain[run].cputime==prochain[run].priority)(head!=0))
prochain[run].cputime=0;
insert2();
实验三存储管理程序设计
存储管理的主要功能之一是合理地分配主存空间。请求页式管理是一种常用的虚拟存储管理技术。
本实验的目的是通过请求页式存储管理中页面置换算法的模拟设计,来了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
模拟页式虚拟存储管理中硬件的地址转换和缺页中断的处理过程,并用先进先出调度算法(FIFO)处理缺页中断。
(1)为了装入一个页面而必须调出一页时,如果被选中调出的页面在执行中没有修改过,则不必把该页重新写到磁盘上(因磁盘上已有副本)。因此,在页表中可以增加是否修改过的标志,当执行“存”指令、“写”指令时把对应页的修改标志置成“1”,表示该页修改过,否则为“0”,表示该页未修改过。页表格式如表3-1所示。
(2)设计一个地址转换程序来模拟硬件的地址转换和缺页中断处理过程。当访问的页在主存时则形成绝对地址,但不去模拟指令的执行,可用输出转换后的绝对地址来表示一条指令已完成。当访问的页不在主存时则输出“该页页号”来表示硬件产生了一次缺页中断。模拟地址转换的程序流程如图3-1所示。
(3)编制一个FIFO页面调度程序。FIFO页面调度算法总是先调出作业中最先进入主存的那一页,因此,可以用一个数组来构成页号队列。数组中每个元素是该作业已在主存的页面号,假定分配给作业的主存块数为m,且该作业开始的m页已装入主存,则数组可由m个元素组成:
P[0],P[1],,P[m-1]
它们的初值为
P[0]∶=0,P[1]∶=1,,P[m-1]∶=m-1
用一指针k指示当要装入新页时应调出的页在数组的位置,k的初值为“0”。
图3-1地址转换和FIFO页面调度流程
当产生缺页中断后,操作系统总是选择P[k]所指出的页面调出,然后执行
P[k]∶=要装入的新页页号
k∶=(k+1)modm
在实验中不必实际地启动磁盘执行调出一页和装入一页的工作,而用输出“OUT调出的页号”和“IN要装入的新页页号”来模拟一次调出和装入的过程。模拟程序的流程见图3-1。
表3-2作业的页表
如果该作业依次执行的指令序列如表3-3所示。
表3-3作业依次执行的指令序列
依次执行上述的指令序列来调试你所设计的程序(仅模拟指令的执行,不必考虑指令序列中具体操作的执行)
(5)为了检查程序的正确性,可自行确定若干组指令序列,运行设计的程序,核对执行结果。
include"stdio.h"definesize1024structplist{};
intnumber;intflag;intblock;intmodify;intlocation;
structplistp1[7]={{0,1,5,0,010},{1,1,8,0,012},{2,1,9,0,013},{3,1,1,0,021},{4,0,-1,0,022},{5,0,-1,0,023},{6,0,-1,0,121}};
structilist
structilistp2[12]={{"+",0,70},{"+",1,50},{"",2,15},{"存",3,21},
{"取",0,56},{"-",6,40},{"移位",4,53},{"+",5,23},
{"存",1,37},{"取",2,78},{"+",4,1},{"存",6,84}};
main()
Intcharoperation[10];intpagenumber;intaddress;
i,lpage,pflage,replacedpage,pmodify;/
intp[4]={0,1,2,3};intk=0;intm=4;longmemaddress;printf(" 操作 页号 页内地址标志绝对地址修改页号页架号绝对地址 ");
for(i=0;i<12;i++){lpage=p2[i].pagenumber;pflage=p1[lpage].flag;if(pflage==0){replacedpage=p[k];pmodify=p1[replacedpage].modify;
}}}p[k]=lpage;k=(k+1)%m;p1[lpage].flag=1;/标志位改为1p1[lpage].block=p1[replacedpage].block;p1[replacedpage].block=-1;p1[replacedpage].flag=0;p1[replacedpage].modify=0;memaddress=p1[lpage].blocksize+p2[i].address;if(p2[i].operation=="save")p1[lpage].modify=1;printf("%s ",p2[i].operation);printf("%d ",p2[i].pagenumber);printf("%d ",p2[i].address);printf("%d ",pflage);if(pflage==1)printf("%d ",memaddress);elseprintf("%d ",p2[i].pagenumber);if(pflage==1)printf(" ");elseprintf("%d->%d ",p2[i].pagenumber,replacedpage);printf("%d ",p1[lpage].block);printf("%d ",memaddress);printf(" ");
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo9.cn 版权所有 赣ICP备2023008801号-1
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务