01 计算机系统漫游

前言

这一章对计算机系统进行快速扫描式得讲解,提到了很多重要的概念, 虽然系统的具体实现方式随着时间不断变化,但是系统内在的概念却没有改变。学习这些概念,完全理解底层计算机系统以及它对应用程序的影响,会让你走上为数不多的“大牛”之路。

重要概念

系统硬件组成

在这里插入图片描述

总线

贯穿整个系统的是一组电子管道,称作总线,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是 字(word) 。4个字节(32位),要么是8个字节(64位)。

I/0设备(输入输出设备)

I/O设备是系统与外界的连接通道,每个I/O设备都通过一个控制器或适配器与I/O总线相连。

主存(内存)

主存是一个临时存储设备,在处理器执行程序时,用来存放程序与程序处理的数据。从物理上说,主存是由一组 动态随机存取存储器(DRAM, Dynamic Random Access Memory) 芯片组成。

处理器

中央处理单元(CPU, Central Processing Unit) ,简称处理器,是解释(执行)存储在主存中指令的引擎。处理器的核心是大小为一个字的存储设备(或寄存器),称为 程序计数器(PC, Programe Counter) 。任何时刻,PC都指向主存中的某条机器语言指令(即含有该条指令的地址)。

处理器看上去是按照一个非常简单的指令执行模型来操作的,这个模型是由 指令集架构 决定的。在这个模型中,指令按照严格的顺序执行,而执行一条指令包含执行一系列的步骤。处理器从程序计数器指向的内存处读取指令,解释指令中的位,执行该指令指示的简单操作,然后更新PC,使其指向下一条指令,而这条指令并不一定和在内存中刚刚执行的指令相邻。

这样的简单操作并不多,它们围绕着主存、寄存器文件(register file)和算术/逻辑单元(ALU,Arithmetic Logic Unit)进行。寄存器文件是一个小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的名字。ALU计算新的数据和地址值。下面是一些简单操作的例子,CPU在指令的要求下可能会执行这些操作。

  • 加载:从主存复制一个字节或者一个字到寄存器,以覆盖寄存器原来的内容。
  • 存储:从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖这个位置上原来的内容。
  • 操作:把两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将结果存放到一个寄存器中,以覆盖该寄存器中原来的内容。
  • 跳转:从指令本身中抽取一个字,并将这个字复制到程序计数器(PC)中,以覆盖PC中原来的值。

存储设备层次

在这里插入图片描述

操作系统的几个抽象概念

  • 文件:I/O设备的抽象表示;
  • 虚拟内存:主存和磁盘I/O设备的抽象表示;
  • 进程:处理器、主存和I/O设备的抽象表示。
    在这里插入图片描述

Amdahl定律(阿姆达尔定律)

  • 1.1 1.2 Amdahl定律(阿姆达尔定律) p17

若系统执行某应用程序需要时间为 T o l d T_{old} Told。假设系统某部分所需执行时间与该时间的比例为 α \alpha α,而该部分性能提升比例为 k k k。即该部分初始所需时间为 α T o l d \alpha T_{old} αTold,现在所需时间为 ( α ∗ T o l d ) / k (\alpha * T_{old})/k (αTold)/k。因此,总的执行时间应为: T n e w = ( 1 − α ) T o l d + ( α ∗ T o l d ) / k = T o l d ( ( 1 − α ) + α / k ) T_{new} = (1 - \alpha)T_{old} + (\alpha * T_{old})/k = T_{old}((1 - \alpha) + \alpha / k) Tnew=(1α)Told+(αTold)/k=Told((1α)+α/k)

由 此 , 可 以 计 算 加 速 比 S = T o l d / T n e w 为 : S = 1 ( 1 − α ) + α / k ( 1.1 ) \begin{aligned} 由此,可以计算加速比S= T_{old}/T_{new}为:&\\ S = & \frac{1}{(1 - \alpha) + \alpha / k} \qquad (1.1) \end{aligned} S=Told/TnewS=(1α)+α/k1(1.1)

k k k考虑趋向于 ∞ \infty 时的效果。也就是这部分优化到极致,这部分的花费可以忽略不计。
S ∞ = 1 ( 1 − α ) ( 1.2 ) S_\infty = \frac{1}{(1 - \alpha)} \qquad (1.2) S=(1α)1(1.2)

并发(concurrency)与并行(parallelism)

书中原话是这么说的,看这个得晕了:

我们用的术语并发(concurrency)是一个通用的概念,指一个同时具有多个活动的系统;而术语并行(parallelism)指的是用并发来使一个系统运行得更快。并行可以在计算机系统的多个抽象层次上运用 。

网上找了整理的:

你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
并发的关键是你有处理多个任务的能力,不一定要同时。
并行的关键是你有同时处理多个任务的能力。所以我认为它们最关键的点就是:是否是『同时』。

Erlang 之父 Joe Armstrong 画了这张图:

在这里插入图片描述

在读JVM虚拟机时,也会经常看到并行与并发

并行(Parallel):并行描述的是多条垃圾收集器线程之间的关系,说明同一时间有多条这样的线程在协同工作,通常默认此时用户线程是处于等待状态。
并发(Concurrent):并发描述的是垃圾收集器线程与用户线程之间的关系,说明同一时间垃圾收集器线程与用户线程都在运行。由于用户线程并未被冻结,所以程序仍然能响应服务请求,但由于垃圾收集器线程占用了一部分系统资源,此时应用程序的处理的吞吐量将受到一定影响。

书名:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》
作者:周志明
出版社:机械工业出版社·华章图文

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一本郑经

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值