- 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基⽯。
- 操作系统本质上是⼀个运⾏在计算机上的软件程序 ,⽤于管理计算机硬件和软件资源。 举例:运⾏在你电脑上的所有应⽤程序都通过操作系统来调⽤系统内存以及磁盘等等硬件。
- 操作系统存在屏蔽了硬件层的复杂性。 操作系统就像是硬件使⽤的负责⼈,统筹着各种相关事项。
- 操作系统的内核(Kernel)是操作系统的核⼼部分,它负责系统的内存管理,硬件设备的管理,⽂件系统的管理以及应⽤程序的管理。 内核是连接应⽤程序和硬件的桥梁,决定着系统的性能和稳定性。
系统调用
介绍系统调用前,先说一下系统态和用户态。
根据进程访问资源的特点,把进程在系统上的运行分为两个级别:
- 用户态(user mode):用户态运行的进程可以直接读取用户程序的数据
- 系统态(kernel mode):可以简单的理解系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制
我们运行的程序基本都是运行在用户态,如果我们调用操作系统提供的系统态级别的子功能,就需要系统调用。也就是说运行的用户程序中,凡是与系统态级别的资源有关的操作(如文件管理、进程控制、内存管理等),都必须通过系统调用方式向操作系统提出服务请求,并由操作系统代为完成。这些系统调用按功能大致可分为如下几类:
- 设备管理:完成设备的请求或释放,以及设备启动等功能
- 文件管理:完成文件的读写、创建、删除等功能
- 进程控制:完成进程的创建、撤销、阻塞、唤醒等功能
- 内存管理:完成内存的分配、回收、获取作业占用内存大小及地址等功能
内存管理
操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情。
内存管理简单分为连续分配管理方式和非连续分配管理方式。连续分配管理方式是指为一个用户程序分配一个连续的内存空间,常见的如块式管理。非连续分配管理方式允许一个程序使用的内存分布在离散或者说不相邻的内存中,常见的如页式管理和段氏管理。
- 块式管理 : 远古时代的计算机操系统的内存管 理⽅式。将内存分为⼏个固定⼤⼩的块,每个块中只包含⼀个进程。如果程序运⾏需要内存的话,操作系统就分配给它⼀块,如果程序运⾏只需要很⼩的空间的话,分配的这块内存很⼤⼀部分⼏乎被浪费了。这些在每个块中未被利⽤的空间,我们称之为碎⽚。
- ⻚式管理 :把主存分为⼤⼩相等且固定的⼀⻚⼀⻚的形式,⻚较⼩,相对相⽐于块式管理的划分⼒度更⼤,提⾼了内存利⽤率,减少了⽚。⻚式管理通过⻚表对应逻辑地址和物理地址。
- 段式管理 : ⻚式管理虽然提⾼了内存利⽤率,但是⻚式管理其中的⻚实际并⽆任何实际意义。 段式管理把主存分为⼀段段的,每⼀段的空间⼜要⽐⼀⻚的空间⼩很多 。但是,最重要的是段是有实际意义的,每个段定义了⼀组逻辑信息,例如,有主程序段 MAIN、⼦程序段X、数据段 D 及栈段 S 等。 段式管理通过段表对应逻辑地址和物理地址。
- 段页式管理:把主存先分成若干段,每个段又分成若干页,也就是说段页式管理机制中段与段之间以及段的内部都是离散的。
页表管理机制中有两个很重要的概念:快表和多级页表。虚拟地址到物理地址的转换要快表。
- 快表
为了解决虚拟地址到物理地址的转换速度,操作系统在⻚表⽅案基础之上引⼊了快表来加速虚拟地址到物理地址的转换。我们可以把快表理解为⼀种特殊的⾼速缓冲存储器(Cache),其中的内容是⻚表的⼀部分或者全部内容。作为⻚表的 Cache,它的作⽤与⻚表相似,但是提⾼了访问速率。由于采⽤⻚表做地址转换,读写内存数据时 CPU 要访问两次主存。有了快表,有时只要访问⼀次⾼速缓冲存储器,⼀次主存,这样可加速查找并提⾼指令执⾏速度。
使用快表之后的地址转换流程是这样的:
- 根据虚拟地址中的⻚号查快表;
- 如果该⻚在快表中,直接从快表中读取相应的物理地址;
- 如果该⻚不在快表中,就访问内存中的⻚表,再从⻚表中得到物理地址,同时将⻚表中的该映射表项添加到快表中;
- 当快表填满后,⼜要登记新⻚时,就按照⼀定的淘汰策略淘汰掉快表中的⼀个⻚。
- 多级页表
引⼊多级⻚表的主要⽬的是为了避免把全部⻚表⼀直放在内存中占⽤过多空间,特别是那些根本就不需要的⻚表就不需要保留在内存中。多级⻚表属于时间换空间的典型场景。
为了提高内存的空间性能,提出了多级页表的概念;但是提到空间性能是以浪费时间性能为基础的,因此为了补充损失的时间性能,提出了快表(即TLB)的概念。不论是快表还是多级页表实际上都利用到了程序的局部性原理。