最近在读《鸟哥的Linux私房菜》,里面第一张简介讲述了一下计算机概论。读了一遍感觉醍醐灌顶,因为对于这部分知识已经忘记了大部分,所以今天简单根据看到的总结一下。
计算机组成
计算机其实就是:接受用户输入的命令和数据,经由中央处理器的运算与逻辑单元运算后,产生或存储有用的信息。
计算机主要由:输入单元、输出单元、算术逻辑单元、控制单元和内存五大基础单元组成的。
计算机中最重要的就是中央处理器(Central Processing Unit,CPU),CPU是一个具有特定功能的芯片,里面含有指令集。CPU的主要工作就是管理和运算,所以CPU内部有两个重要的单元:控制单元和算术逻辑单元。CPU计算的数据都是从内存中获取的,计算完成后也会写回到内存中,所以当系统内存太小,读写能力不足时,会对系统性能影响很大。
CPU
CPU所能做的事情是通过指令来完成的,所以CPU内部是含有一些微指令的。目前最常见的两种CPU架构,分别是:精简指令集(RISC)和复杂指令集(CISC)。
精简指令集中指令运行时间很短,完成操作简单,指令执行性能较佳。但是复杂事情,需要多组指令来完成。常见的精简指令集CPU主要有ARM公司的ARM CPU系列、IBM的PowerPC系列和Orical公司的SPARC系列。我们常用的手机、PDA、导航、网络设备等都是采用ARM架构的CPU。目前使用最广泛的CPU就是ARM的这种架构。
复杂指令集中指令多而复杂,虽然每个指令执行时间较长,但是单条指令能够处理复杂的工作。常见的复杂指令集CPU主要是AMD、Intel、VIA等X86架构的CPU。由AMD、Intel、VIA所研发的X86架构CPU被大量应用于个人电脑。X86架构最早是由Intel研发出来的,它研发除了一系列80286、80386等,后来此架构就成为X86架构。
CPU一次读取的数据量是按位(bit)来计算的,64位是指CPU一次可以读取64位数据,目前我们使用的大部分都是64位。因为读取量的限制,所以能够从内存中读取数据也有所限制,比如32位的CPU所能读取最大数据量大概就是4GB。
主板上分为南北桥,这个南北桥就是连接CPU与各个组件的东西。北桥负责连接速度较快的组件,比如内存、显卡等。而南桥负责连接较慢的设备,比如磁盘、网卡等。计算机的性能瓶颈取决于北桥的带宽,所以目前直接将内存控制器整合到CPU了,CPU与内存、显卡之间直接通信交流,提升了计算机处理速度(这就是为什么现在看不到北桥了)。还有一个需要注意的就是不是所有主板都支持各类CPU,因为CPU针脚的不同和所支持芯片组也不同,所以主板所能支持的CPU是有限制的。
我们总说多核,多核其实不是指有多个CPU,而是CPU内部封装了多个运算内核。也就是一个CPU外壳里面有多个CPU单元。
衡量CPU性能除了指令集,还有就是频率,也就是CPU每秒能够运行的次数。比如频率为3.6GHz,表示每秒能够运行3.6 * 1000 * 1000 * 1000=3.6 * 10^9次。但是频率一般只能在同款CPU中比较,因为每款不同指令集执行指令长短不一。频率由外频和倍频组成,外频指的是与外部组件进行数据传输的速度,倍频指的是CPU用来加速功能性能的一个倍数,二者的乘机就是计算机的频率。
内存
CPU数据来自于内存,所以内存也是电脑一个关键组件。个人电脑的内存主要组件为动态随机读取内存(Dynamic Random Access Memory,DRAM),DRAM只有通电时才能使用,所以当断电后内存中的数据就丢失了。
由于数据需要存储在内存,所以内存的带宽越大越好。传统的带宽一般为64位,为了加大这个内存,芯片组厂商将两个内存集合在一起,这样两根内存的带宽就达到了128位,这就是双通道的概念。使用中,如果想要使用双通道,需要将两个容量相等内存条查到颜色相同的插槽中。
除了内存外,计算机中还有许多类似内存的存储结构。比如二级缓存,二级缓存是指在CPU内部将一些常用的数据进行存储,这样每次使用这些数据就不需要在取内存中去取,而是直接读取CPU内部数据。L2内存速度必须与CPU频率相同,但是DRAM是达不到这个速度的,所以就需要的静态随机读取内存(Static Random Access Memory,SRAM)。
主板上还有一部分只读存储器(Read Only Memory,ROM),比如CMOS。CMOS是主板上的一个芯片,这个芯片记录主板上面的重要参与,比如系统事件、CPU电压与频率、各设备I/O地址等。这些数据一会被BIOS(Basic Input Ouput System)在开机时读取。BIOS是一个程序,它是直接写死到主板上的,计算机在启动时都会先读取这个小程序。CMOS芯片需要额外电源来记录,这就是为什么我们主板上会有一个纽扣电视的缘故。
我们一般所说的固件,就是固定在硬件上的软件。
显卡
图形图像的显示重点在于分辨率和颜色深度,因为每个图像显示都会占用内存,所以显卡上面会集成一个内存称为显存,这个显存会影响到你屏幕的分辨率和颜色深度。
除了显存外,当我们玩一些3D游戏或3D动画时,这个显卡的运算能力也至关重要。一些3D任务早期是在CPU上完成的,因为CPU不是针对3D运算而设计的。所以后来很多厂商就在显卡上嵌入一个3D加速芯片,这就是GPU(Grphics Processing Unit)的由来。
硬盘与存储设备
存储设备是用来进行持久化存储的,常用的存储设备有磁盘、U盘、DVD等。其中最常用的就是磁盘,磁盘是由许许多多的碟片、机械手臂、磁头和主轴马达组成的。实际的数据是写在到碟片上面的,而读写主要依赖于机械手臂上的磁头来完成,主轴马达转动,然后机械手臂可伸展让磁头在碟片上面进行读写操作。因为单一碟片容量时有限的,所以一般硬盘会有许多碟片。
碟片会划分成一个个小区块,这些小区快是磁盘的最小物理存储单位,称为扇区(sector),同一个同心圆的扇区组合成了所谓的磁道(track)。所有碟片上面,同一个磁道组成了柱面。最早磁盘扇区大小是512B,但是随着磁盘容量越来越大,现在绝大部门磁盘已经使用4KB大小的扇区了。
我们知道同心圆外圈的面积比较大,转一圈能够读取的数据量外圈要比内圈多。所以数据通常是从外圈开始往内写。我们通常都是读写一些小文件,通常读写小文件非常消耗磁盘,因为磁片需要转好几圈。
为了提升磁盘的读取速度,主板与磁盘的连接口也经过多次改良。目前通用的接口是SATA、SAS和USB接口。目前主流SATA3.0速度可达600MB/s。SAS一般用在工作站上面,SAS3目前速度可达1200MB/s。USB接口相对就慢很多了,USB2.0大约只有60M/s,但是USB3.0速度就快多了能够达到500M/s,而USB3.1能够达到1000M/s。但是这些都是理论值,一般都会小于这些值。
由于机械磁盘(Hard Disk Drive,HDD)需要转动马达转动碟片读取数据,这样是非常耗时,需要先找到扇区,然后在命令马达到达开始转动,找到对应的数据。后来厂商就拿闪存去制作高容量设备,这些设备也能接入SATA,而且外形和机械磁盘差不多,所以就被用作磁盘使用,这种被称为固态磁盘(Solid State Disk,SDD)。但实际上SDD已经算不上磁盘了,因为都没有磁片了,都是闪存。
磁盘上面含有一个缓冲存储器,这个内存主要将磁盘常用数据缓存起来的,以加速系统读写性能。一般可达64MB左右。
磁盘上的机械手臂和跌面是很细微的空间,如果抖动或沾染杂物会损坏真个磁盘。所以一般电脑通电后,就不要移动主机了,避免震动,导致硬盘数据发生问题。也不要直接拔电源关机,因为机械手臂必须要回归原位。
计算机中的计算单位
由于计算即只能识别0和1,所以存储最小的单位就是用于存储一个0或1的空间,称为位(bit)。但使用中这个单位太小了,所以使用中常用8个bit作为一个单位,这就是字节(Byte)。即:
8bit = 1Byte
后来随着计算即容量的增长字节也太小了,就出现了M、G、T、P、E、Z这些单位。
一般来说数据容量使用二进制的方式表示,所以1GB=1024 * 1024 * 1024B。而速度一般使用十进制,比如1GHz就是1000 * 1000 * 1000 Hz。
网络传输中经常使用的是位(bit),所以网络中经常使用的单位是Mbit/s就是Mbit per second,也就是每秒多少Mbit。比如我们所说的20M光纤速度,转换成入局容量的话就是(20/8) = 2.5 MB,也就是每秒上传、下载的大小时2.5MB字节。
软件程序运行
计算机没有软件运行,就无法发挥计算机的功能,就相当于一对烂铁。计算机系统将软件分为两类:系统软件和应用软件。
我们知道CPU只能识别0 /1(因为硬件是使用电子管组成,通电为1,没有通电为0),因此如果我们想要CPU工作,就需要参考CPU指令集,然后让CPU读得懂的脚本脚本给CPU执行。这个过程就比较麻烦了,不仅要了解机器语言,还需要了解硬件相关参数,而且程序不具有可移植性。这时候就需要设计一类能够让人类看的懂的程序语言,然后通过编译器将其转换成机器码。
但是这个过程还有很多问题,比如将数据写入内存,自行分配一个内存块,然后还需要了解内存地址如何定位等。针对这些问题,就有了操作系统。
操作系统对内来操作硬件,对外提供一组接口供软件编程工程师使用。这样我们就可以直接使用操作系统提供的API来让计算机工作了。
操作系统可以分为:内核(Kernel)和系统应用程序接口(API)。内核用来操作硬件,API为上层应用程序提供操作接口。
需要知道,只要硬件不同,操作系统的内核就需要修改,因为操作系统是直接操作硬件的,比如X86架构的指令集合RISC架构指令集是不同的。我们也能理解我们编写的应用程序也只能服务于特定的操作系统,因为不同的操作系统所提供的API也是不同的。
内核主要负责整个电脑系统相关的资源分配与管理。比如系统调用接口、进程管理、内存管理、文件系统管理、设备驱动等。所以我们编写程序就不需要直接操作内存,进行内存寻址了,以为操作系统为我们做了这些事情。
硬件是在持续发展的,比如一款新的显卡出来,我们的操作系统是不支持的。那么我们如何让操作系统能够识别这个新的显卡呢? 答案就是驱动,操作系统会为硬件开发商提供一个API,硬件开发商根据这个接口,设计可以驱动硬件的驱动程序,这样用户安装了驱动程序后,操作系统就可以操作这块新显卡了。
关注我
欢迎关注我的公众号,会定期推送优质技术文章,让我们一起进步、一起成长!
公众号搜索:data_tc
或直接扫码: