《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——导读-阿里云开发者社区

开发者社区> 开发与运维> 正文

《现代体系结构上的UNIX系统:内核程序员的对称多处理和缓存技术(修订版)》——导读

简介: 虽然高速缓存能够在多处理器中增加有效的存储器带宽,但是高速缓存结构对于管理它所需要的操作系统开销有很大的影响,这又反过来影响了系统的整体性能。


screenshot


**
前言
**
在计算机系统发展历史中的许多时期,构建整体上速度更快的系统的愿望都集中在系统的三大组成部分——CPU、存储子系统和I/O子系统——的速度都更快上面。通过提高时钟速度就可以制造出更快的CPU。通过降低存取时间就可以制造出更快的存储子系统。通过提高数据传输速率就可以制造出更快的I/O子系统。但是,随着时钟速度和传输速率的提高,要提高系统的整体速度就变得越来越困难了,因此要设计和构建这样的系统,成本也变得越来越高。随着速度的提高,传输延迟(propagation delay)、信号上升时间(signal rise time)、时钟同步和分发(clock synchronization and distribution)等都变得越发重要起来。这类高速设计的高成本更难获得有效的性能价格比。

因为受这样和那样的因素影响,系统设计人员扩大了他们的关注范围,以找出提高系统整体性能的其他途径。精简指令集计算机(Reduced Instruction Set Computer,RISC)系统的概念就是其成果之一,在RISC系统中对CPU指令集进行了简化,从而让一个低成本的快速硬件实现就能完成这些指令。另一项成果是高速缓存存储系统的开发。高速缓存通过把程序中引用最频繁的数据和指令保存在一小块高速存储器中,以此降低主存储系统的负载,从而提高系统的性能。通过增加一小块成本划算、高速度的高速缓存(而不是一个成本高、规模大的高速主存储子系统)就能加速存储器整体存取速度。采用高速缓存存储器有可能带来更快的存储器整体存取时间,这对于RISC系统来说尤为重要,因为要完成相同的任务,使用精简的指令集通常要求RISC CPU比传统的CPU体系结构取得和执行更多的指令。一般而言,RISC系统需要更高的带宽来以峰值性能运行。

通过并行运行更多台设备而不是提高任何单台设备的速度就能获得更高的I/O传输速率。这就导致了诸如廉价磁盘冗余阵列(Redundant Arrays of Inexpensive Disks,RAID)之类设备的发展,在RAID中,多块磁盘并行运行以提供更高的整体传输率。通过增加一个系统中CPU的数量来构建多处理器,这样的技术也可以用于提高CPU的速度。多处理器把系统负载分散到多个处理器上来增加整个系统的吞吐率。

多处理器和高速缓存是密切相关的。紧密耦合多处理器系统(tightly coupled multiprocessor system)有一个共享的主存储子系统,随着处理器数量的增加,它需要更高的主存储带宽,因为每个处理器在取得和执行一条独立的指令流的同时,都必须在存储器中访问一组独立的数据。将一块高速缓存和每个处理器进行耦合,从高速缓存而不是共享的主存储器来满足处理器大部分的存储器访问请求,就可以降低主存储器的负载。这是一种颇为划算的提高系统性能的途径。

虽然高速缓存能够在多处理器中增加有效的存储器带宽,但是高速缓存结构对于管理它所需要的操作系统开销有很大的影响,这又反过来影响了系统的整体性能。

总而言之,构建速度更快的计算机系统不仅仅是一件诸如提高CPU时钟速度这样的事。虽然这样的技术实际上造就了更快的系统,但是它们不一定就是经济上划算的解决方法。通过集中研究如何利用现有的系统部件来提供更高的系统性能,人们已经发现高速缓存和多处理器是划算的解决方案。因此,我们就从这里开始研究高速缓存和多处理器的体系结构,以及它们给操作系统带来的问题。

目录

**[第1章 回顾UNIX内核原理
1.1 引言](https://yq.aliyun.com/articles/102602)**
1.2 进程、程序和线程
1.3 进程地址空间
1.3.1 地址空间映射
1.4 上下文切换
1.5 内存管理和进程管理的系统调用
1.5.1 系统调用fork
1.5.2 系统调用exec
1.5.3 系统调用exit
1.5.4 系统调用sbrk和brk
1.5.5 共享内存
1.5.6 I/O操作
1.5.7 映射文件
1.6 小结
1.7 习题
1.8 进一步的读物
**[第2章 高速缓存存储系统概述
2.1 存储器层次结构](https://yq.aliyun.com/articles/102691)**
2.2 高速缓存基本原理
2.2.1 如何存取高速缓存
2.2.2 虚拟地址还是物理地址
2.2.3 搜索高速缓存
2.2.4 替换策略
2.2.5 写策略
2.3 直接映射高速缓存
2.3.1 直接映射高速缓存的散列算法
2.3.2 直接映射高速缓存的实例
2.4 双路组相联高速缓存
2.5 n路组相联高速缓存
2.6 全相联高速缓存
2.7 n路组相联高速缓存的总结
2.8 高速缓存冲洗
2.9 无缓存的操作
2.10 独立的指令高速缓存和数据高速缓存
2.11 高速缓存的性能
2.12 各种高速缓存体系的差异
2.13 习题
2.14 进一步的读物

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章