系统的硬件组成
总线
贯穿真个系统的一组电子管道。它携带信息字节并负责在各个部件设备间传递信息。
I/O
I/O(input/output)系统输出和输出设备,如输入键盘 鼠标 输出 显示器
每一个I/O设备都通过一个控制器或者适配器与I/O总线相连。控制器是I/O设备本省的主印制电路板(通常称作主板),适配器则是一个插在主板插槽上的卡(排线)他们的功能都是在I/O总线和I/O设备之间传递信息。
主存
主存是一个临时存贮设备,在处理器执行程序时,用来存放程序和程序处理数据。主存由一组动态随机存取存储器(DRAM)芯片组成。从逻辑上来讲存储器是一个线性的字节数组,每个字节都有其唯一的地址(数组索引)。其实是系统对为了管理内存进行了硬件上面的抽象,把内存抽象成逻辑上一个字节数组,方便操作。
处理器
中央处理器(CPU)简称处理器,是解释存储在主存中指令的引擎。处理器的核心是一个大小为一个字(Bit)的设备(称作 寄存器),和记录指令执行位置的程序计数器(PC)。在任何时候PC都执行主存中的某条机器语言指令(即该条指令的地址)
一个简单的指令执行过程围绕寄存器(register file)和算术/逻辑大怒焰(ALU)进行。寄存器文件是一个CPU自带的小的存储设备,由一些单个字长的寄存器组成,每个寄存器都有唯一的命名标识。ALU用来计算数据和地址值。
- 加载:从主内存中复制一个字节或者一个字到寄存器,已覆盖寄存器原有值
- 存储:从寄存器复制一个字节或者一个字到主存的某个位置,以覆盖这个位置上原来的内容
- 操作:把原来两个寄存器的内容复制到ALU,ALU对这两个字做算术运算,并将新的记过存到到一个寄存器中,覆盖该寄存器原来的值
- 跳转: 从指定本省抽泣一个字,并将这个字复制到程序计数(PC)中,以覆盖PC原有的值
Hello world程序的执行
hello world程序的编写:
用户输入./hello 开始读取输入的shell命令先通过总线到读入寄存器,最后通过总线将./hello命令存储到内存中
用户回车结束命令输入,开始执行./hello命令,从磁盘是上读取hello.c编译好的二进制文件中代码和数据通过IO总线加载到主存
执行main程序,读取main程序中指令,将“hello world\n”字符串从主存复制到寄存器,在从寄存器输出到显示设备
高速缓存
遵循木桶原理,程序的执行速度最终受执行效率最低的设备影响最大,由于CPU和主存之间CPU的效率更高,为了获取高性能,在CPU上设置了比主存更快 更小的存储设备称为高速缓存存储器。寄存器,L1,L2,L3的访问速度逐级递减,L3是多核心CPU共享的。
金字塔模型
操作系统管理硬件
执行hello程序是,shell和hello程序都没有直接访问键盘,显示器,主存,他们依靠操作系统提供中的服务实现。我们把操作系统看成应用程序和硬件之间插入的一层软件。
操作系统两个基本功能:
- 防止硬件被时空的应用程序滥用
- 向应用程序提供简单一致的机制来控制复杂而通常大不相同的低级硬件设备。
操作系统通过几个基本的抽象概念(进程,虚拟内存,文件)
文件是对I/O设备的抽象表示,虚拟内存是主存和磁盘I/O设备的抽象表示,进程是对处理器,主存,I/O设备的抽象表示
进程和线程
进程是对操作系统对一个正在运行的程序的一种抽象。每一个进程好像在独占使用硬件。并发运行指的是一个进程的指令和另一个进程指令交错执行。一个CPU看上去并发只此昂多个进程,这是通过处理器在进程间切换来实现的。操作系统实现这种交错执行的机制称为上下文切换。从一个进程转换到另一个进程都是有操作系统内核(kernel)管理,因此要操作系统需要保持跟踪进程运行锁需要的所有状态信息,这种状态就是上下文。
由于进程的切换比较重,需要单独分配内存资源,上下文切换消耗资源大,可以把进程拆分为更为轻量的线程,线程就是进程的执行单元,每个线程运行在进程的上下文中共享进程的内存资源,比起原来通过操作系统维护进程上下文,切换线程更轻量。
虚拟内存
虚拟内存是一个抽象的概念。它为每一个进程提供了一个假象,即每个进程都在独占的使用主存。每一个进程看到的内存都是一致的,称为 虚拟地址空间。
每个进程看大的虚拟地址空间由大量准确定义的区组成,每个区都有专门的功能。
- 程序代码和数据
- 堆
- 共享库
- 栈
- 内核虚拟内存
文件
文件就是对I/O设备的抽象,包括磁盘,键盘,显示器,甚至网络,都可以看成是文件。