1、引入进程的目的:
1)刻画系统的动态性,发挥系统的并发性。
2)解决共享性,正确地描述程序的执行状态。
2、可再入程序:指能够被多个程序同时调用的程序。是纯代码,在执行过程中不被修改,调用它的各应用程序提供工作区。编译程序通常是“可再入”程序,可同时编译若干源程序。
可再用程序:在被调用过程中可以自身修改,在调用它的程序退出之前是不允许其他程序来调用的。
3、进程:
是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和保护的基本单位。拥有结构性,共享性,动态性,独立性,制约性,并发性。
三态模型:
1)运行态:进程占用处理器运行的状态。
2)就绪态:进程具备运行条件,等待系统分配处理器以便其运行的状态。
3)等待态:又称阻塞态或睡眠态,指进程不具备运行条件,正在等待某个事件完成。
注意:处于运行态的进程个数不能大于处理器的个数,处于就绪态和等待态的进程可以有多个。
4、创建进程需要两个步骤:
首先为新进程分配所需资源,建立必要的管理信息,然后,设置此进程为就绪态,等待被调度执行。
类似的,进程终止:
首先,等待操作系统或相关进程进行善后处理(如抽取信息),然后,回收被占用的资源并由系统删除进程。处于终止态的进程不再被调度执行,下一步将被系统撤销,最终从系统中消失。
5、挂起进程:
等同于不在主存的进程,因此,挂起进程不会参与低级调度知道它们被对换进主存。挂起进程具有以下特征:
此进程不能被立即执行。此进程可能会等待某事件发生,所等待的事件独立于挂起条件,事件结束并不能导致进程具备可执行条件。此进程进入挂起状态是由于操作系统、父进程或进程自身组织其运行。进程挂起状态的结束命令只能通过操作系统或父进程发出。
6、进程映像:某时刻进程的内容及其状态集合。包括以下要素:
1)进程控制块PCB:每个进程捆绑一个控制块,用来存储进程的标志信息、现场信息和控制信息。进程创建时建立控制块,进程撤销时回收其,它与进程一一对应。
2)进程程序块:是被执行的程序,规定进程的一次运行所应完成的功能。
3)进程核心栈:进程在核心态工作时使用,用来保存中断/异常现场,保存函数调用的参数和返回地址,等等。
4)进程数据块:是进程的私有地址空间,存放各种私有数据,用户栈也要在数据块中开辟,用于在函数调用时存放栈帧、局部变量等参数。
7、进程上下文:进程物理实体和支持进程运行的环境的合称。由三部分组成:
1)用户级上下文:由正文(程序)、数据、共享存储区、用户栈锁组成,它们占用进程的虚拟地址空间。
2)寄存器上下文:由程序状态字寄存器、指令寄存器、栈指针、控制寄存器、通用寄存器组成。
3)系统级上下文:由进程控制块、主存管理信息(页表或段表)、核心栈组成。
8、进程队列及其管理:
把处于同一状态的所有进程的PCB链接在一起的数据结构称为队列。有三种通用的队列组织方式:
1)线性方式:操作系统根据系统内进程的最大数目,静态的分配主存中的某块空间,所有进程的PCB都组织在一个线性表中。
2)链接方式:对于同一状态进程的PCB,通过PCB中的链接指针将其链接成队列,可以采用单向或双向链表。
3)索引方式:利用索引表记录不同状态进程的PCB地址,系统建立若干索引表,如就绪索引表、等待索引表、空闲索引表等。
注意:为了标志和识别队列,系统为每个队列均设置队列标志,存放于内核空间中。不同状态的进程可以排成不同的队列,如运行队列、就绪队列和等待队列。
9、进程上下文切换:进程切换必定在核心态而非用户态发生。
内核在下列情况下会发生上下文切换:
1)当进程因各种原因进入等待态时。
2)当进程完成其系统调用返回用户态,但尚无资格获得CPU时。
3)当内核完成中断处理,进程返回用户态但尚无资格获得CPU时。
4)当进程执行的时间片到时或进程结束时。
10、进程切换的实现步骤如下:
1)保存被中断进程的处理器现场信息。
2)修改被中断进程PCB的有关信息,如进程状态等。
3)把被中断进程的PCB加入相关队列。
4)选择占用处理器运行的另一个进程。
5)修改被选中进程PCB的有关信息,如改为就绪态。
6)设置被选中进程的地址空间,恢复存储管理信息。
7)根据被选中进程的上下文信息来恢复处理器现场。
11、处理器模式切换:模式切换不同于进程切换,它不一定会引起进程状态的转换。
注意:用户空间和内核空间的数据不能互访,在应用程序执行系统调用的过程中,如果有需要,可通过内核函数copy_from_user( )和copy_to_user( )将数据在用户空间和内核空间中进行复制。
12、原语:
在核心态执行,是完成系统特定功能的不可分隔的过程,它具有原子操作性,其程序段不允许被中断,或者说原语不能并发执行。原语的实现方法之一是以系统调用的方式提供原语接口,采用屏蔽中断的方式来实现。
13、进程的创建源于以下事件:
1)提交批作业处理。2)有交互式作业登录终端。3)操作系统创建服务进程。4)已存在的进程创建新进程。
进程的创建过程如下:
1)在进程列表中增加一项,从PCB池中申请一个空闲PCB,为新进程分配唯一的进程标识符。
2)为新进程的进程映像分配地址空间,以便容纳进程实体。由进程管理程序确定加载至进程地址空间中的程序。
3)为新进程分配除主存空间以外的其他各种资源。
4)初始化PCB,如进程标识符、处理器初始状态、进程优先级等。
5)把新进程的状态设置为就绪态,并将其移入就绪进程队列。
6)通知操作系统的某些模块,如记账程序、性能监控程序。
在windows中,使用Win32 API的CreateProcess( )函数创建进程,返回一个进程句柄。
14、进程阻塞和唤醒:
阻塞是指使进程让出处理器,转而等待一个事件,如等待资源。等待I/O操作完成、等待某事件发生等。进程通常自调用阻塞原语来阻塞自己,所以阻塞是进程的自主行为,是一个同步事件。
15、进程挂起和激活:
当出现引起挂起事件时,检查要被挂起进程的状态,若处于活动就绪态,就修改为挂起就绪态;若处于等待态,就修改为挂起等待态,被挂起进程PCB的非常驻部分要交换到磁盘对换区。
注意:挂起原语既可以由进程自己也可以由其他进程调用,但是激活原语只能由其他进程调用。