77范文网 - 专业文章范例文档资料分享平台

《计算机操作系统》实验指导书-2015(2)

来源:网络收集 时间:2020-04-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

开 始 初始化PCB,输入进程信息 各进程按优先数从高到低排列 Y 就绪队列空? N 就绪队列首进程投入运行 时间片到,运行进程已占用CPU时间+1 运行进程已占用已达到 CPU时间达到所 需的运行时间? 未达到 使运行进程的优先数减1 把运行进程插入到就绪队列

二、代码试例

#include #include #include

/*常量和状态定义*/

#define PRO_NUM 0x05 #define MAX_TIME 0xFF /*状态宏*/

#define WAIT 0x01 #define RUN 0x02

结 束 进程完成 撤销该进程 #define FINISH 0x03

#define ID_ERROR 0x10 #define MIN_PRIOR 0xFF #define MAX_PRIOR 0x00

typedef unsigned int Uint32;

/*进程PCB*/ struct PCB_Info {

Uint32 s_id;

Uint32 s_static_prior; Uint32 s_dynamic_prior; Uint32 s_start_time; Uint32 s_need_time; Uint32 s_used_time; Uint32 s_state; };

/*进程队列*/

PCB_Info g_queue[5]; Uint32 g_time; /*模拟进程执行函数*/ void Simulator(); /*初始化5个进程函数*/ void Init_Process(); /*初始化进程队列函数*/ void Init_Queue(); /*创建进程函数*/

Uint32 Create_Process(Uint32 pri,Uint32 needtime); /*系统运行函数*/ void Run_Process();

/*得到最高优先级进程 ID函数*/ Uint32 Get_PriProcess(); /*进程时间片执行函数*/

void Work_Process(Uint32 id); /*改变进程状态和优先级函数*/

void Change_Process(Uint32 id); /*打印进程状态函数*/ void Print_State(); /*结束系统函数*/ void End_Process(); /*入口函数*/

int main( int argc, char *argv[ ]) {

Simulator(); return 0; }

void Simulator() {

Init_Process(); Run_Process(); End_Process(); }

void Init_Process() { int i; Uint32 id;

srand( (unsigned)time( NULL ) ); Init_Queue();

for(i=0;i

/*在这里修改随机数的范围,建议优先级取值为0到4之间,进程工作总时间为1到10之间*/

id=Create_Process(rand()%4,1+rand()); if(id!=ID_ERROR) {

printf(\ printf(\创建进程成功\\n\ printf(\进程ID号为:%d\\n\

printf(\进程的静态优先权为:%d\\n\ printf(\进程的动态优先权为:%d\\n\ printf(\进程的到达时间为:%d\\n\ printf(\进程需要时间为:%d\\n\ printf(\进程已用CPU时间为:%d\\n\ printf(\进程的状态为:%d\\n\ printf(\ } else {

printf(\创建进程失败\\n\ } } }

void Init_Queue()

{ int i;

for(i=0;i

g_queue[i].s_id=i;

g_queue[i].s_dynamic_prior=MIN_PRIOR; g_queue[i].s_need_time=0; g_queue[i].s_start_time=0;

g_queue[i].s_static_prior=MIN_PRIOR; g_queue[i].s_used_time=0; g_queue[i].s_state=FINISH; } }

Uint32 Create_Process(Uint32 pri,Uint32 needtime) {

int i=0;

Uint32 id=ID_ERROR; for(i=0;i

if(g_queue[i].s_state==FINISH) {

id=g_queue[i].s_id;

g_queue[i].s_dynamic_prior=MIN_PRIOR; g_queue[i].s_need_time=needtime; g_queue[i].s_start_time=g_time; g_queue[i].s_state=WAIT; g_queue[i].s_static_prior=pri; g_queue[i].s_used_time=0x0; break; } }

return id; }

void Run_Process() {

Uint32 id;

while((id=Get_PriProcess())!=ID_ERROR) {

Work_Process(id); Change_Process(id); } }

void Print_State() { int i;

printf(\时间 进程ID\\t状态 已用时间 需要时间 开始时间 静优先级 动优先级\\n\ for(i=0;i

printf(\e[i].s_state,g_queue[i].s_used_time,g_queue[i].s_need_time,

g_queue[i].s_start_time,g_queue[i].s_static_prior,g_queue[i].s_dynamic_prior);

} }

Uint32 Get_PriProcess() {

Uint32 id=ID_ERROR;

int i,prev_id=ID_ERROR;

Uint32 prior=MIN_PRIOR*2,temp_prior; for(i=0;i

if(g_queue[i].s_state!=FINISH) {

temp_prior=g_queue[i].s_dynamic_prior+g_queue[i].s_static_prior;

if(temp_prior<=prior) { id=i;

prior=temp_prior; } } }

return id; }

void Work_Process(Uint32 id) {

++g_time;

g_queue[id].s_state=RUN; ++g_queue[id].s_used_time; Print_State(); }

void Change_Process(Uint32 id)

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《计算机操作系统》实验指导书-2015(2)在线全文阅读。

《计算机操作系统》实验指导书-2015(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/1002338.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: