下面的程序我要在c++的终端怎么进行测试?模拟单处理机系统的进程调度系统,
#include<stdio.h>#include<stdlib.h>#defineRUNNING1//用RUNNING表示进程处于运行态#defineWAIT2//用w...
#include<stdio.h>
#include<stdlib.h>
#define RUNNING 1//用RUNNING 表示进程处于运行态
#define WAIT 2//用wait表示进程处于就绪态
#define FINISH 3//用FINISH表示进程已经执行完毕
#define TIME_PIECE 5//用TIME_PIECE表示时间片大小
#define MAX_PROCESS_NUM 10//假定系统允许进程个数为10
int AX,BX,CX,DX,PC,PSW,TIME;//模拟寄存器
int run;//定义指向正在运行进程的进程控制块的指针
int pfree;//定义指向空闲进程控制块队列的指针
struct{
int head;
int tail;
}ready;//定义指向就绪队列的头指针head和尾指针tail
struct{
int name;//进程标识符
int status;//进程状态
int ax, bx, cx,dx;//进程现场信息,通用寄存器内容
int pc;//进程现场信息,程序计数器内容
int psw;//进程现场信息,程序状态字寄存器内容
int time;//进程每次申请的时间片大小
int totalTime;//执行进程需要的总时间
int remainingTime;//进程剩余的执行时间
int next;//下一个进程控制块的位置
}pcbarea[MAX_PROCESS_NUM];//定义模拟进程控制块区域的数组
//进程控制块初始化
void Init(){
int i;
run=ready.head=ready.tail=-1;//运行指针、就绪指针清空
pfree=0;//空闲指针指向第一个进程
for(i=0;i<MAX_PROCESS_NUM-1;++i)
pcbarea[i].next=i+1;
pcbarea[MAX_PROCESS_NUM-1].next=-1;
}
//创建进程
void Create(int process_name,int ax,int bx,int cx,int dx,int pc,int psw,int totalTime){
int i;
if(pfree==-1){
//空闲进程控制块队列为空
printf("无空闲进程控制块,进程创建失败\n");
return;
}
i=pfree;//取空闲进程控制块队列的第一个
pfree=pcbarea[pfree].next;//pfree后移
//填写该进程控制块内容
pcbarea[i].name=process_name;
pcbarea[i].status=WAIT;
pcbarea[i].ax=ax;
pcbarea[i].bx=bx;
pcbarea[i].cx=cx;
pcbarea[i].dx=dx;
pcbarea[i].pc=pc;
pcbarea[i].psw=psw;
pcbarea[i].time=TIME_PIECE;
pcbarea[i].totalTime=totalTime;
pcbarea[i].remainingTime=totalTime;
if(ready.head!=-1){
//就绪队列不空时,置入就绪队列
pcbarea[ready.tail].next=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
else{
//就绪队列空时,置入就绪队列
ready.head=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
printf("\n");
}
//进程调度函数
void Sheduling(){
getchar();
if(ready.head==-1){
//空闲进程控制块队列为空,退出
printf("进程调度完毕!\n\n\n");
return;
}
run=ready.head;//就绪队列头指针赋给run,即让就绪队列的队头运行
ready.head=pcbarea[ready.head].next;//就绪队列头指针后移
if(ready.head==-1)
ready.tail=-1;//就绪队列为空,修正尾指针ready.tail
pcbarea[run].status=RUNNING;//修改进程控制块状态
//恢复该进程现场信息
AX=pcbarea[run].ax;
BX=pcbarea[run].bx;
CX=pcbarea[run].cx;
DX=pcbarea[run].dx;
PC=pcbarea[run].pc;
PSW=pcbarea[run].psw;
TIME=pcbarea[run].time;//设置相对时钟寄存器的时间片
//打印进程以及系统的状态信息
printf("\n进程编号:%d\n",pcbarea[run].name);
printf("进程状态:运行\n");
printf("寄存器内容:\n");
printf("AX: %d\n",AX);
printf("BX: %d\n",BX);
printf("CX: %d\n",CX);
printf("DX: %d\n",DX);
printf("PC: %d\n",PC);
printf("PSW: %d\n",PSW);
printf("TIME:%d\n\n",TIME);
printf("\n**时间片用完**\n" 展开
#include<stdlib.h>
#define RUNNING 1//用RUNNING 表示进程处于运行态
#define WAIT 2//用wait表示进程处于就绪态
#define FINISH 3//用FINISH表示进程已经执行完毕
#define TIME_PIECE 5//用TIME_PIECE表示时间片大小
#define MAX_PROCESS_NUM 10//假定系统允许进程个数为10
int AX,BX,CX,DX,PC,PSW,TIME;//模拟寄存器
int run;//定义指向正在运行进程的进程控制块的指针
int pfree;//定义指向空闲进程控制块队列的指针
struct{
int head;
int tail;
}ready;//定义指向就绪队列的头指针head和尾指针tail
struct{
int name;//进程标识符
int status;//进程状态
int ax, bx, cx,dx;//进程现场信息,通用寄存器内容
int pc;//进程现场信息,程序计数器内容
int psw;//进程现场信息,程序状态字寄存器内容
int time;//进程每次申请的时间片大小
int totalTime;//执行进程需要的总时间
int remainingTime;//进程剩余的执行时间
int next;//下一个进程控制块的位置
}pcbarea[MAX_PROCESS_NUM];//定义模拟进程控制块区域的数组
//进程控制块初始化
void Init(){
int i;
run=ready.head=ready.tail=-1;//运行指针、就绪指针清空
pfree=0;//空闲指针指向第一个进程
for(i=0;i<MAX_PROCESS_NUM-1;++i)
pcbarea[i].next=i+1;
pcbarea[MAX_PROCESS_NUM-1].next=-1;
}
//创建进程
void Create(int process_name,int ax,int bx,int cx,int dx,int pc,int psw,int totalTime){
int i;
if(pfree==-1){
//空闲进程控制块队列为空
printf("无空闲进程控制块,进程创建失败\n");
return;
}
i=pfree;//取空闲进程控制块队列的第一个
pfree=pcbarea[pfree].next;//pfree后移
//填写该进程控制块内容
pcbarea[i].name=process_name;
pcbarea[i].status=WAIT;
pcbarea[i].ax=ax;
pcbarea[i].bx=bx;
pcbarea[i].cx=cx;
pcbarea[i].dx=dx;
pcbarea[i].pc=pc;
pcbarea[i].psw=psw;
pcbarea[i].time=TIME_PIECE;
pcbarea[i].totalTime=totalTime;
pcbarea[i].remainingTime=totalTime;
if(ready.head!=-1){
//就绪队列不空时,置入就绪队列
pcbarea[ready.tail].next=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
else{
//就绪队列空时,置入就绪队列
ready.head=i;
ready.tail=i;
pcbarea[ready.tail].next=-1;
}
printf("\n");
}
//进程调度函数
void Sheduling(){
getchar();
if(ready.head==-1){
//空闲进程控制块队列为空,退出
printf("进程调度完毕!\n\n\n");
return;
}
run=ready.head;//就绪队列头指针赋给run,即让就绪队列的队头运行
ready.head=pcbarea[ready.head].next;//就绪队列头指针后移
if(ready.head==-1)
ready.tail=-1;//就绪队列为空,修正尾指针ready.tail
pcbarea[run].status=RUNNING;//修改进程控制块状态
//恢复该进程现场信息
AX=pcbarea[run].ax;
BX=pcbarea[run].bx;
CX=pcbarea[run].cx;
DX=pcbarea[run].dx;
PC=pcbarea[run].pc;
PSW=pcbarea[run].psw;
TIME=pcbarea[run].time;//设置相对时钟寄存器的时间片
//打印进程以及系统的状态信息
printf("\n进程编号:%d\n",pcbarea[run].name);
printf("进程状态:运行\n");
printf("寄存器内容:\n");
printf("AX: %d\n",AX);
printf("BX: %d\n",BX);
printf("CX: %d\n",CX);
printf("DX: %d\n",DX);
printf("PC: %d\n",PC);
printf("PSW: %d\n",PSW);
printf("TIME:%d\n\n",TIME);
printf("\n**时间片用完**\n" 展开
1个回答
2016-06-26
展开全部
一、选择题1.【进程控制块】是作业存在的唯一标志。2.在分时操作系统环境下动作的作业通称为【终端型作业】。3.在各种作业调度算法中,若所有作业同时到达,则平均等待时间最短的算法是(【优先数】);既考虑作业等待时间,又考虑作业执行时间的调度算法是【最高相应比优先】。4.作业调度程序从处于【后备】状态的队列中选取适当的作业投入运行。5.用户通过终端使用计算机系统控制作业执行的方式称为【联机】方式。6.在进程管理中,新创建的进程处于【就绪状态】。7.进程的三个基本状态在一定条件下可以相互转化,进程由就绪状态变为运行状态的条件是【时间片用完】;由运行状态变为阻塞状态的条件是【等待某事件发生);由阻塞状态变为就绪状态的条件是【等待的某事件已发生】。8.程序的顺序执行通常在【单道程序】的工作环境中,具有(程序的可再现性)特征;程序的并发执行在【多道程序】的工作环境中,具有【资源共享】特征。9.一个运行的进程用完了分配给它的时间片后,它的状态变为【就绪】。10.现代操作系统中,作为独立的调度单位但不作为资源分配单位的是【进程】。11.PV操作是【低级进程通信原语】。12.Linux系统中,实现进程间低级通道的是【信号】。13.通过文件实现的进程通信机制是【管道】。14.进程间速度最快的通信机制是【共享内存】。15.Linux系统中的信号量机制对传统信号量机制作了扩充,允许一次对信号量增减【任何整数】。16.分时系统中,常采用的进程调度算法是【时间片轮转】。17.实时系统中,常采用【剥夺方式】进程调度方案,以保证系统能立即处理紧要事件。18.【静态】优先权是在创建进程时确定的,确定之后在整个进程运行期间不再改变。19.多处理机系统一般是指【一个计算机系统中装有多个处理机】。20.多机系统中的SMP是指【对称多处理机系统】.21.Linux系统中,进程处于可运行状态,是指【进程获得了除CPU之外的所有资源】。22.在存储管理方案中,【可变分区管理】可与覆盖技术配合。23.在存储管理中,采用覆盖与交换技术的目的是【节省主存空间】。24.虚拟存储器的最大容量【为内外存容量之和】。25.在虚拟存储系统中,若进程在内存中占3块开始时间为空,采用先进先出页面淘汰算法,当执行访问页号序列为1、2、3、4、1、2、5、1、2、3、4、5、6时,将产生【10】次缺页中断。26.实现虚拟存储器的目的是【扩充辅存容量】。27.作业在执行中发生了缺页中断,经操作系统处理后,应让其执行【被中断的前一条)指令。28.在分页系统环境下,程序员编制程序,其地址空间是连续的,分页是由【编译地址】完成的。29.某段表的内容如下:段号段首址段长度0120KB40KB1760KB30KB2480KB20KB3370KB20KB一逻辑地址为2154,它对应的物理地址为【480KB+154】29.在一个页式存储管理系统中,页表内容如下所示:页号块号02122633若页的大小为4KB,则地址转换机构将逻辑地址0转换成的物理地址为【8192】。30.采用段式存储管理的系统中,若地址用24位表示,其中8位表示段号,则允许每段最大长度是【216】.。31.下面的【记录式文件】不是文件的物理存储结构。32.有一磁盘,共有40个柱面,2个盘片,每磁道80个扇区。如若采用位示图管理其磁盘空间。如果字长为16位二进制,那么位示图共需【400】字节。操作系统为每个文件开辟一个存储区,在它的里面记录着该文件的有关信息,这就是【文件控制块】。33.位示图主要用于【磁盘空间的管理】
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询