进程的调度算法.

1.    调研进程的调度算法

答:

1,时间片轮转调度算法(RR)

给每个进程固定的执行时间,根据进程到达的先后顺序让进程执行单个时间片时间,执行完成后调度下一个进程,时间片轮转调转算法不考虑等待时间和执行时间,属于抢占式调度。特点是长短兼顾,缺点是平均等待时间长,上下文切换费时,适用于分时系统。

2,先来先服务调度算法(FCFS)

根据进程到达的先后顺序执行进程,不考虑等待时间和执行时间,会产生饥饿现象。属于非抢占式调度,优点是公平,实现简单;缺点是不利于短作业。

3,优先级调度算法(HPF):在进程等待队列中选择优先级最高的来执行。

4,多级反馈队列调度算法:

将时间片轮转与优先级调度相结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转。优点是兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。

5,高响应比优先调度算法:

根据“响应比=(进程执行时间+进程等待时间)/ 进程执行时间”这个公式得到的响应比来进行调度。高响应比优先算法在等待时间相同的情况下,作业执行的时间越短,响应比越高,满足段任务优先,同时响应比会随着等待时间增加而变大,优先级会提高,能够避免饥饿现象。优点是兼顾长短作业,缺点是计算响应比开销大,适用于批处理系统。
2. 调研task_struct结构体, 理解结构体中的各个字段的含义

答:

1.进程状态,记录进程在等待,运行,或死锁 
2.调度信息,由哪个调度函数调度,怎样调度等 
3.进程的通讯状态 
4.因为要插入进程树,必须有联系父子兄弟的指针,当然是tast_struct型 
5.时间信息,比如计算好执行的时间以便cpu分配 
6.标号,决定进程归属 
7.可以读写打开的一些文件信息 
8.进程上下文和内核上下文 
9.处理器上下文 
10.内存信息 

3. 使用代码模拟实现僵尸进程, 孤儿进程的场景

       孤儿进程

2 #include <stdio.h>
  3 #include <stdlib.h>
  4 #include <string.h>
  5 #include <unistd.h>
  6 #include<stdio.h>
  7 int main ()
  8 {
  9   ssize_t id=fork();
 10   if(id<0)
 11   {
 12     perror("fork");
 13     exit(1);
 14   }
             if(id==0)
 16   {
 17     //子进程
 18     printf("i am child !\n");
 19     sleep(20);
 20   }
 21     if(id>0)
 22   
 23   {
 24     //父进程
 25     printf("i am father!\n");
 26     sleep(10);
 27   }
 28    
 30   return 0;
 31 }                                                                              
                     

        僵尸进程

#include<stdio.h>                                                              
  2 #include<stdlib.h>
  3 int main ()
  4 {
  5     pid_t id =fork();
  6     if(id<0)
  7     {
  8       perror("fork");
  9     }
 10     else if(id>0)
 11     {
 12       //father
 13       printf("father[%d] if sleeeping ...\n",getpid());
 14       sleep(30);
}
 16     else
 17     {
 18       //child
 19       printf("child [%d] is z...\n",getpid());
 20       sleep(5);
 21       exit(EXIT_SUCCESS);
 22     }
 23   return 0;
 24 }

 


 

 

通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。 要求: 1.用C语言或C++语言来实现对n个进程采用优先权优先算法以及轮转算法的进程调度。 2.每个用来标识进程进程控制块PCB用结构来描述,包括以下字段: (1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。 (2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。 (3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。 (4)进程总共需要运行时间Alltime,利用随机函数产生。 (5)进程状态,0:就绪态;1:运行态;2:阻塞态。 (6)队列指针next,用来将多个进程控制块PCB链接为队列。 3.优先数改变的原则 (1)进程在就绪队列中每呆一个时间片,优先数增加1。 (2)进程每运行一个时间片,优先数减3。 4.在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。其中它们的初始化状态如下: This is an example for priority processing : Input the number of the PCB to be started :1 PCB: ID priority CPUtime ALLtime State 5 86 4 64 ready 1 32 20 68 ready 6 59 0 47 ready 2 18 20 62 ready 4 86 4 6 ready 7 72 4 51 ready 8 76 0 60 ready 9 4 4 19 ready 13 94 12 19 ready 16 88 12 24 ready 5.为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照输出格式如下所示: This is an example for priority processing : Input the number of the PCB to be started : PCB: ID priority CPUtime ALLtime State 1 42 0 68 ready 建立: Creating -> ready 1 41 4 68 running 变迁1:ready -> running 1 41 0 68 blocked 变迁2:running -> blocked 1 41 0 68 ready 变迁4:running -> ready The idle prcess is running! 变迁1:ready -> running The idle prcess is completed! 销毁: running -> Destroy The idle prcess is running! 变迁1:ready -> running The idle prcess is completed! 销毁: running -> Destroy The idle prcess is running! 变迁1:ready -> running
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值