当我们说在执行程序时将操作系统的控制权传递给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;
}
然后人们常说,在执行程序时,操作系统的控制权会传递给main()函数,在执行完main函数内的所有语句后,控制权会再次传递回操作系统。
我们所说的控制是什么意思?如果控制权真的从操作系统传给了程序,那么为什么多个程序同时运行??
"Control"是"执行语句的能力"的简写。
在程序运行之前,操作系统会执行语句,将程序的代码加载到内存中,而程序则无法执行语句(即无法控制)。
一旦您的程序加载并准备运行,操作系统就为程序的代码提供了执行语句的能力,从main()
函数开始。此时,启动程序的操作系统代码等待程序完成,即不再具有控制权。
您所描述的主要是链接器的功能。链接器必须识别要在程序中执行的起始地址。
一些编程语言有明确的PROGRAM标识符(例如Pascal、FORTRAN)来识别程序的起点。C使用函数名"main"来标识y的起点。
在一些实现中,C库提供了一个围绕main的包装器的起点。
这里的程序是系统特定的,所以我将是一般性的。我认为流程已经创建。现在您正在执行一个系统服务来"运行"您的程序。该系统服务调用系统程序。加载程序读取可执行文件中的指令以设置进程地址空间。
现在,您的程序已准备好运行。"运行"系统服务分支(通常是调用)到可执行文件中指定的起始地址。对于您的C程序,它要么是main,要么是围绕main的包装器。
因此,您的"运行"系统服务调用了程序/main/或包装器,就像它是一个函数一样。
当"main"完成时,它会像其他任何函数一样返回给调用者:"run"系统服务。在某些系统上,当调用启动函数后进程恢复时,系统服务会导致进程终止。在其他系统中,系统服务退出,命令解释器恢复。
我们所说的控制是什么意思?
Control只是指调用应用程序的指令流。您的程序是作为一个函数从"运行"系统服务中调用的。
调用函数意味着赋予函数"控制权">
"运行"系统服务调用调用的Main返回到的任何其他函数完成后返回到"运行"系统服务。
如果控制权真的从操作系统传递给了程序,那么为什么多个程序同时运行??
因此,我们超出了最初问题的范围。这就是术语造成问题的地方。每个程序都在一个单独的PROCESS中运行。操作系统管理进程。这里的控制权转移实际上是过程控制权的转移;而不是对系统的控制。
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 代码在main()中运行,但在函数中出现错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 我们可以访问一个不存在的联盟的成员吗
- 如果编译的源代码是特定于它编译的硬件的,我们如何分发它
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 我们可以删除链表中静态内存中的节点吗
- 函数是否可以访问传递给main()的参数
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么我们要为avl树实现返回一个指向节点的指针,而不是void函数
- 当我们从/tp地址中添加/减去一个整数时会发生什么
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 我们可以在main函数中声明嵌套类对象吗
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- C++当我们创建对象时,构造函数会初始化,但是如果我想再次重新初始化对象,请在 main 的某个时候说该怎么做
- 我们可以在makefile中放入两个带有main()的文件吗