进程的介绍
进程代表程序的执行过程, 它是一个动态的实体, 随着程序的变化而不断的变化
在某个时刻进程的内容称作进程映像
所谓进程, 就是由正文段, 数据用户段以及系统数据段共同组成的一个执行环境
进程的状态
1.运行状态: 进程正在运行(每个时刻有且只能有一个进程正在运行)
2.就绪态: 进程正在运行队列中等待运行
3.阻塞态: 等待某种事情发生而阻塞
4.僵死状态: 进程已经终止, 但进程描述符依然存在, 直到父进程调用wait()函数后释放
进程控制块FCB
struct task_struct
{
1.状态信息
2.链接信息(链接符间的亲属信息, 如当前进程的父进程, 祖父进程, 兄弟进程, 子进程, 孙子进程等)
3.各种标识符(pid, uid, gid等)
4.进程间通信信息(管道, 消息队列, 共享内存等)
5.时间和定时器信息
6.调度信息
7.文件系统信息
8.虚拟内存信息
9.处理器环境信息
}
创建进程
1.分配PCB, 并将父进程PCB拷贝给新建的PCB. 子进程几乎继承了父进程所有的资源
2.检查进程是否过多. 当分配资源已达到限制值时, 就不能再创建进程了
3.将子进程设置为等待状态, 让内核知道新进程已经诞生, 但是又不会马上运行
4.为新进程分配一个有效的PID, 这也是能唯一标识一个进程的编号
5.更新PCB. 因为有些资源无法从父进程获取
6.把新进程插入进程链表, 确保进程之间的亲属关系
7.把新进程的状态设置为就绪态, 将进程插入就绪列表
8.让父进程和子进程平分剩余时间片段(比如,父进程被分配到20ms的时间片段, 在产生子进程之前已经用掉了10ms, 那么现在父进程和子进程的时间片段各为5ms)
9.返回子进程的PID, 这个PID最终由用户态下的父进程读取