操作系统 - 通用进程创建

Operating Systems - General Process Creation

复习问题

Consider the Program

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

Suppose it is compiled an an a.out file is generated. now suppose that a user in a local console window types a.out and hits the return key. what happens? be sure to describe a plausible but detailed and comprehensive sequence of operating system actions and events, not just what the user sees.

我的回答

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

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

首先,shell 将在用户 Space

中创建一个进程

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

//程序会被加载。

//将为此进程创建虚拟机区域。

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

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

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

//根本不是系统调用!!!!

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

然后它将进程(线程)添加到长期调度程序,在那里它将加入准备好 运行

的所有进程的集合

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

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

//对,等待RunQ

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

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

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

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

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

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

//然后 startup() 函数将 return 0 到操作系统,因此 OS 将终止此进程并将其移动到终止状态..

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

但是,如果你有一些疑问,post你的评论!!]

希望这会有所帮助!!!