CS:APP/深入理解计算机系统-第一章(1.8~1.10)

这两天有点忙也有点累,在周末晚上给自己充充电吧

1.8 Systems Communicate with Other Systems Using Networks

前面把system描述的是一个独立存在的东西,但现今的system都会用通过网络network与其他system建立起连接。从一整个系统的角度来看,网络可以看作是一个IO设备,就像下图展示的:

 一个system的数据可以从Main memory出发,经过Network adapter流传至另一台机器;同样数据可以把其他机器发送的数据存放到自己的Main memory里。

 以通过telnet远程控制软件在服务器上运行hello程序为例,简单说明一下整个流程。

我们启动远程控制程序,在远程机器上打开shell,输入hello,开始运行。

本地客户端通过远程控制程序把命令发送给远程机器。

远程机器开始运行hello程序,把输出传递给远程控制程序。

远程控制程序把输出再传递给本地客户端,在本地现实hello运行结果。

--------------------------------------------------

1.9 Important Themes

经过前面的学习,可以得出一个初步结论:系统不是一个硬件,而是交互的硬件和软件组成的积核,其中硬件和软件相互配合实现程序运行。

本节主要是强调几个概念,下面分别介绍

1.9.1 Amdahl's Law

这个法则大体说明(感觉翻译出来就没那味了,还是用原文吧):

When we speed up one part of a system, the effect on the overall system performance depends on both how significant this part was and how much it sped up.

假设一个系统的运行时间是T_old,系统里有个模块,这个模块上耗费的时间是α*T_old。现在我们把这个模块的速度提升了k倍,也就是说现在这个模块耗费的时间是α*T_old/k。那么新的运行时间就是T_new=(1-α)T_old + α*T_old/k。

S = T_old/T_new = 1/((1-α) + α/k)

当k->∞,S_∞ = 1/(1-α)

这个法则描述了改进一个程序的一般原则。

1.9.2 Concurrency and Parallelism

我们总是希望计算机能够在尽可能做的更多的同时跑得更快。

在本书中,使用concurrency(并发)指代general concept of a system with multiple, simultaneous activities;使用parallelism(并行)指代使用concurrency让system运行的更快。

parallelism可以在计算机的多个抽象层上使用,在这里按着系统层次结构中最高到最低的顺序强调三个级别。

级别1. Thread-Level Concurrency

借助线程thread,我们可以在单个进程process中有多个控制流。

一种系统叫做uniprocessor system,这种处理器需要在不同任务之间切换。

一种系统叫做multiprocessor system,通过一个操作系统内核控制多个处理器去进行各种活动。

随着multi-core processor(多核处理器,一个芯片上有多个CPU)和hyperthreading(超线程,或者叫做simultaneous multi-threading,同步多线程,是一种允许单个CPU执行多个控制流的技术)的出现,multiprocessor system更加普遍。

多核处理器的概念比较简单,多说说hyperthreading。

传统的处理器需要约20000个时钟周期才能在不同线程之间切换,但hyperthreading处理器逐个周期地决定执行哪个线程。它使 CPU 能够更好地利用其处理资源。 例如,如果一个线程必须等待某些数据加载到缓存中,CPU 可以继续执行另一个线程。举个例子,酷睿i7可以让每个CPU同时跑两个线程,因此如果是个四核的,那么可以parallel执行八个线程。

级别2. Instruction-Level Parallelism

现在的处理器可以同时处理多个指令(每个时钟周期执行2~4条指令),这叫做指令集的并行,这样的处理器叫做superscalar processor。主要是通过流水线pipelining实现的:执行指令需要的一系列动作被划分为不同的步骤,处理器硬件被组织成一系列阶段,每个阶段执行一个步骤。这些阶段可以并行的运行,不同指令的步骤可以并行的执行。

级别3. Single-Instruction,Multiple-Data(SIMD)Parallelism

大多处理器都有特殊的硬件设计,允许一条指令引起多个操作并行的执行,这就叫SIMD并行模式。提供这些SIMD指令主要是为了加速处理图像、声音和视频数据的应用程序。尽管一些编译器试图从 C 程序中自动提取 SIMD 并行性,但更可靠的方法是使用编译器支持的特殊向量数据类型编写程序(如 gcc)。

1.9.3 The Importance of Abstractions in Computer Systems

抽象是很重要的概念,这使得我们可以调用某个程序的API接口就实现了这个程序的功能,不用去了解这个程序的具体实现原理。

还记得下面这个图吗

在处理器方面,指令集体系结构提供了实际处理器硬件的抽象。有了这种抽象,机器代码程序的行为就好像它是在一个每次只执行一条指令的处理器上执行的。

在操作系统方面,我们引入了三种抽象:文件作为I/O设备的抽象,虚拟内存作为程序内存的抽象,进程作为正在运行的程序的抽象。

在这些抽象之上我们添加了一个新的:虚拟机,它提供了整个计算机的抽象,包括操作系统、处理器和程序。

 -------------------------------------------

1.10 Summary

计算机系统由硬件和系统软件组成,它们共同运行应用程序。计算机内部的信息被表示为一系列bit,根据上下文的不同,这些bit被解释为不同的方式。程序被其他程序转换成不同的形式,从ASCII文本开始,然后通过编译器和连接器转换成二进制可执行文件。

处理器读取和解释存储在主存储器中的二进制指令。 由于计算机大部分时间都在内存、I/O 设备和 CPU 寄存器之间复制数据,因此系统中的存储设备按层次结构排列,CPU 寄存器在顶部,其次是多级硬件高速缓存存储器 、DRAM 主存和磁盘存储。层次结构中较高的存储设备比层次结构中较低的存储设备速度更快且每比特成本更高。 层次结构中较高的存储设备用作层次结构中较低的设备的缓存。 程序员可以通过理解和利用内存层次结构来优化他们的 C 程序的性能。

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

最后,网络为计算机系统之间的通信提供了途径。从特定系统的角度来看,网络只是另一个I/O设备。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值