linux – 操作系统内核是否是所有其他程序的插件?
因此,根据我的理解,有两种类型的程序,即解释的程序和编译的程序.解释程序由解释程序执行,解释程序是其所在平台的本机应用程序,而编译程序本身就是它们所在平台的本机应用程序(或系统软件).
但我的问题是:除了内核以外的任何东西实际上是由CPU直接运行的吗? Windows可执行文件是“Windows可执行文件”,而不是x86或amd64可执行文件.这是否意味着内核所有的其他进程实际上都被内核解释,就像浏览器解释Javascript一样?或者是内核将这些进程放在内核所在的“裸机”上? 如果他们使用“裸机”,那么Windows是如何知道程序是Windows程序而不是Linux程序的,因为它们都是为amd64处理器编译的?如果是因为可执行文件的“格式”,那么该可执行文件如何能够在“裸机”上运行,因为对我来说,格式化为在特定操作系统上运行的事实意味着需要一些解释让它运行. 这个问题对Stack Overflow来说太复杂了吗? 解决方法
它们运行在“裸机”上,但它们确实包含特定于操作系统的东西.可执行文件通常会向内核提供一些指令(可以说是“解释”)关于如何将程序加载到内存中,文件的代码将为它提供“挂钩”运行操作的方法.系统,例如通过操作系统的API或通过设备驱动程序.一旦将这样的非解释程序加载到内存中,它就会在裸机上运行,??但继续与操作系统通信,操作系统也在裸机上运行.
在单进程操作系统的时代,可执行程序通常基本上“抓住”整个计算机的控制并直接与硬件通信.像Apple这样的计算机[和Commodore 64这样的工作.在Windows或Linux等现代多任务操作系统中,应用程序和操作系统通过复杂的多任务安排共享CPU的使用,应用程序通过操作系统API及其设备驱动程序内置的一组抽象来访问硬件.如果您有兴趣了解大量细节,请参加操作系统设计课程. 弹出Junaid的答案,内核阻止程序做一些“有趣”的方式是控制内存的分配和使用.内核要求通过其API请求和访问内存,从而保护计算机免受“未授权”访问.在单进程操作系统的时代,应用程序可以更自由地直接访问内存和其他内容,而不涉及操作系统.在旧Apple上运行的应用程序[可以读取或写入RAM中要在整个计算机上使用的任何地址. 编译应用程序不仅仅在另一个操作系统上“运行”的原因之一是这些“挂钩”对于不同的操作系统是不同的.例如,知道如何从Windows请求分配RAM的应用程序可能不知道如何从Linux或Mac OS请求它.正如Disk Crasher所提到的,编译器会插入这些低级访问指令. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |