Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何在操作系统中实现编程语言_Assembly_Operating System - Fatal编程技术网

Assembly 如何在操作系统中实现编程语言

Assembly 如何在操作系统中实现编程语言,assembly,operating-system,Assembly,Operating System,我最近读了一些关于操作系统的书。他们都详细介绍了如何“制作”操作系统 但问题是,就像操作系统一样,程序也被编译成机器代码,操作系统如何执行它们 假设部分程序将修改操作系统或其他正在运行的程序。操作系统是如何防止这种情况发生的?总体而言,操作系统并不太关心语言。对他们来说都是可执行代码,他们不在乎是谁做的 他们确实关心自己和其他项目的完整性。这通常是由虚拟内存机制修复的——程序根本无法在没有权限的内存中形成指针。物理内存只有在至少允许程序读取的情况下才有地址。确切的实现在很大程度上取决于操作系统和

我最近读了一些关于操作系统的书。他们都详细介绍了如何“制作”操作系统

但问题是,就像操作系统一样,程序也被编译成机器代码,操作系统如何执行它们


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

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


他们确实关心自己和其他项目的完整性。这通常是由虚拟内存机制修复的——程序根本无法在没有权限的内存中形成指针。物理内存只有在至少允许程序读取的情况下才有地址。

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

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

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

因此,操作系统本身将运行在超级用户模式或功率最大、限制最少的模式下。但理想情况下,用户代码运行在限制最多的模式下,是操作系统在调用用户代码并为其提供时间片之前设置了环境。这些细节都非常特定于处理器,并且随着时代的发展而变化,并且随着系列/体系结构的变化而变化


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

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