最近计划学习 Udacity 上的课程:Introduction to Operating System.
由于是学习笔记,内容中的谬误不可避免,敬请斧正。
操作系统简介
操作系统是应用层与硬件层之间的桥梁,主要起到两个作用:
- 对底层硬件进行抽象,方便应用层调用。
- 对硬件资源进行分配,高效利用系统资源。
操作系统实例
- 桌面操作系统
- Windows
- Unix based Systems
- macOS
- Linux
- 手机操作系统
- Android
- iOS
- Symbian
操作系统组成部分例子
抽象(abstrations):
- 进程(process)
- 线程(thread)
- 文件(flie)
- 套接字(socket)
- 内存页面(memory page)
方法(mechanisms):
- 创建(create)
- 规划(schedule)
- 打开(open)
- 写入(write)
- 分配(allocate)
协议(policies):
- least-recently-used(LRU),earlist
- deadline first(EDF)
操作系统设计原则
- 方法与协议分离(separation of mechanism and policy)
- 灵活运用不同方法支持不同协议
- 例如:对内存管理使用 LRU EDF 等协议
- 优化普通场景
- 操作系统会在什么场景下被使用
- 用户会在机器上执行什么
操作系统隔离
- 用户层(user level),非特权层(unprivileged)
- 内核层(kernel level),特权层(privileged)
操作系统直接操作底层硬件,因此必须在内核层。
操作系统会对应用进行隔离,保证在用户层的应用不能随意操作硬件,不能随意读写其他应用的内存。
系统调用
System Call,系统调用,指应用通过操作系统调用系统资源。
- User Mode 执行应用程序
- 进行系统调用
- 切换到 Kernel Mode
- 执行系统调用
- 切换回 User Mode
- 系统调用返回

进行系统调用的应用必须:
- 写入调用参数
- 在指定位置保存相关数据
- 进行系统调用

系统调用可以同步调用,也可以异步调用。
从 User Mode 转换到 Kernel Mode 的开销较大,因为需要向 Cache 中写入相关数据,切换 CPU 上的 Mode Bit.
庞大的操作系统(Monolithic OS)
Monolithic OS 将所有可能用到的 Abstractions, Mechanisms and Policies 全部打包,在需要的时候使用。
优点:
- 功能全面。
- 便于编译时优化。
缺点:
- 内存消耗大。
- 代码冗余。
模块化操作系统(Modular OS)
通过底层的进一步抽象,只要是实现了特定接口(interface)的程序都能作为模块(module)接入系统。
优点:
- 模块化便于维护。
- 代码简单,浪费资源少。
缺点:
- 可能减少了优化机会。
- 可能依然难以维护。
模块化是现在的主流。
微内核(microkernel)
微内核设计,将 Kernel 层进一步精简,而将我们通常认为是操作系统组成部分的 File System, Drivers 等放在 User 层运行。
优点:
- 简单短小。
- 便于调试、保证正确性。
缺点:
- 兼容性。
- 应用的复杂性。(抽象不足导致底层暴露)
- 层间调用频繁,性能下降。
- 对硬件要求高,往往需要特殊适配。
在嵌入式设备等场景可能有较多应用。

Linux架构

从上到下,依次为:
- 用户层
- 应用层
- 标准库层
- 系统层
- 硬件层
macOS架构
基于 BSD.

课程总结:
What is an OS: the bridge between applications and hardware.
OS Examples: Windows,macOS,Linux Android,iOS,Symbian
OS Components: abstractions, mechanisms, policies
System Call: transition between privileged mode and unprivileged mode.
Monolithic OS and Modular OS
Microkernel
Linux Architecture and macOS Architecture.