存储器
存储器是计算机的记忆单元,其核心功能就是存取数据
人们对存储器的希望总是容量大的、快速的、便宜的,但这三点是冲突的,不可能同时满足
所以基于目前的工艺水平,存储器就被分层了
存储器系统采用如上图的分层结构,顶层的存储器速度较高,容量较小,与底层的存储器相比每位的成本较高,其差别往往是十亿数量级的
之前已经提到过,由于存储器与存储器、存储器与CPU之间有着比较大的速度差,会导致运行效率的降低,所以通常的解决办法就是在存储器与内存之间逐级添加高速缓存和寄存器,来解决这个问题
寄存器即L1缓存
用与cpu相同材质制造,与cpu一样快,因而cpu访问它无时延,典型容量是:在32位cpu中为3232,在64位cpu中为6464,在两种情况下容量均<1KB
寄存器通常放下一秒就会使用到的指令
高速缓存即L2缓存
高速缓存则是放需要经常使用到的指令
主要由硬件控制高速缓存的存取,内存中有高速缓存行按照064字节为行0,64127为行1。最常用的高速缓存行放置在cpu内部或者非常接近cpu的高速缓存中。当某个程序需要读一个存储字时,高速缓存硬件检查所需要的高速缓存行是否在高速缓存中。如果是,则称为高速缓存命中,缓存满足了请求,就不需要通过总线把访问请求送往主存(内存),这毕竟是慢的。高速缓存的命中通常需要两个时钟周期。高速缓存为命中,就必须访问内存,这需要付出大量的时间代价。由于高速缓存价格昂贵,所以其大小有限,有些机器具有两级甚至三级高速缓存,每一级高速缓存比前一级慢但是容易大。
内存RAM
RAM(随机存取存储器),就是我们通常所说的内存,容量一直在不断攀升,所有不能再高速缓存中找到的,都会到主存中找,主存是易失性存储,断电后数据全部消失
只读内存ROM
ROM(只读内存,非易失性随机访问存储),速度和内存相同,但是它只能读,计算机出场时,计算机厂商会在ROM提前写入的一段程序,通常这段程序常常关系到整个计算机系统核心底层的运行,关系到计算机的安全性,所以不允许修改
这段程序叫做BIOS(基本输入输出操作系统)
CMOS
CMOS,存取速度慢,断电数据丢失,但是基于电工做的它,耗电量极低。
计算机断电后,不联网同步时间的情况下,计算机内部的时间其实还是在工作,是因为主板上面有一个电池,一个时钟芯片,一个CMOS,电池为时钟芯片和CMOS供电,时钟芯片计算时间,然后存储到CMOS中,当然CMOS不止是存时间
硬盘
硬盘的典型代表有两种:机械硬盘和固态硬盘
机械硬盘
硬盘的存取原理依赖硬盘的转动,机械硬盘的存取数据都是放在盘片上面的,盘片是因为磁来存放数据的,所以也被称为磁盘,数据在磁盘上面其实本质上就是与由高低电频类似的磁信号,对应的二进制信号
所有的盘片被固定在一个轴上,盘片的转动,每转一圈磁头读取,被称为磁道,每个磁道划成若干扇区,扇区典型的值是通常为512字节一扇区
由于硬盘通常是多个盘片组成,所以把同一个戈丁手臂位置上所以的磁道合起来,组成一个柱面,磁盘的分区是从同属一个柱面到另外一个柱面的进行划分
操作系统一次性读写的单位是一个block块
一个block块=》8扇区大小=4096bytes
block块可以人为定制大小
数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间
计算机厂商,容量进制是1024
存储设备厂商,为了符合自己的利益,则规定容量进制不是1024而是1000
IO延迟
数据都存放于一段一段的扇区,即磁道这个圆圈的一小段圆圈,从磁盘读取一段数据需要经历寻道时间和延迟时间
平均寻道时间:机械手臂转到数据所在磁道需要花费的时间(受限于物理工艺水平,厂商通常无法决定)
平均延迟时间:转半圈需要花费的时间
IO延迟=平均寻道时间+平均延迟时间
优化程序运行效率的核心法则:能从内存取数据,就不要从硬盘取
虚拟内存
许多计算机支持虚拟内存机制,该机制使计算机可以运行大于物理内存的程序,方法是将正在使用的程序放入内存取执行,而暂时不需要执行的程序放到磁盘的某块地方,这块地方成为虚拟内存
在linux中成为swap,这种机制的核心在于快速地映射内存地址,由cpu中的一个部件负责,成为存储器管理单元(Memory Management Unit MMU)
磁带
在价钱相同的情况下比硬盘拥有更高的存储容量,虽然速度低于磁盘,但是因其大容量,在地震水灾火灾时可移动性强等特性,常被用来做备份。(常见于大型数据库系统中)
I/O设备
I/O设备一般包括两个部分:设备控制器和设备本身
控制器
是查找主板上的一块芯片或一组芯片(硬盘,网卡,声卡等都需要插到一个口上,这个口连的便是控制器),控制器负责控制连接的设备,它从操作系统接收命令,比如读硬盘数据,然后就对硬盘设备发起读请求来读出内容
控制器的功能:通常情况下对设备的控制是非常复杂和具体的,控制器的任务就是为操作系统屏蔽这些复杂而具体的工作,提供给操作系统一个简单而清晰的接口
设备本身
有相对简单的接口且标准的,这样大家都可以为其编写驱动程序了。要想调用设备,必须根据该接口编写复杂而具体的程序,于是有了控制器提供设备驱动接口给操作系统。必须把设备驱动程序安装到操作系统中
总线
把计算机拆开大概是这个样子的,有很多的零部件,总线可以简单理解为是这些部件来回传输的线,我们把它归纳为下面这张图
上北下南,PCI桥被称为北桥,ISA桥被称为南桥
PCI桥负责把CPU和内存连接到一起,连接的都是高速设备
ISA桥负责其他的一些设备,都是一些比较慢速的设备
启动流程
计算机刚刚买回来的时候,如果是裸机,是没有安装系统的,但它却可以直接运行起来,我们之前提到过计算机之所以能运行,肯定是收到软件支配的,那这个软件肯定就是厂商写的,就是我们之前提到的BIOS
操作系统的启动流程
1.计算机加电,从ROM中读取BIOS
2.BIOS开始运行,检测硬件:cpu、内存、硬盘等(在BIOS的操作存放在CMOS中)
3.BIOS读取CMOS存储器中的参数,选择启动设备
4.从启动设备上读取第一个扇区的内容(MBR主引导记录512字节,前446为引导信息,后64为分区信息,最后两个为标志位)
5.根据分区信息读入bootloader启动装载模块,启动操作系统
6.然后操作系统询问BIOS,以获得配置信息。对于每种设备,系统会检查其设备驱动程序是否存在,如果没有,系统则会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI
应用启动流程
1.双击exe快捷方式–》exe文件的绝对路径
2.操作系统根据文件路径找到对应的硬盘位置,并将其代码加载到内存
会要求用户按照设备驱动程序。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始有关的表格(如进程表),穿件需要的进程,并在每个终端上启动登录程序或GUI
应用启动流程
1.双击exe快捷方式–》exe文件的绝对路径
2.操作系统根据文件路径找到对应的硬盘位置,并将其代码加载到内存
3.控制CPU从内存中读取刚刚载入内存的应用程序的代码进行执行