计算机操作系统 — 概述

😀前言
在计算机世界中,操作系统(Operating System,简称 OS) 是连接硬件资源与应用程序之间的桥梁。
没有操作系统,程序无法直接、安全、高效地使用 CPU、内存、磁盘和网络等资源。
从个人电脑到智能手机,从服务器到嵌入式设备,都离不开操作系统的支撑。
🏠个人主页:尘觉主页
文章目录
计算机操作系统 — 概述
1 概述(什么是操作系统?)
操作系统(Operating System,OS)是管理计算机硬件与软件资源的系统软件。它把复杂的物理资源(CPU、内存、磁盘、网络、外设等)抽象成对用户和应用更友好的接口,负责资源分配、任务调度、设备驱动、文件管理、保护与安全等核心工作。可以把操作系统想象成“计算机的管家+交通指挥”:既要按照规则分配资源,又要保证各项工作有序进行、互不干扰。
2 操作系统的四个基本特征
2.1 并发(Concurrency)
定义(直观):在一段时间内,系统能管理并“看起来同时”运行多个程序。
与并行的区别:
- 并发:多个程序在时间上交错执行(一个接着一个、快速切换),给出“同时进行”的感觉(如在一台单核CPU上用时间片轮换)。
- 并行:同一时刻真正有多条指令在执行(需要多核或多处理器)。
举例/类比:像一位服务员同时处理多桌客人:在单人情况下他来回穿梭(并发),若有多名服务员则可以同时服务(并行)。
2.2 共享(Sharing)
定义:系统资源可以被多个并发进程使用。
两种共享方式:
- 互斥共享(Mutual exclusion):某些资源一次只能被一个进程使用,比如打印机、单个文件的写操作等(称为临界资源)。需要同步机制(锁、信号量等)来防止冲突。
- 同时共享:资源可以安全地被多个进程同时使用,例如只读文件、只读内存映射区域或读多写少的缓存(有时需要读写锁区分读和写)。
举例:多人同时看同一本电子书(同时共享),而只有一人能拿着实体书写笔记(互斥共享)。
| 共享方式 | 说明 | 举例 |
|---|---|---|
| 互斥共享 | 同一时刻只允许一个进程访问 | 打印机、写文件 |
| 同时共享 | 允许多个进程同时访问 | 只读文件、内存共享段 |
2.3 虚拟(Virtualization / Abstraction)
核心思想:把一个物理实体抽象成若干逻辑实体,让使用者感觉到专属资源。
两类常见虚拟技术:
- 时间分复用(时分复用):多个进程轮流使用CPU(时间片调度),每个进程只占用很短时间,切换足够快则显得“同时”运行。
- 空间分复用(虚拟内存):把物理内存抽象成独立的地址空间(每个进程都有自己的虚拟地址空间)。不需要所有页都在物理内存,按需加载并用页面置换算法在物理内存与磁盘之间换页。
举例:虚拟内存像图书馆的借书制度:书(页)放在仓库(磁盘),需要时调到阅览室(内存)。
| 类型 | 说明 | 示例 |
|---|---|---|
| 时间分复用 | 通过时间片轮转让多个进程轮流使用CPU | 多任务并发执行 |
| 空间分复用 | 虚拟内存技术,将进程的虚拟页映射到物理内存 | 多进程拥有独立地址空间 |
2.4 异步(Asynchrony)
含义:执行存在不确定性 — 程序不是一次跑完不变,而是在不同事件驱动下“断续推进”,有时等待I/O、有时被中断、有时被调度。
举例:网络请求的程序:发送请求后并不会阻塞CPU,而是在有响应或超时时继续执行其他任务。
3 操作系统的基本功能(模块化说明 + 关键职责)
操作系统提供一组核心服务,通常分为以下几大模块:
3.1 进程(与线程)管理
职责:创建/终止进程(fork/exec/exit)、进程调度(谁先运行)、进程同步与通信(互斥、条件等待、信号量、管道、共享内存)、死锁检测/避免/解除。
关键概念:
- 进程:运行中的程序实例,拥有独立资源(虚拟地址空间、打开文件表等)。
- 线程:进程内的执行单元,多个线程共享进程资源但有独立堆栈与寄存器。
举例:浏览器是一个进程,标签页可能是多个线程/子进程,各线程并发处理渲染、网络、JS等。
3.2 内存管理
职责:内存分配(给进程分配地址空间)、地址映射(虚拟地址到物理地址映射)、内存保护(防止进程越界访问)、共享内存、虚拟内存(页面置换算法如LRU、FIFO等)。
关键点:页面置换导致缺页中断(page fault),操作系统需将页从磁盘载入物理内存。
举例:内存管理像住宅区里给每户分配房子和门牌(地址空间),并控制谁可以进哪个房子(保护)。
3.3 文件管理
职责:文件与目录的组织、文件读写接口、文件权限与保护、磁盘空间分配与回收、文件缓存。
关键概念:文件系统(如 ext4、NTFS)负责把数据持久化到块设备并维护元数据(inode、目录树)。
举例:文件系统像图书馆的书架与目录系统,帮你根据名字和索引找到书的位置。
3.4 设备管理(I/O)
职责:处理用户/进程的I/O请求、设备驱动、缓冲管理、设备分配与抢占、虚拟设备抽象。
关键点:驱动把通用的I/O调用映射到底层硬件差异;操作系统需要处理同步/异步I/O与中断。
举例:操作系统充当“翻译官”,把应用的读写请求翻译成磁盘、网卡、打印机能理解的操作,并处理设备的忙闲状态。
3.5汇总
| 模块 | 主要职责 |
|---|---|
| 进程管理 | 创建、撤销、同步、通信、调度、死锁处理 |
| 内存管理 | 内存分配、地址映射、保护与共享、虚拟内存 |
| 文件管理 | 文件存储与目录管理、访问控制、缓存机制 |
| 设备管理 | 设备分配、驱动程序、缓冲区管理、虚拟设备 |
4 系统调用(用户态 ⇄ 内核态)
当用户程序需要内核提供的受保护操作(例如访问硬件、创建进程、读磁盘、分配内存),就发起系统调用;CPU从用户态陷入内核态,由内核完成请求,然后返回用户态。

常见 Linux 系统调用分类与示例(帮助理解):
- 进程控制:
fork()、execve()、exit()、wait() - 进程通信:
pipe()、shmget()、mmap() - 文件操作:
open()、read()、write()、close() - 设备操作:通常通过
ioctl()与读写接口完成 - 信息维护/时间:
getpid()、alarm()、sleep() - 权限/安全:
chmod()、umask()、chown()
类比:系统调用像餐厅顾客按呼叫铃请求厨房服务,服务员(内核)去厨房处理并把结果带回。
| 功能类别 | 常见系统调用 | 说明 |
|---|---|---|
| 进程控制 | fork()、exec()、exit()、wait() |
创建、执行、结束进程 |
| 进程通信 | pipe()、shmget()、mmap() |
管道、共享内存、映射文件 |
| 文件操作 | open()、read()、write()、close() |
文件的基本读写 |
| 设备操作 | ioctl()、read()、write() |
与硬件驱动交互 |
| 信息维护 | getpid()、alarm()、sleep() |
获取信息、定时器功能 |
| 安全管理 | chmod()、umask()、chown() |
修改权限与用户属性 |
5 内核设计:宏内核 vs 微内核(为什么会有两种设计?)
5.1 宏内核(Monolithic Kernel)
特点:多数操作系统功能(进程调度、文件系统、设备驱动、网络协议栈等)都作为内核的一部分运行在内核态,模块之间紧密集成、共享内存结构。
优点:性能高(调用/上下文切换开销少),实现简单(模块内函数调用)。
缺点:内核复杂、体积大,某个驱动出错可能导致整个系统崩溃。
代表:早期 UNIX、Linux(传统意义上的宏内核风格)。
5.2 微内核(Microkernel)
思想:把核心功能最小化(如低级进程调度、IPC、最基本的内存管理),将其他服务(文件系统、驱动、网络)以用户态服务进程形式运行,通过消息传递交互。
优点:内核小、模块隔离好、可靠性高(用户态服务出错不会必然使内核崩溃)。
缺点:频繁的用户态 ⇄ 内核态切换及消息传递会带来性能损失,实现更复杂。
代表:MINIX、某些实时操作系统、部分现代实验性系统。
5.3对比
| 对比项 | 宏内核(Monolithic) | 微内核(Microkernel) |
|---|---|---|
| 设计思想 | 所有核心功能集中在内核中 | 只保留最基础的功能,其他运行在用户态 |
| 性能 | 高(函数调用开销小) | 较低(频繁切换内核态/用户态) |
| 模块独立性 | 模块耦合度高 | 模块隔离性强 |
| 稳定性 | 一个模块出错可能导致系统崩溃 | 出错模块可单独重启 |
| 代表系统 | Linux、早期UNIX | MINIX、QNX、Mach |
6 中断的分类(系统如何应对“突发事件”)
中断是使CPU从当前执行流中离开、去处理紧急事件的机制。常见分类:
- 外中断(外部中断):源自CPU外部,例如 I/O 完成中断(磁盘读写结束)、网络包到达、键盘输入、定时器中断(时钟中断)。外中断通常异步发生,用来通知内核事件已就绪。
- 异常(Exception):由 CPU 在执行指令时检测到的错误或特殊情况,例如除零错误、非法指令、地址越界、算术溢出等。异常通常同步发生且与指令相关。
- 陷入(Trap / System call):用户程序主动触发的中断以进入内核执行系统调用(如
int 0x80、syscall指令等)。这是一种受控的、同步的切换到内核态的方式。
| 中断类型 | 触发来源 | 举例 |
|---|---|---|
| 外中断 | CPU外部事件 | I/O完成、时钟中断、键盘输入 |
| 异常(Exception) | 程序内部执行错误 | 除零错误、非法指令、地址越界 |
| 陷入(Trap) | 程序主动请求内核服务 | 系统调用 syscall、int 0x80 |
举例:键盘输入触发外中断,非法内存访问触发异常,read() 或 write() 在库里触发陷入进入内核。
7 学习建议
- 理解基础概念:进程/线程、并发/并行、死锁、分页、地址映射、文件系统常用结构(inode、目录树)。
- 系统调用实践:在 Linux 下写小程序使用
fork()、exec()、pipe()、mmap()等,观察行为。 - 读代码与模拟:阅读简化的教学内核(如 xv6、MINIX 教学版)能快速理解内核机制。
- 动手实验:用
strace跟踪系统调用;用top/htop观察进程调度;用gdb调试小程序。 - 从类比思考:把复杂概念映射到日常生活场景(餐厅、图书馆、交通)帮助记忆与理解。
😄总结
操作系统是把复杂硬件资源组织成对用户友好、安全、有效利用的抽象和服务的系统软件;它的核心职责包括进程/线程管理、内存管理、文件系统、设备管理与系统调用等。掌握这些核心概念并通过小实验验证,会让你对计算机如何运行有直观且扎实的理解。
😁热门专栏推荐
想学习vue的可以看看这个
等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持
🤔欢迎大家加入我的社区 尘觉社区
文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)