一、计算机硬件和编程的关系
1、计算机硬件与编程语言
计算机由CPU、内存、显卡、硬盘等硬件组成,这些硬件用户无法直接利用,为避免重复编写代码和解决各应用程序之间不兼容的问题,人们编写了“操作系统”这一特殊的软件,用于控制计算机硬件,而在操作系统之上安装应用程序便可以利用计算机硬件来实现相应的功能。而在用户与计算机的“交流”中,编程语言起到了不可或缺的作用,就像与英国人交流要用英语,与日本人交流要与日语一样,编程语言就是用户与机器交流的语言。
2、计算机硬件与应用程序
上文中提到的操作系统和应用程序,均为计算机软件,用户需要通过它们来达到利用计算机硬件的目的,其中操作系统直接运行于计算机硬件之上,可以对计算机硬件进行控制和使用,应用程序运行于操作系统之上,通过操作系统来实现对计算机硬件的使用,例如视频播放软件通过系统利用显卡和CPU。
二、计算机硬件
1、CPU
计算机主要的硬件有CPU、内存、硬盘,三者的运行速度依次递减,而容量依次递增,硬盘在断电后数据不会消失,所以用于存储数据,由于硬盘的运行速度远远小于CPU,所以两者中间有内存作为缓冲,以提高计算机的运行效率。
CPU作为计算机中最重要的硬件,主要负责控制各个硬件及进行各种运算(包括数字运算以及逻辑运算),它主要从内存中调取指令然后执行。
因CPU运行速度远远大于内存,所以在CPU中都有一些用来保存关键变量及临时数据的寄存器,也称为一级缓存,其中一种比较特殊的寄存器叫做程序状态字寄存器(Program Status Word, PSW)。多数CPU都有两种运行模式:内核态和用户态,通常程序状态字寄存器中有一个二进制文件控制这两种模式。
内核态:运行的是操作系统的内核,可以操作硬件(可以获取CPU的所有指令集)
用户态:运行的是应用程序,不可以操作硬件(可以获取CPU指令集的一个子集,不包括控制硬件的指令集)
在内核态状态下,CPU可以执行指令集中的所有指令,对计算机硬件有极高的控制权,因为操作系统在内核态状态下可以使用所有计算机硬件;而在用户态状态下,应用程序不能控制硬件,但是视频播放软件等软件在使用过程中由于需要从硬盘读取数据,所以一定需要控制计算机硬件,这时候CPU就会有多次内核态和用户态之间的切换,以播放器为例,在打开一个视频时,播放器从硬盘读取视频文件,CPU由用户态切换到内核态,视频文件加载到播放器后,再由内核态切回用户态,进行播放。
2、主存储器RAM及几种常见的存储器
主要的存储器包括内存和硬盘,以及各种缓存,它们的作用是存放数据,内存和各级缓存等还起到缓解由CPU和硬盘速度严重不对等而导致的计算机效率低下问题的作用。
其中CPU中的寄存器称为L1缓存,有的CPU还有容量稍大的高速缓存,也称为L2缓存,连接CPU的存储器就是内存,也称为主存储器,以上的这几种存储器共同称为随机存取存储器(RAM),它们有一个共同的特性,即断电后其中的数据会消失,也称为易失性随机存储器。
有一种易失性随机存储器叫做CMOS,它由一小块主板电池来驱动,耗电量极低,许多计算机用它来控制计算机的时间和日期,除此之外,CMOS还可以用于一些存储配置的参数,在下文中会讲到。
除了RAM以外,计算机中还有一些非易失性随机存储器,也称为只读存储器(ROM),用于存放一些处理底层设备的控制程序。
除了普通的ROM以外,还有一些比较特殊的非易失性随机存储器,比如电可擦除可编程ROM(Electrically Erasable PROM,EEPROM)和闪存(Flash Memory),但与ROM不同的是,它们是可以擦除和重写的。
3、硬盘
3.1 硬盘结构
(图片来源见水印)
硬盘断电后数据不会消失,所以用于存储用户数据和文件。
硬盘最主要的组成部分为盘片和磁头,一般每块硬盘都包含多个盘片,而每个盘片上下各有一个磁头。
磁头在盘片上读取的相同半径的一圈,称为磁道,所有盘片相同半径的磁道称为一个柱面。每个磁道又可划分为多段圆弧,叫做扇区,扇区最典型的大小是512 Bytes(字节),数据就存放在一段段的扇区中。其中,第一个扇区中存放着主引导记录(MBR),前446Bytes为引导信息,64Bytes为分区信息,最后2Bytes为标志位。
从磁盘读取数据需要经历寻道时间和延迟时间。其中有两个概念叫做平均寻道时间和平均延迟时间。
平均寻道时间指的是硬盘在接收到系统指令后,磁头从开始移动到移动至数据所在的磁道所花费时间的平均值,它在一定程度上可以体现硬盘读取数据的能力。而在磁头移动到数据所在的磁道之后,并不一定就直接落在数据所在的扇区,磁头再移动到数据所在扇区所用的时间称为平均延迟时间。
3.2 虚拟内存
许多计算机支持虚拟内存机制,它可以使电脑运行大于自身内存的程序,虚拟内存其实是从硬盘中划分出的一块区域,其工作原理是将目前要使用的程序放入内存中执行,暂时用不到的部分程序放入虚拟内存。
4、磁带
磁带的读写速度很慢,但由于其成本低和容量大的特性,常用于作备份。
5、总线
(图片来源于博客园linhaifeng)
总线(Bus)是计算机各功能部件之间传送信息的公共通信干线。
北桥即图中的PCI桥,它连接的都是一些高速设备,南桥即图中的ISA桥,它连接的都是一些低速设备。
三、驱动程序
驱动程序是连接操作系统和硬件的重要部分,它通过操作系统来控制硬件。因为不同厂商的标准不同,如果系统单独为每一个硬件编写程序,工作量将无比庞大且兼容性很差,所以厂商一般为自家出厂的硬件编写驱动程序。
四、操作系统和应用程序的启动流程
1、操作系统的启动流程
开机后,计算机通电,BIOS(Basic Input Output System)开始运行,检测各硬件(CPU、内存、硬盘等),然后BIOS通过储存在CMOS中的配置文件在多个存储设备中识启动盘,然后读取启动盘中主引导扇区中的主引导记录(MBR),通过加载其中的bootloader装载模块(例如GRUB)启动系统。然后操作系统询问BIOS,获取所有硬件的配置信息,检测各硬件是否都有驱动程序,一旦所有驱动程序全部加载,操作系统会将其调入内核,然后将系统内核(kernel)加载至内存来启动系统,该部分存放操作系统的内存为受保护内存,其他程序不可使用。
2、应用程序的启动流程
前提:应用程序是运行于操作系统之上的
打开快捷方式后,操作系统通过路径找到源文件并执行,此时CPU由用户态切换到内核态,读取硬盘中应用程序的代码调入内存,CPU从内存中读取代码执行,执行后内核态切回用户态,将执行结果显示在操作系统中。