一、系统硬件组成
1、控制器(CPU):解释和执行内存中的指令
(1)、控制器
程序控制器:指令指针,指向主存中的机器语言指令,为一个字大小的存储设备或寄存器。
指令寄存器、指令译码器、时序产生器、操作控制器
(2)、运算器
(3)、寄存器
(4)、高速缓存
CPU从寄存器上读取一个字的时间开销比从主存中读取快100倍,从磁盘中读取数据比主存中读取大1000万倍。加快处理器的运行速度比加快主存的运行速度更容易和便宜。
2、主存(内存)
临时存储设备,在CPU执行程序时用来存放程序和程序处理的数据。从物理上来说,主存时由一组动态随机存储器芯片组成,从逻辑上来看,存储器是一个线性的字节数组,每个字节都有唯一的地址(数组索引)。
3、I/O设备
输入/输出设备是系统和外部世界的联系通道。如鼠标、键盘、显示器、磁盘等。每个I/O设备通过一个控制器或适配器与I/O总线相连。
控制器:I/O设备或主板上的芯片组,如USB、磁盘。
适配器:主板插槽上的卡,如网络适配器、图形适配器。
4、总线
贯穿整个系统的电子管道,携带信息字节并负责在各个部件间传递,通常被设计成传送定长的字节块,即字(32位机器上为4个字节,64位机器上为8个字节)。
二、操作系统管理硬件
操作系统有两个基本功能:防止硬件被失控的应用程序滥用;想应用程序提供简单一致的机制来控制复杂而又大不相同的低级硬件设备。操作系统通过基本的抽象概念(进程、虚拟内存和文件)来实现这两个功能。
1、进程
进程是操作系统对一个正在运行的程序的一种抽象。
并发运行:一个进程的指令和另一个进程的指令是交错执行的。
并行运行:多个处理器或者是多核的处理器同时处理多个不同的任务。
一个CPU看上去是在并发地执行多个进程,这是通过处理器在进程间切换来实现的,操作系统实现这种交错执行的机制称为上下文切换。
上下文切换:当前进程通过系统调用将控制权传递给操作系统,操作系统保存当前进程的上下文,恢复新进程的上下文(如果进程不存在,创建新的进程及其上下文),然后将控制权传递给新进程。
从一个进程到另一个进程的转换是由操作系统内核(kernel)管理的。内核是操作系统代码常驻主存的部分。当应用程序需要操作系统的某些操作时,比如读写文件,它就执行一条特殊的系统调用(system call)指令,将控制权传递给内核。然后内核执行被请求的操作并返回应用程序。注意,内核不是一个独立的进程。相反,它是系统管理全部进程所用代码和数据结构的集合。
线程
一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。因为多线程之间比多进程之间更容易共享数据,也因为线程一般来说都比进程更高效。当有多处理器可用的时候,多线程也是一种使得程序可以运行得更快的方法。
2、虚拟内存
抽象概念,为每个进程提供一个假象,即每个进程都在独占地使用主存,每个进程看到的内存是一致的,称为虚拟地址空间。
内核虚拟内存:为内核保留。
栈:用户虚拟地址空间顶部,编译器用栈来实现函数调用。用户栈在程序执行期间可以动态地拓展和收缩,函数调用时增长,返回时收缩。
共享库:存放像C标准库和数学库这样的共享库的代码和数据的区域。
堆:调用malloc和free时,在运行时动态拓展和收缩。
读写数据:全局/静态变量存储区,数据段和bss段(未初始化和初始化为0)。
只读的代码和数据:代码段和字面常量区。
3、文件
文件就是字节序列。每个I/O设备都可以看作文件,系统中的所有输入输出都是通过使用一小组系统函数调用读写文件来实现的。
三、程序运行过程
指令(二进制):操作码+操作数地址
1、加载程序:将代码和数据从磁盘复制到主存。
2、取指令:从内存区指令复制到指令寄存器。
3、译码:指令译码器分析指令的操作码字段,生成完成操作的控制信号。
4、执行指令:从主存或缓存中取数据到寄存器中,进行运算,将结果保存到寄存器或者主存中。