当我们说操作系统的控制在程序执行时传递给 main() 函数时,我们是什么意思?

What do we mean when we say that control of the operating system is passed on to the main() function while execution of a program?

假设我们正在尝试 运行 任意程序 -

int main()
{
statement 1;
statement 2;
statement 3;
}

然后就是常说的在程序执行的时候,OS的控制权交给了main()函数,在main函数里面的所有语句执行完之后,控制权又交给了main()函数传递回 OS.

控制是什么意思?如果控制真的从 OS 传递给程序那么多个程序 运行 怎么会同时出现??

"Control" 是 "an ability to execute statements".

的缩写

在你的程序运行s之前,OS执行语句将你程序的代码加载到内存中,而你的程序没有执行语句的能力(即没有控制权)。

一旦您的程序加载并准备好 运行,OS 使您的程序代码能够执行语句,从 main() 函数开始。此时 OS 启动程序的代码等待它完成,即不再有控制权。

你所描述的主要是链接器的功能。链接器必须确定要在程序中执行的起始地址。

一些编程语言有明确的程序标识符(例如 Pascal、FORTRAN)来标识程序的起点。 C 使用函数名 "main" 来标识 y 的起点。

在一些实现中,C 库提供了一个起点,它是 main 的包装器。

这里的程序是system-specific所以我要笼统地说。我假设流程已经创建。现在您正在为 "run" 您的程序执行系统服务。该系统服务调用系统程序。 loader读取可执行文件中的指令设置进程地址space。

现在您的程序已准备就绪 运行。 "run" 系统服务分支(通常是调用)到可执行文件中指定的起始地址。对于将是 main 或 main 的包装器的 C 程序。

因此,您的 "run" 系统服务调用了您的 program/main/or 包装器,就像它是一个函数一样。

当您的 "main" 完成后,它 return 就像任何其他功能一样发送给调用者:"run" 系统服务。在某些系统上,系统服务会导致进程在调用 start 函数后恢复时终止。在其他系统中,系统服务退出,命令解释器恢复。

What do we mean by control ?

控制只是意味着调用您的应用程序的指令流。您的程序正在作为函数从 "run" 系统服务中调用。

调用函数就是给函数"control."

"Run" 次系统服务调用 调用的主要 return 的任何其他功能 Main 完成后 returns 到 "Run"系统服务。

if control is really passed from the OS to the program then how come multiple programs run at the same time ??

为此,我们超出了原始问题的范围。这是术语导致问题的地方。每个程序 运行s 在一个单独的进程中。操作系统管理进程。这里的控制权转移实际上是进程控制权的转移;无法控制系统。