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


    这本书让我对汇编语言有了一些初步的接触与了解。汇编语言虽说不太方便,但也是非常重要的。它主要用于分析存在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

  • 相关阅读:
    如何用Core Plot绘制柱状图
    如何定制Core Plot主题
    开源框架Core Plot的使用
    基于.NET平台的分层架构实战(七)——数据访问层的第一种实现:Access+SQL
    基于.NET平台的分层架构实战(十一)——表示层的实现
    CIO如何给自己的团队带来价值
    如何使用Core Plot绘制直方图和折线图
    在Windows平台下编译ObjectiveC(转载)
    新开通博客
    Java类中的对象
  • 原文地址:https://www.cnblogs.com/gzgs/p/8944211.html
Copyright © 2020-2023  润新知