1. Introduction
1.1 什么是操作系统,操作系统能做什么
不严谨的说,操作系统是一个以Kernel Mod运行的软件。介于用户Application和Hardware Device之间,所以它将提供两个主要功能:
- 对硬件层的抽象,让用户可以方便的调用硬件,而不去关注复杂的接口
- 更合理有效的管理硬件资源
1.1.1 操作系统的抽象功能
操作系统将硬件复杂的接口转换为简洁的接口,这些接口又分为两部分,一部分是用户接口,例如文件,用户通过直观的点击、拖动就能使用;另一部分是程序接口,又称为System Call,是为Programmer提供的接口,使运行在User Mod的程序可以使用Kernel Mod的权利。
1.1.2 操作系统的管理功能
一台计算机的硬件资源可分为以下几部分:Cpu执行指令、内存存储程序数据、硬盘存储需要长时间保存的数据,Io接口提供用户的输入输出和不同硬件的交互。这些硬件资源的管理是非常复杂,并且需要仔细设计的,而对并行的需求又进一步增加了资源管理的复杂度。
1.2 操作系统怎么抽象和管理硬件
1.2.1 计算机都有哪些硬件
1.2.1.1 CPU
CPU最基本的工作是取指和执行,并且使用Register存储运行过程中的临时变量和状态,Register按功能可以分为两类:
- 一类是通用寄存器,用来存储临时变量;
- 另一类是有特定功能的寄存器,比如:
- PC(Program Count)用来记录当前程序运行到哪一条指令;
- Stack Pointer,指向当前程序栈的顶端;
- PSW(Program Status Word)用来记录当前程序的各种状态:Priority、Mode(User or Kernel)……
为了改善cpu的表现,使用了pipeline和多发射的设计方法。
而为了保护硬件层不会因为用户application的错误而损坏,大部分CPU都包含两种模式:User & Kernel Mode。比较敏感的操作会被指定为只能直接由Kernel Mode下的程序执行。而User Mode下的程序需要通过System Call这一操作系统提供的接口来调用操作系统,进而执行敏感操作。这一操作会调用Trap类型的指令,用于转换Model。而Trap类型指令除了用于System Call,还被用于错误处理,当Exception Situation发生时,硬件会产生Trap指令告诉操作系统,并让操作系统采取相关措施,程序里也可以提前定义错误的处理方法,这样会由程序自身来处理错误。
多核心的CPU:
Moore定律说每隔18个月,芯片里的晶体管的最大数量就会多加倍。Moore定律已经持续有效了很长时间。而大量的晶体管会导致一个问题:如何统一所有的晶体管。最初,人们用多发射的方法,将数据存入cach中,并组合多个function芯片,以此解决此问题。然而,随着晶体管数量的增加,cach的发展速度远远落后于Moore定律,此时已经不能用这种方法来增加晶体管数量。于是人们开始增加Control Unit的数量,称之为多线程或超线程。这种CPU在操作系统看来就是多个CPU,之后,人们进一步增加数量,就出现了Core,每个核心是一个独立的小CPU。而GPU则是专注于微小并行的计算。
1.2.1.2 内存
计算机对内存的要求是:速度快、容量大、便宜。但是目前的技术并不能同时满足所有要求,所以人们采用了层级内存的方法,顶层直接和CPU相连的部分,采用速度快的芯片,底层则采用容量大但速度慢的芯片。
- Register -> cache -> main memory -> disk
- Register:采用和CPU相同的材料,和CPU直接相连,最快
- Cache: Cache line?用来优化内存的表现,把使用频率较高的放在访问速度快的cache里,原理是程序运行的时间和空间上locality。
在现在的CPU中,大都包含两种缓存,L1cache 和 L2cache,L1 cache是直接在CPU内部,访问没有延迟,L2 cache则是在CPU外部,用来存储以MB为单位的数据,访问通常需要一到两个周期的时间。对于L2缓存不同的CPU有不同的设计,Intel采用所有Core共享一个L2内存的方法,AMD则采用每个Core都有单独的L2缓存的设计。 - Main Memory:又称RAM(Random Access Memeory),
- Rom: readonly memory