总纲

操作系统(OS),是跑在硬件之上、应用程序之下的第一层基础软件。它充当硬件管家,负责管理CPU、内存、磁盘、网卡这些有限硬件资源;同时向上给应用程序提供统一、简单的接口,让程序员不用直接操控底层硬件。
你电脑上的Windows、手机安卓、服务器Linux,全部都是操作系统。零基础理解OS,抓住核心一句话:硬件是原材料,操作系统是大管家,你的代码是房客。

一、操作系统基础核心术语

  1. 操作系统 Operating System,OS
    管理计算机硬件资源,为应用程序提供服务的系统软件。
  2. 内核 Kernel
    操作系统最核心部分,是OS真正干活的核心代码。负责进程调度、内存管理、IO管理,运行在内核态。我们平时安装的Ubuntu、CentOS,Linux指的就是Linux内核。

区分:发行版 = Linux内核 + 各类配套工具软件。

  1. 用户态 User Mode
    普通应用程序运行的环境,权限低,不能直接操作硬件。PHP、浏览器、微信全部跑在用户态。想操作硬件,必须发起系统调用,请求内核帮忙。
  2. 内核态 Kernel Mode
    内核代码运行环境,拥有最高权限,可以直接读写内存、操控网卡、磁盘等硬件。
  3. 系统调用 System Call
    用户态程序向内核求助的通道。应用不能直接碰硬件,通过固定指令陷入内核,由内核完成硬件操作,结果返回给程序。open、read、write、fork都是系统调用。
  4. Shell
    内核外面的命令行交互程序,接收人的指令,转交给内核执行。Linux的bash、Windows cmd、PowerShell都属于Shell。Shell ≠ 内核,只是外壳交互工具。
  5. 守护进程 Daemon
    Linux后台持续运行的程序,不需要终端交互,开机自启。Nginx、PHP-FPM、crond定时任务都是守护进程。
  6. 中断 Interrupt
    硬件主动通知内核的信号。例如网卡收到数据包、键盘按下按键,硬件触发中断,暂停当前CPU任务,让内核处理这件事,处理完继续原来任务。

二、进程、线程与调度术语(OS最重要模块)

  1. 进程 Process
    操作系统资源分配的最小单位。程序是磁盘上静态文件,进程是程序加载进内存运行起来的实例。
    每启动一个PHP-FPM,就创建一个进程;一个程序可以同时产生多个进程。进程之间内存相互隔离。
  2. 程序 Program
    存放在磁盘上静态的代码文件,没有运行,不占用内存。
  3. 线程 Thread
    进程内部执行任务的最小调度单位,轻量级。一个进程可以开启多条线程,同一个进程内所有线程共享进程内存资源。线程切换开销远小于进程切换。
  4. PCB 进程控制块
    内核里记录进程信息的数据结构。保存进程ID、内存地址、打开的文件、进程状态,内核靠PCB管理所有进程。
  5. PID 进程ID
    操作系统分配给每个进程唯一编号,ps命令查看PID,用来定位、杀死进程。
  6. 进程状态
  • 就绪:准备好了,等待分配CPU时间片
  • 运行:正在CPU上执行指令
  • 阻塞(等待):等待事件(等待磁盘读数据、等待网络包),不占用CPU
  1. 时间片 Time Slice
    CPU分给单个进程的一小段执行时间。单核CPU通过快速切换时间片,宏观上看起来多个程序同时运行,也就是并发。
  2. 并发 Concurrency
    单核CPU快速轮流执行多个任务,同一时刻只有一个任务在跑,快速切换,宏观并行。
  3. 并行 Parallelism
    多核CPU,多个任务在多个核心上同一时刻真正同时执行。
  4. 上下文切换 Context Switch
    CPU从A进程切到B进程,需要保存A当前寄存器、栈等现场,加载B的现场。切换会带来性能开销,频繁上下文切换是服务器性能瓶颈之一。
  5. fork
    Linux创建子进程的系统调用,子进程复制父进程内存(写时复制)。Swoole、PHP-FPM底层创建子进程依靠fork。
  6. 写时复制 COW Copy On Write
    fork创建子进程初期,父子进程共享同一份内存;只有某一方修改内存数据时,才单独复制一份内存副本,节省内存开销。
  7. 互斥 Mutex
    多个线程争抢同一个资源,保证同一时间只允许一个线程访问资源,防止数据错乱。
  8. 信号量 Semaphore
    用来做进程/线程同步互斥的工具,可以控制最多N个线程同时访问资源。
  9. 死锁 Deadlock
    多个进程互相持有对方需要的资源,又互相等待,全部卡住,谁都无法继续执行。

三、内存管理术语

  1. 物理内存
    内存条硬件,真实物理存储单元。
  2. 虚拟内存 Virtual Memory
    操作系统给每个进程虚构出来的独立内存地址空间。每个进程都觉得自己独占全部内存,进程之间隔离。
  3. 内存地址
    用来定位内存里数据的编号,分为虚拟地址、物理地址。
  4. 页 Page
    虚拟内存的最小单位,一般4KB。内存按页管理。
  5. 页表 Page Table
    内核维护的映射表,把进程的虚拟内存地址翻译成真实物理内存地址。
  6. 缺页中断 Page Fault
    进程访问虚拟内存页面,但这个页面不在物理内存条里,触发中断。操作系统把磁盘上的数据加载进内存。
  7. 交换分区 Swap
    磁盘划分一块空间,充当内存备用。内存不够时,操作系统把不常用内存页面写到swap;swap读写速度极慢,服务器尽量避免大量使用swap。
  8. MMU 内存管理单元
    CPU硬件部件,专门完成虚拟地址转物理地址。

四、文件系统、磁盘IO术语

  1. 文件系统 File System
    操作系统管理磁盘文件的一套规则,比如ext4、xfs、NTFS。负责管理文件、目录、文件大小、权限。磁盘裸盘不能直接存放文件,需要先格式化创建文件系统。
  2. inode
    Linux文件系统核心。保存文件元信息(大小、权限、修改时间、磁盘块位置),不保存文件名。文件名存在目录块中。
  3. 文件描述符 fd file descriptor
    Linux一切皆文件。进程打开文件、socket,内核返回一个数字编号就是fd,程序依靠fd读写。
  4. 目录 / 文件夹
    特殊文件,记录文件名和对应inode的映射。
  5. 块 Block
    磁盘读写最小单位。
  6. 缓冲区 Buffer
    内存临时空间,把写入磁盘的数据先放内存,攒一批再刷入磁盘,减少低速磁盘IO次数。
  7. 缓存 Cache
    把磁盘上经常读取的数据放到内存,下次读取直接走内存,加速读操作。

区分:Buffer偏向写,Cache偏向读。

  1. 同步IO / 异步IO
    同步:发起IO请求后,程序卡住等待IO完成;
    异步:发起IO,程序继续干别的,IO完成后通知程序。
  2. 阻塞 / 非阻塞
    阻塞调用:没有数据就卡住等待;非阻塞调用,没有数据直接返回,不卡住进程。

五、IO设备、网络基础术语

  1. 设备驱动 Driver
    操作系统和硬件之间的桥梁,是一小段专门控制硬件的软件。显卡、网卡、磁盘都需要驱动。
  2. I/O 输入输出 Input/Output
    程序和外部设备交换数据。读磁盘、收发网络数据包都是IO操作。
  3. 多路复用 IO Multiplexing
    单个进程可以同时监听多个文件描述符(socket、文件),哪个fd就绪就处理哪个。Linux的epoll就是IO多路复用,Swoole、Nginx高性能底层依赖epoll。
  4. 管道 Pipe
    基础IPC进程间通信方式,父子进程单向传递数据。
  5. IPC 进程间通信 Inter-Process Communication
    不同进程之间交换数据的方式:管道、Unix域套接字、消息队列、共享内存、信号。
  6. Unix Socket(本地套接字)
    本机进程通信,不走网卡,速度快。Nginx和PHP-FPM本地通信常用Unix Socket。

六、权限、信号基础术语(Linux高频)

  1. 用户 User
    操作系统账号,root是超级管理员,拥有系统全部最高权限。普通用户权限受限,保护系统安全。
  2. 用户组 Group
    多个用户归为一组,统一分配文件权限。
  3. 文件权限 rwx:读r、写w、执行x。
  4. 信号 Signal
    内核发给进程的简短通知。比如kill命令本质发送信号;SIGTERM正常终止进程,SIGKILL强制杀死进程。

七、零基础常见误区澄清

  1. 内核不是独立软件,是操作系统核心;Windows/Linux都包含内核。
  2. 虚拟内存不是内存条,是操作系统抽象的地址空间,部分页面可以放到swap磁盘。
  3. 并发不等于并行,单核只能并发,多核才能并行。
  4. 线程不能独立存在,线程必须依附于进程;进程是资源容器,线程是执行载体。
  5. Cache缓存、Buffer缓冲区,都放在内存,不是磁盘。
  6. Linux“一切皆文件”只是抽象,不是说网卡、磁盘真的是磁盘上的txt文件。

操作系统是PHP、Swoole底层根基。PHP-FPM多进程模型依赖fork、写时复制;Nginx高并发依靠epoll IO多路复用;排查服务器卡顿,经常遇到CPU上下文切换高、内存缺页、swap频繁使用、文件描述符耗尽这类OS层面问题。理解这套术语,才能看懂服务器负载、调优、排查线上故障。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐