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

用户名

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

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

经常有人说,在执行程序时,操作系统的控制权会传递给main()函数,而在执行完main函数中的所有语句后,控制权会再次传递回OS。

我们所说的控制是什么意思?如果控制权确实是从OS传递给程序的,那么多个程序如何同时运行?

用户3344003

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

一些编程语言具有显式的PROGRAM标识符(例如Pascal,FORTRAN)以标识程序的起点。C使用函数名称“ main”来标识y起点。

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

这里的过程是特定于系统的,因此我将是通用的。我认为该过程已创建。现在,您正在执行系统服务以“运行”您的程序。该系统服务调用系统程序。加载程序读取可执行文件中的指令以设置进程地址空间。

现在您的程序可以运行了。“运行”系统服务分支(通常是调用)到可执行文件中指定的起始地址。对于您的C程序,它将是main或main的包装。

因此,您的“运行”系统服务已调用您的程序/主程序或包装程序,就像它是一个函数一样。

当您的“ main”完成时,它像其他任何函数一样返回到调用方:“ run”系统服务。在某些系统上,系统服务会导致该过程在调用start函数后恢复时终止。在其他系统中,系统服务将退出,命令解释器将恢复。

我们所说的控制是什么意思?

控制只是意味着调用您的应用程序的指令流。您的程序将从“运行”系统服务中作为函数调用。

调用函数意味着给函数“控件”。

“运行”系统服务调用Main,该Main调用返回到“运行”系统服务的完成后返回Main的任何其他函数。

如果控制权确实是从操作系统传递给程序的,那么多个程序如何同时运行?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当我们说Hashtable或Vector已同步时,这是什么意思?

当我们说我们正在使用Linux时,我们到底是什么意思?

当我们在R中使用Str()函数时,“对象”是什么意思

当我们说同步(实例字段)..是什么意思?

当我们说一个ArrayList不同步是什么意思?

当我们说uintptr存储指针值的未解释位是什么意思?

当我们说T1比T2具有更多的多态性时,我们是什么意思?

“从用户程序调用操作系统”是什么意思?

在Swift 3中,当我们创建dispatchWorkItem时,DispatchWorkItemFlags参数是什么意思?

将绘图窗口“更深”的控制权传递给程序?

当我们在 Xcode 中执行程序时,有没有办法查看调用函数的顺序?

当我们在eclipse上运行程序时,主函数如何获得参数?

为什么我们在gcc中使用-lpcap,这是什么意思?

当我们在美元符号和括号内放置命令时,它在shell中是什么意思:$(command)

操作系统的调度程序如何从进程中重新获得控制权?

当AWS说lambda有1000个并发执行限制时,这是什么意思?

当我们说它自己的库的私有实例变量是什么意思?

当我们在创建 Spark 会话时传递设置元组“spark.some.config.option”、“config-value”时,我们的意思是什么?

操作系统中的“位”是什么意思

“ Windows不是实时操作系统”是什么意思?

门在Multics操作系统中是什么意思?

当我们仅知道地址时如何执行程序?

是什么使我们无法在GPU上运行操作系统?

当我们说存储同步上下文时,所有存储的是什么?

Python:当我的模块返回“省略号”时,这是什么意思?

当我们“必须”将循环中的指针传递给某个函数时,如何防止内存泄漏?

当我们打开一个Android应用程序时,会在主UI线程上执行什么操作

当我们使用`nodev`选项挂载文件系统时,默认行为是什么?

当我们将参数传递给System.out.println()时会发生什么?