操作系统实验报告
安徽师范大学 计算机与信息学院
姓名: XXX 学号: 1911130XXXX 年级专业: 软工二班
实 验 题 目: 实现进程状态转化
【1.需求分析】
利用高级语言编写程序,模拟进程状态转换的过程。
进程的主要状态:就绪、运行、阻塞、终止,状态之间的转换如下图所示:
(1)输入形式:进程名、运行的时间片数、初始优先级且随时添加新进程。
(2)输出形式:实时输出进程转换的信息。
(3)程序功能:模拟进程状态转换过程。
【2.概要设计】
设计思路:采用可视化的集成开发环境 Visual Studio 2019。编程语言采用 C#。在实验一搭建的交互式实验系统框架的基础上,通过对其中的“进程状态转换”子窗口的编辑完善。
采用进程控制块(PCB)描述一个进程的所有信息包括:进程标识符、处理机状态、进程调度信息以及控制信息,它是系统感知进程存在的唯一标志,进程与 PCB是一一对应的。
对PCB 中的内容在此可做一些简化处理,只包括:进程标识符(内部标识符、外部标识符)、当前状态(“就绪”,“阻塞”,“执行”和“终止”)、要求运行的时间片数、优先级等。
模拟过程
按优先级高低对进程进行调度,每个进程可有四个状态,即:“就绪”,“阻塞”,“执行”和“消亡”(假设优先数越大优先级越高,以及进程的初始状态为就绪状态)。
为便于处理,应该随机地赋予所有进程各自的“优先级”和“要求运行的时间片数”,由用户给定。
程序中共设 4 个队列:就绪队列、执行队列、阻塞队列和消亡队列。
按优先级调度时,进程每运行一次,优先级降低一位,要求的时间片数减 1,如果要求的时间片数为零了,则将其加入终止队列。否则,将其按照优先级的次序重新加入就绪队列。
要求的时间片数为零了,则将其加入终止队列。否则,将其按照优先级的次序重新加入就绪队列。
进程运行过程中,遇到阻塞时,将该进程加入阻塞队列。(通过随机函数得到随机数,满足某种情况则使之加入到阻塞队列,或人为设置是否阻塞)。
重复调度,直到就绪队列中所有进程全部运行结束。
流程图:
【3.详细设计】
定义的类类型PCB的实现如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
namespace 操作系统实验一
{
class PCB
{
public int Pid //内部标识符
{
get;
set;
}
public string Processname //外部标识符(进程名称)
{
get;
set;
}
public int Timeslice //要求运行的时间片数
{
get;
set;
}
public int Priority //优先级
{
get;
set;
}
public string State //状态
{
get;
set;
}
}
}
本次实验的主要操作代码如下:
随机创建:
自定义创建:
运行操作:
阻塞操作:
唤醒操作:
模拟CPU运行函数timer1_Tick函数
【4.测试结果】
随机创建几个进程:
自定义创建:
运行:
阻塞:
唤醒:
相关设置:
可以更换背景颜色
暂停程序运行(暂停时不能进行其他操作)
【5.源代码】
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 操作系统实验一
{
public partial class Form2 : Form
{
public int pid = 0; //进程ID
public string Processname; //进程名
public int Timeslice; //时间片
public int Priority; //优先级
public int flag = 0;//标志
public int i = 0;
public int time1 = 0;
List<PCB> ready = new List<PCB>(); //就绪队列
List<PCB> running = new List<PCB>(); //运行队列
List<PCB> clog = new List<PCB>(); //阻塞队列
List<PCB> destroy = new List<PCB>(); //消亡队列
public Form2()
{