| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> CS:APP/深入理解计算机系统-第一章(1.8~1.10) -> 正文阅读 |
|
[系统运维]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 这个法则大体说明(感觉翻译出来就没那味了,还是用原文吧):
假设一个系统的运行时间是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设备。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 18:02:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |