操作系统

响应用户输入指令达到控制硬件的效果的软件,叫做操作系统

常见的操作系统:Window、Linux、FreeBSD、MacOS

操作系统在内核空间,其他软件在用户空间。

操作系统结构

内核

操作系统的核心是内核,连接控制计算机的各种硬件设备。其他的软件不用直接和硬件联系,只用通过操作系统来进行调用
image.png

内核的基本能力

  • 管理进程、线程
  • 管理内存
  • 管理硬件设备
  • 提供系统调用

image.png

Linux内核

Linux内核由如下几部分组成:内存管理,进程管理,设备驱动程序,文件系统和网络管理等

Windows内核和Linux内核一致的地方

1、一切皆文件的观念一致,文件的格式不一样
2、内核映射方式一致
3、都用SOCKET进行网络通信
4、系统调用、中断

内存管理

虚拟内存

image.png
如何解决上面的问题?
造成的原因是两个程序都使用了绝对物理地址,这是要避免的

操作系统为每个进程分配独立的一套虚拟地址,然后提供一套映射关系和映射管理,所以

  • 我们程序使用的内存地址叫做虚拟内存地址
  • 实际存在硬件里面的空间地址叫做物理内存地址

操作系统引入了虚拟内存,进程持有的虚拟地址会通过CPU芯片中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存
image.png

操作系统管理虚拟内存和物理地址之间关系的两种方式:
(1)内存分段(2)内存分页

内存分段

早期方案,通过段选择值和段偏移量,将内存分为一段一段的

不足之处:

  • 第一个是内存碎片的问题
  • 第二个是内存交换的效率低

内存分页

分页指的是将虚拟和物理内存空间都切成一段一段的固定大小,这样一个连续并且尺寸固定的内存空间,我们叫做页。Linux下,每一页大小为4KB
image.png

优点:

  • 因为是分页的,释放也是以页为单位,所以不会产生进程无法使用的小内存
  • 内存空间不够,需要置换部分数据到硬盘上时,一般是将其他正在运行的进程暂时没有使用的内存页面置换,所以一般为少数几页,效率相对较高

简单分页的缺点

空间上的缺陷

32位的系统,虚拟地址空间是4GB,假设每个页有4KB,那么需要100万页,每个【页表项】需要4个字节存储,那么这个映射空间就需要4MB的内存来存储页表。这只是一个进程,假如有100个进程

多级页表

例如二级分页,将页表(一级页表)分为 1024 个页表(二级页表),每个表(二级页表)中包含 1024 个【页表项】

多级页表的设计思路是:计算机中一个进程往往不会使用给它分配的全部内存,所以多级分页以后,页表占用的内存空间会远远小于不分级的情况

64位的系统,一般分为四级目录

Linux内存管理

Linux 内存主要采用的是页式内存管理,但同时也不可避免地涉及了段机制。支持分段机制属于历史遗留问题。实际Linux操作系统内核屏蔽了段式映射,因为每一段都是从0地址到4GB(32位系统)

每个进程都有各自独立的虚拟内存,但每个虚拟内存中的内核地址,关联的是相同的物理地址
image.png