2011-04-08 216 views
2

这是来自Wiki。可执行文件是机器代码 - 用于硬件吗?

“在计算中,可执行文件,使计算机‘根据编码的指令以执行所指示的任务,’(机器代码??)

”现代操作系统保留对计算机的资源控制,要求单独的程序使系统调用访问特权资源。由于每个操作系统系列都具有自己的系统调用体系结构,因此可执行文件通常与特定的操作系统绑定在一起。“

这是我的观点 可执行文件不能是机器代码,因为它们需要访问硬件服务(系统调用)因此,可执行文件还不是“机器代码”...也许它就像代码的一部分是实际的机器代码,有些部分只是为了调用嵌入在操作系统中的机器代码?一些机器代码的垃圾 - 和一些代码调用操作系统

Damon's编辑回答: 最后,OS是一组机器码,基本上OS会做复制粘贴用户的机器代码(由C编译器创建)的作业,然后如果该指令是系统调用,则转移到OS内存区域进行处理。现在问题是C中生成的机器码可以完成这部分?就像要求将控制权转移给操作系统等一样 - 我认为它的系统调用的抽象性更高,但却隐藏起来 - 它是如何工作的。

我感觉它与鸡蛋问题类似,C创建操作系统和C使用操作系统无法找到过程的确切过程。 任何人都可以为我打破难题吗?

+3

有一件事不排除其他。可执行文件是(除非它们是在虚拟机中运行的某种形式的字节码)机器代码。但是,有不同类型的指令,其中一些在某些特权级别上不可用。这就是操作系统进入的地方,它是以最高特权级别运行的“机器代码”,作为“重要”部分和任务的仲裁者,例如决定谁获得CPU时间以及什么值进入某个硬件寄存器。 – Damon 2011-04-08 17:02:27

+0

@Damon:做出答案。 – 2011-04-08 18:11:51

+0

http://en.wikipedia.org/wiki/System_call是任何想要进一步学习Damon所说的话题的人的好资源。 – Nishant 2011-04-08 21:01:28

回答

2

有一件事不排除其他。可执行文件是(除非它们是在虚拟机中运行的某种形式的字节码)机器代码。但是,有不同类型的指令,其中一些在某些特权级别上不可用。

这就是操作系统进入的地方,它是运行在最高特权级别的“机器代码”,作为“重要”部分和任务的仲裁者,比如决定谁获得CPU时间和价值何去何从进入一些硬件寄存器。

(最初发表意见,提出通过要求一个答案)

编辑:关于您的扩展问题,该工作大致如下。当电脑开机时,处理器运行在最高的特权级别。在这种“模式”下,BIOS,引导装载程序和操作系统可以做到他们想要的。这听起来不错,但你不希望任何类型的代码能够做任何想做的事情。

例如,代码可以告诉MMU哪些内存页面被允许读取或写入,哪些不是。或者,如果发生陷阱或中断等“特殊事件”,它可以定义调用哪个地址。或者,它可以直接写入某些映射某些设备端口(磁盘,网络等)的特殊内存地址。

最终,操作系统切换到“非特权”模式并调用一些非操作系统代码。发生陷阱或中断时,执行会中断并继续到其他地方(如以前由操作系统指定的),并且特权级别会再次上调。一旦中断被处理,权限被移除,并且用户代码被再次调用。
如果用户程序需要操作系统执行“操作系统”操作,它会根据约定的方案(例如某些特定寄存器)设置参数并执行陷阱指令。

这是例如多线程或虚拟内存的实现方式。在定期的时间内,一个定时器触发中断,停止执行“正常”代码,并在内核中调用一些代码(在特权模式下)。然后,该代码决定在某种优先级方案之后应该返回哪个用户进程控制。这些是分发的“CPU时间片”。 如果某个进程读取或写入页面时不允许,则会由MMU生成陷阱。然后操作系统查看发生了什么事以及在哪里,并决定是否将某些数据从磁盘加载到某个内存区域(并可能清除其他内容)并更改进程的映射,或者是否通过“分段错误”错误终止进程。

当然,事实上,这是百万倍更复杂的,但原则上,这是关于它的工作原理。

操作系统或程序最初是用C编写还是用汇编程序写并不重要。对于处理器来说,这只是一系列机器指令。即使是Python或perl脚本最终也只是“机器指令”,只能通过解释器绕道。

+0

我在这个问题上做了一些修改。 – Nishant 2011-04-08 19:04:35

+0

非常令人印象深刻的写作 - 会读感谢 - 我知道它的百万倍更复杂,但需要掌握我无法获得的基本流程图。 – Nishant 2011-04-08 19:38:28