进程是个什么东西?
宏观角度:进程是对运行程序的描述,并将它组织到了一个结构体中,这个结构体就是进程控制块(pcb),在 linux 操作系统下叫 task_struct ,里面包含了程序的各种详细信息.
微观(内核)角度:担当分配系统资源(CPU,内存)的实体,是系统进行资源调度和分配的基本单位,实现了操作系统的并发.
时间角度:程序一般是以文件的形式储存在硬盘中,当这个程序被加载到内存中,就是进程.换句话说,程序是静态的,而进程是动态的.一个程序如果被多次执行,会产生不同的进程.
进程控制块是怎么描述进程的(pcb里面包含的主要信息)
(1) 进程标示符 用来标识一个进程,就像我们每个人的名字一样,进程总得也要有名字啊,目的是用来区分其他进程
(2) 进程状态 表示进程现在的状态,比如睡眠,运行,停止,死亡…在执行的过程中,又分为运行态,就绪态,阻塞态…
(3) 进程优先级,在系统中,不可能所有的进程一起加载到内存中去运行,一定要有顺序。就像地震一样,靠近门的学生先跑,然后依次到最后一个学生
(4) 上下文数据 保存进程中断前的信息,这个最好理解了,就比如你正在看我的博客,然后你女朋友打电话了,你肯定会接电话,这个时候,大脑就会记录你正在看第四条上下文数据,当和你女朋友说完话,就会接着看第五条内存指针.如果进程中没有这个功能,你就会忘记刚刚看哪了
(5) 内存指针 包括程序代码和进程相关数据的指针,比如,当前进程在内存的什么位置,我们把指向这块内存的指针包含在 pcb 中的内存指针里面.
(6)程序计数器 程序中即将被执行的下一条指令的地址,例如,我现在每敲一个字,下一个字就要在大脑中有记录,然后才能敲出来. 进程要执行起来,需要内存来保存代码和数据,也需要CPU
执行相关指令.
(7) I/O状态信息 包括显示的I/O请求,进程被分配得到的I/O设备,打开的文件列表…等,比如一段代码是用来播放音乐的,那么就会使用在播放器设备上.
(8) 记账信息 ,这个进程使用CPU的时间和,时间片剩余量,进程已执行时间… 都包含在这里.例如,你看博客已经半个小时了,这个信息就保存你在大脑的记账信息中
进程描述完,又是如何被组织的呢?
通过队列或链表的数据结构,操作系统将同一个状态的进程调度到同一个链表中,不同状态的进程对应不同的链表,如下图
这样系统在调度的时候,就会很方便了.
进程的特点
(1) 动态性:进程一旦创建,会经历多种状态的转换.
(2) 并发性:多个进程实体在内存中可以同时运行
(3) 独立性:不同的进程工作起来不会互相影响
(4) 异步性:当访问共享数据资源时,进程间会产生同步制约
(5) 结构性:每个进程都有一个进程控制块描述,进程实体是由程序段,数据段和进程控制块三部分组成