深刻理解计算机系统 第一章 计算机系统漫游

     本着对计算机运行原理的好奇以及我的职业发展的须要,开始阅读这本书。
    如下分节记录读书笔记:
 
    1.1 信息就是位 + 上下文
     计算机系统中存放的全部信息都是由一串比特(bit)表示的,但值得注意的是,一样的比特信息在不一样的上下文中所表明的意思是不一样的。
    在这里, 咱们能够将“上下文”理解为对比特信息的解读方式。每个解读方式,都有其独特的解读规则。例如,某个字节的整数值为 47,在上下文 A 中,它被解读为“能够”,在上下文 B 中,它被解读为“桌子”。
    注:此处能够类比对文本的加密解密来理解。
 
    1.2 程序被其余程序翻译成不一样的格式
    计算机执行程序的过程能够理解为,计算机读取人类的命令,并执行它。
    而计算机对信息的读取方式和人类的相差很大,最好的办法固然是创造一种语言,让人类和计算机都能轻易读懂,而且人类可以很轻易的书写。
    可是目前这种语言尚未诞生,目前的处理方法是,人类书写对于人类思惟比较友好的代码,通过几类特定程序的翻译,将其变为计算机可以读懂并执行的命令。这几类特定的程序在业界中分别被称呼为 预处理器、编译器、汇编器和链接器,这 4 个阶段的程序一块儿构成了编译器。
    翻译流程以下图:(图片来自于《深刻理解计算机系统》第 3 版第一章)
 
 
    1.3 了解编译系统如歌工做是大有益处的
    编译系统帮助咱们将程序翻译成计算机容易理解而且可以执行的机器代码,咱们能够不了解编译系统的工做原理,直接使用。
    但若是了解了它的工做原理,将带来如下 3 个好处:
    一、 优化程序性能
        了解一些机器代码以及编译器将不一样的高级语言代码转化为机器代码的方式,能够帮助咱们在程序中作出更好的编码选择,从而提升代码执行效率
    二、 理解连接时出现的错误
        据专业人士的经验,一些最使人困扰的程序错误每每都与连接器操做有关,由其当咱们试图构建大型的软件系统时。
    三、 避免安全漏洞
        缓冲区溢出错误时形成大多数网络和 Internet 服务器上安全漏洞的主要缘由,咱们要可以理解从不受信任的源接收数据的数量和格式,才能有效避免这些安全漏洞。
 
    1.4 处理器读并解释储存在内存中的指令
    当程序被编译器翻译成了可执行的目标文件以后,要想在 Unix/Linux 系统上运行时,可将其名称输入到一个 shell 的应用程序中
    例如:linux> ./hello
    shell 是一个命令行解释器,它输出一个提示符,等待输入一个命令行,而后执行这个命令。
        1.4.1 系统的硬件组成
            系统的硬件由 4 个部分组成:总线、I/O 设备、主存和处理器。
        1.4.2 运行 hello 程序
            shell 程序执行指令,将其读入寄存器,并放入主存。而后,处理器会执行主存中的 hello 程序的 main 程序中的机器语言指令。这些指令将 “hello,world\n” 字符中字节从主存复制到寄存器,在从寄存器文件中复制到显示设备,最终显示在屏幕上。 
 
    1.5 高速缓存相当重要
    经过上述示例咱们能够知道,系统花费了大量的时间把信息从一个地方搬运到另外一个地方。
    因为处理器对数据的处理速度远大于主存,若处理器直接从主存中读取数据,则处理器的性能会被大大的浪费掉。
    此时,高速缓存应运而生,利用高速缓存的局部性原理,存放处理器近期可能会须要的信息,使得大部分的内存操做都能在快速的高速缓存中完成。
 
    1.6 存储设备造成层次结构
    在处理器和一个较大较慢的设备(例如主存)之间插入一个更小更快地存储设备(例如高速缓存)的想法已经成为一个广泛的概念。
    实际上,每一个计算机系统中的存储设备都被组织成了一个存储器层次结构,以下图所示:
    
    存储器层次结构的主要思想是上一层的存储器做为低一层存储器的高速缓存。
    程序员能够利用对整个存存储器层次结构的理解来提升程序性能。
 
    1.7 操做系统管理硬件
    操做系统是应用程序和硬件之间的一层软件,全部应用程序对硬件的操做尝试都必须经过操做系统。
    操做系统有两个基本的功能:(1)防止硬件被失控的应用程序滥用;(2)向应用程序提供简单一致的机制来控制复杂而又一般大不相同的低级硬件设备。
    操做系统经过几个基本的抽象概念(进程、虚拟内存和文件)来实现这两个功能。
    文件是对 I/O 设计的抽象,虚拟内容是对主存和磁盘 I/O 设备的抽象,进程是对处理器、主存和 I/O 设备的抽象。
 
    1.8 系统之间利用网络通讯
    每一个系统都是一个孤立的个体,而系统要想与其余系统之间进行通讯,则能够经过网络。网络能够将各个系统串联起来。
    能够将网络视为一个磁盘,与网络交换数据,和与磁盘交互数据本质上是同样的。
相关文章
相关标签/搜索