【第八周读书笔记】读计算机系统详解

这本书让我对汇编语言有了一些初步的接触与了解。汇编语言虽说不太方便,但也是非常重要的。它主要用于分析存在bug,高级语言执行模型失效时的程序行为,程序性能调优中找到程序低效的根源,实现系统级软件而且编译器以机器码为最终目标代码。我学会了一些比如说,知道了基本数字编码的步骤,怎样用编程实现机器码的文字表示,知道了整形数据浮点型数据字符串的机器表示,不同的机器使用完全不同的指令和编码方式,然后最核心的就是学习了一些基本的和C语言一一对应的汇编的语法。并且通过汇编语言语法的学习,对计算机底层实现也有了更深入的认识,比如说知道了很多算术,数据结构,条件,循环,数据调用,函数调用,递归调用,存储的管理,return之类的基本语法知识,知道了一些特殊类型的计算机存储方式,就可以对程序优化有作用,而且还可以避免一些buffer overflow带来的潜在的bug。

然后,让我了解了计算机的存储结构,使程序适应存储系统的结构特性可以极大的提高其性能,同时在访存处理这个比较棘手的bug上有了清楚地认识,一般包括数组越界,malloc和free函数的使用,访存错误会使与访问数据毫不相关的数据被修改,而且距离比较远,所以编程时候就应该提防。同时存储器的访存的顺序也可以帮助我们大幅度提高程序的性能,比如说二维数组的处理这方面,知道了机器的字长的含义,它是一种面向字节的存储器结构,可以把存储数据看成一个很大的数组,它包括SRAM, DRAM, DISK这些存储结构,存储器是由多个RAM封装芯片构成的,然后SRAM抗干扰性能好,快,但是贵,DRAM慢,需要刷新值,但是比较便宜,编译器与系统共同决定内存分配,知道了存储器怎样通过总线来读写数据。还要注意让程序有好的局部性。了解了存储器的层次结构。合理利用存储结构可以使程序更优化。

注意系统总线和存储器总线通过I/O桥连接。

a)    加载操作movl A, %eax读事务

              i.         CPU放地址A到存储器总线

              ii.         主存从总线读出A,取出其中字x放到总线

              iii.         CPU读出字x,拷贝到寄存器

b)    存储操作movl %eax, A写事务

              i.         CPU放地址A到总线,主存读地址,等待数据字

              ii.         CPU放数据字y到总线

              iii.         主存读出y,存储到地址A

 

 

 

磁盘构造:

a)    间隙存储用来标识扇区的格式化位。

b)    磁盘用读/写头读写存储在磁性表面的位,读写头连接到一个传动臂,所有头垂直排列一致行动。

完整的对扇区的访问时间包括:

a)    寻道时间Tseek

b)    旋转时间Tmax rotation,平均旋转时间是其的一半

c)     传送时间
访问一个字节主要的时间是寻道时间和旋转延迟,而这两者大小差不多,故寻道时间乘以2作为磁盘访问时间的估计。
磁盘控制器:负责翻译逻辑块号->三元组(盘面,磁道,扇区)
清理磁盘碎片使得寻道时间和旋转时间大大减小。使数据存储在磁盘连续区域。

 

连接到I/O设备:USB,显卡等等,PCI的I/O总线被设计成与CPU无关,访问磁盘的步骤:

a)    CPU发起一个磁盘读,包括命令字和逻辑块号

b)    磁盘控制器读扇区,执行到主存的DMA传送

c)     DMA传送完成,磁盘控制器用中断方式通知CPU

原文地址:https://www.cnblogs.com/gzgs/p/8944211.html