CSAPP 学习笔记(一)计算机系统漫游1

CSAPP 学习笔记(一)计算机系统漫游

1.1信息就是位+上下文

  1. hello.c程序是以字节序列的方式储存在文件中,只由ASCII字符构成称为文本文件
  2. 只由ASCII字符构成称为文本文件,其他所有文件称为二进制文件
  3. 区分不同数据对象的唯一方法是我们读到这些数据对象时的上下文,不同上下文中,同样的字节序列可能表示一个整数浮点数字符串或者机器指令

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

  1. 在Unix系统上,从源文件到目标文件的转化石油编译器驱动程序完成的linux> gcc -o hello hello.c
  2. 把源程序文件hello.c翻译成可执行目标文件hello的过程有四个阶段(预处理,编译,汇编,链接) ,分别由预处理器,编译器,汇编器,链接器一同完成,他们共同构成了编译系统(看书上图片)
  3. 预处理阶段:预处理器(cpp)根据#开头的命令修改原始的C程序,并得新的C程序(以.i为扩展名)
  4. 编译阶段:编译器(cll)将hello.i翻译成文本文件hello.s,包含一个汇编语言程序
  5. 汇编阶段:汇编器(as)把hello.s翻译成机器语言指令,并把这些指令打包成可重定位目标程序的格式,结果保存在hello.o(二进制文件)
  6. 链接阶段:hello调用了printf函数,printf函数存在于一个名为printf.o的单独的预处理好的目标文件中。有链接器(ld)把printf.o合并到hello.o当中。结果得到hello文件

1.3 了解编译系统如何工作的好处

  1. 优化程序性能
  2. 理解链接时出现的错误
  3. 避免安全漏洞

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

shell

  1. hello.c源程序已经被编译系统翻译成可执行文件hello并被存放在磁盘上。要想在Unix系统上运行该可执行文件,我们将它的文件名输入到称为shell的应用程序
linux> ./hello
hello, world
linux>

shell是一个命令行解释器如果命令行的第一个单词不是shell的内置命令,那么shell就会假设他是个可执行文件的名字,他将加载并执行这个文件。

硬件

  1. 系统硬件组成:总线,I/O设备,主存,处理器
  2. 总线:贯穿整个系统的一组电子管道,携带信息字节并负责在各个部件间传递(传递信息用的)通常总线被设计成传送定长的字节块(字word)。字中的字节数是一个基本的系统参数(32位4个,64位8个)
  3. I/O设备:系统与外部世界联系通道(鼠标键盘,显示器,磁盘),I/O通过控制器(I/O设备本身或者主印刷电路板上的芯片组)或适配器(插在主板插槽)与总线相连
  4. 主存:临时存储设备,处理器执行程序的时候用来存放程序和数据的,有一组动态随即存取存储器(DRAM)芯片组成
  5. 处理器:中央处理器(CPU)是解释(或执行)存储在主存中指令的引擎。其和行是一个代写哦啊为一个字的存储设备(或寄存器),称为程序计数器(PC),在任何时候PC都指向主存中的某条机器指令(及含有该指令的地址)。处理器从PC指向的内存处读指令,解释指令中的位,然后更新PC,使其指向下一条指令,而这些指令不一定在内存中连续
    . 处理器操作主要围绕主存,寄存器文件,算数/逻辑单元进行
  6. 寄存器文件(register file)是一个小存储设备,由一些单个字长的寄存器组成,每个寄存器有唯一的文件。
  7. 算术/逻辑单元(ALU)计算数据和地址值
  8. CPU在指令的要求下可能执行这些操作
操作具体
加载从主存复制一个字节或字到寄存器,以覆盖寄存器原来的内容
存储从寄存器复制一个字节或字到主存的某个位置,覆盖主存原来的内容
操作把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖寄存器原来内容
跳转从指令本身抽取一个字,并将这个字复制到PC以覆盖PC原来的值

运行hello程序

一定要看书上的图!!!

  1. shell程序将字符逐一读入寄存器在把它放入内存中
  2. 敲了回车后,shell执行一系列指令来执行hello文件,把目标文件中的代码和数据从磁盘复制到主存(利用直接存储器DMA,跳过处理器,直接从磁盘到达主存
  3. hello中的代码和数据被加载到主存,处理器开始执行hello程序main。字符串从主存复制到寄存器文件,再从寄存器文件复制到显示设备
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值