[TOC]

计算机科学导论学习笔记

前言:当前作为一名IT互联网从业者,计算机技术日新月异,每天都有新概念、新技术的出现,而像我这样的万金油来说,越学到后面就越吃力,遇到瓶颈问题也随之增多,因为本身非科班出身,加之半路出家,针对于计算机基础知识掌握不牢或者说是不完整,所以我痛定思痛,下定决心重新学习计算机相关基础知识,从计算机科学导论,到计算机组成原理,到计算机网络、到操作系统,到数据结构,到程序算法、到应用开发、到安全运维开发。

今天 (2022年9月1日) 便从大神之路-起始篇,我们要站在巨人们的肩膀上,进行计算机科学导论的 学习,我将总结学习成果笔记,帮助后续入门学习的朋友。

随着现代计算机的发明,带来了新的学科,即计算机科学(简称计科)一词上一个非常广泛的概念,在此处我没将其定义为计算机相关的问题,现在计算机科学被划分成几个领域,总结归纳为两大类系统领域应用领域.

  • 系统领域:涵盖那些与硬件和软件构成直接有关的领域,例如计算机体系结构、计算机网络、安全问题、操作系统、算法、程序设计语言以及软件工程。
  • 应用领域:涵盖了与计算机使用有关的领域,例如数据库、云物联和人工智能。

参考书籍:【计算机科学导论-第三版 (Foundations Of Computer Science - Third Edition) 】作者: [美] 贝赫鲁兹.佛罗赞 (Behrouz Forouzan) PS: 当下已经第四版了、

参考视频:【计算机导论】计算机科学导论(大神之路-起始篇)


第 3 部分 计算机硬件与网络

此部分包含第56章,包含了计算机硬件的通用概念以及不同计算机的组成,其次介绍了计算机网络相关概念以及互联的。

原文地址: https://mp.weixin.qq.com/s/TFT7t2YFnFNlXmeU5_Bo-g

5.计算机组成

通知前面学习,知道了冯诺依曼结构的计算机组成由四部分组成存储器、算术逻辑单元 ALU、控制单元 CU 和输入/输出单元, 本节将依次简单介绍(大致有个印象概念即可),更详细的介绍请参考后续的学习笔记《计算机组成原理》。

5.1 中央处理单元

中央处理单元(CPU)用于数据的运算。在大多数体系结构中,它有三个主要组成部分:算术逻辑单元(ALU)、控制单元(CU)、寄存器组(快速存储定位)。

WeiyiGeek.计算机组成原理以及中央处理单元CPU结构

WeiyiGeek.计算机组成原理以及中央处理单元CPU结构

(1) 算术逻辑单元

CPU的第三个部分是算术逻辑单元,针对数据进行逻辑、移位和算术运算

  • 1) 逻辑运算:例如,非、与、或和异或,这些运算把输入数据作为二进制位模式,运算的结果也是二进制位模式。
  • 2) 移位运算:此处有两种移位运算逻辑移位运算和算术移位运算。

逻辑移位运算: 用来对二进制位模式进行向左或右的移位

算术移位运算: 被应用于整数,它们的主要用途是用2除或乘一个整数。

  • 3) 算数运算:例如,整数和实数上的加、减、乘、除运算,我们提到有些运算能被更高效率的硬件实现。
(2) 寄存器

CPU的第三个部分是寄存器,用来存放临时数据的高速独立的存储单元,CPU的运算离不开大量寄存器的使用。

常见的寄存器有数据寄存器、指令寄存器、程序计数器

  • 1) 数据寄存器: 主要用于存储输入数据和运算结果,例如,上图中数据寄存器被命名为R1到Rn。
  • 2) 指令寄存器: 主要用于存储程序指令,等待CPU逐条地取出指令,例如上图中寄存器IR。
  • 3) 程序计数器: 主要用于保存着当前正在执行的指令,当指令执行完后计数器将自动加1, 并指向下一条指令的内存地址,例如上图中寄存器PC。
(3) 控制单元

CPU的第三个部分是控制单元,用于各个子系统的操作,控制是通过从控制单元到其他子系统的信号来进行。


5.2 主存储器

它是存储单元的集合,每一个存储单元都有唯一的标识称为地址, 数据以称为字的位组的形式在内存中传入和传出。

字可以是8位、16位、32位,甚至有时是64位(还在增长),如果字是8位,一般称为1字节,字节在计算机科学中使用相当普遍,因此有时称16位为2字节,32位为4字节。

(1) 地址空间

存储器中存取每个字都需要有相应的标识符,每个字都是通过地址来标识的,所有在存储器中标识的独立的地址单元的总数称为地址空间。

例如,一个64 KB、字长为1字节的内存的地址空间的范围为0〜65 535。

下表给出了经常用来表示存储大小的单位名称,以及快速换算,釆用2的幂形式为单位使得寻址更为方便。

单位 字节数(准确值) 近似值
字节 Byte(B) 8 bit = 2^0 (1) 字节 10^0 字节
千字节 KiloByte(KB) 2^10 (1024)字节 10^3 字节
兆字节 MegaByte(MB) 2^20 (1 048 567) 字节 10^6 字节
千兆字节 GigaByte(GB) 2^30 (1 073 741 824) 字节 10^9 字节
兆兆字节 TeraByte(TB) 2^40 字节 10^12 字节

有几种情况可用于兆字节大小,为了了解一个或多个兆字节的大小,请看以下示例。

  • 1-megapixel bitmap image with 256 colors can be stored in 1 MB storage.

    256种颜色的1兆像素位图图像可以存储在1 MB存储空间中。

  • 10 million pixels of regular photos can be stored in 2-3 MB storage.

    1000万像素的常规照片可以存储在2-3 MB的存储空间中。

  • 4 megapixel JPEG image with normal compression can be stored in 1 MB storage.

    正常压缩后的4兆像素JPEG图像可以存储在1 MB存储空间中。

  • A book with 500 pages and 2000 characters per page can be stored in 1 MB storage.

    一本500页,每页2000个字符的书可以存储在1 MB的存储空间中。

作为位模式的地址

计算机都是以位模式存储数并进行运算,因此地址本身也是用位模式表示的。如果一个内存是 64k (2^10x2^6)字长为1字节,则需要16位模式来确定地址。

通常,如果一个计算机有N个字的存储空间,那就需要有log2N位的无符号整数来确定一个存储单元.

1
2
3
4
5
6
# 1.计算机有32MB,需要多少位来寻址内存中任意一个字节。
32 MB = 2^25 => 意味着需要 log2^(2^25) = 25 位

# 2.计算机有128M,字长为 8 字节,需要多少位来寻址内存中任意一个字节。
128 MB = 2^27 , 每个字是 2^3 字节, 则 2^27 / 2^3 = 2^24 个字
意味则需要 log2^(2^24) = 24 位

温馨提示:内存地址是使用无符号二进制整数定义。


(2) 存储器类型

主要有两种类型存储器,即 RAM 随机存储器 与 ROM 只读存储器。

RAM 随机存取存储器:在随机存取设备中,可以使用存储单元地址来随机存取一个数据项,而不需要存取位于它前面的所有数据项,其技术又可以分为两大类 SRAM (静态)和 DRAM (动态)。

  • 静态RAM (SRAM):使用传统的触发器门电路来保存数据,这些门保持状态(0/1), 所以通电的时候数据始终存在不需要刷新,其速度快,但是价格昂贵。例如,在CPU中的高速缓存。
  • 动态RAM (DRAM): 使用电容器充(1)放(0)电来表示数据,由于电容器会随时间而漏掉一部分电,所以内存单元需要周期性地刷新,其速度比较慢,但是比较便宜。例如,我们计算机中的内存条。

ROM 只读存储器:在只读设备中,其内容是由制造商写进去的,所以用户只能读但不能写,它的优点是非易失性,当切断电源后,数据也不会丢失, 通常用来存储那些关机后也不能丢失的程序或数据。例如,用ROM来存储那些在开机时运行的程序。

RAM和ROM的区别:

  • RAM:用户可读写,即方便地通过覆盖来擦除原有信息,但是在系统断电后信息(程序或数据)将丢失,即存储在RAM中的信息将被删除。
  • ROM:用户只能读,存储在其中的信息在系统断电后仍然会存在。

PROM 可编程只读存储器: 存储器在计算机发货时是空白的,计算机用户借助一些特殊的设备可以将程序存储在上面,当程序被存储后,它就会像ROM 一样不能够重写。

EPROM 可擦除可编程只读存储器: 用户可以对它进行编程,但是得用一种可以发出紫外光的特殊仪器对其擦写,此类型存储器需要拆下来擦除再重新安装。

EEPROM 电可擦除可编程只读存储器: 此类型存储器对它的编程和擦除用电子脉冲即可,无须从计算机上拆下来。


(3) 层次结构

计算机用户需要许多存储器,尤其是速度快且价格低廉的存储器,而存取速度快的存储器通常都不便宜,因此需要寻找一种折中的办法,解决的办法是采用存储器的层次结构。

  • 当对速度要求很苛刻时可以使用少量高速存储器。例如,CPU中的寄存器就是这种存储器。
  • 用适量的中速存储器来存储经常需要访问的数据。例如,下面将要讨论的高速缓冲存储器就属于这一类。
  • 用大量的低速存储器存储那些不经常访问的数据。例如,主存就属于这一类,常用的内存条就属于此类。
1
2
3
4

(最昂贵) (较便宜)
寄存器 <----> 高速缓冲存储器 <----> 主存
(速度最快) (速度最慢)

高速缓冲存储器 :其存取速度要比主存快,但是比CPU及其内部的寄存器要慢。高速缓冲存储器通常容量较小,且常被置于CPU和主存之间。

工作流程: 高速缓冲存储器在任何时间都含有主存中一部分内容的副本(提高运算的速度), CPU 要存储主存中一个字的时候,将按以下步骤进行:

1.CPU首先检査高速缓冲存储器。

2.如果存储字存在CPU将其复制,否则CPU将从主从中复制一份需要读取的字开始的数据块,并将其复制到高速缓冲存储器中。

3.CPU存取高速缓冲存储器并复制该字。

为什么高速缓冲存储器尽管存储容量小效率却很高?

这是由于80-20 规则,通常计算机花费80%的时间来读取20%的数据。

换句话说,相同的数据往往被存取多次。高速缓冲存储器,凭借其高速,可以存储这20%的数据而使存取至少快80% .

5.3 IO子系统

I/O 指的是输入/输出子系统,该子系统可以使计算机与外界通信,并在断电的情况下存储程序和数据,分为两大类非存储设备存储设备

(1) 非存储设备

使得CPU/内存可以与外界通信,但它们不能存储信息,两个最常见的非存储输入/输出设备是键盘和监视器以及打印机。

1.键盘和监视器
键盘:供输入功能。
监视器:示输岀并同时响应键盘的输入。
此类中其他的设备有鼠标、操纵杆等。

温馨提示: 程序、命令和数据的输入或输出都是通过字符串进行的, 字符则是通过字符集(如ASCII码)进行编码

2.打印机

打印机是一种用于产生永久性记录的输出设备, 根据计算机传入的数据文档进行一次打印。

(2) 存储设备

存储设备被分为输入/输出设备,但它可以存储大量的信息以备后用,其比主存便宜得多,而且存储的信息也不易丢失(即使断电信息也不会丢失)。有时称它们为辅助存储设备,通常分为磁介质光介质两种。

磁介质存储设备
使用磁性来存储位数据,如果一点有磁性则表示1, 如果没有磁性则表示0。

  • 磁盘:由一张一张的磁片叠加而成的,磁片由薄磁膜封装起来,信息是通过盘上每一个磁片的读/写磁头读写磁介质表面来进行读取和存储的。

    表面结构:为了将数据存储在磁盘的表面,每个盘面都被划分成磁道,每个磁道又分成若干个扇区,磁道间通过磁道内部间隔隔开,扇区之间通过扇区内部间隔隔开。

    数据存取:磁盘是随机存取设备,数据项可以被随机存取,而不需要存取放置在其前的所有其他数据,但是在某一时间可以读取的最小的存储区域只能是一个扇区。数据块可以存储在一个或多个扇区上,而且该信息的获取不需要通过读取磁盘上的其他信息。

    性能标志:磁盘的性能取决于角速度、寻道时间和传送时间。

    • 角速度:定义了磁盘的旋转速度。
    • 寻道时间:定义了读/写磁头寻找数据所在磁道的间。
    • 传送时间:定义了将数据从磁盘移到CPU/内存所需要的时间。
  • 磁带:最普通的一种是用厚磁膜封装的半英寸塑料磁带,其大小不一,磁带用两个滚轮承接起来,当转动的磁带通过读/写磁头的时候,就可以通过磁头来读写磁带上的数据。

    表面结构:磁带的宽度可以分为9个磁道,磁道上的每个点可以存储1位的信息,垂直切面的9个点可以存储8位(即1字节)的信息,还有1位用作错误检测。

    数据存取:磁带是顺序存取设备,尽管磁带的表面可能会分成若干块,但是却没有寻址装置来读取每个块,要想读取指定的块就需要按照顺序通过其前面所有的块。

    性能标志:尽管磁带的速度比磁盘慢但它非常便宜,并且持久保存性也好。

WeiyiGeek.磁盘与磁带存储结构


光存储设备
是一种新技术,使用光(激光)技术来存储和读取数据。在发明了CD (光盘)后人们利用光存储技术来保存音频信息,使用此项计算的设备有只读光盘(CD-ROM)、可刻录光盘(CD-R)、可重写光盘(CD-RW),数字多功能光盘(DVD).

  • CD-ROM:使用与CD (光盘)相同的技术(该技术最初是由飞利浦和索尼公司为录制音乐而研发的),其比CD更健壮,而且纠错能力较强,应用于CD唱片。

    CD-ROM 的格式是基于:
    a. 使用汉明码的纠错技术将8位的数据块转换成14位的符号。
    b. 一个帧由42个符号组成(14位/符号)。
    c. 一个扇区是由98个帧组成(2352个位)。

    CD-ROM驱动器速度:
    有不同的速度,单倍速称为1x (读取速度是153 600字节/秒), 2倍速称为2x, 以此类推

WeiyiGeek.CD-ROM

  • CD-R:可刻录光盘,可以让用户自己制作一张或更多的盘片,而不必考虑像制作CD-ROM时的一些开销,其应用非常适合做备份,用户只需要一次写入信息,就可以多次读取信息( “写一次,读多次” WORM),应用于制作档案文件和备份。

    CD-R的格式、容量和速度与CD-ROM的相同。

  • CD-RW:可重写光盘(CD-RW),也称为可擦写光盘,为了能重写以前的资料,应用在需要重复读写的场景。

    CD-RW的格式、容量和速度与CD-ROM的相同。
    CD-RW技术明显比CD-R技术更有吸引力,但是由于CD-R(价格、应用场景)等优点还是其更受欢迎一些。

  • DVD:数字多功能光盘(DVD)是当前最新的光存储设备,使用类似于CD-ROM的技术,但其容量较CD-ROM(650MB)更大,最小可达到4.7GB,最大双层读写情况下可达17GB(价格也贵),应用于许多需要存储大容量数据的应用程序中。

    与 CD-ROM的技术区别:
    a. 坑更小:直径只有0.4微米,而CD中直径为0.8微米。
    b. 磁道间更为紧密。
    c. 激光束用红激光代替了红外激光。
    d. DVD使用1〜2个存储层,并且可以是单面或者双面的。

    压缩:DVD技术用MPEG ,意味着一个单面、单层的DVD可以存储133分钟(2小时13 分钟)的高品质视频。其中还包括音频和字幕。

WeiyiGeek.CD-R/CD-RW/DVD

补充说明:

  • A single floppy disk can store 1.44 MB data.

    一张软盘可以存储1.44 MB数据。

  • A CD disk can store 700 MBs of information.

    CD磁盘可以存储700 MB的信息。

  • 6 seconds of uncompressed CD audio can be stored in 1 MB storage.

    6秒的未压缩CD音频可以存储在1 MB存储空间中。

5.4 子系统间互联

主要介绍单个计算机上的三个子系统(CPU、主存和输入/输出)三者之间在内部是如何连接的。

(1) CPU与存储器

他们之间由三条总线连接起来,即分别是数据总线、地址总线和控制总线。

  • 数据总线:由多根线组成,每一根线上每次传送1位的数据。线的数量取决于计算机的字的大小。

    例如,计算机的字是32位(4字节),那么需要有32根线的数据总线,以便同一时刻能够同时传送32位的字。

  • 地址总线:允许访问存储器中的某个字,地址总线的线数取决于存储空间的大小。

    例如,如果存储器容量为2^n个字,那么地址总线一次需要传送n位的地址数据。因此它需要n根线。

  • 控制总线:负责在中央处理器和内存之间传送信息,控制总线的线数取决于计算机所需要的控制命令的总数

    例如,必须有一个代码从CPU发往内存,用于指定进行的是读操作还是写操作。如果计算机有2^m条控制命令,那么控制总线就需要有m根,因为m位可以定义2^m个不同的操作。

WeiyiGeek.CPU与存储器间的三大总线

WeiyiGeek.CPU与存储器间的三大总线

(2) I/O 输入/输出设备

IO设备不能够直接与CPU和内存的总线相连,因IO设备都是些机电、磁性或光学设备,而CPU和内存是电子设备,与CPU和内存相比,输入/输出设备的操作速度要慢得多,因此必须要有中介来处理这种差异.

即IO设备是通过一种被称为输入/输出控制器或接口的器件连接到总线上的,每一个输入/输出设备都有一个特定的控制器。

什么是控制器?

答:控制器或者说接口,清除了输入/输出设备与CPU及内存在本质上的障碍,控制器可以是串行或并行的设备。串行控制器则只有一根数据线连接到设备上,而并行控制器则有数根数据线连接到设备上,使得一次能同时传送多个位。

Weiyigeek.IO设备通过控制器与总线连接

Weiyigeek.IO设备通过控制器与总线连接

有几种控制器至今还在使用,如今最常用的有SCSI、火线、USB和HDMI。

  • SCSI:小型计算机系统接口,最初是1984年为Macintosh计算机而设计的,它提供了菊花链连接,连接链的两端都必须有终结器,并且每个设备都必须要有唯一的地址(目标ID),它是一个8、16或32线的并行接口。

  • 火线: 由IEEE标准1394规定的串行接口,它是一种高速的串行接口,数据采用数据包的形式传送,数据的传输速度高达50 MB/s,然而对于版本最新的数据线,这个速度可以翻一倍。它可以在一条菊花链或树形连接(只用一根线)上连接多达63个设备,和SCSI相比,它不需要终结器。

  • USB: 通用串行总线(USB)控制器是一种可以和火线控制器相媲美的控制器,它是一种串行控制器,用以连接与计算机相连的一些低速和高速设备。

    1) 控制器也称为根集线器 :多个设备可以被连接到一个USB控制器上,控制器(根集线器)与其他集线器的不同之处在于控制器能感知到树中其他集线器的存在,而其他集线器是被动的设备,它们只是简单地传送数据。

    2) 热交换: 插拔USB设备可以不需要关闭计算机很容易地被移除或连接到树中,同时当集线器被从系统中移除时,与此集线器相连的所有设备和其他集线器也被移除。

    3) USB 结构:使用4根线的电缆,两根线(+5V和地)被用来为像键盘和鼠标这样的低压设备提供电压,其他两根线(缠绕在一起,以减小噪声)用来传送数据、地址和控制信号。USB又分为两种不同的连接头A和B,连接头A (下游连接器)是矩形的,用来连接到USB控制器或集线器。连接头B (上游连接器)是接近正方形的,用来连接到设备。

    4) USB 数据:数据是以包的形式传输的,每个包含有地址部分(设备标识)、控制部分、要被传送到其他设备的数据部分,所有设备将接收到相同的包,但只有具有数据包中所定义的地址的那些设备将接受它。

    5) USB 传输速率:

    • USB 2.0:提供 1.5 Mbps (每秒兆位)、12 Mbps 和 480 Mbps 三种传送速率

    • USB 3.0:对通用串行总线(USB)标准的再一次修订,新增加 “SuperSpeed”(超感)的传输模式,此模式将传输的速率提升至4.8 Gbit/s最高速率可达10 Gbit/s.

  • HDMI: 高清晰度多媒体接是现有视频模拟标准的数字化替代品,其主要应用于计算机显示器、视频投影仪、数字电视或数字音像设备传输视频数据和数字音像数据的传输。现有的多种HDMI标准电缆可用于传输包括标准、加强、高清晰以及3D 画质的视频数据,最多可达8频道的压缩或未压缩数字音频,消费性电子控制(CEC)连接,并且可用于以太网络数据连接。

WeiyiGeek.SCSI、火线、USB控制器

WeiyiGeek.SCSI、火线、USB控制器

(3) I/O 设备的寻址

通常CPU使用相同的总线在主存和输入/输出设备之间读写数据,在对IO设备进行读写数据,有两种方法用来对输入/输出设备进行寻址,即I/O独立寻址和I/O存储器映射寻址。

  • 如果指令涉及主存中的字,那么数据会在主存和CPU之间传送。
  • 如果指令涉及输入/输出 设备,那么数据会在输入/输出设备和CPU之间传送。

I/O独立寻址: 用来读/写内存的指令与用来读/写IO设备的指令是完全不同的,有专门的指令完成对输入/输出设备的测试、控制以及读写操作。并且每个输入/输出 设备有自己的地址,因为指令的不同,所以输入/输出地址可以和内存地址重叠而不会产 生混淆

例如,CPU可以使用读命令Read 101来从内存中读取字101。它也可以使用输入命令Input 101来从地址端口为101的输入/输出设备中读取数据。这里不会发生混淆,因 为Read指令是规定从内存中读取数据,而Input指令则是规定从输入/输出设备中读取数据

I/O存储器映射寻址: CPU将输入/输出控制器中的每一个寄存器都看作内存中的某个存储字,换言之,CPU没有不同的指令用来表示是从内存或是从输入/输出设备传送数据。

例如,在指令集中只有一条Read指令,如果地址指定的是内存中的某个单元,则从内存中读取数据。如果地址指定的是输入/输出设备中的某个寄存器,那么就从寄存器中 读取数据。存储器映射的输入/输出的配置优点在于有一个较小的指令集,所有对内存的操 作指令都同样适合于输入/输出设备,其缺点是输入/输出控制器占用了一部分内存地址。
例如,假使有5个输入/输出控制器,每个控制器有4个寄存器,则共占用20个地址, 相应的内存的大小就减小了20个字。

WeiyiGeek.I/O独立寻址与I/O存储器映射寻址

WeiyiGeek.I/O独立寻址与I/O存储器映射寻址

5.5 程序执行

计算机通过程序(包含一些列指令)来处理数据,即通过执行程序,将输入数据转换成输出数据,此阶段程序和数据都放在内存中。

(1) 机器周期

计算机中CPU利用重复的机器周期来执行程序中的指令,一个简化的周期包括3步:取指令、译码和执行,如下图所示

  • 取指令:控制单元命令系统将下一条将要执行的指令复制到CPU的指令寄存器中,并且复制的指令地址保存在程序计数器(PC)中,待复制完成后进行PC+1并指向内存中的下一条指令。
  • 译码:当指令置于指令寄存器后,该指令将由控制单元负责译码,指令译码的结果是产生一系列系统可以执行的二进制代码
  • 执行:指令译码完毕后,控制单元发送任务命令到CPU的某个部件,例如,控制单元告知系统,让它从内存中加载(读)数据项,或者是CPU让算术逻辑单元将两个输入寄存器中的内容相加并将结果保存在输出寄存器,这就是执行阶段。
WeiyiGeek.机器周期

WeiyiGeek.机器周期

(2) IO 设备操作

通过命令把数据从I/O设备传输到CPU和内存,但是由于IO设备运行速度比CPU慢很多,因此CPU的操作在某种程度上必须和输入/输出设备同步。大致有三种方法,分别是程序控制输入/输出、中断控制输入/输出、直接存储器存取 (DMA).

程序控制输入/输出: CPU 和I/O设备之间的数据传输是通过程序中的指令实现的,最简单的一种同步(CPU等待I/O设备)。

工作原理:当 CPU遇到一条I/O指令时,它就停止工作直到数据传输完毕。
CPU不时地查询I/O设备的状态,如果设备做好了传输准备,那么数据将被传送到CPU,如果设备没有做好传输准备,那么CPU将继续查询I/O设备的状态直到I/O设备准备好为止。

产生问题: 当每一个单元数据被传输时,CPU都要浪费时间去查询I/O的状态。

中断控制输入/输出:

工作原理:首先CPU告知I/O设备即将开始传输,但是CPU并不需要不停地査询I/O设备的状态,当I/O设备准备好时,它通知(中断)CPU,在此过程中CPU还可以做其他工作(运行其他程序,从其他的I/O设备读入或传出数据)

产生优点:CPU时间没有被浪费,并且当慢速的I/O设备正在完成一项任务时,CPU可以做其他工作。

WeiyiGeek.程序控制输入/输出与中断控制输入/输出UML图

温馨提示: 上述两种方式是在IO设备和CPU之间传输数据,数据在输入操作后被传送到内存,在输出操作前则是从内存中取出。

直接存储器存取(DMA): 此 方法用于在高速I/O设备间传输大量的数据块,例如磁盘、内存(不需要通过CPU的数据传输),但是此种方法需要一个DMA控制器(有寄存器)承担CPU的一些功能,即在内存传输前后保存数据块,例如,下图中给出了DMA与数据、地址和控制总线的连接情况。

工作原理:在进行I/O操作时,CPU发送信息给DMA,信息包括传输类型(输入或输出)、内存单元的起始地址以及传输的字节数,之后CPU就可做其他的工作。
当准备好传输数据时,则由DMA控制器通知CPU它需要获得总线的使用权,此时CPU 停止使用总线并转交给DMA控制器使用。
在内存和DMA间的数据传输完成后,CPU继续进行正常操作。

值得注意的是此在方式中CPU只是在一小段时间内是空闲的,CPU仅当在DMA和内存间传输数据时才空闲,而不是在设备为传输数据做准备时。

WeiyiGeek.DMA与总线连接以及IO输出同步

WeiyiGeek.DMA与总线连接以及IO输出同步

5.6 体系结构组成

随着计算机的发展,计算机的体系结构和组织经历了许多变化,本章介绍常见的体系结构和组织。

(1) 计算机指令集
  • CISC: CISC (读作[sisk])是复杂指令集计算机(complex instruction set computer)的缩写,其体系结构的设计策略是使用大量的指令,包括复杂指令。

    优点:程序在机器层上的程序更简洁,程序员不需要写一大堆指令去完成一项复杂的任务,因为每一项简单或复杂的任务都有一条对应的指令,所以在CISC 中进行程序设计要比在其他设计中容易得多。

    缺点:微程序设计和存取微内存所带来的开销,

    应用例子:Intel 开发的奔腾系列处理器。

  • RISC: RISC (读作[risk])是精简指令集计算机(reduce instruction set computer)的缩写,其体系结构的设计策略是使用少量的指令完成最少的简单操作。

    优点:由少量的指令完组合完成简单的操作。

    缺点:比在其他设计中更难、更费时,因为复杂指令都用简单指令来模拟。

(2) 流水线技术

在早期计算机中,每条指令的(使用取指令、译码和执行三个阶段)需要串行完成,换言之指令n需要在指令n+1开始它的阶段之前完成它的所有阶段。

现代计算机使用称为流水线的技术来改善吞吐量(在单位时间内完成的指令总数),如果控制单元能同时执行两个或三个阶段,那么下一条指令就可以在前一条指令完成前开始。

  • 无流水线:显示了三条连续的指令不使用流水线时是串行处理,指定时间内平均执行9个阶段,即相同阶段时间内可以完成9/3=3条指令.
  • 流水线:通过允许属于不同指令的不同阶段的同时执行从而提高吞吐量,在相同的时间内能执行24个阶段,即相同阶段时间内可以完成24/3=8`条指令.

WeiyiGeek.流水线

当然流水线并不像这样简单,当遇到转移指令时,就会出现一些问题。在这种情况下在管道中的指令应该被丢弃,但是新的CPU的设计已经克服了大部分缺点,有些新的CPU设计甚至能同时进行多个取指令周期

(3) 并行处理技术

计算机传统上有单个控制单元、单个算术逻辑单元、单个内存单元,随着技术的进步和计算机硬件成本下降,如今可以拥有具有多个控制单元、多个算术逻辑单元和多个内存单元的计算机进行并行处理数据,此技术也能改善吞吐量。

并行处理涉及多种不同的技术,并行处理可能发生在数据流、指令流或两者都有。

例如,由M.J.Flynn提出的并行处理的总体视图分类法,它把计算机的组织(从数据处理来看)分成4类。

  • SISD:单指令流,单数据流。
  • SIMD:单指令流,多数据流。
  • MISD:多指令流,单数据流。
  • MIMD:多指令流,多数据流。

SISD 组织:表示计算机有一个控制单元、一个算术逻辑单元和一个内存单元,指令被顺序执行,每条指令可以存取数据流中的一个或多个数据项。

SIMD 组织:表示计算机有一个控制单元、多个处理单元和一个内存单元,所有处理器单元从控制单元接收相同的指令,但在不同的数据项上进行算是逻辑运输操作,同时操作于一阵列数据的处理器阵列。

MISD 组织:属于多个指令流的多个指令作用于相同的数据项的体系结构,暂未实现。

MIMD 组织:是属于多个指令流的多个指令作用于多个数据流(每条指令作用于一个数据项)

WeiyiGeek.四种并行处理的总体视图

WeiyiGeek.四种并行处理的总体视图


5.7 简单计算机

为了解释计算机的体系结构,还有它们的指令处理,我们引入一台简单(非真实的)计算机进行重点演示讲解,同样简单计算机有三个组成部分:CPU、存储器和输入/输出子系统。

WeiyiGeek.简单计算机

WeiyiGeek.简单计算机

从上图中的组成部分由于前面已经提及,此处只是进行简单介绍。

CPU: 包含 算术逻辑单元(略过)、数据寄存器、控制单元。

数据寄存器:上述算机中有16个16位的数据寄存器(R0~R16),其十六进制地址为(0,1,2,…,F)16。

控制单元:具有电路,控制ALU的操作、对内存的存取和对I/O子系统的存取,有两个专用寄存器程序计数器指令寄存器.

  • 程序计数器(PC)(只含有8位)保存的是下一条将被执行的指令的踪迹,即指向含有下一条程序指令的主存的存储单元的地址。机器周期后程序计数器将(+1),同时指向下一条程序指令。
  • 指令寄存器(IR)含有16位值,它是当前周期译码的指令。

主存:包含 数据,又有程序指令 等,假设主存有256 个16位(子长为2)的存储单元,二进制的地址为(00000000到11111101)2,在十六进制的(00到FD)16

前64个存储单元(00到3F)16 被专用于程序指令,任何程序的程序指令存储在连续的内存单元中,

后189个存储单元(40到FD)16 内存单元被用来存储数据。

输入/输出子系统:图示中子系统由一个键盘和一台监视器组成,并且子系统是内存地址方式的一部分,假定键盘(作为输入设备)和监视器(只作为输出设备)像内存单元一样地址分别为(FE)16和(FF)16

换言之,假定它们就像16位的寄存器,作为内存单元与CPU进行交互。这两个设备把数据从外界传输到CPU,反之亦然。

指令集:假设简单计算机具有16条指令集合的能力,但我们只使用了14条,每条计算机指令由两部分构成:操作码(opcode)和操作数(operand)。

操作码:指明了在操作数上执行的操作的类型,4位表示

操作数:指明了需要操作数的地址,12位表示。

值得注意,并不是每条指令都需要3个操作数,任何不需要的操作数域被填以(0)16,

例如,停机指令的所有3个操作数域、传送指令和NOT指令的最后一个域都被填以(0)16

WeiyiGeek.指令集

WeiyiGeek.指令集

温馨提示:上述指令表中有一条用作整数的相加(ADDI), 一条用作浮点数的相加(ADDF)加法指令,此外还有加1 (INC)和减1 (DEC)指令。

如果使用地址(FE)16作为LOAD指令的第二个操作数,简单计算机就可以从键盘取得输入

如果使用地址(FF)16作为STORE指令的第二个操作数,计算机就可以发送输出到监视器。

如果ROTATE指令的第三个操作数是0,那么指令就把R中的二进制位模式向右循环移位n个位置

如果第三个操作数是1,则向左循环移位。

温馨提示:寄存器地址是用单个十六进制数来表示的,所以只用一个域,而内存单元是用两个十六进制数来表示,所以用两个域

指令处理:前面提到机器周期(取指令、译码和执行)三个阶段,其执行流程是一旦第三阶段结束,控制单元又开始新的周期,现在PC是指向下一条指令的,处理过程一直继续,直到CPU遇到HALT指令。

取指令阶段,其地址由PC决定的指令从内存中得到,被装入IR中。然后PC 加1,指向下一条指令。

译码阶段,IR中的指令被译码,所需的操作数从寄存器或内存中取到。

执行阶段,指令被执行,结果被放入合适的内存单元或寄存器中。

例如,在简单计算机如何进行整数A和B的相加的创建的结果为C即(C=A+B),此处假定整数是二进制补码格式。

WeiyiGeek.指令处理

WeiyiGeek.指令处理

存储程序和数据:遵循冯•诺依曼模型需要把程序和数据存储在内存中,例如,可以从内存单元 (00)16到(04)16存储5行程序,我们已经知道数据也需要被存储在内存单元(40)16,(41)16和(42)16

指令周期:计算机每条指令使用一个指令周期,如有五条指令程序则需要五个周期指令,每个周期需要(取指令、译码、执行)三个步骤组成。例如,如果我们需要进行 161 + 254 = 415 其在计算机中的指令过程,这些数据在内存中用十六进制表示为:(00A1)16,(00FE)16和(019F)16

  • 周期1:PC指向程序的第一条指令,它在内存单元(00)16中。

    1)控制单元取出存储在内存单元(00)16中的指令,放入IR中,PC的值加1;
    2)控制单元译码指令(1040)16为 R0 M40;
    3) 控制单元执行指令,这意味着存储在内存单元(40)16中的整数的副本被装入寄存器R0中。

  • 周期2:PC指向程序的第二条指令,它在内存单元(01)16中。

    1) 控制单元取出存储内存单元(01)16中的指令,放入IR中,PC的值加1;
    2) 控制单元译码指令 (1141)16 为 R1 <= M41;
    3) 控制单元执行指令,存储在内存单元(1141)16中的整数的副本被装入寄存器R1中;

  • 周期3:PC指向程序的第三条指令,它在内存单元(02)16中。

    1) 控制单元取出存储内存单元(02)16中的指令,放入IR中,PC的值加1;
    2) 控制单元译码指令 (3201) 16 为 R2 <= R0 + R1;
    3) 控制单元执行指令,寄存器R0的内容被加到寄存器R1的内容上(由ALU完成),结果放在R2中。

  • 周期4:PC指向程序的第四条指令,它在内存单元(03)16中。

    1) 控制单元取出存储内存单元(03)16中的指令,放入IR中,PC的值加1;
    2) 控制单元译码指令 (2422) 16 为 R42 <= R2;
    3) 控制单元执行指令,寄存器R2中整数的副本被存储到内存单元(42)16中。

  • 周期5:PC指向程序的第五条指令,它在内存单元(04)16中。

    1) 控制单元取出存储内存单元(04)16中的指令,放入IR中,PC的值加1;
    2) 控制单元译码指令 (0000) 16 为 Halt;
    3) 控制单元执行指令,无可执行指令,程序停止。

WeiyiGeek.示例指令的五个周期

可复用性:与不可编程的计算器相比,计算机的一个优点是我们能反复使用相同的程序,即运行程序多次,每次键入不同的输入,得到不同的输出。

问题:如何将两个相加的整数加载到内存中,或者如果使用存储在内存中的结果?

答:在实际情况中,我们使用键盘这样输入设备输入前两个整数到内存中(读操作),然后通过监视器输出设备显示第三个整数(写操作),而如今大多数计算机从输入设备到内存的直接数据传输和从内存到输出设备的数据传输。

在此简单计算机中我们可使用LOAD和STORE指令模拟读(读数据输入到CPU)和写操作(从CPU中写数据)。

  • 读操作:R <= MFE (假设盘内存单元地址为FE); M <= R
  • 写操作:R <= M; MFF <= R (假设监视器内存单元地址为FF)

总结:输入操作必须总是从输入设备读数据到内存,输出操作必须总是从内存写数据到输出设备。

所以为了使得前面的程序更加实用,我们需将其修改如下图所示流程以及程序编写示例表。

WeiyiGeek.指令周期另一个示例