img

😀前言
在计算机世界中,操作系统(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从当前执行流中离开、去处理紧急事件的机制。常见分类:

  1. 外中断(外部中断):源自CPU外部,例如 I/O 完成中断(磁盘读写结束)、网络包到达、键盘输入、定时器中断(时钟中断)。外中断通常异步发生,用来通知内核事件已就绪。
  2. 异常(Exception):由 CPU 在执行指令时检测到的错误或特殊情况,例如除零错误、非法指令、地址越界、算术溢出等。异常通常同步发生且与指令相关。
  3. 陷入(Trap / System call):用户程序主动触发的中断以进入内核执行系统调用(如 int 0x80syscall 指令等)。这是一种受控的、同步的切换到内核态的方式。
中断类型 触发来源 举例
外中断 CPU外部事件 I/O完成、时钟中断、键盘输入
异常(Exception) 程序内部执行错误 除零错误、非法指令、地址越界
陷入(Trap) 程序主动请求内核服务 系统调用 syscallint 0x80

举例:键盘输入触发外中断,非法内存访问触发异常,read()write() 在库里触发陷入进入内核。


7 学习建议

  • 理解基础概念:进程/线程、并发/并行、死锁、分页、地址映射、文件系统常用结构(inode、目录树)。
  • 系统调用实践:在 Linux 下写小程序使用 fork()exec()pipe()mmap() 等,观察行为。
  • 读代码与模拟:阅读简化的教学内核(如 xv6、MINIX 教学版)能快速理解内核机制。
  • 动手实验:用 strace 跟踪系统调用;用 top / htop 观察进程调度;用 gdb 调试小程序。
  • 从类比思考:把复杂概念映射到日常生活场景(餐厅、图书馆、交通)帮助记忆与理解。

😄总结

操作系统是把复杂硬件资源组织成对用户友好、安全、有效利用的抽象和服务的系统软件;它的核心职责包括进程/线程管理、内存管理、文件系统、设备管理与系统调用等。掌握这些核心概念并通过小实验验证,会让你对计算机如何运行有直观且扎实的理解。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

Logo

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

更多推荐