复习问题
考虑一下程序
#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;终止)
这是否有效?我是否缺少流程创建的一些关键概念?我知道这是一个相对简单的过程,但请告知我缺少的任何内容。
感谢您阅读,并提前感谢您的帮助。
答案 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的机器指令,并且很难确定每个人的所有内容。
但是,如果你有一些疑问发表评论!!]
希望这会有所帮助!!!