ale*_*rdy 8 compiler-construction operating-system machine-language
例如,当我编译一个C应用程序时,输出的文件读取为二进制或操作系统然后解释编译?"机器语言"是纯二进制吗?
编辑:是的,计算机上的所有内容都是纯二进制文件.我询问处理器是否直接解释编译器输出的文件,还是操作系统首先处理它?
Cas*_*per 17
编译后的程序通常包含一个标题,后跟实际的CPU指令(你可以称之为"二进制")+各种其他数据.
当您尝试告诉操作系统加载程序时,操作系统将读取标头,并用于检查可执行文件是否真的是适用于此操作系统和此体系结构的可执行文件.也就是说你不小心在Windows或类似的程序上运行Linux程序.
标题还包含关于实际CPU指令在可执行文件中的位置的各种其他信息位,其中数据段(文本,字符串,图形)位于其中等等.
一旦操作系统感到高兴,可执行文件就是它应该是的,那么操作系统会将可执行文件中的不同段加载到内存中,并指示CPU开始运行"二进制"代码段.从某种意义上说,这段代码是"纯粹的",它是直接的CPU汇编代码.
但是,操作系统可以中断CPU(例如切换到另一个程序,或者只是从内存中删除程序等).所以围绕这个正在运行的程序有很多事情,操作系统类型"管理"它并确保它的行为就像一个好男孩,但代码本身在运行时尽可能快地执行纯CPU指令..没有操作系统必须解释其间的代码.
另请注意,正在运行的程序可能会在运行时以各种方式调用操作系统.例如,要求操作系统在显示器上打开一个窗口,打开网络连接,分配内存等等.所有实际发生的事情是CPU只是跳转到在不同位置执行代码(即它从运行可执行文件中的代码跳转到在OS中运行一些代码,然后跳回).
简而言之就是这样.还有很多其他方法可以运行程序.有虚拟机,解释型语言(例如Java或Ruby)等等.它们都以不同的方式运行程序,而不是传统的"纯二进制"语言,如C/C++,但希望这有助于您了解它的运行方式.
归档时间: |
|
查看次数: |
1615 次 |
最近记录: |