zoukankan      html  css  js  c++  java
  • 【第八周读书笔记】读计算机系统详解

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

  • 相关阅读:
    NB-IOT终端应用场景
    开关量是什么信号,模拟量是什么信号
    模拟量设备为什么都用4~20mA传输信号
    物联网三大关键技术
    4~20mA.DC(1~5 V.DC)信号制的优点
    Lora在局域网中的优势
    NB-IoT终端在不同工作状态下的分析
    4G模块的串行AT命令发送未接收返回如何处理
    前端性能优化
    Tab:不可思议的CSS光标下划线跟随效果
  • 原文地址:https://www.cnblogs.com/gzgs/p/8944211.html
Copyright © 2011-2022 走看看