进程
1.进程:程序被装载到内存中并准备执行。进程具备文本、数据、堆栈片段以及他们的资源。资源可以是文件、对象句柄、设备、信号量、互斥量、管道等等。操作系统管理进程及它的资源。信息保存于进程控制块或进程信息块的系统结构中,用户通过函数调用或访问数据结构即可使用此结构中包含的信息。
每个进程都有一个初始优先权。进程属性包含保存在进程信息块中部分或全部信息以及与信号、I/O和虚拟内存操作计数器、进程退出状态(进程终止的原因)和异常/调试端口(进程间通信渠道)有关的信息。
进程环境:系统+用户定义指针的集合,环境为进程设置默认信息。环境变量协助定义进程的行为。环境变量列表的创建和初始化由用户完成。一些变量具有系统初始化的默认设置。用户可以调用函数来创建和初始化特定进程的变量(局部变量)。
2.进程信息块:
OS/2进程结构:pid(当前进程id)、ppid(父进程id)、 module_handle(程序可执行模块句柄)、command_line(命令行参数的指针)、environment(进程环境块的指针)
Win32进程结构:hProcess(进程句柄)、hThread(线程句柄)、dwProcessID(当前进程ID)、dwThreadID(线程ID)
环境块:
Unix:Home(指向用户初始工作目录的路径)、logname(与某进程关联的登录名)、path(查找可执行模块的路径前缀)、term(输出终端的类型)、tz(时间区的信息)、lang(地区)、lc_all(覆盖地区名)、lc_collate(核对信息的地区名)、lc_type(字符分类的地区名)、lc_monetary(货币编辑的地区名)、lc_numeric(数值编辑的地区名)、lc_time(地区日期和时间信息名)
3.进程状态: 进程某时某刻所处的模式或条件。它决定了将来的事件以及进程可能进入的状态。
进程状态:ready(就绪)、运行(running)、阻塞(blocked)、备用(standby)、空闲/新建(idle/new)、挂起-就绪(suspend-ready)、挂起-阻塞(suspend-blocked)、完成/终止(done-terminiated)、僵化(zomified)
ready(就绪): 分派器给进程分配了处理器。
running(运行):在处理器上执行的进程。
blocked(阻塞):在外部事件发生前不能运行。
standby(备用):从就绪队列中挑选出在处理器上运行的进程。每个处理器,每一时刻只能有一个进程处于该状态。
idle/new(空闲/新建):不可运行的新创建进程。这是进程的初始状态。
suspend-ready(挂起-就绪):进程临时从就绪队列或从处理器中删除。原因:(1)系统操作性能低下,可能会崩溃,问题被纠正后进程挂起。(2)结果不精确或不正确,用户挂进程。(3)系统可能超负荷,因而挂起进程,直到负荷达到正常水平为止。进程为了等待某对象同步化的执行而自动挂起。
suspend-blocked(挂起-阻塞):当进程等待的事件永不发生或无限延迟时,阻塞进程被挂起。
done-terminiated(完成/终止):进程完成执行并且释放了资源。
zombified(僵化):进程终止,但没有返回父进程它的退出代码。进程接受退出代码前一直处于僵化状态。
就绪(ready)、运行(running)和阻塞状态(blocked)都被看做激活状态(active state),是最常见的实现进程状态。新建(new)和空闲(idle)状态是新创建进程的初始状态(准备执行但尚不能运行)。挂起-就绪(suspend-ready)和挂起-阻塞状态(suspend-blocked)是两种挂起进程执行的非激活状态。终止进程可以再次初始化。在进程完成执行后释放它前,进程可以进入一种僵化状态。
4.进程状态转换:
(1)初始化:
(2)分派:
(3)抢占:
(4)时间耗尽:
(5)阻塞:
(6)唤醒:
(7)挂起:
(8)恢复:
(9)退出:
(10)重新初始化:
WIN32:备用状态(下一个使用处理器进程的过度状态).
5.进程优先权(priority scheme):决定就绪进程使用处理器的顺序。
进程被分配一个优先类(priority class)以及该类中的优先级(priority level)。系统从就绪队列中选择一个最高优先级开始。若该类中没有这样的进程,则搜索下一个较低优先权的进程。若较高优先权进程变为可用,则运行进程被抢先,即使它的时间段还没有过期也如此。进程由外部资源和系统分配优先权。子进程继承了父进程的优先权。
6.动态优先权方案:
高优先权进程降低为较低优先权,较低优先权进程可提升优先权
注意:大部分系统综合运用静态和动态优先权。抢先进程的优先权被降低,而等待进程的优先权被提升。
7.上下文切换:当一个运行进程从处理器中删除,而且系统选择另一个进程放在处理器上执行时,就发生了上下文切换。
上下文包含可执行映像(excutable image)、程序计数器(program counter)、寄存器(register)、堆栈(stack)以及用于动态和静态变量的分配内存。
发生上下文切换的情况:(1)进程的时间段用完(2)一个等待或新建进程准备就绪,而且已被选择使用处理器。(3)比运行进程较高的优先权进程变成就绪状态(4)运行进程的分配处理器发生了变化(5)运行进程发出I/O请求。
8.进程关系:
9.进程终止:
10.同步和异步进程:
11.进程映射:
在UNIX环境中,如果子进程是父进程的拷贝,子进程和父进程则共享文本片断。虽然子进程由一个可执行新程序,但它是同一个进程,因此保持相同的进程ID和父ID
12.进程资源:
进程共享资源:
基本资源类型3种:硬件、软件、数据。
注意:为了防止数据破坏必须小心谨慎。访问共享内存应当同时避免覆盖数据。可以使用信号量、互斥量、临界区等来实现同步。内存也可以通过存在于多个进程的虚拟地址空间中而被共享(如环境变量)