陶瓷膜分离设备:linux进程/内存管理的数据结构之

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 00:29:24
u区u区包括与进程相关的内容。它可以是进程表自身的一部分,但要单独维护,因为这部分可以在上下文切换的时候和进程镜像进行交换。内存仍保留该进程在进程表中的条目,因为对于进程调度和控制以及决定交换进程的时间而言,该信息必不可少。u区包括以下字段:
(1) 指针:指向该进程对应进程表中的条目。为避免混乱,图中并没有给出该指针。
(2) 真实有效的用户ID:指明进程的权限,如文件访问权限。
(3) 控制终端:该字段确定与进程相关的"逻辑终端"。
(4) 计时器:该字段分别指明进程在用户模式和内核模式下的运行时间。
(5) 队列:指明进程想要响应不同信号的方式。当该进程对应的信号到达时,查询队列并采取适当的动作。
(6) 当前目录和当前根目录:描述进程所处的文件系统环境。当用户想要从一个目录转换到另一个目录时,从本质上讲,这个字段被改动。同样还要使用该字段由相对路径名连接后构造绝对路径名。
(7) 用户文件描述符:该表维护进程用不同模式打开的文件,前面已经介绍过。
(8) 权限:该字段帮助进程在创建文件时设置权限掩码位。它表示u区中的这些权限位可被用作以"Creat"系统调用作为参数提供的这些权限位的掩码。最终将这些结果权限位设置为该文件索引节点中的权限。因此,该进程创建或打开的所有文件根据掩码可以拒绝某种权限。
(9) 最大值:该字段限制进程的大小以及进程可以写的文件的大小。
(10) I/O参数:该参数指明源地址/目标地址,要传送的数据量等。通常,它们保存内存地址和作为文件偏移量的相对字节数(RBN)。这个参数的含义在讨论系统调用的时候已经讨论过,这里不再介绍。
(11) 返回值:该字段存储系统调用产生的结果。
(12) 错误:该字段记录该进程提交的系统调用在执行期间遇到的错误。准确含义在前面讨论系统调用的时候就已经讨论过,这里不再介绍。
(10)、(11)、(12)实际上是在u区中预留给系统调用执行的工作区。有一个分隔的区域包括存储系统调用需要使用的参数(10),这个参数可 在u区和堆栈之间传递参数。有一个区域包括存储系统调用产生的结果(11),和一个存储错误代码(12)的区域,错误代码(12)是在系统调用执行期间出 现错误。然后,内核解释出现的错误代码,并采取相应的动作。
某另一位大牛的描述:
UNIX V6的进程结构实现与Linux的有所区别。UNIX的U区对应Linux中的进程描述符(或称进程控制块、任务数据结构)。UNIX的进程表即是Linux中的进程表(task struct table),但是Linux的进程表项是一个指向进程任务结构的指针,而非象UNIX那样是进程region的指针。在Linux中有关一个进程的所有信息都保存在其任务数据结构中。
上下文:
一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。
用户级上下文:正文、数据、用户栈以及共享存储区;
寄存器上下文:程序寄存器(IP),即CPU将执行的下条指令地址,处理机状态寄存器(EFLAGS),栈指针,通用寄存器;
系统级上下文:进程表项(proc结构)和U区,在Linux中这两个部分被合成task_struct,区表及页表(mm_struct , vm_area_struct, pgd, pmd, pte等),核心栈等。
全部的上下文信息组成了一个进程的运行环境。当发生进程调度时,必须对全部上下文信息进行切换,新调度的进程才能运行。进程就是上下文的集合的一个抽象概念。
是否Linux中就没有U区之说?