- CPU:
- 运算器(下面以最基础的加法器为例,包括加数和被加数)
- 程序=指令+数据(指令会告诉CPU在存储器的哪一个存储单元放的是加数,哪个是被加数)
- 因为每条线路只能输入加数或被加数,所以引入线路复用概念;CPU上有控制位,数值为1的为指令,数值为0的为数据。
- 但是如果只用一组线来传输数据(加数和被加数),则当加数传入时必须要将之前的被加数暂存,然后再接受数据,所以就引入了寄存器的概念。
- 控制器:协调运算器到存储器的哪个存储单元读取数据(获取控制指令的线即控制总线)
- 寄存器:暂存数据
- 存储器:即内存,平面编址存储设备,每一个存储单元在全局上有唯一的地址,用数字进行引用,把磁信号转换成电信号,不仅存放了数据还有指令。
- 输出设备
- 输入设备
- 上电自检:(POST:Power-On-Self-Test)
是BIOS功能的一个主要部分。它负责完成对CPU、主板、内存、软硬盘子系统、显示子系统(包括显示缓存)、串并行接口、键盘、CD-ROM光驱等的检测。
主板在接通电源后,系统首先由(Power On Self Test,上电自检)程序来对内部各个设备进行检查。在我们按下起动键(电源开关)时,系统的控制权就交由BIOS来完成,由于此时电压还不稳定,主板控制芯片组会向CPU发出并保持一个RESET(重置)信号,让CPU初始化,同时等待电源发出的POWER GOOD信号(电源准备好信号)。当电源开始稳定供电后(当然从不稳定到稳定的过程也只是短暂的瞬间),芯片组便撤去RESET信号(如果是手动按下计算机面板上的Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号),CPU马上就从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。系统BIOS的启动代码首先要做的事情就是进行POST(Power On Self Test,加电自检),由于电脑的硬件设备很多(包括存储器、中断、扩展卡),因此要检测这些设备的工作状态是否正常。
-
为什么用二进制? 因为只需有电(1)和无电(0),很精确。
-
RAM 随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。 存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。
-
ROM 只读存储器,存储一堆指令,然后映射到内存(内存最开始一段)中,控制器读取指令以进行加电自检。
-
外围设备(I/O) 通过interrupt来与CPU进行交互。CPU针脚相连一个中断控制器,与I/O设备相连,进而了解是哪个设备发生了中断。
-
北桥 北桥(离CPU近)高速总线,快速进行数据交换,现在内存直接与CPU相连,提高了速度。北桥与南桥相连以及其他总线的控制。对于文件服务器而言,比如web服务器,将固态硬盘直接与北桥相连以完成磁盘I/O。
-
南桥 低速总线,外围设备(I/O)连到南桥,先汇总到北桥,由北桥再传输到CPU。
-
主频 CPU线路开关闭合的速度,一次数据的调制。
-
CPU的速度快,而内存的速度慢,怎么协调? 引入缓存,以承上启下,缓存数字越小离CPU越近,速度越快,造价越高,主频高性能不一定好,因为内存速度制约了,缓存大,性能好。
- 缓存工作的原则:程序局部性原理
- 时间局部性原理:刚访问过的访问快
- 空间局部性原理:离刚访问过数据近的数据访问快
- 缓存工作的原则:程序局部性原理
-
高级语言是如何被计算机执行的?
机器语言(二进制)-> 编译器(让机器理解,转换为机器语言)->微码(汇编语言,根据芯片不同开发,人类自然语言能表达)与硬件结合非常紧密 (低级语言) 高级语言:要先转换为汇编再转换为对应芯片上的机器语言,需要额外机制(API,不同CPU用汇编语言写的有相同功能的程序,相当于将底层芯片用软件的形式抽象出来,使两种不同的硬件平台用软件抽象出来的环境是相同的,抽象出来的环境即API)来弥合各种硬件的不同。
-
多任务系统 计算机运行的过程称为jobs,作业和作业之间用分隔符隔开,一个完成自动加载下一个即为批处理系统,因为此时内存只有一段,所以一次只能运行一个程序。那么多个程序如何运行呢? 多任务系统:希望可以将CPU、内存切割。即两个任务交替进行,由于CPU按照时间运行,可以将其划分为多个slice(比如第一个任务5ms第二个任务5ms,然后反复交替)(操作系统来监视这些程序运行,给你5ms就是5ms,负责管理硬件资源,将其切割成多个片,分配给不同的程序,内存分多个段。并将他们协调。操作系统还负责一个程序的启动、终止和回收,程序的切换等工作,这是其是一个运行的实例,称之为进程);内存中则引入分段机制(第一段和第二段,有着相对的地址),不同的主机有不同的内存怎么分配?引入虚拟地址空间,比如32位系统(地址总线只有32位,最多引用2^32个地址即4G,所以32位系统最多使用4G物理内存,是由总线宽度决定的)就分配4G内存
-
库 简而言之,就是一堆程序,只提供调用接口自己不能独立执行只能被调用执行,但是它在执行的时候可以提供一个统一的调用(call)机制。 Windows 中的dll(dynamic link library,动态链接库)即为库文件。在Linux相应的为.so(shared object,共享对象,或是.dso,dynamic shared object)为后缀。
-
Kernel(内核) 通过 System call 系统调用(底层,相当于买馒头给了你一袋子小麦,你可以做包子馒头等等)来实现统一接口。有了操作系统(内核)以后任何程序都不能直接和硬件打交道,必须要通过操作系统(内核)来进行协调。由于系统调用过于底层,就将其再次封装起来,使其功能更加强大(直接给你馒头,不需要自己将小麦加工成面粉,和面等),这种更高级的接口就是库(API,application program interface)。所以程序员写程序直接通过库来写就行,调用其功能来开发程序(没必要“造轮子”)。
- 内核的功能:
- 进程管理
- 内存管理
- 提供文件系统
- 提供网络功能
- 提供硬件驱动
- 提供安全机制