程序员的自我修养——链接,装载与库笔记Chapter1精华

程序员的自我修养——链接,装载与库笔记Chapter1精华缩略图

程序员的自我修养——链接,装载与库笔记Chapter1精华

这两天临近编译原理期末,突然翻到了这本书,所以借此机会就正好计划把这本书用几天的时间翻阅一遍,并在此记录一下看到的一些觉得有些遗忘但很有意思的点,希望可以对大家有所帮助233

这本书虽然已经有些时日,但是毕竟还是涉及到OS, Compilers这些内容,所以并不过时,而且书一开头在序言中提到的几个问题就颇为有趣。

  • 程序为什么要被编译了之后才可以运行?
  • 编译器在把C语言程序转换成可以执行的机器码的过程中做了什么?怎么做的?
  • 最后编译出来的可执行文件里是什么?除了机器码还有什么?
  • Hello World是怎么运行起来的?操作系统是怎么装载它的?它从哪儿开始执行,到哪儿结束? main函数之前发生了什么?应该怎么实现?
  • printf是怎么实现的? 它为什么可以有不定数量的参数? 为什么它能够在终端上输出字符串?

这些问题其实都颇为有趣

第一章 温故而知新

这一章主要讨论了一些关于体系结构,内存,操作系统相关的知识。

开始的时候讨论了

  • CPU与外围部件的连接方式: 最基本的还是CPU, I/O, 内存这三块,但因为速度的限制,导致如果只使用一个bus将三者连接在一起则因为彼此之间的性能差异,会影响总体性能,这里也就自然而然的引出了South Bridge来连接低速设备,North Bridge(PCI)来连接高速设备,South Bridge将低速设备汇总到总线
  • SMP与多核的关系: 理想情况增加CPU数目,就可以提高运算速率。SMP(Symmetrical Mutli-Processing)就是为此而生的, 多核处理器也是基于此所实现的,厂家让处理器之间共享昂贵的缓存,但保留多个计算核心,这就导致了(Muti-core Processor)的诞生。
  • 接下来CS领域最基本的思想“层次结构”思想也就登场了。“Any problem in computer science can be solved by another layer of indirection”
v2-dcb54616b8d549f4edbe8d8c15d3f980_1440w
  • 从上面这张图也可以自然而然的看出来,操作系统的一个功能是提供抽象的接口另一个就是管理硬件资源
  • 接下来有个就出现了一个很好的问题?要是内存不够怎么办?这也是OS课里强调的一大核心问题?如果单单使用物理地址的话,很多问题都会出现:
    • 地址空间不隔离: 所有程序都可以直接访问物理地址
    • 内存使用率低,因为没有很好的管理机制,比如一个进程想要使用操作系统,此时如果内存都被铺满了,这时候就需要将内存中的其他进程换出,并再将这个进程放入,涉及到大量的数据进入进出
    • 因为每次运行程序的时候,都要从内存中分配空闲区间,而这个空闲区间的分配又是不确定的,所以这里有涉及到了重定位的问题,就异常复杂
  • 所以这时候咱们的救星虚拟化(virtualization)技术就来啦,虚拟化技术指的是提供一块逻辑地址空间(虚拟空间),码农们需要面对的就是这样的一个虚拟空间,这些虚拟地址会通过映射方法和物理地址空间进行一一匹配
    • 分段匹配:基本上是将一段与程序锁需要的内存空间大小的虚拟地址空间映射到某个地址空间,这样就解决了前面说的第一个和第三个问题。但这里显然还有一个问题,内存使用效率问题。 因为这样分配内存还是以程序为单位,如果内存不足,换入换出的都是整个程序,但是实际上每个程序运行的时候,需要的只是一部分数据,所以需要找到更小颗粒度的内存分割和映射的办法
v2-e8c9676e68827db1a2d063f50cf6e5d6_1440w
  • 分页匹配,就应运而生啦。这里将地址空间分成固定的页,每一页的大小由硬件决定,不同硬件支持多种大小的页。当我们按照页来划分之后,我们就将常用的代码和数据放在内存里,不常用的就让他们躺在硬盘里。需要的时候再从磁盘里面取出来。
  • 接下来就要到线程(Thread)的内容了,线程是轻量级进程,是程序执行的最小单元由线程ID, 当前指令指针,寄存器集合和堆栈组成。各个线程之间共享程序的内存空间(包括数据段,代码段,堆)还有一些进程级的资源(如打开文件和信号)
v2-4756f7f3ce8ab1db62b9465576374d4f_1440w
原文链接🔗https://www.zhihu.com/pub/book/119636899
程序员的自我修养——链接,装载与库笔记Chapter1精华 – OddTaxiDriver的文章 – 知乎

这两天临近编译原理期末,突然翻到了这本书,所以借此机会就正好计划把这本书用几天的时间翻阅一遍,并在此…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注