计算机硬件基础

之前一直都是在和操作系统打交到,对计算机硬件的了解也只限于本科时老师课堂上讲内容。今天看到了一篇博客讲的不错,自己也总结下,方便以后查看,立个flag。参照的博客网址如下计算机基础系列一:计算机硬件 - linhaifeng - 博客园

从一个应用软件启动来讲,包括以下几个部分,如下图所示:

当我双击某个软件,比如QQ,的快捷键后,操作系统会检测到我打开QQ,此时内存中存有QQ运行数据,CPU通过向内存拿数据,执行操作,之后QQ便启动了。对于编程也是一样需要经过上面三个过程。所以为了理解程序(软件)生命周期,需要从下面三个方向来分析:1.计算机硬件;2.操作系统linux;3.软件(编程)。本文就操作系统做一个初步的探讨。

一台计算机由下列五部分组成:运算器、控制器、存储器、输入设备和输出设备。其中运算器和控制器组成了CPU;存储器包括内存、硬盘等等。而输入设备是人向计算机输送命令的设备,主要有鼠标和键盘。输出设备主要有显示屏。而通常我们的软件是放在硬盘里的,因为断电后不会丢失,当点击某个软件后,此时系统将软件运行数据放入内存中,而CPU会从内存中取得数据,之后软件启动。如下列流程所示:CPU的内存硬盘 CPU----->内存----->硬盘。本文将重点分析CPU、内存和硬盘。

  1. CPU

CPU 是电脑的大脑,任何命令的执行都需要经过CPU。由于CPU访问内存的时间比CPU执行指令的时间慢的多,所以CPU内部有寄存器来保存一些常用到的数据,如变量和临时数据等。

寄存器的分类:

a. 通用寄存器:用来用来保存变量和临时结果。

b. 程序计数器:由于CPU在一个时刻只能执行一个命令。且CPU是分时去执行任务的,在用户看来,CPU可以在同一个时间并行处理多个任务。当CPU处理完一个任务时,需要在切换到下一个任务,程序计数器就记录着下一个任务的内存地址。

c. 堆栈指针:堆栈(先进后出),队列(先进先出),由于CPU在同一时间只能处理一个任务,所以当多个任务到来时,将这些任务放在堆栈中,CPU每次运行完任务时,都会从堆栈中取出下一个任务继续运行。

d. 程序状态寄存器PSW:这个寄存器包含了条码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户通常读入整个PSW,但是只对其中少量的字段写入。用户在运行程序时只能调用系统层面的接口,应用程序不会操作硬件,这个模式为用户态,操作系统操作硬件为内核态。所以软件在运行时要在用户态和内核态之间切换。用户程序必须使用系统调用(system call),系统调用陷入内核并调用操作系统,TRAP指令把用户态切换成内核态,并启用操作系统从而获得服务。

2. 存储器

存储器包括:寄存器 缓存 内存 闪存(固态硬盘) 磁盘(机械硬盘) CMOS 磁带 虚拟内存。从左到又,速度变慢,容量变大。其中寄存器直接和CPU打交道,存储着一些CPU需要用到的数据,速度最快。当一台机器有多个CPU时,每个CPU都需要知道对方的运行状态。此时缓存用来传输状态信息。内存通常称为随机访问存储RAM,就是我们通常所说的内存,容量一直在不断攀升,所有不能再高速缓存中找到的,都会到主存中找,主存是易失性存储,断电后数据全部消失。闪存的存储的速度比机械硬盘要快,且断电后数据不会消失,常常用在固态硬盘和数码相机的胶卷中。还有一类存储器就是CMOS,它是易失性的,许多计算机利用CMOS存储器来保持当前时间和日期。CMOS存储器和递增时间的电路由一小块电池驱动,所以,即使计算机没有加电,时间也仍然可以正确地更新,除此之外CMOS还可以保存配置的参数,比如,哪一个是启动磁盘等,之所以采用CMOS是因为它耗电非常少,一块工厂原装电池往往能使用若干年,但是当电池失效时,相关的配置和时间等都将丢失。


3. 计算机的启动过程

操作系统的启动流程

当电脑上电后,计算机会读主板上的BIOS(BIOS可以理解为简单的操作系统),BIOS会去读CMOS(CMOS相当于BOIS的硬盘)中的数据,BIOS从CMOS选择启动设备,找到启动盘之后会从第一个扇区的内容,MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位,根据分区信息读入bootloader启动装载模块,启动操作系统,然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表,并在每个终端上启动登录程序或GUI。启动顺序如下:

上电---------进入BIOS系统------->读取CMOS数据,选择启动设备-------->找到启动盘,且从第一个扇区中获得引导信息和分区信息---------->从分析信息中读取bootloader,启动操作系统---------->操作系统询问BIOS是否所有的设备均有驱动,有则将驱动加载到内核,没有就进行提示

编辑于 2017-11-29