假设我们正在尝试运行任意程序-
int main()
{
statement 1;
statement 2;
statement 3;
}
经常有人说,在执行程序时,操作系统的控制权会传递给main()函数,而在执行完main函数中的所有语句后,控制权会再次传递回OS。
我们所说的控制是什么意思?如果控制权确实是从OS传递给程序的,那么多个程序如何同时运行?
您所描述的主要是链接器的功能。链接器必须标识要在程序中执行的起始地址。
一些编程语言具有显式的PROGRAM标识符(例如Pascal,FORTRAN)以标识程序的起点。C使用函数名称“ main”来标识y起点。
在某些实现中,C库提供了一个起点,该起点是main的包装。
这里的过程是特定于系统的,因此我将是通用的。我认为该过程已创建。现在,您正在执行系统服务以“运行”您的程序。该系统服务调用系统程序。加载程序读取可执行文件中的指令以设置进程地址空间。
现在您的程序可以运行了。“运行”系统服务分支(通常是调用)到可执行文件中指定的起始地址。对于您的C程序,它将是main或main的包装。
因此,您的“运行”系统服务已调用您的程序/主程序或包装程序,就像它是一个函数一样。
当您的“ main”完成时,它像其他任何函数一样返回到调用方:“ run”系统服务。在某些系统上,系统服务会导致该过程在调用start函数后恢复时终止。在其他系统中,系统服务将退出,命令解释器将恢复。
我们所说的控制是什么意思?
控制只是意味着调用您的应用程序的指令流。您的程序将从“运行”系统服务中作为函数调用。
调用函数意味着给函数“控件”。
“运行”系统服务调用Main,该Main调用返回到“运行”系统服务的完成后返回Main的任何其他函数。
如果控制权确实是从操作系统传递给程序的,那么多个程序如何同时运行?
为此,我们已经超出了原始问题的范围。这是术语引起问题的地方。每个程序都在单独的过程中运行。操作系统管理进程。这里的控制权转移实际上就是过程的控制权转移。无法控制系统。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句