
操作系统进程创建实验报告。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
操作系统 进程创建实验报告分析了 `fork()` 系统调用的进程创建机制。实验原理如下:
一) 在 UNIX 系统中,进程被视为一个独立且拥有自身资源的基本单位,同时也是一个独立的调度单位。每个进程实体由若干个区组成,包括程序区、数据区、栈区以及共享存储区等。每个区又进一步划分为多个页面。每一个进程都配置了一个独特的进程控制块 (PCB),该 PCB 用于对进程进行控制和管理。该 PCB 的数据结构包含以下关键信息:1、进程表项 (Process Table Entry),其中包含进程标识符 (PID)、用户标识符 (UID)、进程状态、事件描述符、以及进程和 U 区在内存或外存中的地址,此外还包括软中断信号、计时域、进程大小、偏置值 nice,指向就绪队列中下一个 PCB 的指针 P_Link,以及指向 U 区进程正文、数据及栈在内存区域的指针;2、U 区 (U Area),用于存放进程表项的一些扩充信息。每一个进程都拥有一个私有的 U 区,其中包含了进程表项指针、真正用户标识符 u-ruid(read user ID)、有效用户标识符 u-euid(effective user ID)、用户文件描述符表、计时器、内部 I/O 参数、限制字段和差错字段等;3、系统区表项。用于记录各个段在物理存储器中的位置等信息。UNIX 系统采用段页式存储管理,因此需要将段的起始虚地址转换为系统中的物理地址,以便实现区的共享。核心中设置了一个系统区表,各表项记录了有关描述活动区的信息,包括区的类型和大小、区的状态以及区在物理存储器中的位置;4、进程区表系统为每个进程配置了一张过程区表。表中每一项记录一个区的起始虚地址及指向系统区表中对应的区表项。通过查找这两个表,核心可以有效地将区的逻辑地址转换为物理地址。
二) 进程映像 在 UNIX 系统中, 进程是其执行过程的体现,即正在运行的实体。它由三个部分构成:1) 用户级上文和下文主要由用户程序组成;2) 寄存器上文和下文由 CPU 中的一些寄存器的内容组成, 例如 PC, PSW, SP 以及通用寄存器等;3) 系统级上文和下文包含 OS 为管理过程所用的信息, 这些信息可以分为静态和动态两类.
三) 所涉及的系统调用 `fork()` 是一个用于创建新进程的系统调用. 其具体格式如下:`pid = fork()` 。参数定义:`int fork()` 。 `fork()` 的返回值意义如下:0: 在子进程中, `pid` 变量保存的 `fork()` 返回值为0, 表示当前运行的程序是子程序; >0: 在父程序中, `pid` 变量保存的 `fork()` 返回值为子程序的ID值(唯一标识符);-1: 创建失败. 如果 `fork()` 调用成功, 它向父程序返回子程序的PID, 并向子程序返回0; 如果 `fork()` 被调用了一次但返回了两次, 则表示OS在内存中建立了一个新程序. 新建立的新程序是调用`fork()` 父程序(parent process)的副本, 该副本称为子程序(child process)。 子程序继承了父程序的许多特性并具有与父程序完全相同的用户级上下文. 父与子程序并发执行. 为了完成`fork()`, 核心会执行以下操作:(1)为新程序分配一个过程表项和一个唯一的流程标识符; (2)检查同时运行的流程数目超过预先规定的最大数目时, `fork()` 系统调用失败; (3)拷贝过程表项中的数据将父程序的当前目录及所有已打开的数据拷贝到子程序的流程表中并设置流程状态为“创建”状态; (4) 子流程继承父程序的的所有文件对父程序的当前目录及所有已打开的文件表的引用计数加1; (5)为子流程创建一个流程上文并设子流程的状态为“内存中就绪”并返回子程序的标识符;(6)虽然父与子流程的代码相同但是每个流程都有自己的PC开始位置并且根据 pid 变量保存的 fork() 返回值的不同执行不同的分支语句。
全部评论 (0)


