操作系统
- 可将操作系统视为应用程序和硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须经过操作系统。
- 操作系统功能:
1. 防止硬件被失控的应用程序滥用
2. 向应用程序提供简单一致的机制,以控制复杂且大不相同的低级硬件设备
- 操作系统通过三个抽象概念(进程、虚拟内存、文件)来实现上述两个功能
3. 进程是对处理器、内存、I/O设备的抽象表示
4. 虚拟内存是对内存、磁盘类I/O设备的抽象表示
5. 文件是对I/O设备的抽象表示
进程
- 进程是操作系统对正在运行程序的抽象,为程序提供一个假象,使程序看上去好像是独占的使用内存、处理器和I/O设备,即该程序的数据和代码好像是内存中唯一的对象。
- 在一个系统中可以同时运行多个进程,但每个进程都好像在独占的使用硬件。这是通过并发运行实现的,并发运行是指一个程序的指令和另一个程序的指令交错进行,从而实现不同进程的切换。
- 在现代系统中,一个进程实际由多个称为线程的执行单元组成,每个线程都运行在进程中,并共享相同的代码和全局数据。多线程运行,大大提高了程序运行的效率。
虚拟内存
- 虚拟内存是对进程的抽象,为进程提供一个假象,使进程好像在独占的使用内存。因此,每个进程看到的内存都是一样的,称为虚拟地址空间。下图为linux的虚拟地址空间。
- 图中地址从下往上增大,下面我们从最低地址开始,逐步介绍每个地址
1. 代码和数据区。直接按照可执行目标文件内容初始化,内存程序代码和数据。
2. 堆(运行时堆)。与数据代码区大小固定不同,当调用malloc和free的c标准库函数时,堆可以在运行时动态的扩展和收缩。
3. 共享库。存放C标准库、数学库等共享库代码和数据的区域。
4. 栈(用户栈)。与堆相同,在运行期间也可以动态扩展和收缩。编译器用他来实现函数调用,调用函数时栈增长,返回函数时栈收缩。
5. 内核虚拟内存。内核是操作系统代码常驻主存的部分,就储存在这里。程序无法读取本区域的数据,也无法调用本区域函数。相反,程序读取数据、调用函数的操作必须通过调用内核来执行。
文件
- 文件是对I/O设备的抽象化,把I/O设备都看成字节序列。这样,输入输出就都是通过调用函数来读取文件实现的
amdahl定律
- 改善过程的一般性原则:对系统某个部分加速时,对该系统整体性能的影响取决于该部分的重要性和加速程度;要想显著加速某个系统,必须提升该系统运行时间占比大的部分的速度
- 新的执行时间:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。