您的位置:首页 > 理论基础

第一章 计算机工作原理

2017-02-28 14:51 155 查看
1.1 现代计算机五大部件
运算器
控制器
存储器
输入设备
输出设备
1.1.1 计算机各部件的功用
运算器是用来做计算的,只能做二进制计算,做简单的算术运算和逻辑运算。如加、减、乘、除、取模等等。运算器的核心就是一个加法器。
控制器是用来控制计算机各部件之间的协调的。
比如运算器要想做运算,必须先把数据从存储器中取出来,交给运算器计算以后再在存储器中找一块空闲的存储单元把计算后的结果给存储起来。而这仅仅是控制器的工作之一。
现代计算机已经将运算器和控制器合二为一,就是我们所熟知的中央处理器(CPU)。
人的大脑有存储记忆的能力,但是计算机不行,计算机要想存储记忆则需要一个部件来实现。运算器是一个部件、控制器是一个部件、存储器也是一个部件,而部件与部件之间的数据交换则需要通过线路来实现,也就是接下来要说的总线(bus)。
现代计算器有三种总线,分别是控制总线、数据总线、地址总线。
地址总线的功能是实现寻址。那么什么是寻址呢?
数据是存储在存储器中的,而运算器要想运算则必须通过控制器将数据从存储器上调出来再进行运算,运算完以后还要把结果给存储到存储器中。那么控制器怎么知道要运算的数据是存储在存储器的哪个存储单元中呢?我们先来说说存储器。
存储器(Memory)是一种编址存储设备。



如图所示,存储器中每8位(8bit=1Byte)为一个存储单元,每个存储单元(8bit)可以存储8bit数据。存储器就是由众多的存储单元组成的一个整体的存储空间。
我们把数据存储在存储器中,我们需要的时候要在存储器中找到它,而这个找到存储器中数据的过程就是寻址。
存储器中的每一个存储单元都是有地址的,那么这个地址能有多少种变化形式呢?
计算机只能识别二进制,所以存储器是通过二进制进行编址的。如果我们要使用4G内存空间,那么就需要2的32次方bit来进行编址。
之所以32位操作系统只支持4G内存空间就是因为其只有32根地址总线,每根总线只能表示0和1两种数字。所以我们要表示4G种变化,就需要32个二进制数字排在一块,一直从00000000000000000000000000000000到11111111111111111111111111111111,这中间有4294967296种变化。假如你的计算机是64位的,那么就有2的64次方种变化。
1.1.2 I/O设备
I/O设备已经不算计算机的核心部件了,I/O存在的目的是为了与外部交互。
假如CPU和内存是一个自循环系统,不需要与外部交互,其所有的工作都能在其内部完成,那么就不需要I/O设备了。但这是不可能的。
由于内存是一种易失性存储器,断电后其所有内容会丢失。另外计算机还需要跟其他计算机进行交互,这些都需要用到I/O设备。
I/O设备说白了就是一个与外部部件(如磁盘、网卡、键盘、鼠标等)进行交互的组件。
I/O设备通常是最慢的设备。
1.1.3 主板
计算机内各部件需要通过线缆给连接起来,如果弄一大堆线缆就非常麻烦了,不好整理,于是就有了主板(motherboard)。主板就负责把计算机内各部件给连接起来。
1.1.4 传统硬盘
传统硬盘是一种固定角度的设备。硬盘是有盘片的,盘片上面有磁条,磁条悬浮在盘片上面,大约5微米的间隙。通过磁盘碰触盘片的方式读写数据。
硬盘从外向内分了很多磁道,一个盘片2面都能读写,不同盘面上面,相同磁道的编号我们称之为柱面。分区就是按柱面由内向外进行的。

1.2 缓存
如果存储器与运算器之间的操作一个快一个慢的话,最终速度取决于慢的操作。那么为什么会有快慢的概念呢?
很多人可能知道,CPU是有时钟频率的,时钟频率是指其在单位时间内电频可以变化的次数。4GHz指的是在1秒内能够变化40多亿次,这也就意味着1秒内可以完成40多亿bit数据的传输。
众所周知,现代的CPU工作速率很高,动辄3GHz是很常见的。但是内存通常是1500MHz、1866MHz。其速率比起CPU来说要慢很多。而数据处理的速度是以慢的为准,假如内存处理的速度过于缓慢的话就很影响计算机处理的效率,为了解决这个问题,缓存应运而生。
CPU有一级缓存、二级缓存、三级缓存等,这些缓存的工作方式很独特,其能以几乎接近CPU工作频率的速度来工作,但是其造价非常高,所以缓存空间一般都很小。
缓存能够极大的加速CPU与内存的交互,因为计算机程序的运行具有局部性的特性。通常数据有两种局部性,分别是空间局部性和时间局部性。
1.2.1 数据的局部性
如果你访问一个数据,离这个数据很近的其他数据也可能很快就会被访问到,所以加载数据的时候就把其后面的数据提前加载好,这就是预取(read ahead)。先把其加载到缓存中去,等用到的时候由CPU直接去缓存中取。如此就不必等CPU去内存中取,速度就加快了很多。此为数据的空间局部性。
刚刚访问过的数据,过一会可能还会被访问到,把多次需要用到的数据放到缓存中,等需要的时候就不必去内存中取。此为数据的时间局部性。

1.3 CPU工作原理
CPU被逻辑切割成N个时间片,让每个程序在CPU中执行一段时间,假定是5毫秒,不管程序是否执行完毕,均使其退出并记录执行状态。
假如有2个程序需要同时运行,第1个程序执行5毫秒以后,由CPU中止其运行,并记录其运行到哪里了,然后将第2个程序放到CPU中运行,运行5毫秒以后,由CPU中止其运行,并记录其运行到哪里了,然后将第1个程序调到CPU中,从上次运行结束的位置继续执行该程序,以此类推。通过这种分时机制实现多任务同时运行的目的。

前面已经说过了,CPU是由运算器和控制器组成的,且只能运行二进制指令。那么CPU能够进行什么运算取决于什么呢?CPU为什么能够执行运算?


如上图所示,CPU有很多针脚,每根针脚对应不同的功能。CPU的运算其实就是由控制器到存储器中取出数据和运算符,并在CPU中找到该运算符所对应的针脚,调用该针脚的功能的过程。
每个CPU的功能都通过CPU的指令来实现,多个CPU指令联合起来我们称之为CPU指令集。同一颗CPU当中,为了完成不同的运算功能,很多时候可能由多个不同的芯片组成。比如完成多媒体处理和完成整数运算那是两回事,完全是由2个不同的芯片完成的。同一个CPU内部,可能有多种功能上各自独立的芯片,而且每一组芯片提供的运算能力和指令都不一样。所以,同一个CPU内部所能够提供的指令集有很多。不同厂商的CPU指令集的功能可能各不相同。

cpu的指令集中的指令分为两种:
a) 特权指令(拥有管理功能,只能被操作系统调用)
b) 普通指令
一般来说,程序员写的程序只能调用普通指令,只有操作系统才能够调用特权指令。


如上图所示,CPU生产厂商把整个CPU所能够实现的指令集分成了4个环,环0所包含的指令都是特权指令,只有操作系统才有权限去运行。所有的普通指令都在环3上,出于历史原因,环1和环2没有使用。
操作系统运行时通常运行环0和环3中的指令,而应用程序只能运行环3上的指令。但是有些应用程序可能要做管理操作,比如要在系统中创建一个目录(mkdir命令),这个目录要存储在硬盘上,而操作硬盘写数据就属于特权指令,只有操作系统才有权限执行。
任何情况下,一个普通程序要想完成一个特权操作,是没办法直接进行的,它必须向内核申请。

1.4 内存工作原理
内存的存储空间是固定的。如果有10个程序需要运行,第一个程序占据了一部分内存,第二个程序有可能把第一个程序的内存给覆盖了,这就是内存溢出。内存溢出是不被允许的,所以我们必须把有限的内存给逻辑切割以后分配给多个程序使用。
现代计算机中的内存存储空间本来就是虚拟的,给每个程序分配的空间都是假的。在程序看来自己是唯一的,程序看不到其他的程序。假定其运行在一根512M的内存上,但程序却可以认为其有4G内存空间可用。但事实上其所能用的空间可能仅仅就是几M,多则几十M。这种就称之为线性地址空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息