对于现在人来说,说到计算机大家都不陌生。一般台式机,大家可以直观看见的有显示器、键盘、鼠标、主机等。下面就说说硬件都有哪些吧?
计算机硬件(Computer hardware)是指计算机系统中由电子,机械和光电元件等组成的各种物理装置的总称。这些物理装置按系统结构的要求构成一个有机整体为计算机软件运行提供物质基础。简言之,计算机硬件的功能是输入并存储程序和数据,以及执行程序把数据加工成可以利用的形式。从外观上来看,微机由主机箱和外部设备组成。主机箱内主要包括CPU、内存、硬盘、主板、各种扩展卡、电源等;外部设备包括鼠标、键盘等。
1、CPU
中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的大脑。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
2、内存条
内存条是CPU可通过总线寻址,并进行读写操作的电脑部件。内存条在个人电脑历史上曾经是主内存的扩展。随着电脑软、硬件技术不断更新的要求,存条已成为读写内存的整体。我们通常所说电脑内存(RAM)的大小,即是指内存条的总容量内。RAM属易失性存储。
3、硬盘
硬盘是电脑主要的存储媒介之一(ROM),硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。ROM属非易失性存储。
硬盘中数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间。平均寻道时间,即机械手臂从一个柱面随机移动到相邻的柱面的时间成为寻到时间,找到了磁道就以为着招到了数据所在的那个圈圈,但是还不知道数据具体这个圆圈的具体位置;机械臂到达正确的磁道之后还必须等待旋转到数据所在的扇区下,这段时间成为延迟时间。
4、主板
电脑机箱主板,又叫主机板(mainboard)、系统版(systemboard)或母板(motherboard);它分为商用主板和工业主板两种。它安装在机箱内,是微机最基本的也是最重要的部件之一。主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有BIOS芯片、I/O控制芯片、键和面板控制开关接口、指示灯插接件、扩充插槽、主板及插卡的直流电源供电接插件等元件。
以上介绍的就是计算机硬件的一些情况,当然还有各种扩展卡、电源等都属于计算机硬件,我们就不一一列举了。好了,以上我们走马观花的大致了解了一下计算机的硬件,下面我们具体讲一下:
寄存器
CPU(处理器)它从内存中去指令-->解码-->执行,然后再取指-->解码-->执行下一条指令,周而复始,直至整个程序被执行完成。为了提高处理器的运算效率,处理器中有一个组成部分叫寄存器。那么,寄存器呢,它是有限存贮容量的高速存贮部件,可用来暂存指令、数据和地址。
寄存器又分为:数据寄存器,用来储存整数数字(参考浮点寄存器),在某些简单/旧的CPU里,特别的数据寄存器是累加器,作为数学计算之用;
地址寄存器,持有存储器地址,以及用来访问存储器,在某些简单/旧的CPU里,特别的地址寄存器是索引寄存器;
通用目的寄存器,可以保存数据或地址两者,也就是说它们二者是结合数据/地址寄存器的功用;
浮点寄存器,用来储存浮点数字;
常数寄存器,用来持有只读的数值;
向量寄存器,用来储存由向量处理器运行SIMD(Single Instruction,Multiple Data)指令所得到的的数据;
特殊目的寄存器,储存CPU内部的数据,像是程序计数器(或称为指令指针),堆栈寄存器,以及状态寄存器(或称微处理器状态字组);
指令寄存器,储存现在正在被运行的指令;
索引寄存器,在程序运行实用来更改运算对象地址之用;
程序状态字寄存器,程序状态寄存器PSW是计算机系统的核心部件——运算器的一部分,PSW用来存放两类信息:一类是体现当前指令执行结果的各种状态信息,如有无进位(CY位),有无溢出(OV位),结果正负(SF位),结果是否为零(ZF位),奇偶标志位(P位)等;另一类是存放控制信息,如允许中断(IF位),跟踪标志(TF位)等。
寄存器的维护,操作系统必须知晓所有的寄存器。在时间多路复用的CPU中,操作系统会经常中止正在运行的某个程序并启动(或再次启动)另一个程序。每次停止一个运行着的程序时,操作系统必须保存所有的寄存器,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。
对于处理器设计的演变,下面我从两幅图片来展示下。
下图就是超变量cpu,比流水线更加先进,有多个执行单元,可以同时负责不同的事情,比如看片的同时,听歌,打游戏。
内核态与用户态
除了在嵌入式系统中的非常简答的CPU之外,多数CPU都有两种模式,即内核态与用户态。通常,PSW中有一个二进制位控制这两种模式。那么,什么是内核态呢?内核态就是拥有资源多的状态,或者说访问资源多的状态,我们也称之为特权态。
相对来说,用户态就是非特权态,在此种状态下访问的资源将受到限制。如果一个程序运行在特权态,则该程序就可以访问计算机的任何资源,即它的资源访问权限不受限制。如果一个程序运行在用户态,则其资源需求将受到各种限制。
用户态和内核态的转换
1)用户态切换到内核态的3种方式
a. 系统调用
这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作,比如前例中fork()实际上就是执行了一个创建新进程的系统调用。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。
b. 异常
当CPU在执行运行在用户态下的程序时,发生了某些事先不可知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关程序中,也就转到了内核态,比如缺页异常。
c. 外围设备的中断
当外围设备完成用户请求的操作后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,如果先前执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了由用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。
2)具体的切换操作
从触发方式上看,可以认为存在前述3种不同的类型,但是从最终实际完成由用户态到内核态的切换操作上来说,涉及的关键步骤是完全一致的,没有任何区别,都相当于执行了一个中断响应的过程,因为系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本上也是一致的,关于它们的具体区别这里不再赘述。关于中断处理机制的细节和步骤这里也不做过多分析,涉及到由用户态切换到内核态的步骤主要包括:
a. 从当前进程的描述符中提取其内核栈的ss0及esp0信息。
b. 使用ss0和esp0指向的内核栈将当前进程的cs,eip,eflags,ss,esp信息保存起来,这个过程也完成了由用户栈到内核栈的切换过程,同时保存了被暂停执行的程序的下一条指令。
c. 将先前由中断向量检索得到的中断处理程序的cs,eip信息装入相应的寄存器,开始执行中断处理程序,这时就转到了内核态的程序执行了。
多线程与多核芯片
多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。
多核芯片(multicore chips)是指在一枚处理器(chip)中集成两个或多个完整的计算引擎(内核)。
以下就是两种处理器对比图
存储器
存储器工作速度由快到慢排列为:寄存器即L1缓存 > 高速缓存即L2缓存 > 内存(RAM) > 磁盘(ROM)> 磁带。
还有一类存储器就是CMOS,它是易失性的,许多计算机利用CMOS存储器来保持当前时间和日期。CMOS存储器和递增时间的电路由一小块电池驱动,所以,即使计算机没有加电,时间也仍然可以正确地更新,除此之外CMOS还可以保存配置的参数,但是当电池失效时,相关的配置和时间等都将丢失。
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换空间”等。
磁带,在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份(常见于大型数据库系统中)。
I/O设备一般包括两个部分:设备控制器和设备本身。
控制器:是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容。
控制器的功能:通常情况下对设备的控制是非常复杂和具体的,控制器的任务就是为操作系统屏蔽这些复杂而具体的工作,提供给操作系统一个简单而清晰的接口
设备本身:有相对简单的接口且标准的,这样大家都可以为其编写驱动程序了。要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中。
总线
总线(Bus),是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。
北桥即PCI桥:连接高速设备
南桥即ISA桥:连接慢速设备
启动计算机
计算机按下开机键后,首先响应的就是BIOS(BIOS就相当于一个小的操作系统,它有底层的I/O软件,包括读键盘,写屏幕,进行磁盘I/O,该程序存放于一非易失性闪存RAM中)。BIOS开始运行,检测硬件:cpu、内存、硬盘等,并读取CMOS存储器中的参数,选择启动设备,读取系统所属扇区的内容。根据分区信息读入bootloader启动装载模块,启动操作系统。然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI。最后,恭喜你,计算机启动成功。