linux进程/内存管理的数据结构之u区

来源:互联网 发布:谁在星密码开淘宝店铺 编辑:程序博客网 时间:2024/05/19 22:25

一个进程的上下文包括:用户级上下文,寄存器上下文和系统级上下文。


用户级上下文:正文,数据,用户栈区和共享存储区;

寄存器上下文:程序寄存器(IP),即CPU将要执行的下一条指令地址;处理机状态寄存器(EFLAGS);栈指针;通用寄存器。

系统级上下文:进程表项(proc结构)和U区,在Linux系统中,这两部分被合成task_struct,区表及页表,核心栈等。


全部的上下文信息构成了一个进程的运行环境,当发生进程调度时,必须对全部的上下文信息进行切换,新调度的进程才能够运行。我们可以将进程看成一个上下文集合的抽象概念。,



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)是在系统调用执行期间出 现错误。然后,内核解释出现的错误代码,并采取相应的动作。

原创粉丝点击