HumanCore - CP/M-17 Version 1.0, Date: January 08, 1996
操作系统介绍
什么是操作系统
操作系统实际是管理计算机软硬件资源的程序(CPU、内存、硬盘等);使用户和硬件之间有了一个交互层,从而屏蔽了硬件的复杂性并保证硬件使用的安全性(通过系统调用)。同时,操作系统还负责协调多任务的调度。总结一下操作系统的特性
- 直接访问硬件
- 隐藏硬件复杂性
- 管理软硬件
- 协调、隔离并保护上层应用程序
用两个词总结操作系统,就是抽象和仲裁,抽象使我们可以忽视底层硬件的区别,采用相同的方式对其进行调用,而仲裁使得我们不必理会资源调用与管理的方式和时间,这些操作系统会替我们完成。
操作系统组成
我们可以按照抽象和机制和策略,对于操作系统进行分解。操作系统对所需要的功能进行抽象,采用不同的机制对抽象的模块进行控制,同时控制过程有具体的策略。
抽象
进程、线程、文件、内存管理等
机制
创建、调度、读写、重分配等
策略
最近最少使用、先入先出等
例子:内存管理
我们有一些内存页面,当有一个进程时,我们对内存进行分配,然后映射给指定的进程,这样进程就可以访问指定的内存。由于内存页面可能会满,所以我们需要一些策略对页面进行置换,例如FIFO,LRU等。
操作系统设计原则
- 隔离性(isolation):不同的应用相互不能影响,用户态不能影响内核态,即禁止直接的硬件访问,只能通过系统调用实现。
- 复用性(multiplexing):对硬件资源进行规划,分时复用;软件具有共享性,一个库可以为多个应用使用
- 交互性(interaction):不同应用可以通过通信手段进行交互
内核与用户态(区分边界)
为何要区分
限制不同程序间的访问能力,实际上就是进行了权限划分。
用户态
只能受限的访问内存,且不允许访问外围设备,占用cpu的能力被剥夺,cpu资源可以被其他程序获取。
内核
内核是操作系统的核心,负责内存、硬件、文件系统以及应用程序的管理,是连接应用程序和硬件的桥梁。在内核态中,cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡等。CPU也可以将自己从一个程序切换到另一个程序。
graph TB node["Application"] node1["Kernel"] node21["CPU"] node22["Memory"] node23["Device"] node-->node1 node1-->node21 node1-->node22 node1-->node23
系统调用(用户和内核态间交互)
一般的应用程序都是运行在用户态,当需要调用操作系统的系统态级别的功能时,例如文件管理、进程控制、内存管理等,都必须通过系统调用的方式向操作系统提出请求。这些系统调用可以分为:
- 设备管理:设备请求、启动、释放等
- 文件管理:文件创建、读写、删除等
- 进程控制:进程创建、撤销、阻塞、唤醒及进程间通信
- 内存管理:内存获取、回收及获得内存大小和地址等功能
系统调用过程
常见的系统调用(API)
功能 | API名称 | 具体功能 |
---|---|---|
进程控制 | fork | 创建子进程 |
exit | 退出 | |
wait | 等待 | |
文件管理 | open | 创建/打开文件 |
read | 读 | |
write | 写 | |
close | 关闭 | |
设备操作 | ioctl | io控制 |
read | 读 | |
write | 写 | |
通信 | pipe | 管道 |
shmget |
信号
除了系统调用,我们还可以通过信号的方式实现内核和用户态的交互。
操作系统架构
不同架构方式
宏操作系统
模块系统
将不同功能划分为不同模块,并提供相应接口,可以启动各种模块实现不同的功能。这个是现今最常用的操作系统架构。
优点
- 维护性好、系统资源占用少
缺点
通过模块访问功能增加了性能开销,模块间维护可能出现困难
微内核操作系统
微内核,顾名思义,其内核只掌控很少一部分功能,其他功能都交由上层用户态的程序。一般来说,微内核需要支持进程间通信、地址空间和线程。而文件、数据库、设备等交由上层管理。
linux架构方式
linux架构可以分为三层
1 用户态
UI
标准用户程序
shell、编辑器及编译器等
系统调用接口
系统调用相关API
2 内核态
进程管理、内存管理、文件系统
3 硬件
CPU、内存、硬盘、IO设备等
操作系统挑战性
- 操作系统一般很庞大,而且需要管理原始硬件,因此必须高效、安全、稳定
- 操作系统会涉及大量的并发性及资源调度
- 操作系统需要在时间、空间、性能之间进行复杂的权衡,同时还要考虑硬件细节
操作系统的演变
操作系统是随着物理硬件一起发展起来的,早期的操作系统可能规模很小,是单用户、单程序的,随着硬件的发展,操作系统经历了批处理、多程序、分时、个人计算机以及分布式计算等几个阶段。每个阶段侧重点不同
学习操作系统的一些资料
最具影响力的操作系统论文
操作系统学习网站
- 清华大学操作系统慕课网3
- Expanded Main Page - OSDev Wiki:一个专门介绍如何开发操作系统的网站