随着工作年限的增加和工作内容的深入,不知不觉的发现想要成为一名优秀的IT工程师,对于一些底层原理的了解是必不可少的。遂希望能在文章中概括的记录一些比较重要的方面,来助力初学者以及希望有大致轮廓的同学一个比较系统的概念。由于我也是非科班出身(本科通信,研二重点才重点关注的计算机),对有些地方的理解可能也不是透彻,可以一起讨论。由于平时工作比较多,很难抽出时间,目前希望能够每一两周能够输出一篇文章,前期是一些基础理论方向的,后期可能会结合工作中的一些项目多聊聊一些技术解决方案的事情。
简介认识计算机,首先了解计算机到底是什么。我们以一种高视角看上去,它整体分为两部分,即硬件系统和软件系统。
那么,再分下去,硬件系统有哪些呢?无非是:
1.CPU(运算器、控制器、Cache)
2.存储系统(高速缓存、主存储器、外存设备)
3.输入/ 输出设备等主要组成部分
那么这些硬件系统之间靠什么联系的呢?
答曰:它们总是通过总线和接口连接在一起,就和社会学原理大致一样,人和关系构成整个社会体系。实体设备和线路网构成计算机硬件体系。
此处应有最经典冯诺伊曼体系配图:
简而言之就是,以存储为中心,总线为联系,分散控制。
以下是几个核心组成的定义和作用:控制器:按规定管理指挥,类似于人的大脑。处理指令的。
功能:
1.正确执行每条指令(单条指令),也就是 取-》分析-》执行
2.保证指令按规定序列自动连续执行。(多个指令)
3.对异常情况和请求及时响应和处理。
运算器: 数据加工
其主要功能包括:
1.算术运算,逻辑运算
所有的运算功能由一个被称为ALU(算术逻辑单元)的电路完成。
功能强的ALU还能执行:定点运算、浮点运算,向量运算。
2.暂放参加运算的数据和中间结果。(由多个通用寄存器来完成)
存储器:
其一般分为三级,分别是高速缓冲存储机器,主存储器,辅助存储器,这三级存储器的存储介质,工作原理,以及特性也各有差异。目前的计算机存储体系一般是缓存->主存->辅存这三级存储体系,如图
系统总线:
借助系统总线的连接,计算机在各系统部件之间实现地址信号,数据信号,控制信号的传送。
CPU:
CPU 相当于计算机的大脑,主要是和内存进行交互,从内存中读取指令和数据并且执行它们。
说到CPU,就得去提一提指令集,目前主流CPU都是基于X86 指令集,像ARM 有ARM指令集,还有我们的荣誉产品龙芯用的MIPS指令集,不同的指令集决定了可以执行程序的隔阂,即X86的程序在ARM上不能执行。
同时,为了实现CPU能处理数据更快,往往CPU中有自己的寄存器来存储一些关键变量和临时结果。一般而言,指令集中会有一些指令把一些关键字从内存中加载到寄存器中,反之也有。与此同时,cpu中还有一些跟程序执行的过程状态有关的寄存器。比如堆栈指针寄存器,程序状态字寄存器等等,这些寄存器在进程调度,函数调用等情况下起着至关重要的作用。
在我们买电脑的时候,经常会听到几核几线程,那个究竟是什么呢?多核指的是CPU 芯片上都具有多个的处理器或内核。多核芯片在其上有效地承载了多个个微型芯片,每个微型芯片都有自己的独立CPU。
存储设备
自顶向下,顶层的存储访问速率高,但是价格成本也贵。
1.寄存器
存储器的顶层是 CPU 中的寄存器,集成在cpu中,其材料和cpu相同,速度在所有存储介质中最快,但是价格昂贵。
2.高速缓存
其速度介于寄存器和内存之间,当应用程序需要从内存中读取去相关数据时,系统会先检查其所需但数据是否在高速缓存中,如果命中高速缓存,就从中获取,如果没有,则从内存中获取。它们存在但意义就是为了平衡CPU处理速度与内存读写但速度差异。为了更好的处理这种差异,往往在架构中存在着多级缓存的设计.
3.主存
也就是我们常说的内存,又叫RAM(Random Access Memory),它的特点就是易失性,也就是断电以后其数据内容会丢失。速度快于硬盘,但次于高速缓存。
4.硬盘
目前市场上比较常见但也是机械硬盘和固态硬盘。
机械硬盘主要由磁盘盘片、磁头、主轴与传动轴等组成,数据就存放在磁盘盘片中。大家见过老式 的留声机吗?留声机上使用的唱片和我们的磁盘盘片非常相似,只不过留声机只有一个磁头,而硬盘是上下双磁头,盘片在两个磁头中间高速旋转。
也就是说,机械硬盘是上下盘面同时进数据读取的。而且机械硬盘的旋转速度要远高于唱片(目前机械硬盘的常见转速是 7200 r/min),所以机械硬盘在读取或写入数据时,非常害怕晃动和磕碰。另外,因为机械硬盘的超高转速,如果内部有灰尘,则会造成磁头或盘片的损坏,所以机械硬盘内部是封闭的,如果不是在无尘环境下,则禁止拆开机械硬盘。
什么是磁道呢?每个盘片都在逻辑上有很多的同心圆,最外面的同心圆就是 0 磁道。我们将每个同心圆称作磁道(注意,磁道只是逻辑结构,在盘面上并没有真正的同心圆)。硬盘的磁道密度非常高,通常一面上就有上千个磁道。但是相邻的磁道之间并不是紧挨着的,这是因为磁化单元相隔太近会相互产生影响。
那扇区又是什么呢?扇区其实是很形象的,大家都见过折叠的纸扇吧,纸扇打开后是半圆形或扇形的,不过这个扇形是由每个扇骨组合形成的。在磁盘上每个同心圆是磁道,从圆心向外呈放射状地产生分割线(扇骨),将每个磁道等分为若干弧段,每个弧段就是一个扇区。每个扇区的大小是固定的,为 512Byte。扇区也是磁盘的最小存储单位。
柱面又是什么呢?如果硬盘是由多个盘片组成的,每个盘面都被划分为数目相等的磁道,那么所有盘片都会从外向内进行磁道编号,最外侧的就是 0 磁道。具有相同编号的磁道会形成一个圆柱,这个圆柱就被称作磁盘的柱面。
硬盘的大小是使用"磁头数 x 柱面数 x 扇区数 x 每个扇区的大小"这样的公式来计算的。其中,磁头数表示硬盘共有几个磁头,也可以理解为硬盘有几个盘面,然后乘以 2;柱面数表示硬盘每面盘片有几条磁道;扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般是 512Byte。
硬盘还有接口的概念。机械硬盘通过接口与计算机主板进行连接。硬盘的读取和写入速度与接口有很大关系。大家都见过大礼堂吧,大礼堂中可以容纳很多人,但是如果只有一扇很小的门,那么人是很难进入或出来的,这样会造成拥堵,甚至会出现事故。机械硬盘的读取和写入也是一样的,如果接口的性能很差,则同样会影响机械硬盘的性能。
目前,常见的机械硬盘接口有以下几种:
- IDE 硬盘接口(Integrated Drive Eectronics,并口,即电子集成驱动器)也称作 "ATA硬盘" 或 "PATA硬盘",是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s(此速度为理论平均值)。
- SATA 接口(Serial ATA,串口),是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是 SATA 三代,理论传输速度达到 600MB/s(此速度为理论平均值)。
- SCSI 接口(Small Computer System Interface,小型计算机系统接口),广泛应用在服务器上,具有应用范围广、多任务、带宽大、CPU 占用率低及热插拔等优点,理论传输速度达到 320MB/s。
固态硬盘和传统的机械硬盘最大的区别就是不再采用盘片进行数据存储,而采用存储芯片进行数据存储。固态硬盘的存储芯片主要分为两种:一种是采用闪存作为存储介质的;另一种是采用DRAM作为存储介质的。目前使用较多的主要是采用闪存作为存储介质的固态硬盘,如图所示:
输入输出系统
输入输出系统涉及的内容比较复杂,重点在于IO设备如何与主机交互信息数据的控制方式以及响应的接口功能和组成。
I/O设备于主机交换信息的有五种方式,程序查询,中断,DMA,I/O通道方式和I/O处理机方式,重点是前三种。
程序查询方式:其是cpu通过程序不断的轮询I/O设备是否已经做好准备,从而控制I/O设备与主机交换信息。其通过在IO设备内部接口设置一个用来标志是否准备就绪的状态标记,CPU通过轮询这种状态标记来实现相互之间的信息交换。过程如下图:
中断方式:中断方式是一种IO设备主动要求CPU的暂停目前的处理工作而去处理其任务的一种方式,其减少来cpu轮询所带来的开销,但是其硬件电路设计和软件中断程序上要相对复杂。流程图如下:
DMA(直接存储访问):中断方式虽然消除了程序查询方式中轮询带来的消耗,但是CPU在响应中断请求后必须中断当前的程序,并且为了完成IO设备与主机的信息交换,还不得不占用一些CPU的寄存器,同样是消耗的一种。在DMA方式中,主存与IO设备有一条数据通路,主机与IO设备做信息交换时候无需中断服务程序,即DMA 方式下,CPU依旧可以处理服务程序,进一步提高了CPU的使用效率。 其原理图如下:
总线设备
计算机各个部件之间的连接方式有两种,一种是分散连接,即各个部件通过单独的连接方式,另一种是总线连接,也就是各个部件连接到一个公共通信线路上去。随着计算机设备越来越多,总线连接方式在这个大背景下应运而生。
总线连接方式按照连接设备可以分为片内总线和系统总线,片内总线主要指cpu芯片内部,寄存器与寄存器,寄存器与逻辑运算单元(ALU)之间的连接。系统总线指cpu,存储设备,以及IO设备等各个大部件之间的信息传输线连接。
重点在于系统总线,其又细分为数据总线,地址总线和控制总线。
数据总线:顾名思义,数据总线是用来在各个设备之间传输数据信息的。其为双向传输总线,数据总线的条数称为数据总线的宽度,如果数字总线宽度为8位,指令字长16位,那么,cpu在取指令阶段,必须访问两层主存。
地址总线:地址总线主要用来传输数据总线上的源数据或者目的数据在主存单元的地址,比如,你需要从存储器读入一个数据,cpu需要将此数据所在的存储单元的地址发送到地址总线上去。同理,如果你想要输出一个数据到设备上去,这时候,你不仅需要把数据发送到数据总线,你同时也要把设备的地址送到地址总线上去。地址总线上的代码总是用来指明cpu将要访问的存储单元或者IO设备的地址。其为单向传输的。
控制总线:由于无论是地址总线还是数据总线,其被挂在其上的所有设备所共享,那么就需要控制总线来控制其上的各个设备部件的使用权,因此,控制总线是用来传输各种控制信息的传输线,同时,它还其着监视各个部件状态的作用。
,