进程调度程序设计.docx

上传人:b****3 文档编号:1357075 上传时间:2022-10-21 格式:DOCX 页数:27 大小:123.55KB
下载 相关 举报
进程调度程序设计.docx_第1页
第1页 / 共27页
进程调度程序设计.docx_第2页
第2页 / 共27页
进程调度程序设计.docx_第3页
第3页 / 共27页
进程调度程序设计.docx_第4页
第4页 / 共27页
进程调度程序设计.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

进程调度程序设计.docx

《进程调度程序设计.docx》由会员分享,可在线阅读,更多相关《进程调度程序设计.docx(27页珍藏版)》请在冰豆网上搜索。

进程调度程序设计.docx

进程调度程序设计

 

长沙学院

 

课程设计说明书

题目

进程调度程序设计

系(部)

计算机科学与技术系

专业(班级)

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虚拟指令书写的程序:

1CPU虚拟指令(以下指令仅供参考,设计者可以自行设计)

MOVn//把整数n赋给累加器A

SAVm//把累加器A的值存入地址M

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

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

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

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

JEQm//F为0跳转到m

JLGm//F大于0跳转到m

JLEm//F大于等于0跳转到m

JMPm//无条件跳转到m

OUTport//累加器的容输出到端口port。

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

2虚拟系统调用(以下系统调用仅供参考,设计者可自行设计)

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,没有通过上机检查的或不提交课程设计报告的,其成绩直接记为不及格。

指导教师签名:

         日期:

        

系主任签名:

         日期:

        

 

学院课程设计鉴定表

学号

2009021303

专业

计算科学与技术

班级

09数库2

设计题目

进程调度程序设计

指导教师

黄彩霞

指导教师意见:

 

评定等级:

教师签名:

日期:

答辩小组意见:

 

评定等级:

     答辩小组长签名:

     日期:

    

教研室意见:

 

教研室主任签名:

日期:

 

系(部)意见:

 

系主任签名:

        日期:

     

说明

课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

摘要

进程调度程序设计,主要是用于教学的一个程序设计。

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

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

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

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

进程运行一个时间片优先数降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,然后把它插入就绪等待队列等待CPU

2.2方案设计

2.2.1总体解决方案

实验过程中遇到的问题及解决方案

1)动态优先调度算法与时间片轮转法调度算法的调度过程

2)链队列的相关

3)动态优先权调度算法设计思想:

a)先按优先数大小对就绪队列结点进行排序

b)队首元素为即将运行进程,恢复现场,把相应数据加载到程序计数器和累加器

c)运行队首进程

d)保护现场,把程序计数器和累加器的数据保存到PCB

e)查看其他进程的等待数,如果等待3个时间片,优先级数就增加1,同时把该进程等待数清0,取出运行的元素优先级减1,同时也把该进程的等待数清0.

f)进程若在一个时间片运行完,则停止该元素的运行,输出结果,同时把它从队列中清除,再按优先级大小排序。

g)重复

(2),(3)。

4)轮转法进程调度算法设计思想:

a)将所有就绪进程按照到达时间的先后顺序插入队列中。

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

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

d)重复

(2),(3)。

2.2.2基本核

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

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

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

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

代码

登记

加载

编译

用户源程序

MOV1

ADD2

ADD3

ADD4

ADD100

程序字节码

010100

020200

020300

020400

026400

内存

进程PCB表

010100

020200

020300

020400

026400

虚拟内核

空闲内存

这样的指令100条,

计算1+2+…+100的和。

注意,为了简化,简单内核只处理3条指令:

MOV传送指令

ADD加法指令

OUT输出指令

图1进程加载示意图

2.2.3核扩展

在上面基本核基础上扩展,增加10条指令,存放在cpl文件夹中。

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

在typedefstructPCB{}PCB中,shortA寄存器A,intPC程序计数器PC,char*addr程序加载起始地址,intlength程序大小,charname[24]进程名字,intpriority;优先级数,值为0--31,其中31为最高级,intcputimecpu运行时间,intneedtime还需运行的时间stateprocess为ready,execute,finish三种状态PCB*next。

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

2.2.4系

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1