【问题标题】:How to implement programming language in operating system如何在操作系统中实现编程语言
【发布时间】:2014-04-08 20:03:05
【问题描述】:

我最近阅读了一些操作系统书籍。所有这些都详细介绍了如何“制作”操作系统。

但问题是,程序和操作系统一样,也是编译成机器码的,操作系统是如何按照证券来执行的呢?

假设部分程序是否会修改操作系统或其他正在运行的程序。操作系统如何防止这种情况发生?

【问题讨论】:

  • 您希望回答什么问题: a) 如何在操作系统中实现编程语言? b) 操作系统如何在证券方面执行它们?或 c) 操作系统如何防止这种情况发生?如果回答准确,这些问题中的任何一个都可以填满半本书。你希望得到什么样的答案?
  • @FabianBigler 所有这些?

标签: assembly operating-system


【解决方案1】:

操作系统总体上不太关心语言。对他们来说都是可执行代码,他们不在乎是谁制作的。

他们确实关心自己和其他项目的完整性。这通常由虚拟内存机制解决 - 程序根本无法形成指向它无权访问的内存的指针。物理内存只有在至少允许程序读取时才有地址。

【讨论】:

    【解决方案2】:

    典型的解决方案是不同的处理器模式。通常相同的指令集但在不同的模式下有不同的保护机制。

    例如,也经常使用 MMU,它做一些事情,一个它虚拟化内存,一个副作用是程序都可以认为它们在同一个地址空间中。例如,所有程序都可以认为它们是从地址零运行的。其次,mmu 通常用于定义内存的可缓存和不可缓存区域。第三个(但不是最后一个)是 mmu 通常用于将程序保存在自己的内存空间中,如果它超出该空间,则会发生故障并由操作系统接管。

    因此操作系统本身将运行在超级用户模式或功率最大、限制最少的模式下。但理想情况下,用户代码在限制最多的模式下运行,并且在调用用户代码并给它一个时间片之前设置该环境的是操作系统。细节都非常特定于处理器,代代相传,并且因家族/架构而异。

    就大部分不相关的编程语言而言,编译器不需要,而且 IMO 也不应该知道您处于哪种模式,它的工作是将高级代码转换为低级代码。由于各种原因,内核代码将定期使用汇编来协助,例如需要的处理器特定指令未直接映射到高级编程语言。从编译器的角度来看,围绕这一少量 asm 或调用基于 asm 的函数的高级代码是通用的。现在这并不意味着一些编译器会创建编译器特定的指令(阅读:不可移植,有时是环境或处理器特定的,丑陋的)来为程序员节省一点汇编语言。

    【讨论】:

      【解决方案3】:

      确切的实现很大程度上取决于操作系统和底层架构,因为某些架构可以提供硬件安全机制(例如将内存区域标记为只读)。

      【讨论】:

        猜你喜欢
        • 2017-12-25
        • 2020-04-22
        • 2011-10-15
        • 1970-01-01
        • 2011-03-22
        • 1970-01-01
        • 2011-10-29
        • 2017-04-10
        • 2023-01-28
        相关资源
        最近更新 更多