第一次作业:深入源码分析进程模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第一次作业:深入源码分析进程模型相关的知识,希望对你有一定的参考价值。
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.对操作系统进程的看法
进程是操作系统中很重要的部分 所以学好进程十分的重要。对自己未来更深一步的学习很有帮助。
以上是关于第一次作业:深入源码分析进程模型的主要内容,如果未能解决你的问题,请参考以下文章