首页 > 其他分享 >CSAPP(读书笔记)

CSAPP(读书笔记)

时间:2022-09-20 14:56:03浏览次数:89  
标签:CSAPP 字节 读书笔记 主存 程序 指令 处理器 hello

一  计算机系统漫游

1.1 信息就是位+上下文

  C语言源程序是以字节序列的方式存储在文件中的,每个字节对应一个ASCⅡ编码,例如第一个字节整数值位35,对应字符 '#'

  一个基本思想:系统中的所有信息,包括磁盘文件,内存中的程序,用户数据,网络上传输的数据都是比特流。区分不同数据对象的唯一方法是读到这些数据对象时的上下文,根据不同的上下文,某个字节的信息可能表示机器指令或者是数值数据。

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

  程序的编译流程:

 

 

 

 

  预处理阶段:预处理器(cpp)根据#include<stdio.h>读取系统头文件stdio.h的内容,并将它直接插入程序文本中,得到另一个C程序,通常以.i为拓展名

  编译阶段:编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,hello.s为汇编指令文本

  汇编阶段:汇编器(as)将hello.s翻译为机器指令,把这些指令打包为可重定位目标程序的格式,保存至hello.o(二进制)中

  链接阶段:hello.c程序调用了printf函数,printf函数存在于一个名为printf.o的单独预编译好了的目标文件中,连接器便负责将hello.o和printf.o合并,成为可执行文件hello

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

  通过shell可执行刚才生成的可执行文件hello

  1.4.1 系统的硬件组成

  系统主要由四个部分组成:总线、IO设备、主存、处理器

  总线通常被设计成传送定长的字节块(字),IO设备通常包含键盘鼠标、显示器、磁盘驱动器、打印机等。主存是一个临时存储设备,由一组动态随机存取存储器芯片组成,从逻辑上来说,可以将存储器理解为线性的数组。中央处理单元CPU是执行主存中指令的引擎,处理器组成包括:寄存器文件、算术逻辑单元、cache、总线接口等

  1.4.2 运行hello程序

  在shell中执行./hello命令后,shell执行一系列指令将hello目标文件中的二进制指令从磁盘复制到主存,利用直接存储器存取(DMA)技术,数据可以不通过处理器而直接从磁盘到达主存。当目标文件hello被加载到主存中,处理器开始执行main程序中的机器语言指令,将“hello,world\n”字符串的字节从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终输出在屏幕上。

1.5 高速缓存

  由于从主存到处理器、主存到磁盘的数据加载会花费大量的时间,由此设计出了高度缓存cache,集成在处理器中

  L1高速缓存:通常容量达到数万字节,访问速度几乎和访问寄存器文件一样快

  L2高速缓存:容量达到数十万到百万字节,访问L2缓存的速度比L1更慢,但仍比访问主存快

  将一些可能经常访问的数据缓存在cache中,能够大大提升性能

1.6 存储设备形成层次结构

  

 

 

   从上至下,访问速度越来越慢,容量越来越大。上一层存储器作为下一层存储器的高速缓存。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:CSAPP,字节,读书笔记,主存,程序,指令,处理器,hello
From: https://www.cnblogs.com/yx12789/p/16711008.html

相关文章

  • 《软件测试的艺术》读书笔记(三)
    3.3用于代码检查的错误列表常见错误对照表,容易出现的问题:过于注重代风格码而不是代码错误、过于模糊不够具体。           3.3.1数据引用错误......
  • 《js 设计模式与开发实践》读书笔记 13
     职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 ......
  • 《js 设计模式与开发实践》读书笔记 14(完)
    在传统面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活,还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之改变;另......
  • 计算机网络-自顶向下方法(读书笔记)
    Chapter1计算机网络与因特网: 现在的intenet,计算机网络,现在已经是各种计算机与非传统设备联系的网络,这些设备应该称为主机(host)和端系统(endsystem);端系统(en......
  • 第十章读书笔记
    SH编程1.sh脚本2.c和sh的区别3.命令行参数4.Sh变量$A相当于C语言中的指针。5.sh中的引号即需要转义(将原本具有特殊意义的字符普通化)6.sh语句(简......
  • 《Unix/Linux系统编程》第十章读书笔记
    自学教材第10章学习笔记一、任务内容自学教材第10章,提交学习笔记(10分)大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在......
  • 【旧书,科研相关】 读书笔记
    在大多数之前的系统中,图像捕获和处理模块被分离为两个独立的部分,不存在交互。视觉芯片将两层集成的交互行为提高了速度(并行传输带宽增加,传输信息冗余减少),增加了局部光强自......
  • csapp-链接
    链接:将各种代码和数据片段收集并组合成一个单一文件的过程,这个文件可被加载到内存并执行。链接可执行于编译时、加载时、运行时。代码示例:静态链接:编译器驱动程序gc......
  • 220905-读书笔记-把时间当做朋友
    印象中,第一次读这本书的时候,是在大学期间,应该是大一或者大二的时候,当时候自己的智识达不到理解这本书的层次。现在在读这本书,竟觉得略有些浅显。总的来说,这本书写的比较零......
  • 第一次读书笔记
    总结:第一二单元总的来说是在描述Linux系统中c语言的重要性,以及在其中的一些使用技巧。其中C语言数据结构中的数据结构,就是Linux文件系统构建起来的基础。第一章主要包含......