作为一个入行五年多的BSP工程师,越来越感觉深入的理解计算机的原理对于一个底层工程师的重要性了。比如,在面对一些很难调试的crash bug的时候,最终的办法是将发生crash时的内存dump出来,结合log分析当时的函数调用栈和寄存器信息,最终定位导致错误发生的代码。又比如,想深入学习linux时候,发现对于很多基本的计算机概念似懂非懂,这样导致在理解linux系统相关知识的特别吃力。于是,决定重读一下计算机原理的经典书籍—-《深入理解计算机系统》。
这本书的经典程度我就不多介绍了,如果立志成为一个嵌入式工程师或者当前是一名和计算机底层相关的软件工程师,我强烈推荐你读一下,相信我你一定会爱不释手的。在开始重读《深入理解计算机系统》这本书一段时间之后,我发现自己对于其中的一些概念和原理比第一次读的时候有了更深入的认识。为了及时总结这些知识,并且确保自己真正理解这些知识,我决定以博客的形式写出来。因此,博客也算是自己的读书笔记。由于这本书看了已经不止一遍,因此,博客内容可能不完全按照书中的章节顺序来写(甚至有些章节我可能会略过),我试图以这样一个主线去理解和学习这本书:一个以文本形式存在的C程序是如何变成可执行文件,并被计算机执行的。以下是这个系列文章的目录:
- 一、计算机原理系列之一 ——– 初识计算机系统
- 二、计算机原理系列之二 ——– 详解ELF文件
- 三、计算机原理系列之三 ——– 如何编译目标文件
- 四、计算机原理系列之四 ——– 可重定位文件详解
- 五、计算机原理系列之五 ——– 编译过程分析
- 六、计算机原理系列之六 ——– 可执行文件详解
- Linux X86 程序启动 – main函数是如何被执行的?
- 七、计算机原理系列之七 ——– 链接过程分析
- 八、计算机原理系列之八 ——– 可执行文件的PLT和GOT
持续更新中…
当然,由于知识水平有限,在学习过程中我也不可避免的会发生一些错误,如果有朋友发现了,请及时联系我,一来可以帮助我改正错误,二来也可以避免我的文章误导更多的人。谢谢!