【发布时间】:2017-03-10 21:45:45
【问题描述】:
根据维基百科,execution model 是
语言规范的一部分,并作为语言实现的一部分来实现。
它进一步定义了
可以静态选择执行顺序 [...],但必须在执行过程中动态选择一小部分。
[...] 静态选择最常在编译器中实现,在这种情况下,工作顺序由指令放入可执行二进制文件的顺序表示。然后,动态选择将在语言的运行时系统中实现。
运行时系统可以是一个库,由编译器插入的指令调用,或者运行时系统可以直接嵌入到可执行文件中,例如插入分支指令,动态选择下一步要执行的工作。
维基百科将runtime system指定为
任何不直接由程序工作的行为都是运行时系统行为。此定义包括运行时系统的一部分,例如在函数调用之前将参数放入堆栈、磁盘 I/O 的行为以及与并行执行相关的行为。
另外
也是运行程序与运行时环境交互的网关,运行时环境不仅包含在程序执行期间可访问的状态值,还包含在程序执行期间可以与之交互的活动实体,如磁盘驱动器和人,通过键盘。
它进一步指出,
运行时系统实现的高级行为可能包括在屏幕上绘制文本或建立 Internet 连接等任务。
通常情况下,操作系统也提供这些类型的行为 [...] 运行时系统被实现为一个抽象层,它将运行时系统的调用转换为操作系统的调用。这隐藏了不同操作系统提供的服务的复杂性或变化。 [对我来说基本上是系统调用,关于 Linux 内核]
这也意味着操作系统内核本身可以被视为运行时系统,调用操作系统行为的操作系统调用集可以被视为与运行时系统的交互。
我知道必须有某种运行时环境,比如 Linux 内核,将编译后的可执行文件加载到内存中,启动进程,允许子线程之类的东西。内核本身是用C 编写的,不能被视为C 语言的“运行时系统”。但是,它提供了像malloc() 和free() 这样的函数,它们是运行时系统的重要组成部分。
Q 那么C的运行时系统到底是什么?是否有任何不模糊的定义?它是自立内核 + 编译器的混合体吗?
【问题讨论】:
-
The kernel itself is written in C and can not be viewed as the "runtime system" of the C language。为什么不? C 有独立和托管的实现。内核是独立的,即它提供了运行所需的一切。普通的 C 应用程序是托管的,并且依赖于 libc,它本身取决于内核,才能正常运行。 -
runtime system of C怎么可能是 VAX 系统上的mixture of Linux Kernel + Compiler?或 MS-Windows,或 BSD,或......? -
@a3f 以及它在使用
C的嵌入式系统上的裸机编程表现如何? µC 的供应商是否提供了实现内核基本功能的运行时库,以便正确编译和运行 C 程序? -
"it (kernel) 提供类似 malloc() 和 free() 的函数" --> 标准库提供
malloc()等,而不是内核。库是否使用内核不是 C 的一部分。 -
@KevinDTimm 为什么要抓取过去的例子?只看裸机系统。
标签: c computer-science