深入理解计算机系统学习笔记

深入理解计算机系统学习笔记,第1张

深入理解计算机系统学习笔记 一、博主的话

        上学的时候就有读过深入理解计算机系统这本书,但是当时没有太多代码经验(写的太少),感觉读到的知识都是囫囵吞枣,死记硬背。现在工作之后,经验更多,重新读这本书,就会有更深的理解,真印证了“温故而知新”这句话。

小时候上学就喜欢做笔记,所以现在,就把书中的知识点精简出来,整理成这系列博客,当做重新学习后的笔记。

二、第一章 计算机系统漫游 1. 重要主题

1.Amdahl 定律

        Gene Amdahl, 计算领域的早期先锋之一,对提升系统某 一部分性能所带来的效果做出了简单却有见地的观察。这个观察被称为 Amdahl 定律。该定律的主要思想是 ,当我们对系统的某个部分加速时 ,其对系统整体性能的影响取决于该部分的重要性和加速程度 。

        Amdahl 定律的主要观点是要想显著加速整个系统,必须提升全系统中相当大的部分的速度。

2.并发和并行

        数字计算机的整个历史中 ,有两个需求是驱动进步的持续动力:一个是我们想要计算机做得更多 ,另一个是我们想要计算机运行 得更快 。当处理器能够同时做更多的事情时, 这两个因素都会改进。我们用的术语并发 (concurrency) 是一个通用的概念, 指一个同时具有多个活动的系统;而术语并行(parallelism)指的是用并发来使一个系统运行得更快 。并行可以在计算机系统的多个抽象层次上运用。在此 ,我们按照系统层次结构中由高到低的顺序重点强调三个层次。

(1)线程级并发
        构建在进程这个抽象之上 ,我们能够设计出同时有多个程序执行的系统 ,这就导致了并发 。使用线程 ,我们甚至能够在一个进程中执行多个控制流。自 20 世纪 60 年代初期出现时间共享以来 ,计算机系统中就开始有了对并发执行的支持。传统意义上 ,这种并发执行只是模拟出来的。在以前 ,即使处理器必须在多个任务间切换,大多数实际的计算也都是由一个处理器来完成的 。这种配置称为单 处理器系统。当构建一个由单 *** 作系统内核控制的多处理器组成的系统时 ,我们就得到了一个多处理器系统。随着多核处理器和超线程 (hyperthreading)的出现 ,这种系统变得更加常见 。

 

         超线程 ,有时称为同时多线程 (simultaneous multi-threading), 是一项允许一个CPU执行多个控制流的技术。举例来说,Intel Core i7 处理器可以让每个核执行两个线程 ,所以一个 4 核的系统实际上可以并行地执行 8 个线程。

        多处理器的使用可以从两方面提高系统性能 。首先 ,它减少了在执行多个任务时模拟并发的需要 。其次 ,它可以使应用程序运行得更快 ,当然 ,这必须要求程序是以多线程方式来书写的 ,这些线程可以并行地高效执行。

(2)指令集并发

        在较低的抽象层次上 ,现代处理器可以同时执行多条指令的属性称为指令级并行。这是通过流水线(pipelining)实现的,在流水线中 ,将执行一 条指令所需要的活动划分成不同的步骤,将处理器的硬件组织成一系列的阶段 ,每个阶段执行一个步骤 。这些阶段可以并行地 *** 作,用来处理不同指令的不同部分。我 们会看到一个相当简单的硬件设计 ,它能够达到接近于一个时钟周期一条指令的
执行速率。如果处理器可以达到比一个周期一条指令更快的执行速率 ,就称之为超标量 (super
scalar) 处理器 。

(3)单指令、多数据并行

        在最低 层次上 ,许多现代处理器拥有特殊的硬件 ,允许一 条指令产生多个可以并行执行的 *** 作 ,这 种方式称为单 指令、 多数据 ,即 SIMD 并行。例如 ,较新几代的 Intel 和AMD 处理器都具有并行地对 8 对单精度浮点数 (C 数据类型 float) 做加法的指令。提供这些 SIMD 指令多是为了提高处理影像 、声音和视频数据应用的执行速度 。

3. 计算机系统中抽象的重要性

        抽象的使用是计算机科学中最为重要的概念之一。例如 ,为一组函数规定一个简单的应用程序接口就是一 个很好的编程习惯, 程序员无须了解它内部的工作便可以使用这些代码。

        在处理器里 ,指令集架构提供了对实际处理器硬件的抽象。使用这个抽象 ,机器代码程序表现得就好像运行在一个一次只执行一条指 令的处理器上 。底层的硬件远比抽象描述的要复杂精细 ,它并行地执行多条指令,但又总是与那个简单有序的模型保持一致 。只要执行模型一样 ,不同的处理器实 现也能执行同样的机 器代码 ,而又提供 不同的开销和性能。

        在学习 *** 作系统时 ,我们介绍了三个抽象:文件是对I/O 设备的抽象,虚拟内存是对程序存储器的抽象 ,而进程是对一个正在运行的程序的抽象 。我们再增加 一个新的抽象:虚拟机 ,它提供对整个计算机的抽象 ,包括 *** 作系统、处理器和程序 。

 

2. 小结

        计算机系统是由硬件和系统软件组成的,他们共同协作以运行应用程序 。

 

        计算机内部的信息被表示为一组组的位 ,它们依据上下文有不同的解释方式。程序被其他程序翻译成不同的形式 ,开始时是ASCII 文本 ,然后被编译器和链接器翻译成二进制可执行文件。


        处理器读取并解释存放在主存里的二进制指令 。因为计算机花费了大量的时间在内存、 I/O 设备和CPU寄存器之间复制数据 ,所以将系统中的存储设备划分成层次结构:CPU 寄存器在顶部 ,接 着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器。在层次模型中 ,位于更高层的存储设备比低层的存储设备要更快 ,单位比特造价也更高。层次结构中较高层次的存储设备可以作为较低层次设备的高速缓存。通过理解和运用这种存储层次结构的知识 ,我们可以优化 C 程序的性能。

        


         *** 作系统内核是应用程序和硬件之间的媒介 。它提供三个基本的抽象 : 1) 文件是对I/O设备的抽象;2) 虚拟内存是对主存和磁盘的抽象; 3) 进程是处理器 、主存和I/O 设备的抽象;


      最后 ,网络提供了计算机系统之间通信的手段 。从特殊系统的角度来看, 网络就是一种
I/O 设备。

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5707629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存