进程调度程序的设计说明

合集下载

操作系统题库+答案

操作系统题库+答案

操作系统题库+答案第⼀部分引⾔⼀、选择题1、下列选择中,哪些不是操作系统关⼼的主要问题。

(浙⼤2003)( 4)(1)管理计算机裸机(2)设计提供⽤户与计算机硬件系统间的界⾯;(3)管理计算机系统资源(4)⾼级程序设计语⾔的编译器。

2、从⽤户⾓度看,操作系统是(C )。

A、计算机资源的管理者;B、计算机⼯作流程的组织者;C、⽤户与计算机之间的接⼝;D、由按层次结构组成的软件模块的集合。

3、引⼊多道程序技术的前提条件之⼀是系统具有(3)(西电00)(1)多个cpu;(2)多个终端;(3)中断功能;(4)分时功能4、操作系统是⼀种A。

A.系统软件B.系统硬件C.应⽤软件D.⽀援软件5、B操作系统允许⼀台主机上同时连接多台终端,多个⽤户可以通过各⾃的终端同时交互地使⽤计算机。

A.实时B.分时C.分布式D.单⽤户6、如果操作系统具有很强的交互性,可同时供多个⽤户使⽤,但时间响应不太及时,则属于分时系统类型;如果操作系统可靠,时间响应及时但仅有简单的交互能⼒则属于实时系统类型。

⼆、判断题1、所谓多道程序设计,即指每⼀时刻有若⼲个进程在执⾏。

(×)(南京⼤学00)2、采⽤多道程序设计的系统中,系统的程序道数越多,系统效率越⾼。

(×)(西电01)3、由于采⽤了分时技术,⽤户可以独占计算机的资源。

(×)4、多道程序设计是利⽤了CPU和通道的并⾏⼯作来提⾼系统利⽤率的。

(×)5、多道程序设计可以缩短系统中作业的执⾏时间。

(×)6、在⼀个兼顾分时操作系统和批处理系统中,通常把终端作业称为前台作业,⽽把批处理型作业称为后台作业。

(√)7、批处理系统不允许⽤户随时⼲预⾃⼰程序的运⾏。

(√)8、Windows操作系统完全继承了分时系统的特点。

(√)9、并发是并⾏的不同表述,其原理相同。

(×)(清华1998)10、在单处理机系统中实现并发技术后,判断:(1)各进程在某⼀时刻并⾏运⾏,cpu与外设间并⾏⼯作;(×)(2)各进程在⼀个时间段内并⾏运⾏,cpu与外设间串⾏⼯作;(×)(3)各进程在⼀个时间段内并⾏运⾏,cpu与外设间并⾏⼯作。

进程调度

进程调度

Linux调度程序提高交互式程序的优先级,让它们运行更频繁。因此, 调度程序提供较长的默认时间片给交互式程序。此外,调度程序还能根 据进程的优先级动态调整分配给它的时间片,从而保证了优先级高的进 程,执行的频率高,执行时间长。通过动态掉正优先级和时间片的长度 机制,Linux调度性能不但非常稳定而且也很强健。
计算优先级和时间片
进程拥有一个初始的nice值(优先级),范围是-20~19,默认 是0,进程task_struct的static_prio域存放这个值,因为它 从一开始由用户指定,不能修改,所以是静态优先级。 调度程序用到的动态优先级存放在prio域里,动态优先级 是通过一个关于静态和进程交互性的函数关系计算而来。 effective_prio()函数返回一个进程的动态优先级。 调度程序通过一些推断来获取准确反映进程时I/O消耗型还 是处理器消耗型。 为了支持这种推断,Linux记录了一个进程用于休眠和用于 执行的时间。该值存放在task_struct的sleep_avg域中,范 围是从0到MAX_SLEEP_AVG。默认值是10毫秒, sleep_avg会根据它的休眠时间的长短而增长,直到最大值 为止,进程没运行一个节拍,sleep_avg就相应减少,直到 0为止。
可运行队列
调度程序中最基本的数据结构是运行队列。 可执行队列定义于kernel/sched.c中,由结构runqueue 表示,可执行队列是给定处理器上可执行进程的链表 ,每个处理器一个。每一个可投入运行的进程都惟一 的归属于一个可执行队列。此外,可执行队列中还包 含每个处理器的调度信息。因此,可执行队列是每一 个处理器最重要的数据结构。
重新计算时间片
操作系统在所有的进程的时间片都用完时,会重新计 算每个进程的时间片。 典型的实现是循环访问每个进程: for(系统中的每个人物){ 重新计算优先级 重新计算时间片 }

操作系统课程设计报告-进程调度算法模拟

操作系统课程设计报告-进程调度算法模拟

1.课程设计的目的《操作系统原理》课程设计我们专业实践性环节之一,是学习完《操作系统原理》课程后进行的一次较全面的综合练习。

其目的在于加深对操作系统的理论、方法和基础知识的理解,掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,培养学生的系统设计能力,并了解操作系统的发展动向和趋势。

2.课程设计的内容及要求先来先服务、短作业优先、时间片轮转、基于静态优先级的调度,基于高响应比优先的动态优先级调度算法实现,能够输出调度情况,并计算周转时间和平均周转时间。

要求使用链表,进程个数由用户提供,按照进程的实际个数生成PCB,程序能够让用户选择使用哪种调度算法,能够在Linux环境运行并验证结果。

程序要考虑用户界面的友好性和使用方便性。

进程基本信息可从文件读入,也可手动输入。

3、设计原理3.1先来先服务调度算法每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源创建进程,然后放入就绪队列3.2短作业优先调度算法短作业优先调度算法是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

3.3时间片轮转调度算法系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。

时间片的大小从几ms到几百ms。

当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。

3.4静态优先级调度算法把处理机分配给优先级最高的进程,使之执行。

但在其执行期间,只要出现了另一个比其优先级更高的进程,调度程序就将处理机分配给新到的优先级最高的进程。

这样就可以保证紧迫性作业优先运行。

3.5最高响应比优先的动态优先级调度算法优先权调度算法是为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入最高优先权优先调度算法。

实验进程调度

实验进程调度

淮海工学院计算机科学系实验报告书课程名:《操作系统原理》题目:实验一进程管理班级:Z软件52学号:2017140595姓名:郭文静1、实验目的与要求进程是操作系统最重要的概念之一,进程调度是操作系统内核的重要功能,本实验要求用C/C++语言编写一个进程调度模拟程序,至少使用最高优先权优先或时间片轮转法两种算法来实现进程调度。

通过本实验可加深对进程调度算法的理解。

1、设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。

2、模拟调度程序至少使用最高优先权优先或时间片轮转法两种算法来实现进程调度。

3、程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。

2、实验内容或题目2.1优先级算法说明(1)PCB的结构:优先级算法中,设PCB的结构如右图所示,其中各数据项的含义Array如下:Id:进程标识符号,取值1—5。

Prior:优先级,随机产生,范围5—10。

Used:目前已占用的CPU时间数,初值为0;当该进程被调用执行时,每执行一个时间片,Used加1。

Need:进程尚需的CPU时间数,初值表示该进程需要运行的总时间,取值范围为1—5。

并随机产生,每运行一个时间片need减1;need为0则进程结束。

Status:进程状态R(运行),J(就绪),F(完成);初始时都处于就绪状态。

Next:指向就绪队列中下一个进程的PCB的指针。

(2)初始状态及就绪队列组织:5个进程初始都处于就绪状态,进程标识1—5,used初值都为0。

各进程的优先级随机产生,范围1—5。

处于就绪状态的进程,用队列加以组织,队列按优先级由高到低依次排列,队首指针设为head。

(3)调度原则以及运行时间的处理:正在执行的进程每执行一个时间片,其优先级减1(允许优先级为负)。

进程调度将在以下情况发生:当正在运行的程序其优先级小于就绪队列队首进程的优先级时。

程序中进程的运行时间以逻辑时间片为单位。

2.2时间片轮转算法说明(1)PCB的结构(如下图所示):轮转法中,设PCB的结构如右图所示,其中各数据项的含义如下:Span:在某一轮中,分配给先运行进程的时间片数,取值1—3。

实验二时间片轮转RR进程调度算法

实验二时间片轮转RR进程调度算法

实验二时间片轮转RR进程调度算法一: 需求分析(1)程序的设计的任务和目的:设计程序模拟进程的时间片轮转RR调度过程。

假设有n 个进程分别在T1, …,Tn时刻到达系统, 它们需要的服务时间分别为S1, …,Sn。

分别利用不同的时间片大小q, 采用时间片轮转RR进程调度算法进行调度, 计算每个进程的完成时间、周转时间和带权周转时间, 并且统计n个进程的平均周转时间和平均带权周转时间。

(2)通过这次实验, 加深对进程概念的理解, 进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。

(3)输入的形式和输入值的范围为避免测试时频繁输入数据, 将测试数据放在txt文件中采用读文件方法读取数据。

在同目录下的txt文件中输入数据, 第一行为进程到达时间, 中间用空格隔开, 第二行为进程服务时间, 不同进程的服务时间之间用空格隔开。

(2) 输出的形式输出每个时刻的进程运行状态, 并且输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。

(详见运行截图)(3) 程序所能达到的功能;详见运行结果截图2、概要设计使用链表创建队列, 用链表方法实现时间片轮转调度。

主要有主函数, 时间片轮转调度函数void RR(int*ArrivalTime,int*ServiceTime,int n,int q,LinkQueue &Q)和输出函数voidprint(int n,int array[]), void print(int n,double array[]);三: 详细设计时间片轮转算法流程图:程序主要设计思想:(1)创建进程, 使用链表的方法, 链表中的每个结点相当于一个进程。

(2)读入文件中进程数据(进程的到达时间和服务时间)。

(3)创建一个进程单链表, 作为进程队列。

(4)请用户输入时间片大小。

(5)创建执行队列。

(6)定义时间轴, 初始化时间轴和执行队列。

动态优先权进程调度算法模拟实验报告

动态优先权进程调度算法模拟实验报告

动态优先权进程调度算法模拟实验报告动态优先权调度算法是一种动态调度算法,根据进程的优先级来决定下一个要执行的进程。

进程的优先级可以根据其紧迫性、重要性和资源需求等因素来确定。

本实验利用模拟算法来模拟动态优先权调度算法,并通过实例来说明该调度算法的工作原理和优缺点。

一、实验目的通过本实验,我们可以了解动态优先权调度算法的工作原理,掌握如何使用模拟算法来模拟进程的调度过程,进一步了解该调度算法的优缺点。

二、实验环境本实验使用C++编程语言来实现动态优先权调度算法的模拟。

编译器使用Dev-C++。

三、实验步骤1.设计进程控制块(PCB)的数据结构,包括进程优先级、进程标识、进程状态等信息。

2.设计模拟算法来模拟动态优先权调度算法。

具体算法如下:a.初始化就绪队列,将所有的进程按照优先级插入到就绪队列中。

b.选择优先级最高的进程执行,并更新该进程的优先级。

c.执行完毕后更新进程的状态,并将其从就绪队列中删除。

d.如果新的进程到达,将其插入到就绪队列中。

3.实现主函数,模拟进程的创建、调度和执行过程。

4.进行多个实例的测试,观察进程的调度顺序和执行结果。

5.总结实验结果,分析动态优先权调度算法的优缺点。

四、实验结果与分析通过多个实例的测试,我们可以观察到动态优先权调度算法的工作过程和效果。

该算法可以根据进程的优先级来确定下一个要执行的进程,从而可以更好地满足不同进程的需求。

同时,动态优先权调度算法可以确保优先级高的进程能够及时得到执行,提高系统的响应速度。

然而,动态优先权调度算法存在一些缺点。

首先,该算法对进程的优先级要求较高,需要合理设置进程的优先级。

如果优先级设置不合理,可能导致优先级高的进程一直占用CPU资源,而优先级低的进程无法得到执行,造成资源浪费。

其次,该算法没有考虑进程的等待时间和执行时间,容易导致饥饿现象的发生,即一些进程无法得到执行。

五、实验总结通过本实验,我们了解了动态优先权调度算法的工作原理和模拟方法。

第8章 进程调度

第8章 进程调度
❖ 假定当前系统中没有两个进程具有相同的优先权以及其后 也没有其他进程进入就绪队列,如果prit(pk)< prit(pi),pk运 行,pi等待,则有
Tw(pi) = ∑Ω 。
▪ 显然一个进程的期望等待时间是指一个
进程花在就绪队列中的平均等待服务的 时间。
4
4.0
1
5.0
4
P3
P2
P4
78
12
16
▪平均等待时间 = (0 + 6 + 3 + 7)/4 = 4
强占SJF的实例
▪ 强占SJF调度算法
进程 P1 P2 P3 P4
▪ Gantt 图表如下 :
到达时间 0.0 2.0 4.0 5.0
需要服务时间 7 4 1 4
P1
P2 P3 P2
P4
时间 0 2
FCFS 和SJF例题
[例8.1]: 试分别计算图8.2(a)和(b)所示的就绪队列中 进程的期望周转时间和期望等待时间。 假定就绪
队列中有4个进程,如下图所示:
进程 服务时间
p0
30
p1
10
p2
40
p3
20
▪ 下面分别计算图8.2(a)和(b)中所示的就绪队列中进程的期望
周转时间和期望等待时间。
列,因为它要求进程的抵达速度和CPU 的运行速度一样快,目前系统还不能长 期这样运行。
8.2 非强占方式调度算法
▪ 非强占调度算法是不强迫一个已经分配到CPU的进
程改变就绪状态。
▪ 在非强占调度算法的系统中不存在从CPU直接返回
到就绪队列的路径。见附图1。
返回就绪队列的路径
就绪队列

调度程序

设计一个按优先数调度算法实现处理器调度的程序

设计一个按优先数调度算法实现处理器调度的程序

2.程序中使用的数据结构及符号说明: #define num 5//假定系统中进程个数为 5
struct PCB{ char ID;//进程名 int runtime;//要求运行时间 int pri;//优先数 char state; //状态,R-就绪,F-结束
}; struct PCB pcblist[num];//定义进程控制块数组
输出提示 show() getchar()
j=0 j<t
max_pri_process()!=-1 pcblist[max_pri_process()].state='r'
i=0 i<num
pcblist[i].state=='r '
pcblist[i].pri-=1 pcblist[i].runtime--
return -1;//返回-1
else if(max<pcblist[i].pri&&pcblist[i].state=='R')//从就绪进程中选取优先数最大的进程 { max=pcblist[i].pri;//max 存放每次循环中的最大优先数 key=i;//将进程号赋给 key
}
} if(pcblist[key].state=='F')//具有最大优先数的进程若已运行完毕 return -1;//则返回-1 else//否则 return key;//将 key 作为返回值返回
void init()//PCB 初始化子程序 {
int i; for(i=0;i<num;i++) {
printf("PCB[%d]:ID pri runtime \n",i+1);//为每个进程任意指定 pri 和 runtime scanf("%s%d%d",&pcblist[i].ID,&pcblist[i].pri,&pcblist[i].runtime); pcblist[i].state='R';//进程初始状态均为就绪 getchar();//接收回车符 } }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

长沙学院课程设计说明书题目进程调度程序设计系(部) 计算机科学与技术系专业(班级) 2009级数据库二班学号指导教师黄彩霞起止日期2012.6.4-2012.6.15课程设计任务书课程名称:操作系统课程设计设计题目:进程调度程序设计已知技术参数和设计要求:1. 设计任务设计一个虚拟核,该核能支持多任务管理。

提供创建进程、终止进程、进程状态转换,进程调度,上下文切换等功能。

2. 问题描述2.1 系统组成系统由虚拟核(VKernel)、命令解释程序(Commander)、用户程序(Application)、编译器(Compiler)四部分组成。

VKernel首先运行,并常驻存。

Kernel启动后,创建Commander进程。

根据用户请求创建多个Application进程。

Kernel负责维护6个数据结构,包括时间 (Time), 处理器状态(CPUstate),进程表 (PCBTable), 就绪队列(ReadyState),等待队列(BlockedState),运行进程(RunningState)。

Time是系统时间片。

CPUstate应包括程序计数器PC,累加器A、B,状态寄存器F的值。

PCBTable的每一项是一个进程的进程控制块(PCB)。

Commander程序、Application程序是用下列CPU虚拟指令书写的程序:①CPU虚拟指令(以下指令仅供参考, 设计者可以自行设计)MOV n //把整数n赋给累加器ASAV m //把累加器A的值存入地址MADD n //从累加器A的值减去整数n,结果送到累加器A。

SUB n //从累加器A的值减去整数n,结果送到累加器A。

MUL n //从累加器A的值乘以整数n,结果送到累加器A。

DIV n //从累加器A的值除以整数n,结果送到累加器A。

JEQ m //F为0跳转到mJLG m //F大于0跳转到mJLE m //F大于等于0跳转到mJMP m //无条件跳转到mOUT port //累加器的容输出到端口port。

port为0,指显示器;为1,指扬声器。

②虚拟系统调用(以下系统调用仅供参考, 设计者可自行设计)exec() //执行程序并创建子进程exit() //进程终止block() //进程等待printk() //在屏幕上打印系统信息scanf() //从键盘输入一字符串msg() //向核发送消息为了简化设计,复杂的系统调用当作广义指令处理。

2.2命令解释程序命令解释程序从标准输入重复读入用户命令,然后以消息形式发送给核。

命令解释程序处理的命令由设计者定义并实现。

2.3 编译器编译器把虚拟指令和虚拟系统调用编译为可执行字节码。

可执行字节码由核解释执行。

3. 功能要求应实现的功能有:(1)能接收用户提交的命令并执行该命令。

(2)执行用户程序:创建进程、终止进程、调度进程、管理进程状态转换4. 技术要求采用时间轮转和优先级调度混合算法。

优先级以优先数表示,优先数越大则优先级越高。

调度时,就绪队列中优先数最大的进程优先运行,相同优先数进程按FIFO方式调度。

进程运行一个时间片以后,其优先数数减1(即降低一级);进程在就绪队列中等待3个时间片以后,其优先数加1。

优先数围0~31。

5. 界面要求用户界面设计不做统一规定,但应做到界面友好,易于操作。

6. 其他要求编程语言和操作系统不限。

4. 课程设计时间:2周(2012.06.04~2012.6.15)5. 课程设计的考核方式及评分方法(1) 考核方式■课程设计结束时,在机房当场验收。

■教师提供测试数据,检查运行结果是否正确。

■回答教师提出的问题。

■学生提交课程设计文档(A4打印件),教师评阅。

(2) 评分方法上机检查:书面报告:答辩=6:3:1,没有通过上机检查的或不提交课程设计报告的,其成绩直接记为不及格。

指导教师签名:日期:系主任签名:日期:学院课程设计鉴定表摘要进程调度程序设计,主要是用于教学的一个程序设计。

通过本程序完成达到一个对进程调度的核心原理及实现的深度理解的目的,同时也更加深入的了解计算机。

该程序的虚拟核支持多进程。

可以实现进程的创建,及进程的优先级调度等等功能。

其中,这个蓄力核上并发执行是允许的,优先级调度是是键盘轮转算法和优先级调度算法的混合实现。

进程运行一个时间片优先数降1;等待进程等待3个时间片后优先数加1。

本次设计选择的是C语言,C语言一直是做底层开发的首先,所以这也是我本次设计选择该语言的原因。

关键词:进程,并发,调度,优先级目录1设计容与要求 (1)1.1设计容: (1)1.2设计要求: (1)2设计说明 (2)2.1需求分析 (2)2.2方案设计 (2)2.2.1总体解决方案 (2)2.2.2基本核 (3)2.2.3核扩展 (3)2.2.4系统设计架构 (4)3基本编码 (5)3.1CPU虚拟指令设计 (5)3.2PCB和CPU设计 (5)4测试 (6)5总结 (8)参考文献 (9)附录程序源代码 (10)1设计容与要求1.1设计容:通过对操作系统课程的学习,利用所学的知识原理.设计一个虚拟核,该核能够实现先到先服务与时间轮转片算法的合理利用。

能够支持多任务管理。

提供创建进程、终止进程、进程状态转换,进程调度,上下文切换。

1.2设计要求:1)功能要求:预期实现的功能:(1)能够接收用户提交的命令并执行该命令。

(2)执行用户程序:创建进程、终止进程(3)能够按照优先级和时间片实现调度进程、管理进程状态转换。

2)技术要求:(采用时间轮转和优先级调度混合算法。

优先级以优先数表示,优先数越大则优先级越高。

调度时,就绪队列中优先数最大的进程优先运行,相同优先数进程按FIFO方式调度。

进程运行一个时间片以后,其优先数数减1(即降低一级);进程在就绪队列中等待3个时间片以后,其优先数加1。

优先数围0~31。

流程如如图所示3)界面要求:用户界面简洁。

对程序输出速度做一定控制。

输出字段简洁易于理解4)其他要求在设计中须使用make工具建立工程。

2设计说明2.1需求分析在多道程序系统中,一个进程(作业)被提交后必须经过处理机调度后,方能获得处理机执行。

在较完善的操作系统中,进程调度程序按照一定的策略,动态的把处理机分配给处于就绪队列中的某一个进程,以使之执行。

对于不同的调度都有都可以采用不同的调度方式和调度算法。

在本程序设计中模拟进程调度中:根据所有的设计要求和容分析把整个设计分为三个部分:一个是伪指令的解释执行程序,二是伪调度算法、系统调用和文件输入,三是进程的创建及mian()函数的总体实现。

系统由虚拟核(VKernel)、命令解释程序(Commander)、用户程序(Application)、编译器(Compiler)四部分组成。

命令解释程序从标准输入重复读入用户命令,然后以消息形式发送给核。

命令解释程序处理的命令由设计者定义并实现。

编译器把虚拟指令和虚拟系统调用编译为可执行字节码。

可执行字节码由核解释执行。

最高优先数优先调度算法的基本思想是:将CPU分配给就绪队列中优先数最高的进程。

采用动态优先数,即优先数在创定时由系统给定一个初始值,当进程获得一次CPU后其优先数就减1,然后把它插入就绪等待队列等待CPU2.2方案设计2.2.1总体解决方案实验过程中遇到的问题及解决方案1)动态优先调度算法与时间片轮转法调度算法的调度过程2)链队列的相关3)动态优先权调度算法设计思想:a)先按优先数大小对就绪队列结点进行排序b)队首元素为即将运行进程,恢复现场,把相应数据加载到程序计数器和累加器c)运行队首进程d)保护现场,把程序计数器和累加器的数据保存到PCBe)查看其他进程的等待数,如果等待3个时间片,优先级数就增加1,同时把该进程等待数清0,取出运行的元素优先级减1,同时也把该进程的等待数清0.f)进程若在一个时间片运行完,则停止该元素的运行,输出结果,同时把它从队列中清除,再按优先级大小排序。

g)重复(2),(3)。

4)轮转法进程调度算法设计思想:a)将所有就绪进程按照到达时间的先后顺序插入队列中。

b)取出队首元素运行一个时间片。

c)时间片到就停止该进程的执行,并将其插入队尾。

d)重复(2),(3)。

2.2.2基本核设计分两步走,先实现一个简单的虚拟核,简单虚拟核运行无误后,再在上面扩展。

简单虚拟核启动后直接把用户应用程序调入存运行,它只加载一个用户程序(即单任务)。

应用程序也是最简单的,它计算100个自然数的和。

用户程序的编译和加载过程如图1所示。

图1 进程加载示意图2.2.3核扩展在上面基本核基础上扩展,增加10条指令,存放在cpl文件夹中。

在编写一个.cpp程序,具有虚拟核能并发执行两个以上程序,基于优先数抢占调度(不含等待态),指令10条以上(含跳转指令、系统调用)的功能。

在typedef struct PCB{} PCB中,short A寄存器A ,int PC 程序计数器PC,char *addr程序加载起始地址,int length程序大小,char name[24]进程名字,int priority;优先级数, 值为0--31,其中31为最高级,int cputime cpu运行时间,int needtime还需运行的时间state process为ready,execute,finish三种状态PCB * next。

PCB * get_process()用来加载用户程序;界面采用void display()函数,让用户根据自己的需要输入进程名和运行所需的时间;所需时间为0的时候进程结束使用函数int process_finish()判断;void cpuexerun() 函数用来执行指令其中包含新增加的10条指令;void cpuexe()调用void cpuexerun(),并寻找优先级最高的执行;在main()中调用void priority_cal()将程序运行;最后将无误的.cpp文件和cpl文件夹放在同一目录下,执行程序是只需运行.cpp程序。

2.2.4系统设计架构3基本编码3.1CPU虚拟指令设计按照自理定规设计出一套虚拟指令,编写指令编译器,编译指令,3.2PCB和CPU设计PCB栈的每一项是一个进程的进程控制块(PCB),它需要定义寄存器、程序计数器、程序加载起始地址、程序大小以及与进程有关的定义,如:进程名、运行所需要的时间、运行状况等等。

而CPU包括程序计数器和累加器PCB具体设计如下:CUP具体设计如下:4测试测试数据如下:A.进程0计算1+2+3+……+8+9+10B.进程1计算10个2相乘然后再除以5个4C.进程2计算1+2+3+4+5-5-4-3-2-1预期结果为A.进程0计算结果55B.进程1计算结果1C.进程2计算结果0三个进程初始化状态:由前面的需求分析可以得到测试要点:1.优先数越大则优先级越高。

相关文档
最新文档