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分