操作系统实验——进程调度 实验报告

本文档详细介绍了操作系统实验,内容涉及进程调度的模拟,包括动态优先级和轮转调度算法。实验中,学生需要编写C或C++程序来实现进程管理,涉及进程创建、调度、睡眠、唤醒和终止等操作。通过实验,可以加深对进程状态转换和调度算法的理解,提升系统程序设计能力。
摘要由CSDN通过智能技术生成

(一) 实验目的

 

进程是操作系统中最基本、最重要的概念,进程调度又是操作系统的核心模块。本实验要求学生独立地用CC++语言编写一个简单的进程管理程序,其主要部分是进程调度。调度算法可由学生自行选择,如基于动态优先级的调度算法或多级反馈队列调度算法。

 

通过本实验可加深学生对进程各种状态的转化和各种调度算法的理解,提高系统程序设计能力。

 

(二) 实验题目

 

以链式结构组成空闲 PCB 栈,以双向链式结构组成进程的就绪队列和睡眠队列,模拟 UNIX 的进程管理程序,实现以下操作(可用键盘命令或由产生的随机数决定操作和参数)。

1.创建一个新进程:如 pid=newp(pri,size,time),申请空闲PCB 和所需内存,填写 PCB

 

的各项初始数据,将该 PCB 送入就绪队列。

 

2.调度和执行:自己设计优先调度算法,在就绪队列中选择一个优先级最高的进程,使其运行若干个单位时间。要求在运行期间进程的p_cpup_prip_time 要变化,并在适当的时机重新调度。

 

3.进程睡眠:进程运行时可调用自编的睡眠函数,主动进入睡眠状态,并转调度程序。也可由操作使进程强迫挂起,睡眠适当时间。进程睡眠时要在PCB 中记录睡眠原因和优先数。

 

4.进程的唤醒:根据睡眠原因,将相应的进程从睡眠队列中调出,转入就绪队列。如该进程优先级比现运行进程优先级高,转调度程序。

 

5.进程的终止:如一个进程运行完作业所需的时间,或者用操作杀死该进程,该进程就终止,释放所占用的内存和 PCB 资源,转调度程序。

 

() 主要数据结构

 

每一个进程用一个进程控制块 PCB 表示,参考的 proc 结构定义如下:

 

struct proc {

 

 

char

p_pid;

进程标识数

char

p_pstat;

进程状态

caddr_t  p_addr;

进程图象在内存中首址

int

p_size;

进程图象的长度

char

p_pri;

进程优先数

char

p_cpu;

进程当前运行的时间

int

p_time;

作业运行的(剩余)总时间

char

p_wchan;

进程睡眠原因

 

structproc *p_next, *p_prior;      进程 proc 的双向链指针

 

}

 

系统中有一个全局变量 curproc 指向现运行进程,还要定义几个队列的首指针。

 

 

 

 

(四)实验过程

1.    实验进程调度算法:

     1)动态优先权:当前运行进程用完时间片后,其优先权减去一个常数。

    

  • 21
    点赞
  • 269
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值