1. 前言
闲暇之余,读了一遍《程序是怎样跑起来的》这本书。颇感欣喜。借此机会分享一下。
本书可以这样定位:
- 对学生:作为专业课之前的开胃菜,非常合适,尤其是作为《计算机组成原理》和《操作系统》这两门课的导读材料。
- 对计算机相关的爱好者和从业者:可以从书中查漏补缺,书中涉及到较多的底层知识。如果是非计算机专业的同学,如果学过《微机原理》或者《单片机原理与接口技术》,可以对比着学习,效果更佳。
建议看本书之前,有一定的汇编语言和C语言基础,要是再有一点点数字电子知识,会更好。
总体来说,这本书通俗易懂,即使没有任何计算机基础,看完也会有收获满满,下面来介绍这本书的主要内容。
2. 主要内容
该书的主要内容如下图所示(温馨提示:如果看不清,可将整个网页放大进行浏览):
既然谈到了程序和运行环境,就不可避免地要同时涉及到软件和硬件。所以本书涉及的面相对来说比较广。
本书从最基本的CPU工作过程入手,再到二进制,由浅入深,娓娓道来。CPU和寄存器有什么样的关系?寄存器有哪些种类,其作用分别是什么?
二进制如何产生?如何表示数据?为什么在小数运算的时候会出现问题?都进行了详细的分析。
关于内存,书中提及了内存芯片的常见引脚配置,芯片中数据的基本读写过程,然后介绍了常见的数据结构。
内存介绍完,就到了“外存”,也就是所谓的磁盘,众所周知,如果CPU直接读写磁盘的数据,效率会非常低,这个时候,内存就扮演了十分重要的角色,本书对整个运行过程都进行了较为详细的阐述。
数据存储讲完了,就到了数据压缩,数据压缩在我们学习和工作中是非常常见,书中介绍了最为常见的压缩方法,并对其利弊进行了分析,进而引出了哈夫曼编码。
接下来就到了操作系统相关的内容,这部分内容非常关键,而又承上启下。操作系统的作用是什么?为什么应用软件在不同的操作系统下无法正常运行?虚拟机是什么?为什么要引入虚拟机?什么是JAVA虚拟机?BIOS
又是什么?有着什么样的重要作用?本书都进行了详细的阐述和分析。
后面是程序的执行过程,从我们编写的源文件,从读入内存,都经历了什么?动态链接库(DLL
)扮演者什么样的角色(有兴趣也可以再了解一下静态链接库(LIB))?库文件又是如何与我们的代码进行合并的?
接下来就是操作系统和应用的关系,应用是运行在操作系统上的,那么应用是如何与操作系统进行交互的呢?这个时候系统调用就发挥了很重要的作用。
通过C语言并不能对程序的执行过程有非常深入和透彻的理解。要想了解更底层的运行过程,必须分析其对应的汇编语言,所以接下来又对汇编语言进行了介绍。
接下来,一个非常有意思的问题,应用如何与硬件进行交互呢?比方说,键盘,鼠标等。这里就引出了一个非常有意思的概念:系统调用。如果想深入理解这个思想,可以自己学习QT
和MFC
等开发框架,在实际的项目中慢慢体会。并且书中还介绍了DMA
,可以在不经过CPU干涉的情况下,内存与外设进行数据传输。
最后一章挺有意思,让计算机进行“思考”,颇有人工智能的意味,其实就是让计算机模拟人脑的某些特点,从而处理实际问题。书中用猜拳的例子,对此进行了讲解。包括随机数的生成,什么是伪随机数等等,看看热闹就好。当然,这不是现在的主流人工智能的实现方法。
3. 总结
总之,这是一本兼具趣味性与科学性的读物。该书对计算机的结构和计算机语言的运行过程进行了较为深刻的阐述,有助于我们深入了解计算机软件和硬件的相互关系,有助于我们深入了解计算机的硬件构成及其作用和相互关系,有助于我们了解计算机程序的运行过程。
看到很多社区,贴吧对这种通俗读物口诛笔伐,觉得会让读者对相关知识的学习一直停留在表面,无法更加深入,但我觉得,不妨在啃厚厚的经典书之前读读这些书,既增加了学习的兴趣和信心,又积累了一定的计算机知识,何乐而不为呢?
如果快的话,大概10来天就可以读完。
倘若有时间,还会继续读这系列其余的图书,届时再分享,敬请期待。。。