代码改变世界

第一次作业:深入源码分析进程模型

2018-05-01 20:44  刘佳峻  阅读(185)  评论(0编辑  收藏  举报

1.简介

本文的内容是基于Linux 2.6的源码,深入分析进程模型。

  • 什么是进程
  • 操作系统是怎么组织进程的
  • 进程状态如何转换
  • 进程是如何调度的
  • 谈谈自己对该操作系统进程模型的看法

2.什么是进程

  进程的概念:进程是处于执行期的程序以及它所包含的所有资源的总称,包括虚拟处理器,虚拟空间,寄存器,堆栈,全局数据段等。

 Windows10进程如图所示

3.操作系统是如何组织进程的

 

一、描述进程——PCB

进程信息被放在一个叫做进程控制块的结构中,可以理解为进程属性的集合,称之为:PCB,在Linux下,PCB是一个叫做task_struct的结构体,这个结构体里面存放了进程的有关信息。

task_struct结构体的内容分类:

①标识符(PID):描述本进程的唯一的标识符,用来区别其他进程

获取pid的方法有很多,最推荐的一种就是通过系统调用getpid()来获取进程的pid,

②状态:任务状态,退出码,退出信号等

状态分类:R运行状态(runing)  S睡眠状态(sleeping) D磁盘休眠状态(Disk sleeping) T停止状态(stopped) X死亡状态(dead) Z僵尸状态(zombie) 

③优先级:相对于其他进程的优先级

PRI:进程可执行的优先级,值越小优先级越高

NI:代表nice值,表示进程可被执行的优先级的修正数值

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

⑤内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

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

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

⑧记账信息:可能包括处理器的时间总和,使用的时钟数总和,时间限制,记账号等

⑨其他信息

二、组织进程

因为进程需要不断的关闭和开启,和数据结构中链表的结构很相似,所以运行在系统的进程都以task_struct链表的形式存在内核里面,此时我们就把进程组织起来了。

4.进程状态如何转换

1.进程的基本状态

(1)执行状态(Running):进程占用处理机,进程的程序正在执行。单处理机系统中只能有一个进程处于执行状态,多处理机系统中可能有多个进程处于执行状态。

(2)等待状态(Blocked):也叫阻塞或睡眠状态,是进程由于等待某种事件的发生而处于暂停执行的状态。如进程因等待I/O的完成、等待缓冲空间等。

(3)就绪状态(Ready):进程已分配到处理机以外的所有必要资源,具备了执行的所有条件。可能会有多个进程处于就绪状态,排成就绪队列。

2. 进程状态的转换

(1)就绪状态->执行状态:进程调度程序为处于就绪状态的进程分配处理机后,该进程进入执行状态。

(2)执行状态->等待状态:正在执行的进程因需要等待某事件而无法执行。

(3)等待状态->就绪状态:进程所等待的事件发生了,进程就从等待状态进入就绪状态。

(4)执行状态->就绪状态:正在执行的进程因时间片用完而被暂停执行;或者在可抢占调度方式中,一个优先权高的进程到来后,正在执行的低优先权的进程被强制撤下处理机,转换为就绪状态.

5.进程的调度

Linux系统进程提供了两种优先级,一种是普通的进程优先级,第二个是实时优先级。前者适用SCHED_NORMAL调度策略,后者可选SCHED_FIFO或SCHED_RR调度策略。任何时候,实时进程的优先级都高于普通进程,实时进程只会被更高级的实时进程抢占,同级实时进程之间是按照FIFO(一次机会做完)或者RR(多次轮转)规则调度的。

Linux进程状态机:

6.对操作系统进程的看法

进程是操作系统中很重要的部分 所以学好进程十分的重要。对自己未来更深一步的学习很有帮助。