【发布时间】:2023-03-09 07:59:01
【问题描述】:
通常,系统提供位于普通程序和操作系统之间的库或 API。在类 Unix 系统上,该 API 通常是 C 库 (libc) 实现的一部分,例如 glibc,它为系统调用提供包装函数。函数如 write()、read()、open()..用于从C程序进行系统调用。这是否意味着如果Java程序必须进行系统调用,那么在最低级别它必须调用这些C库函数?如果是这样,那么如何..???
【问题讨论】:
-
你的 vm 实现是这样做的
-
任何语言运行时实现都需要进行操作系统调用。它可以通过使用 C 运行时库来做到这一点。这实际上不是必需的,只是常见的。
-
在 Linux 系统上,您可以享受使用
strace运行命令并监控正在执行的系统调用。 Windows 的模拟工具是procmon。例如,您会看到每次执行 I/O 时,都会涉及到相应的系统调用。 -
引用 SICP,“解释和运行计算机程序的解释器只是另一个计算机程序。” --java虚拟机,概念上,是java字节码的解释器; jit 是一种速度优化。更严重的是,您可以定义和实现一个小得可笑的虚拟机(例如,使用一条指令来打印给定字符)并注意您是否最终调用了那些 C 库函数。
标签: c system systems-programming