• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

深入理解计算机系统:2.计算机系统漫游(下)

互联网 diligentman 2周前 (04-07) 3次浏览

深入理解计算机系统:2.计算机系统漫游(下)

1. 高速缓存至关重要

系统花费了大量的时间把信息从一个地方传到另一个地方。hello程序的机器指令最初是存放在磁盘上,当程序加载时,它们被复制到主存;当处理器运行程序时,指令又从主存复制到处理器。从程序员的角度来看,这些复制就是开销,减慢了程序“真正”的工作。因此,系统设计者的一个主要目标就是使这些复制操作尽可能快地完成。

根据机械原理, 较大的存储设备要比较小的存储设备运行得慢,而快速设备的造价远高于同类的低速设备。一个典型的寄存器文件只存储几百字节的信息,而主存里可存放几十亿字方。 然而处理器从寄存器文件中读数据比从主存中读取几乎要快100倍。

随着这些年半导体技术的进步,这种处理器与主存之间的差距还在持续增大,加快处理器的运行速度比加快主存的运行速度委容易和便宜得多。针对这种处理器与主存之间的差异,系统设计者采用了更小更快的存储设备:高速缓存存储器(简称为cache或高速缓存),作为暂时的集结区域,存放处理器近期可能会需要的信息。

2. 存储设备形成层次结构

深入理解计算机系统:2.计算机系统漫游(下)
在这个层次结构中,从上至下,设备的访问速度越来越慢、容量越来越大,并且每字节的造价也越来越便宜。寄存器文件在层次的构中位于最顶部,也就是第0级或记为L0。 这里我们展示的是三层高速级存L1到|占据存储器层次结构的第1层到第3层。主存在第4层,以此类推。

存储器层次结构的主要思想是上一层的存储器作为低-一层存储器的高速缓存。因此寄存器文件就是LI的高速缓存,LI是L2的高速缓存,L2是L3的高速缓存,L.3是主存的高速缓存,而主存又是磁盘的高速缓存。在某些具有分布式文件系统的网络系统中,本地磁盘就是存储在其他系统中磁盘上的数据的高速缓存。

3.操作系统管理硬件

我们可以把操作系统看成是应用程序和硬件之间插人的一层软件,所有应用程序对硬件的操作尝试都必须通过操作系统。
操作系统有两个基本功能:

  1. 防 止硬件被失控的应用程序滥用;
  2. 向应用程序提供简单一致的机制来控制复杂而又通常大不相同的低级硬件设备。

操作系统通过几个基本的抽象概念(进程、虚拟内存和文件)来实现这两个功能。

文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。

  • 进程:像hello这样的程序在现代系统上运行时,操作系统会提供种假象,就好像系统上只有这个程序在运行。程序看上去是独占地使用处理器、主存和1/O设备。处理器看上去就像在不间断地一条接一 条地执行程序中的指令, 即该程序的代码和数据是系统内存中唯一的对象。这些假象是通过进程的概念来实现的,进程是计算机科学中最重要和最成功的概念之一,是操作系统对一个正在运行的程序的一种抽象。
    在一个系统上可以同时运行多个进程,而每个进程都好像在独占地使用硬件。而并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。在大多数系统中,需要运行的进程数是多于可以运行它们的CPU个数的。无论是在单核还是多核系统中,一个CPU看上去都像是在并发地执行多个进程,这是通过处理器在进程间切换来实现的。操作系统实现这种交错执行的机制称为上下文切换。
  • 线程:一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。由于网络服务器中对并行处理的需求,线程成为越来越重要的编程模型,因为多线程之间比多进程之间更容易共享数据,也因为线程一般来说都比进程更高效。当有多处理器可用的时候,多线程也是一种使得程序可以运行得更快的方法。
  • 虚拟内存:虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都在独占地使用主存。每个进程看到的内存都是一致的, 称为虚拟地址空间。
    深入理解计算机系统:2.计算机系统漫游(下)
    程序代码和数据:对所有的进程来说,代码都是从同一固定地址开始的,即 0x08048000,紧接着是C全局变量的数据区。 代码和数据区是直接按照可执行目标文件的内容初始化的
    :运行时堆,在运行时动态地扩展收缩
    共享库:大约在地址空间的中间部分,存放标准库、数学库等共享库的代码和数据
    :位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用,在程序执行期间可以动态的扩展和收缩。
    内核虚拟存储器:地址空间顶部的区域是为内核保留的,不允许应用程序读写这个区域的内容或直接调用内核代码定义的函数,必须调用内核执行这些操作
  • 文件:文件就是字节序列,每个I/O设备,包括磁盘、键盘、显示器,甚至网络,都可以看成是文件。系统中的所有输入输出都是通过使用一小组称为Unix I/O的系统函数调用读写文件来实现的。文件向应用程序提供了一个统一的视图,来看待系统中可能含有的所有各式各样的I/O设备。

4.系统之间利用网络通信

随在Inenet这样的全球网络的出现,从一台主机复制信息到另外一台主机已经成为计算机系统最重要的用途之一。
假设用本地主机上的telne客户端连接远程主机上的ene服务器。在我们登录到远程主机并运行shell后,远端的shell就在等待接收输人命令

:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}

































本地telnet客户端









远程telnet 服务器








1.用户在telnet客户端键入"hello" 字符串并敲下回车键
2.客户端软件向telnet的服务器发送字符串
3.telnet服务器从网络上接收到这个字符串后,向远端shell程序发送字符串,远端shell运行hello程序,并将输出行返回给telnet服务器
4.telnet服务器通过网络把输出串转发给telnet 客户端
5.客户端将输出串输出到本地终端上

这种客户端和服务器之间交互的类型在所有的网络应用中是非常典型的

5.重要主题

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

  • 线程级并发:设计同时有多个程序执行的系统甚至在一个进程中执行多个控制流
  • 指令级并行:较低抽象层次,可以同时执行多条指令。流水线将执行一条指令所需要的活动划分成不同步骤,将处理器的硬件组织成一系列的阶段,每个阶段执行一个步骤,这些阶段可以并行操作,用来处理不同指令的不同部分
  • 单指令、多数据并行:最低层次,许多现代处理器拥有特殊硬件,允许一条指令产生多个可以并行执行的操作

程序员灯塔
转载请注明原文链接:深入理解计算机系统:2.计算机系统漫游(下)
喜欢 (0)