【问题标题】:Operating Systems - General Process Creation操作系统 - 通用流程创建
【发布时间】:2015-07-16 17:42:42
【问题描述】:

复习题

考虑程序

#include <stdio.h>
int main(){
    putchar('X');
    exit(0); 
}

假设它被编译一个a.out文件被生成。现在假设用户在本地控制台窗口中键入 a.out 并按回车键。发生什么了?一定要描述一个合理但详细而全面的操作系统动作和事件序列,而不仅仅是用户看到的。

我的回答

  • 首先,shell会在用户空间创建一个进程

  • 然后它会执行模拟输入的系统调用'putchar',进程将切换到内核模式

  • 然后它将进程(线程)添加到长期调度程序中,并在其中加入准备运行的所有进程的集合

  • 一旦被选中,它将移至短期调度程序,在那里它将获得一些处理时间(准备就绪 -> 运行)

  • 1234563
  • 一旦 IO 完成,putchar 调用将在应用它的外围设备(监视器)上打印 X(等待 -> 运行)

  • 一旦进程返回到短期调度程序,它将再次获得更多的处理时间。由于除了终止之外别无他法,进程终止(运行->终止)

这是有效的理解吗?我是否遗漏了一些流程创建的关键概念?我知道这是一个相对简单的过程,但请告知我缺少的任何内容。

感谢您的阅读,并提前感谢您的帮助。

【问题讨论】:

    标签: process operating-system


    【解决方案1】:

    首先,shell会在用户空间创建一个进程

    //在这之前发生了很多事情!!

    //程序会被loaded加载。

    //将为这个进程创建VM区域。

    //库文件的链接将完成。

    //然后会发生一系列的pagefault,将你的文件带到物理和虚拟内存上

    然后它会执行模拟输入的系统调用'putchar',进程将切换到内核模式

    //把char放入根本不是系统调用!!!!

    //putchar 将调用它的库实现,这将进一步调用 write() 系统调用,您的程序将被困在内核中

    然后它将进程(线程)添加到长期调度程序中,它将加入准备运行的所有进程的集合

    //完全取决于调度算法.. 可能您的进程将首先运行!

    一旦它被选中,它将移动到短期调度程序,在那里它将获得一些处理时间(准备就绪 -> 运行)

    //对,等待RunQ

    由于这个进程是一个 IO 绑定进程,它会前往 IO 队列,在那里它会被存储在一个等待执行的缓冲区中(运行 -> 等待)

    //排序,它会在I/O队列上等待,等待中断,写到o/p设备上

    一旦 IO 完成,putchar 调用将在应用它的外围设备(监视器)上打印 X(等待 -> 运行) //正确

    一旦进程返回到短期调度程序,它将再次获得更多的处理时间。由于除了终止没有什么可做的,进程终止(运行->终止)

    //在此之前,当你的程序执行RETURN语句时,它会再次被困在内核中。

    //它会回调负责调用main()函数的启动函数。

    //然后startup()函数将返回0给操作系统,因此操作系统会杀死这个进程并将其移动到终止状态..

    我仍然不认为它是一个完整的版本,因为该程序将执行 100 条机器指令,并且很难确定每个人..

    但是,如果您有任何疑问,请发表您的评论!!]

    希望这会有所帮助!!!

    【讨论】:

      最近更新 更多