操作系统 - 通用进程创建
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',进程会切换到内核模式
然后它将进程(线程)添加到长期调度程序,在那里它将加入准备好 运行
[=43 的所有进程的集合=]
一旦被选中,它将移动到短期调度程序,在那里它会收到一些处理时间(就绪 -> 运行ning)
由于这个进程是一个IO绑定进程,它会进入IO队列,在那里它会被存储在一个缓冲区中等待执行(运行ning -> waiting )
IO完成后,putchar调用会在应用它的外设(监视器)上打印X(waiting -> 运行ning)
一旦进程returns进入短期调度程序,它将再次获得更多的处理时间。由于除了终止别无他法,进程终止 (运行ning -> terminated)
这个理解正确吗?我是否遗漏了一些流程创建的关键概念?我知道这是一个相对简单的过程,但请告知我遗漏的任何内容。
感谢阅读,并提前感谢您的帮助。
首先,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你的评论!!]
希望这会有所帮助!!!
复习问题
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',进程会切换到内核模式
然后它将进程(线程)添加到长期调度程序,在那里它将加入准备好 运行
[=43 的所有进程的集合=]一旦被选中,它将移动到短期调度程序,在那里它会收到一些处理时间(就绪 -> 运行ning)
由于这个进程是一个IO绑定进程,它会进入IO队列,在那里它会被存储在一个缓冲区中等待执行(运行ning -> waiting )
IO完成后,putchar调用会在应用它的外设(监视器)上打印X(waiting -> 运行ning)
一旦进程returns进入短期调度程序,它将再次获得更多的处理时间。由于除了终止别无他法,进程终止 (运行ning -> terminated)
这个理解正确吗?我是否遗漏了一些流程创建的关键概念?我知道这是一个相对简单的过程,但请告知我遗漏的任何内容。
感谢阅读,并提前感谢您的帮助。
首先,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你的评论!!]
希望这会有所帮助!!!