Advertisement

操作系统进程创建实验报告。

  •  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)

还没有任何评论哟~
客服
客服
  • 优质
    本实验报告详细探讨了在操作系统课程中进行的进程创建实验。通过理论与实践相结合的方式,深入理解进程的概念、特性及其实现机制,并使用具体的编程案例加以说明。 操作系统 进程创建实验报告调用fork()创建子进程的原理如下: 在UNIX系统中,进程既是独立拥有资源的基本单位也是调度的基本单元。每个进程实体由程序区、数据区、栈区及共享存储区等构成,并且这些区域被划分为若干页以方便管理。每一个进程中都配置了一个唯一的进程控制块(PCB),用于管理和控制进程。 1. 进程表项:包括一些最常用的核心信息,如PID和UID;状态描述符;内存地址以及软中断信号、计时域等。 2. U区:保存了与每个进程相关的私有数据。U区内含指针指向用户区域的开始位置,并且包含诸如文件描述符表在内的相关信息。 3. 系统区表项:记录各个段在物理存储器中的地址信息,以便实现内存中不同区域之间的共享和保护机制。 4. 进程区表:为每个进程提供了一张表格用于管理其独立的逻辑分区。这张表格帮助操作系统将虚拟地址空间映射到实际内存位置。 UNIX系统中的一个运行程序被称为“进程映像”,它由三个主要部分组成: 1. 用户级上下文,主要是用户编写的代码。 2. 寄存器上下文,包含CPU状态寄存器的值等信息。 3. 系统级上下文,包括操作系统用于管理此特定进程的数据。 涉及的关键系统调用之一是fork()。它创建一个新的子进程,并将当前正在运行的程序复制到新进程中去执行。其返回情况如下: - 0:表示函数在子进程中被调用。 - 大于零的整数:代表父进程中,该值等于刚创建出的新子进程ID。 - -1: 表示失败。 当fork()成功时,它会同时向父和新生成的子进程返回不同的结果。操作系统将为这个新的执行环境分配必要的资源,并设置适当的初始状态以确保它可以独立运行。这包括复制当前进程的所有文件描述符、目录项等信息给子进程并增加相应的引用计数。 总体而言,在成功调用fork()之后,父与子两个进程会同时并发地继续各自的程序流程,但它们的执行上下文都是从同一个起点开始的。
  • Linux父子.docx
    优质
    本实验报告详细记录了在Linux操作系统环境下进行进程创建及父子进程间通信的实验过程,分析了fork()、exec()和wait()等系统调用的工作原理及其应用实例。 编写一个dLinux程序来创建进程并进行通信。该程序要求父进程创建一个子进程,在返回后父子进程分别循环输出字符串The parent process.及The child process.各5次,每次输出之后使用sleep(10)延时10秒再进入下一次循环。请提供源代码和运行结果。
  • 和并发及源码
    优质
    本实验报告详细探讨了操作系统中进程的创建与管理机制,并发处理技术及其实践应用。附有相关代码实现。 熟悉Linux环境的基本使用命令以及vi、gdb、gcc等编程工具或软件的使用方法。 利用fork()函数创建子进程,并考察fork()函数生成的子进程中同名变量是否为临界资源。 编写一个程序,要求父进程通过调用fork()函数两次来创建两个独立的子进程。这三个并发运行的进程需要输出各自的执行状态信息:如“父进程正在执行...”,“子进程1正在执行...”和“子进程2正在执行...”。一段时间后,由父进程分别结束这两个子进程,并显示相应的消息:“子进程1被父进程杀死”,“子进程2被父进程中止”,最后输出:“父进程结束”。 实验报告中需要包含流程图、运行结果以及源代码。
  • 优质
    本实验旨在通过实践探索操作系统中进程的创建机制,深入理解进程管理的核心原理与技术实现。参与者将亲手操作模拟环境,掌握进程控制块(PCB)构造及初始化方法,体验并发执行的魅力,为后续学习奠定坚实基础。 创建进程是一个很好的实践机会。通过此过程可以加深对操作系统系统调用功能及进程概念的理解,并明确程序与进程之间的区别。同时,还能掌握在Linux环境下创建进程的方法,进一步理解多个进程如何并发执行。
  • (第二次):与线.doc
    优质
    本实验报告详细记录了在操作系统课程中进行的第二次实验内容,主要探讨并实践了进程和线程的创建过程及其相关特性。通过理论结合实际操作的方式加深对多任务处理机制的理解。 实验二:进程与线程的创建 1. 在Linux环境下编写一个应用程序,命名为an_ch2_1b。此程序将持续输出以下行:“Those output come from child,[系统时间]”。另外写另一个应用程序,命名为an_ch2_1a。该程序需要创建子进程来执行an_ch2_1b。这个程序会不断显示如下信息:“Those output come from child,[系统时间]”。运行这些程序后,请观察并解释所看到的现象。 2. 在Linux环境下编写一个控制台应用程序,在此程序中有一个共享的整型变量shared_var,其初始值为0;随后创建一个新的线程与主线程并发执行。新生成的线程和主线程都将不断地循环,并在每次循环时输出shared_var 的当前值。其中,主线程会在每个循环里对shared_var进行加1操作;而新的线程则会持续地将shared_var减1。观察程序运行的结果并解释你的发现。 3. 提交源代码以及实验报告。
  • :线与撤销
    优质
    本实验报告探讨了在操作系统中线程的创建和撤销过程。通过实际操作,深入理解线程管理机制及其对系统性能的影响,并分析相关代码实现细节。 操作系统实验报告:线程的创建和撤销;基于Windows XP系统进行操作;需要提前安装虚拟机软件;内含源程序代码及运行结果展示。
  • Linux
    优质
    本实验报告详细探讨了在Linux环境下进行进程管理的各项操作,包括进程创建、调度与同步等内容,旨在加深读者对Linux系统内核机制的理解。 计算机操作系统教程第二版以及操作系统Linux进程实验报告的内容可以被重新表述如下: 关于学习资源,《计算机操作系统教程》的第二版是一个很好的选择;同时,在进行实际操作练习的时候,撰写一份详尽的操作系统Linux进程相关的实验报告也是非常有帮助的。 这样重写后保留了原文的核心信息,并且去除了不必要的链接和联系方式。
  • 调度
    优质
    本实验报告针对操作系统课程中的进程调度部分进行了详细的探讨和分析。通过理论学习与实践操作相结合的方式,我们深入理解了多种进程调度算法,并对其性能进行了评估。文档中还记录了实验过程中遇到的问题及解决方案,旨在提高读者对现代操作系统进程中资源分配的理解和掌握能力。 这段文字描述的内容包括详细的实验报告和代码,特别是进程调度的源代码以及标准的实验模板。
  • ——、终止、阻塞与唤醒模拟
    优质
    本实验报告详细记录了对操作系统进程中关键操作的研究,包括进程的创建、终止、阻塞及唤醒的过程和机制,并通过实例进行模拟分析。 本段落介绍了一项操作系统实验,旨在通过模拟进程的创建、终止、阻塞及唤醒原语来加深对操作系统的理解,并掌握其模块设计方法与工作原理。该实验在PC机及其兼容设备上进行,使用Dev-C++ 5.11软件作为开发工具。 具体而言,实验内容包括: - 设计并调试进程的创建、终止、阻塞和唤醒功能函数。 - 主程序采用菜单结构以方便操作。 - 实现一个“显示队列”功能,用于实时查看各队列中进程的状态变化情况。 最后提供了完整的源代码作为参考。
  • 》中调度
    优质
    本实验报告针对《操作系统》课程中的进程调度部分进行详细研究和实践探索,分析了多种常见调度算法,并通过编程实现及性能测试,加深了对进程调度机制的理解。 一、 目的要求 通过使用高级语言编写并调试一个进程调度程序来加深对进程概念及各种进程调度算法的理解。 二、 实习题 设计并实现一个模拟的进程调度程序,采用“轮转法”(Round Robin, RR)进行五个进程的调度。该方法可以是简单轮转法、可变时间片轮转法或多个队列中的轮转法。在简单轮转算法中,所有就绪状态下的进程按照先来先服务的原则形成一个单向链表;处理机资源始终分配给链首的第一个进程使用,并且每个进程占用的时间长度是固定的。一旦某个正在运行的进程用完其预定时间片而未能完成,则该进程会被重新排回到队列尾部,等待下一轮次的调度执行直至所有任务结束。 三、 编程思想 采用结构体(struct)来表示程序中的每一个独立进程,并通过指针将这些单个实体组合成一个循环链表。每当遇到一个需要处理的任务时,系统会检查该进程中剩余的工作量是否已经全部完成;如果确定了这一点,则从当前的循环列表中移除对应的节点并继续对下一个可用任务进行调度操作直至所有工作项都已处理完毕。 四、 程序数据结构 ```c struct pcb { char name[10]; /* 进程名 */ char state; /* 进程状态 */ int ntime; /* 完成进程所需时间 */ int rtime; /* 已占用CPU时间 */ struct pcb *link; /* 指向下一个结构体的指针 */ }; typedef struct pcb PCB; ```