深入理解计算机系统-hello world的旅程

来源:互联网 发布:ubuntu重命名文件夹 编辑:程序博客网 时间:2024/04/30 13:28
最近在研读《深入理解计算机系统》,缘于学长力荐。
看了前言发现这本书原来是CMU开设的类似中国高校的计算机导论一样的课程教材,回忆当年大一时的课程内容,印象已不十分深刻了。该书是不是更好暂且不说,先就该书第一章内容进行下讨论。
编写hello world想必是大部分程序员首次敲入的代码。它的生命旅程大概有如下阶段:
编辑阶段:程序首先在编辑器中保存为ASCII编码的二进制文件,也就是8位一字节。其实也就是利用8位表示字符,256种情况对英文实在是够用了,但是对于中文等较复杂的文字就不管用了,因此就有了unicode,这就是后话了。文件是什么?这个很司空见惯的概念想必好多人没有想过。文件其实是计算机设计中一个很精巧的概念,它是对磁盘数据,程序数据(冯诺依曼体系中指令和数据一同存储),网络数据等的统一抽象形式,我们可以看到计算机上的文件不管是从哪里得到的,都可以称作文件。都以某种编码规形成二进制位,不同之处就是读取这些数据时的上下文,也就是打开方式。
编译阶段:用编程语言编写的字符形成的文件是人类易懂的高级语言形式,交给硬件执行,也就是实现计算机的使命还需要一系列的转换。这就是编译的过程。简单的来说就是就是源代码先经预处理器和编译器形成汇编语言形式,然后由汇编器转换成特定机器的二进制目标文件,最后链接器将程序用到的诸如printf等编译好的库目标文件等合成为一个可执行目标文件。经过编译过程,对hello world的处理过程结束了。
执行阶段: 有了可执行的二进制代码,如何利用这些代码驱动机器硬件执行呢?计算机发展这么多年,早就度过了当年打卡执行程序的时代,那时候有了卡,也就是相当于可执行程序(如今已经抽象化为文件喽!)插到机器里,就能执行程序,得到结果。现如今,计算机硬件都由操作系统管理,使用计算机硬件需要操作系统的统一调配。hello程序要想在屏幕上输出,并不能直接驱动硬件执行,靠的就是操作系统提供的服务,这就是我们的编译器和操作系统息息相关的原因,所谓的机器指令是建立在操作系统之上的。操作系统的概念比较大,笼统来说就是硬件资源管理者,程序执行的指挥者,其中的文件,进程,线程,虚拟存储,文件就是对相应硬件的抽象表示。
调用操作系统的服务,进而间接操作CPU和IO,从而执行程序,具体硬件的体系结构和执行流程就不说了。
不说了~78节还有体育课,上课去喽!
原创粉丝点击