进程概念的简单理解

操作系统 常见的进程调度算法

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

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

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

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

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

原文:https://blog.csdn.net/xuzhiwangray/article/details/50564702 

 

什么是PCB

 

task_struct:

为了管理进程,操作系统必须对每个进程所做的事情进行清楚的描述,为此,操作系统使用数据结构来代表处理不同的实体,这个数据结构就是通常所说的进程描述符或进程控制块(PCB)。

在linux操作系统下这就是task_struct结构 ,所属的头文件#include   <sched.h>每个进程都会被分配一个task_struct结构,它包含了这个进程的所有信息,在任何时候操作系统都能够跟踪这个结构的信息,宰割结构是linux内核汇总最重要的数据结构,下面我们会详细的介绍。

这个进程的主要信息:

1、与进程相关的唯一标识符,区别正在执行的进程和其他进程

2、状态:描述进程的状态,因为进程有阻塞、挂起、运行等好几个状态,所以都有个表示符来记录进程的执行状态。

3、优先级:如果有好几个进程正在执行,就涉及到进程的执行的先后顺序,这和进程的优先级这个标识符有关。

4、程序计数器:程序中即将被执行指令的下一条地址。

5、内存指针:程序代码和进程相关数据的指针。

6、上下文数据:进程执行时处理器的寄存器中的数据。

7、I/O状态信息:包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。

8、记账信息:包括处理机的时间总和,记账号等等。
 


其他的proc操作等等:https://blog.csdn.net/daboluo521/article/details/79598281 

 

孤儿进程

 1 #include <unistd.h>
  2 #include <stdlib.h>
  3 #include <stdio.h>
  4 
  5 int main()
  6 {
  7     pid_t pid;
  8     pid = fork();
  9     if (-1 == pid)
 10         exit(1);
 11     else if (0 == pid) //child
 12     {
 13         sleep(30);
 14         printf("child  pid is %d, parent pid is %d\n", getpid(), getppid());
 15     }
 16     else  // parent
 17     {
 18         printf("parent pid is %d\n", getpid());
 19         return 0;
 20     }
 21 }

僵尸进程

1 #include <unistd.h>
  2 #include <stdlib.h>
  3 #include <stdio.h>
  4 
  5 int main()
  6 {
  7     pid_t pid;
  8     pid = fork();
  9     if (-1 == pid)
 10         exit(1);
 11     else if (0 == pid) //child
 12     {
 13         printf("child  pid is %d, parent pid is %d\n", getpid(), getppid());
 14     }
 15     else  // parent
 16     {
 17         sleep(30);
 18         printf("parent pid is %d\n", getpid());
 19     }
 20     return 0;
 21 }
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值