2015-05-06 81 views
0

评价的问题操作系统 - 一般进程创建

考虑计划

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

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

我的回答

  • 首先,外壳将创建在用户空间的过程

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

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

  • 一旦它被选择时,它会移动到短期调度程序,在那里将接收一些处理时间 - 由于该处理是一个IO结合过程(准备>运行)

  • ,它将然后头到IO队列,它将被存储在等待执行的缓冲区中(运行 - >等待)

  • IO完成后,putchar调用将在其所应用的外设上打印X( (等待 - >运行)

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

这是否有效的理解?我是否错过了创建流程的一些关键概念?我知道这是相对简单的过程,但请告诉我缺少的任何东西。

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

回答

1

首先,外壳将在用户空间创建一个进程

//很多事情在此之前发生的!

//程序将被载入。

//将为此过程创建VM区域。

//链接库文件将完成。

//然后一系列页缺失将发生会发生带来的物理和虚拟内存文件

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

// putchar根本没有系统调用!!!!

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

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

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

一旦它被选择时,它会移动到短期调度程序,在那里将接收一些处理时间(就绪 - >运行)

//右,等待RunQ

由于该处理是一个IO绑定进程,它将会进入IO队列,在那里它将被存储在一个缓冲区,并等待执行(运行 - >等待)

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

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

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

//在此之前,它将再次陷入内核当你的程序将执行RETURN语句。

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

//然后启动()函数将返回0操作系统,因此操作系统将终止该进程,并moce到终止状态..

我仍然不认为它是一个完整的版本为100的机器指令将会对这一计划的执行,其难度每一个人针点..

但是,还是如果你有一些疑问,发表您的评论!]

希望这将帮助!