【深入理解计算机系统】第一章 计算机系统漫游

版权声明:本人学习所用,转载请标明出处 https://blog.csdn.net/qq_39582960/article/details/84665528

导语

本章围绕“hello world!”程序的生命周期,讲解计算机硬件和软件如何协同工作,以及了解:

  1. C代码的简单优化与现代处理器和存储器系统设计的关系。
  2. 编译器的过程调用及避免缓冲区溢出技巧。
  3. 编写自己的Unix shel、动态储存分配包、web服务器。

1.1 信息就是上下文

程序的源文件以ASCII标准的字节序列存放于文件中:

  1. 源程序均由值0和1组成,1字节=8位,代表一个文本字符。
  2. hello程序中,[.c]称为文本文件,其他文件称为二进制文件。

基本思想:系统中所有的信息均由比特串表示。

1.2 程序被其他程序翻译成不同的格式

C语句 -> 低级机器语言 ->可执行目标程序 (可执行目标文件)

Linux下 linux> gcc -o hello hello.c指令驱动hello程序的四个阶段:
流程图

  1. 预处理器以‘#’开头做预处理,将stdio.h的内容插入程序中。
  2. 生成汇编语言。
  3. 生成机器语言指令。
  4. 将已单独预编好的printf.o合并入程序。
  5. 加载入内存,由系统执行。

1.3 了解编译系统如何工作是大有益处的

三个好处:

  1. 优化程序性能:通过了解机器代码以及编译器将不同的C语句转化为机器代码的方式来选择更优的编码方式。
  2. 理解编译和链接是出现的莫名奇妙的错误
  3. 避免安全漏洞

1.4 处理器读并解释储存在内存中的指令

利用命令行解释器shell运行可执行文件:linux> ./hello

系统的硬件组成
组成部分
运行hello程序:

  1. shell程序读入字符->寄存器->内存(通过总线实现传输)
  2. 输入结束后shell加载相关指令->将必要数据从磁盘复制到内存。(直接存储器存取技术)
  3. CPU开始执行hello程序中的机器语言。
  4. 指令将字符串从主存复制到寄存器文件->而后复制到显示设备->最终显示到屏幕。

1.5 高速缓存至关重要

发现问题:系统耗费大量时间挪运数据。

高速缓存存储器(cache):

  1. 存储设备的速度与体积成反比、与造价成正比。
  2. 利用静态随机访问存储器(SRAM)技术实现L1、L2、L3等多级缓存。
  3. 接受大量本应属于内存操作的工作,提高CPU效率。

1.6 储存设备的层次结构

层次结构
未完待续…

扫描二维码关注公众号,回复: 4362324 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_39582960/article/details/84665528