sap*_*007 5 operating-system kernel system-calls
我想清楚地了解用户空间程序和操作系统交互。在文件 I/O 的上下文中,我想知道像 java 文件 I/O API read() 这样的用户应用程序是如何工作的。由于文件操作是通过像 open() close() read() write() 这样的 POSIX 系统调用来访问的,那么 java 代码是如何调用这些系统调用的呢?
当我们编译java代码时,java read() API会被编译成什么样的指令?它说,用户程序会引发陷阱/软件中断来进行系统调用。那么Java read() API 是否也引发了陷阱?java中是否有用于引发陷阱的API?如果是,那么这些 API 可能会被编译为捕获像“INT”这样的指令?但是 INT 是调用更高层的 POSIX 系统调用还是一些固定的 ISR(中断服务程序)?
我很困惑并试图一步一步地了解......从编译到执行 - 在这种情况下系统调用是如何完成的。
请帮助我了解这个简单的概念。
也许我在http://pages.cs.wisc.edu/~remzi/OSFEP/intro-syscall.pdf上得到了很好的澄清
,因此我得出以下流程:Java Code -> JNI -> read() syscall in C -> 内核子例程。但最后一个疑问:Java中的JNI如何调用C代码?