操作系统整体架构
搬出考研时的思维导图
操作系统主要分为
- 批处理系统(老古董,基本不用了)
- 实时操作系统(嵌入式中使用较多,RTOS)
- 分时操作系统(PC中使用较多,Linux,Windows)
分时操作系统和实时操作系统的使用场景不同,没有高低贵贱之分。
注意,Linux是分时操作系统,RT-Linux是实时操作系统
分时系统根据实现的方法不同又可以分为:
- 微内核架构(目前业界没有纯粹的微内核,Harmony号称要做微内核系统)
- 宏/单内核架构
- 混合内核架构(目前Linux和Window都是混合内核,并不是单纯的宏内核)
- 外核架构(只停留在学界,发了几篇论文,压根没有实现)
- 虚拟机架构:在操作系统之下再设一个“操作系统”,这个架构主要使用在云服务上。
分时操作系统的基本组成部分为:
- 进程管理
- 内存管理
- 文件管理
- 设备驱动
实时操作系统的基本组成部分为:
- 任务调度
- 中断管理
- 资源管理
- 时钟和定时器
分时操作系统中也有时钟和定时器,也有中断管理等。在计算机的发展中,老的技术往往并不是被淘汰,而是被集成在底层,就像进程调度和任务调度,进程调度是更高端的任务调度,任务调度的思想以及实现方法并没有被淘汰,而是被集成。
操作系统的工作以及理念
操作系统的三个特性:虚拟化,并发,持久
来自操作系统导论,与考研的可能不太一样。
- 虚拟化,即将底层的硬件进行抽象,提供给软件以虚拟的硬件。例如进程的概念就是对CPU的虚拟化,让每个软件以为自己独占CPU,主要面临的问题是如何在虚拟化的同时不损失过多的性能。
- 并发:多个软件“同时”运行,主要面临的问题是如何调度,确保每个软件都能正常运行,涉及到调度算法,共享资源等问题。
- 持久:保持信息不丢失,主要面临的问题是保存在哪里?跟这些设备如何进行通信。
除此三项之外,操作系统还要确保每个软件和硬件的安全,不会被其他软件破坏,这个功能贯穿在三大特性中的任何地方。
解决以上几项问题的程序,组合到一起构成了操作系统这么一个大程序。
Linux kernel的组成
Linux内核的构成
进程管理
进程管理的主要内容包括:
- 进程模型 & 进程创建 & 进程销毁
- 进程调度算法:Linux中进程分为实时进程,非抢占式进程和正常进程,对于最常用的正常进程,使用的是CFS调度方法,
- 进程间通信 & 进程间共享数据 & 锁
内存管理
主要内容包括:
- 虚拟地址机制 & 虚拟地址下的读取 and 修改
- TTL快表的引入以及相匹配的机制
- 内存分配算法 & 内存管理算法
- 内存共享 & 内存保护
文件系统
- 虚拟设备,spooling技术
- VFS虚拟文件系统
- IO调度
除了上面谈到的这三大部分以外,Linux还有网络编程部分,字符设备部分
向上向下:
操作系统向上,需要提供系统调用,例如fork(),exec(),open(),write()这些API,并提供相应的ABI二进制接口供编程语言调用。
操作系统向下,需要根据ISA提供的一系列信息来实现自己的功能,例如中断功能,就需要根据ISA的规定,将负责中断的CSRs设置为相应的状态,并在相应的中断程序入口地址写上相应的处理代码。简而言之就是将软件状态机转化为硬件状态机。
ISA是标准,是软件硬件相互的约定,并不是计算机中实际存在的实体。