区的状态。一个区具有状态:锁住、在请求中、在装入过程中、有效(区已装入内存)。
区在物理存储器中的位置。
引用计数。共享该区的进程数。
指向文件索引节点的指针。
本进程区表
系统为每个进程配置了一张本进程区表,表中每一项记录一个区的起始虚地址及指向系统区表中对应区表项的指针。核心通过查找本进程区表和系统区表,将区的逻辑地址变换为物理地址。
进程的数据结构
进程状态及其转换
在UNIX System Ⅴ中,为进程设置了9种状态。
用户态执行
核心态执行
内存中就绪
内存中睡眠
就绪且换出
睡眠且换出
被剥夺状态
创建状态
僵死状态
UNIX系统的状态转换图
进程上下文
进程上下文又称进程映像,它由三部分组成:用户级上下文、寄存器上下文和系统级上下文。
用户级上下文
用户级上下文由进程虚地址空间中的正文、数据、用户栈和共享存储区组成。
寄存器上下文
寄存器上下文主要由CPU中的一些寄存器内容构成。主要的寄存器有:
程序计数器。其中存放的是CPU要执行的下条指令的虚地址。
处理机状态寄存器。其中包括运行方式(用户态、核心态),处理机当前的运行级,以及记录处理机与该进程有关的硬件状态信息。
栈指针。指向栈的下一个可用单元或栈中最后使用的单元(因机器而异)。
通用寄存器。用于存放进程在运行过程中所产生的数据,通用寄存器的数目因机器而异。
系统级上下文
系统级上下文可分为静态和动态两部分:
静态部分:系统级上下文的静态部分由进程表项、U区、本进程区表项、系统区表项和页表组成。
动态部分:系统级上下文动态部分的数目是可变的。它包括:核心栈、若干层寄存器上下文。
进程控制
在UNIX系统中,用于对进程实施控制的主要系统调用有:fork,创建进程;exec,执行文件;exit,进程终止;wait,等待子进程终止。
系统调用fork
系统调用fork用于创建一个新进程。
fork系统调用的语法格式如下:
int fork( )
fork系统调用没有参数,如果执行成功,则创建一个子进程,子进程继承父进程的许多特性,并具有与父进程完全相同的用户级上下文。
fork的算法描述