操作系统
响应用户输入指令达到控制硬件的效果的软件,叫做操作系统
常见的操作系统:Window、Linux、FreeBSD、MacOS
操作系统在内核空间,其他软件在用户空间。
操作系统结构
内核
操作系统的核心是内核,连接控制计算机的各种硬件设备。其他的软件不用直接和硬件联系,只用通过操作系统来进行调用
内核的基本能力
- 管理进程、线程
- 管理内存
- 管理硬件设备
- 提供系统调用
Linux内核
Linux内核由如下几部分组成:内存管理,进程管理,设备驱动程序,文件系统和网络管理等
Windows内核和Linux内核一致的地方
1、一切皆文件的观念一致,文件的格式不一样
2、内核映射方式一致
3、都用SOCKET进行网络通信
4、系统调用、中断
内存管理
虚拟内存
如何解决上面的问题?
造成的原因是两个程序都使用了绝对物理地址,这是要避免的
操作系统为每个进程分配独立的一套虚拟地址,然后提供一套映射关系和映射管理,所以
- 我们程序使用的内存地址叫做虚拟内存地址
- 实际存在硬件里面的空间地址叫做物理内存地址
操作系统引入了虚拟内存,进程持有的虚拟地址会通过CPU芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存
操作系统管理虚拟内存和物理地址之间关系的两种方式:
(1)内存分段(2)内存分页
内存分段
早期方案,通过段选择值和段偏移量,将内存分为一段一段的
不足之处:
- 第一个是内存碎片的问题
- 第二个是内存交换的效率低
内存分页
分页指的是将虚拟和物理内存空间都切成一段一段的固定大小,这样一个连续并且尺寸固定的内存空间,我们叫做页。Linux下,每一页大小为4KB
优点:
- 因为是分页的,释放也是以页为单位,所以不会产生进程无法使用的小内存
- 内存空间不够,需要置换部分数据到硬盘上时,一般是将其他正在运行的进程暂时没有使用的内存页面置换,所以一般为少数几页,效率相对较高
简单分页的缺点
空间上的缺陷
32位的系统,虚拟地址空间是4GB,假设每个页有4KB,那么需要100万页,每个【页表项】需要4个字节存储,那么这个映射空间就需要4MB的内存来存储页表。这只是一个进程,假如有100个进程
多级页表
例如二级分页,将页表(一级页表)分为 1024
个页表(二级页表),每个表(二级页表)中包含 1024
个【页表项】
多级页表的设计思路是:计算机中一个进程往往不会使用给它分配的全部内存,所以多级分页以后,页表占用的内存空间会远远小于不分级的情况
64位的系统,一般分为四级目录
Linux内存管理
Linux 内存主要采用的是页式内存管理,但同时也不可避免地涉及了段机制。支持分段机制属于历史遗留问题。实际Linux操作系统内核屏蔽了段式映射,因为每一段都是从0地址到4GB(32位系统)
每个进程都有各自独立的虚拟内存,但每个虚拟内存中的内核地址,关联的是相同的物理地址