Architecture 了解系统调用以及.net如何访问内核

Architecture 了解系统调用以及.net如何访问内核,architecture,operating-system,Architecture,Operating System,最近,我一直在阅读有关操作系统设计的书籍。所有用户空间程序都通过“系统调用接口”使用内核服务的想法让我进一步思考了这一点,并提出了以下一些问题 系统调用是在每个操作系统上用特定的语言实现的,比如“C/C++”,还是某种汇编语言或机器代码 操作系统在系统调用之上提供了一个API。API通常用C或C++编写。若系统调用是汇编语言,那个么这些API是如何生成汇编代码的 Java字节码或MSIL代码是转换为API调用还是直接转换为系统调用 系统调用如何引起内核的注意?它会发出某种中断吗 系统调用如何引起

最近,我一直在阅读有关操作系统设计的书籍。所有用户空间程序都通过“系统调用接口”使用内核服务的想法让我进一步思考了这一点,并提出了以下一些问题

  • 系统调用是在每个操作系统上用特定的语言实现的,比如“C/C++”,还是某种汇编语言或机器代码
  • 操作系统在系统调用之上提供了一个API。API通常用C或C++编写。若系统调用是汇编语言,那个么这些API是如何生成汇编代码的
  • Java字节码或MSIL代码是转换为API调用还是直接转换为系统调用
  • 系统调用如何引起内核的注意?它会发出某种中断吗
  • 系统调用如何引起内核的注意?它会发出某种中断吗

    操作系统为中断、故障和陷阱定义了一个内核模式处理程序表。在系统系统上有多个表(例如,中断分开),但逻辑上你可以把它看作一个表。 当中断、故障或陷阱发生时,CPU在表中查找对应事件的条目。该条目指定用于处理该事件的例程

    对于系统服务,处理器将定义一个或多个明确触发调用系统服务的陷阱的指令。大概是这样的:

     CHKM #12  ; Trigger a trap causing entry in to kernel mode to be handled by routine #12.
    
    系统调用是在每个操作系统上用特定的语言实现的,比如“C/C++”,还是某种汇编语言或机器代码

    通常是汇编语言,但有时可以用C语言编写

    操作系统在系统调用之上提供了一个API。API通常用C或C++编写。若系统调用是汇编语言,那个么这些API是如何生成汇编代码的

    调用系统需要汇编语言来执行trap指令,并为系统服务设置硬件寄存器。操作系统总是提供可以从高级语言调用的包装器函数,这些函数将解包参数、导致陷阱并重新打包从系统服务返回的参数

    Java字节码或MSIL代码是转换为API调用还是直接转换为系统调用

    字节码对系统服务一无所知。它们必须由虚拟机调用

    系统调用如何引起内核的注意?它会发出某种中断吗

    操作系统为中断、故障和陷阱定义了一个内核模式处理程序表。在系统系统上有多个表(例如,中断分开),但逻辑上你可以把它看作一个表。 当中断、故障或陷阱发生时,CPU在表中查找对应事件的条目。该条目指定用于处理该事件的例程

    对于系统服务,处理器将定义一个或多个明确触发调用系统服务的陷阱的指令。大概是这样的:

     CHKM #12  ; Trigger a trap causing entry in to kernel mode to be handled by routine #12.
    
    系统调用是在每个操作系统上用特定的语言实现的,比如“C/C++”,还是某种汇编语言或机器代码

    通常是汇编语言,但有时可以用C语言编写

    操作系统在系统调用之上提供了一个API。API通常用C或C++编写。若系统调用是汇编语言,那个么这些API是如何生成汇编代码的

    调用系统需要汇编语言来执行trap指令,并为系统服务设置硬件寄存器。操作系统总是提供可以从高级语言调用的包装器函数,这些函数将解包参数、导致陷阱并重新打包从系统服务返回的参数

    Java字节码或MSIL代码是转换为API调用还是直接转换为系统调用

    字节码对系统服务一无所知。它们必须由虚拟机调用

  • 大多数系统调用使用c/c++实现,在直接访问(DMA)设备的情况下使用汇编语言

  • 在大多数场景中,系统调用或其他系统服务将在运行时作为动态链接库加载。因此,sys调用在哪种语言中实现并不重要,因为代码已经编译并被转换/转换为本机代码

  • 不需要将字节码/IL转换为sys调用。运行时/虚拟机只需在运行时利用系统服务(包括系统调用)

  • 系统调用本身是一种中断(硬件中断是另一种中断),系统调用的例程存在于内核本身。因此,当运行时或虚拟机需要调用系统调用时,操作系统进行切换(从用户到内核模式),执行sys调用并切换回内核到用户模式

  • 大多数系统调用使用c/c++实现,在直接访问(DMA)设备的情况下使用汇编语言

  • 在大多数场景中,系统调用或其他系统服务将在运行时作为动态链接库加载。因此,sys调用在哪种语言中实现并不重要,因为代码已经编译并被转换/转换为本机代码

  • 不需要将字节码/IL转换为sys调用。运行时/虚拟机只需在运行时利用系统服务(包括系统调用)

  • 系统调用本身是一种中断(硬件中断是另一种中断),系统调用的例程存在于内核本身。因此,当运行时或虚拟机需要调用系统ca时