class="markdown_views prism-atom-one-light">
操作系统实验
hello,我是橘子
最近突然发现我以前写的操作系统实验,然后分享给大家吧,就是自己写的代码也不是很好,希望大家见谅哈
实验目的
一、进程控制
●基本要求:利用简单的结构和控制方法模拟进程结构、进程状态和进程控制。
●参考学时:9学时
●实验提示:
1、用PCB表示整个进程实体,利用随机数方法或键盘控制方法模拟进程执行中产生的事件,或者利用基于图形界面的鼠标或者键盘操作控制进程管理内容。
2、定义PCB:包括理论PCB中的基本内容,如内部ID、外部ID、队列指针。由于很难实现真正的进程创建功能,在实验中只需建立PCB节点,并用它代表一个完整的进程。每创建一个进程时,可动态分配PCB节点,对相应内容赋值,并链接到适当的队列上。
可参考如下数据结构(动态形式):
struct PCB{
char name[10];
struct PCB*next;
};
struct PCB *ready,*blocked,
running;
创建进程时:
struct PCB p=(struct PCB )malloc(sizeof(struct PCB));
并将此进程添加到就绪队列末尾:
add(ready,p);
其中,ready为就绪队列头节点,并在开始处分配了空间;add函数是链表中添加节点函数,代码可以为:
void add(struct PCB head,struct PCBprocess){
struct PCBtmp=head;
while(tmp->next!=NULL)
tmp=tmp->next;
tmp->next=process;
process->next=NULL;
}
3、定义进程状态转换方式:真实的进程状态转换是由进程内部操作或操作系统的控制引起的。由于模拟程序中无法实现这些功能,我们可以采用随机数方法或键盘控制方法模拟,并实现对应的控制程序。随机方法指产生1-5的随机数,分别代表创建进程(1)、时间片到(2)、进程阻塞(3)、唤醒进程(4)、结束进程(5)等事件;键盘模拟方法指定义5个选项菜单代表以上五种事件。
4、根据随机数或键盘操作处理就绪队列、阻塞队列和当前执行进程的状态。每次事件处理后应显示出当前系统中的执行进程是哪一个,就绪队列和阻塞队列分别包含哪些进程。
5、(带部分为试验班和特长班需要完成的内容,普通班选作)完成可变分区的分配与回收,创建进程的同时申请一块连续的内存空间,结束进程同时回收分配的内存空间。分配采用最佳适应算法,碎片大小为2Kb,最后回收所有进程的空间。可以查看进程所占的空间和系统空闲空间。
●评分标准:满分15分
要求必须完成以下几个方面的内容:
能够模拟进程的创建与撤销过程;5分
可对进程的状态进行全面的控制;5分
按先进先出方式管理就绪和阻塞队列,能够按队列形式输出进程状态。5分
#include
#include
using namespace std;
typedef struct PCB
{
char data;
struct PCB *next;
}PCB,*PCBlist;
void show(PCBlist rear)//就绪状态和堵塞状态展示
{
PCBlist P=rear;
while(P->next)
{
cout<next->data<<" ";
P=P->next;
}
}
void runshow(char running)//执行状态展示
{
if(running=='