操作系统 - 一般流程创建

时间:2015-05-06 14:10:50

标签: process operating-system

复习问题

  

考虑一下程序

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

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

我的回答

  • 首先,shell将在User Space

  • 中创建一个进程
  • 然后它会执行系统调用&#39; putchar&#39;其中模拟输入,并且该过程将切换到内核模式

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

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

  • 由于此过程是一个IO绑定过程,因此它将前往IO队列,在那里它将存储在缓冲区中,等待执行(运行 - &gt;等待)

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

  • 一旦流程返回短期调度程序,它将再次获得更多处理时间。由于除了终止之外没有其他事情要做,该过程终止(运行 - &gt;终止)

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

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

1 个答案:

答案 0 :(得分:1)

首先,shell将在User Space中创建一个进程

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

//程序将由加载的程序加载。

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

//将链接库文件。

//然后会发生一系列的网页故障,将您的文件带入物理和虚拟内存

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

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

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

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

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

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

//对,等待RunQ

由于此进程是一个IO绑定进程,它将进入IO队列,在那里它将存储在缓冲区中,等待执行(运行 - &gt;等待)

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

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

一旦流程返回短期调度程序,它将再次获得更多处理时间。由于除了终止之外没有什么可做的,因此该过程终止(运行 - &gt;终止)

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

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

//然后startup()函数将0返回到操作系统,因此操作系统将终止此进程并将其转换为终止状态..

我仍然认为它不是一个完整的版本,因为这个程序将执行100的机器指令,并且很难确定每个人的所有内容。

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

希望这会有所帮助!!!