操作系统的组成

成员描述
内核Kernel 内核是操作系统的核心部分直接与硬件打交道它提供了基本的服务用于创建和管理进程内存管理文件系统管理以及设备驱动程序接口等
外壳Shell 外壳是用户与操作系统之间的交互层可以是一个命令行解释器或图形用户界面GUI用户通过外壳向操作系统发送指令并接收响应结果
实用工具Utilities 这些是操作系统自带的一些辅助程序如文件管理器文本编辑器等它们帮助用户执行常见的任务
设备驱动程序Device Drivers 设备驱动程序是连接硬件设备与操作系统之间的桥梁使得硬件设备能够与操作系统通信执行特定功能
文件系统File System 文件系统用于组织存储和检索数据操作系统使用文件系统来管理文件的存储检索和保护
服务与应用程序接口APIs 操作系统提供了一系列的应用程序接口允许应用程序与操作系统进行通信API定义了开发人员编写应用程序的方式确保了应用程序的一致性和互操作性
网络功能Networking 许多现代操作系统都内置了网络功能支持TCP/IP协议栈允许计算机连接到网络并与其他设备通信
安全机制Security Mechanisms 安全机制包括认证授权和加密等功能用以保护操作系统免受未经授权的访问和恶意攻击
用户界面User Interface 用户界面可以是命令行界面CLI或图形用户界面GUI它决定了用户如何与操作系统互动

操作系统类型

桌面操作系统

桌面操作系统Desktop Operating Systems是指安装在个人计算机PC为用户提供图形用户界面GUI以便管理和控制计算机硬件与软件资源的操作系统以下是几种常见的桌面操作系统

💿 Microsoft Windows

微软公司开发的主流桌面操作系统包括多个版本如Windows XPWindows VistaWindows 7Windows 8Windows 10和最新的Windows 11Windows系统在全球范围内拥有广泛的用户基础

💿 macOS

苹果公司为其Mac系列计算机开发的操作系统早期版本称为Mac OS X或OS X后来改名为macOS最新的版本包括macOS High SierramacOS MojavemacOS CatalinamacOS Big SurmacOS Monterey等

💿 Linux发行版Linux是一个开源的操作系统内核基于它开发出了各种各样的桌面操作系统适合不同的用户群体和技术偏好一些流行的Linux桌面发行版包括

  • Ubuntu用户友好适合初学者
  • Fedora适合技术爱好者和开发者
  • Debian稳定可靠适合服务器和个人使用
  • Mint基于Ubuntu界面友好
  • openSUSE适合企业级应用
  • Arch Linux适合高级用户注重最新技术和定制化

💿 Chrome OS

由Google开发的操作系统主要设计用于使用Web应用的笔记本电脑ChromebookChrome OS的特点是启动速度快主要依赖于云端应用和服务

💿 FreeBSD

一个类Unix的操作系统基于4.4BSD-Lite适用于服务器和个人电脑虽然不如Linux流行但在某些专业领域和服务器应用中受到欢迎

💿 ReactOS

开源项目目标是兼容Windows API使得Windows应用程序和驱动程序能够在ReactOS上运行

💿 Haiku

Haiku是一个试图重现BeOS精神的开源操作系统专注于高性能的多媒体体验

💿 Elementary OS

基于Ubuntu的Linux发行版设计风格类似于macOS注重用户体验和美观

移动设备操作系统

移动设备操作系统Mobile Operating Systems是专为智能手机平板电脑和其他移动设备设计的操作系统这些操作系统通常具有触摸屏界面并支持移动应用和联网功能以下是当前市场上主要的移动设备操作系统

💿 iOS

由苹果公司Apple Inc.开发专为iPhoneiPad和iPod touch设计iOS以其封闭的生态系统著称所有应用必须通过App Store审核才能发布

💿 Android

由Google主导开发是目前全球市场份额最大的移动操作系统Android基于Linux内核支持开源社区的贡献并允许设备制造商进行一定程度的定制

💿 华为鸿蒙操作系统HarmonyOS

由中国华为公司开发旨在支持多种设备包括智能手机平板电脑智能穿戴设备等华为原生鸿蒙操作系统是完全自主研发的操作系统是继 iOS 和 Android 之后的全球第三大移动操作系统

💿 其他操作系统

  • Windows 10 Mobile尽管微软已经停止了Windows Phone和Windows 10 Mobile的新版本开发但仍有一些老设备在使用此系统
  • KaiOS一种基于Linux的轻量级操作系统用于功能手机和低端智能设备
  • Sailfish OS由芬兰公司Jolla开发基于MeeGo主要用于智能手机和平板电脑
  • LineageOS一个基于Android的开源操作系统支持多种设备提供了一个替代官方Android系统的选项
  • Ubuntu Touch由Canonical公司开发基于Linux专为触控设备设计
  • webOS最初由Palm开发后被惠普HP收购最后被LG用于其智能电视产品线上
  • BlackBerry OS虽然黑莓BlackBerry公司已经停止了新设备的生产并转向了Android平台但旧的黑莓设备仍然使用BlackBerry OS

服务器操作系统

服务器操作系统Server Operating Systems是指专门设计用于服务器环境的操作系统它们通常需要具备高性能高可靠性易于管理及安全性强等特点以下是当前市场上主要的服务器操作系统

💿 Windows Server

由微软公司开发包括多个版本如Windows Server 2008Windows Server 2012Windows Server 2016Windows Server 2019Windows Server 2022等Windows Server支持Active DirectoryHyper-V虚拟化技术以及其他企业级功能

💿 Linux

Linux是一个开源的操作系统内核基于它开发了多个服务器版本的发行版包括但不限于

  • Red Hat Enterprise Linux (RHEL)商业版本广泛用于企业级应用
  • CentOS Stream一个开源的RHEL克隆版本
  • Ubuntu Server基于Debian的发行版用户友好适合各种规模的企业
  • Debian一个稳定的发行版适用于服务器环境
  • Fedora适合开发者和测试环境
  • openSUSE Leap适用于企业级应用
  • Arch Linux适合高级用户注重最新技术和定制化

💿 Unix

传统的Unix操作系统包括

  • Sun SolarisSun Microsystems开发的Unix版本现归Oracle所有
  • IBM AIXIBM公司的Unix版本适用于Power架构
  • HP-UXHewlett-Packard公司的Unix版本

💿 NetWare

由Novell公司开发曾是局域网市场的领导者但近年来市场份额有所下降

💿 FreeBSD

一个类Unix操作系统基于4.4BSD-Lite适用于服务器和个人电脑

💿 OpenBSD

一个强调安全性的类Unix操作系统

💿 NetBSD

另一个类Unix操作系统以其广泛的硬件支持著称

💿 ARM服务器操作系统

支持ARM架构的服务器操作系统如华为提供的支持iBMA的Arm服务器操作系统

💿 其他

  • OpenVMS由HP开发用于关键业务应用
  • IBM z/OS用于大型机系统
  • IBM z/VMIBM的虚拟机操作系统用于大型主机环境

嵌入式操作系统

嵌入式操作系统Embedded Operating Systems, EOS是指用于嵌入式系统的操作系统这类操作系统通常需要满足实时性可靠性低功耗小体积等要求并且能够根据具体应用需求进行裁剪以下是几个常见的嵌入式操作系统

💿 嵌入式Linux

  • Yocto Project一个开源项目用于创建定制的Linux系统适用于嵌入式设备
  • Buildroot另一个用于创建嵌入式Linux系统的工具
  • Angstrom Distribution一个轻量级的Linux发行版专为嵌入式设备设计

💿 专用嵌入式操作系统

  • Windows Embedded微软为嵌入式设备开发的操作系统
  • Intewell一种国内的嵌入式操作系统
  • 华为鸿蒙操作系统HarmonyOS华为推出的一个操作系统支持多种设备包括手机手表汽车等具有分布式特性可以跨设备协同工作

💿 其他嵌入式操作系统

  • eCos一个开源的嵌入式操作系统适用于多种微控制器
  • Zephyr RTOS一个由Linux基金会支持的RTOS适用于资源受限的设备
  • RIOT (Rigorous Initiation Oriented Testing)一个针对物联网应用的开源RTOS
  • Contiki一个用于无线传感器网络的开源RTOS
  • FreeDOS一个自由的DOS兼容操作系统可用于一些简单的嵌入式应用
  • NuttX一个用于嵌入式系统的RTOS支持多种架构
  • BlackBerry QNX用于汽车及其他嵌入式设备
  • Symbian虽然不再更新但在某些旧设备中仍然存在
  • Palm OS同样不再更新但在某些老款设备中可见
  • WebOS最初由Palm开发后被惠普HP收购现在由LG用于其智能电视产品线上

分布式操作系统

分布式操作系统Distributed Operating Systems是一种特殊类型的操作系统它管理分布在多个计算机上的资源并使这些资源看起来像是一个单一的系统这种操作系统的设计目的是为了提高系统的性能可用性和扩展性下面列举了一些知名的分布式操作系统或与分布式系统相关的技术

💿 Unix/Linux系统

Unix系统及其衍生产品如Linux可以被配置成分布式系统通过网络连接多台计算机来共同完成任务

💿 华为鸿蒙系统HarmonyOS

鸿蒙操作系统是华为推出的一个多终端分布式操作系统旨在实现不同设备间的无缝协同

💿 Kubernetes

虽然通常被视为容器编排工具但实际上Kubernetes可以看作是一种微内核的分布式操作系统它管理着容器化的应用程序和服务

💿 Plan 9

Plan 9是从Unix发展出来的一个研究性质的操作系统它强调分布式计算并引入了统一的文件系统概念

💿 CloudKit

Apple的CloudKit为开发人员提供了构建分布式应用的能力使得应用可以在多个设备间共享数据

💿 CTWing OS

天翼物联网分布式操作系统CTWing OS是由中国电信自主研发用于物联网连接管理和实时控制

💿 其他分布式系统

  • 分布式数据库系统例如Apache CassandraMongoDB等用于存储和检索分布在网络中的大量数据
  • 分布式文件系统例如Google File System (GFS)Hadoop Distributed File System (HDFS)等用于在多台机器之间共享文件
  • 分布式计算框架例如Apache HadoopApache Spark等用于执行大规模的数据处理任务
  • 分布式消息队列例如Apache KafkaRabbitMQ等用于构建可靠的异步消息传递系统

💿 分布式中间件

  • Apache ActiveMQ一个消息中间件支持多种消息协议
  • ZeroMQ一个轻量级的网络消息库可以用来构建分布式或者并发模式的应用程序

💿 分布式服务框架

  • Apache Thrift一个用于构建可扩展的服务框架的软件库
  • gRPC一个高性能开源的通用RPC远程过程调用框架

网络操作系统

网络操作系统Network Operating System, NOS是指那些专门设计来管理和促进网络资源使用的操作系统这类操作系统不仅管理本地计算机资源还管理网络上的资源共享支持网络通信网络服务等功能以下是常见的网络操作系统

💿 Windows Server

微软公司推出的服务器操作系统包括Windows Server 2008Windows Server 2012Windows Server 2016Windows Server 2019Windows Server 2022等它们广泛应用于企业和小型办公环境中提供文件共享打印服务域控制器等网络管理功能

💿 Unix/Linux

包括各种Unix系统如SolarisAIXHP-UX和Linux发行版如Red Hat Enterprise LinuxUbuntu ServerDebianUnix/Linux系统因其稳定性和安全性在服务器市场占有重要地位尤其适合于服务器集群大数据处理和云计算环境

💿 NetWare

Novell公司的NetWare操作系统以高效稳定著称主要用于中型企业网络支持文件和打印共享网络管理等功能尽管近年来市场份额有所下降但仍有一定的用户基础

💿 macOS Server

苹果公司的服务器操作系统主要用于管理苹果的Mac OS X客户端提供网络服务邮件服务目录服务等功能

💿 FreeBSD/Cisco IOS/Juniper Junos

FreeBSD是一个类Unix操作系统常用于服务器和个人电脑Cisco IOS和Juniper Junos则是专门用于路由器和交换机等网络设备的操作系统

💿 其他系统

有些操作系统虽然不是专门为网络设计但在实际应用中经常作为网络操作系统使用如早期的Novell NetWare系统还有基于Linux的嵌入式系统如OpenWrt常用于家庭路由器等设备

实时操作系统

实时操作系统RTOS, Real-Time Operating Systems是指那些能够对时间敏感的事件作出快速响应的操作系统这类操作系统被设计用于需要精确和可靠的时间控制的应用场景比如控制系统工业自动化航空电子设备汽车控制系统医疗设备等以下是一些常见的实时操作系统

💿 FreeRTOS

一款免费的RTOS广泛应用于微控制器单元MCU支持多种微处理器架构

💿 μC/OS-II 和 μC/OS-III

分别是第二代和第三代的实时操作系统用于嵌入式系统特别是内存资源受限的系统

💿 QNX

一款商用的RTOS以其强健性和可靠性著称常用于汽车医疗设备和其他关键系统

💿 VxWorks

Wind River Systems开发的一款RTOS用于航空国防航天等领域

💿 ThreadX

由Microsoft拥有的RTOS适用于嵌入式设备提供高效的实时性能

💿 eCos

一个开源的嵌入式操作系统支持多种微控制器适用于对实时性有要求的小型嵌入式系统

💿 Zephyr RTOS

一个开源RTOS特别适用于物联网IoT设备支持多种微控制器和传感器

💿 NuttX

另一个开源RTOS支持多种架构适用于从简单到复杂的嵌入式系统

💿 RIOT (Rigorous Initiation Oriented Testing)

一款开源RTOS专注于低功耗设备和物联网应用

💿 Contiki

一个开源的RTOS主要用于无线传感器网络

💿 国内RTOS

  • 道系统Delta OS
  • 翼辉Sylix OS
  • 天脉系统ACore OS
  • 科东软件Intewell OS
  • 赛睿德RT-Thread

多处理机操作系统

多处理机操作系统Multiprocessor Operating System是专为管理多处理机系统设计的操作系统这类操作系统需要处理多个中央处理单元CPU的协调工作以提升系统的性能可靠性和吞吐量根据处理机之间的交互方式和资源管理策略的不同多处理机操作系统可以有不同的类型和架构以下是几种常见的多处理机操作系统类型和相关系统

💿 对称多处理系统SMP, Symmetric Multi-Processing

  • 在SMP系统中所有处理器的地位平等共享同一块内存操作系统可以将任务分配给任何一个处理器执行
  • 示例大多数现代桌面和服务器操作系统如Windows ServerLinuxmacOS支持SMP架构

💿 非对称多处理系统ASMP, Asymmetric Multi-Processing

  • 在ASMP系统中处理器之间存在主从关系主处理器负责调度任务给从处理器
  • 示例一些嵌入式系统或特定领域的专用系统可能会采用这种架构

💿 分布式共享内存系统DSM, Distributed Shared Memory

  • DSM系统允许多个节点通过网络共享内存空间即使这些节点可能没有物理上共享的内存
  • 示例某些高性能计算集群可能采用DSM技术

💿 消息传递多处理机系统Message-Passing Multiprocessors

  • 在这类系统中处理器之间不共享内存而是通过消息传递来进行通信
  • 示例高性能计算集群超级计算机中常用的消息传递接口MPI

💿 集群操作系统Cluster Operating Systems

  • 集群操作系统管理多个节点这些节点通过网络连接可以作为一个整体来管理任务
  • 示例Linux集群管理系统如HeartbeatDRBD

💿 主从式操作系统Master-Slave OS

  • 主从式操作系统中有一个主处理器负责协调所有从处理器的工作
  • 示例一些早期的多处理机系统如Cyber-170采用的就是这种架构

💿 独立监督式操作系统Independent Supervisor OS

  • 每个处理机都有自己的管理程序各自管理自己的资源
  • 示例IBM的370系统就是一个例子

💿 浮动监督式操作系统Floating Supervisor OS

  • 所有处理机都可以访问整个系统的资源通常用于紧密耦合的对称多处理机系统
  • 示例IBM 3081上的MVS/VM操作系统

💿 多核操作系统

  • 现代多核处理器上的操作系统如Linux和Windows支持多核架构并且能够优化多核环境下的任务调度
  • 示例Linux内核支持多核调度Windows Server也支持多核架构

进程

进程的概念

进程可以视为一个程序执行的实体它包含了一个或多个线程以及相关的系统资源如内存文件句柄等每个进程都有一个唯一的标识符PID并且有自己的私有地址空间这意味着不同进程之间不能直接访问对方的数据除非通过进程间通信IPC机制

进程的组成

  • 程序代码这是进程执行的指令集合
  • 数据段存放程序的数据和全局变量
  • 动态分配的内存区域通常用于存放运行时动态分配的对象
  • 存放函数调用时的局部变量函数参数等临时数据
  • 进程控制块PCB, Process Control Block操作系统用来存储有关进程的信息的数据结构包括进程ID状态优先级内存映射打开的文件等

进程的状态

  • 就绪状态Ready进程已经准备好运行但是还没有获得CPU时间片
  • 执行状态Running进程正在使用CPU执行
  • 阻塞状态Blocked进程因等待某个事件如I/O操作完成而无法继续执行
  • 终止状态Terminated/Zombie进程已退出但父进程尚未对其进行清理

进程的调度

操作系统通过一定的算法来决定何时以及如何将CPU分配给各个进程

  • 先来先服务FCFS, First Come First Serve
  • 短作业优先SJF, Shortest Job First
  • 优先级调度Priority Scheduling
  • 轮转法RR, Round Robin
  • 多级反馈队列Multilevel Feedback Queue

进程间的通信

  • 管道Pipe一种简单的进程间通信方法允许数据从一个进程流向另一个进程
  • 消息队列Message Queues允许进程之间发送和接收消息
  • 共享内存Shared Memory多个进程可以访问同一块内存区域用于数据共享
  • 套接字Sockets用于网络通信也可以用于同一机器上的进程通信
  • 信号Signals一种异步通信机制用于通知接收进程发生了特定的情况

进程管理

  • 创建新进程
  • 终止进程
  • 获取进程状态
  • 设置进程优先级
  • 控制进程间通信

线程

线程的概念

线程是操作系统能够进行运算调度的最小单位它被包含在一个进程之内是进程中的实际运作单位一个进程至少包含一个线程也可以包含多个线程每个线程都有一个唯一的标识符TID并且有自己的程序计数器寄存器集合和栈

线程的优点

  • 开销小创建和销毁线程比创建和销毁进程的开销要小得多
  • 通信方便由于线程共享同一进程的地址空间因此它们可以直接访问同一内存中的数据简化了进程间通信
  • 并发性多线程可以实现真正的并行计算特别是在多核处理器环境下

线程的状态

  • 新建状态New线程对象已经被创建但尚未启动
  • 就绪状态Runnable线程已经准备好了等待CPU时间片来执行
  • 运行状态Running线程正在使用CPU执行
  • 阻塞状态Blocked线程因等待某种条件如等待输入输出完成而暂时停止执行
  • 死亡状态Dead/Terminated线程已经执行完毕或因异常而终止

线程的生命周期

  • 创建通过创建线程对象初始化线程
  • 启动调用线程的启动方法使线程进入就绪状态
  • 执行线程开始执行其任务
  • 阻塞线程因某种原因暂停执行等待条件满足后恢复执行
  • 结束线程执行完毕或因异常而终止

线程的调度

操作系统使用调度算法来决定何时以及如何将CPU分配给各个线程

  • 先来先服务FCFS, First Come First Serve
  • 轮转法RR, Round Robin
  • 优先级调度Priority Scheduling

线程间的通信

由于线程共享同一进程的地址空间它们可以通过直接访问共享内存来相互通信然而为了防止数据竞争和死锁需要采取适当的同步措施

线程间的同步

线程间同步是为了确保共享资源的正确访问防止竞态条件Race Condition和死锁Deadlock等问题

  • 互斥锁Mutex用于保护临界区Critical Section确保一次只有一个线程可以访问共享资源
  • 信号量Semaphore用于控制多个线程对资源的访问次数
  • 条件变量Condition Variable用于线程间的等待和通知机制
  • 原子操作Atomic Operations提供不可分割的操作用于更新共享数据

线程的管理

  • Java通过Thread类和Runnable接口创建和管理线程
  • C/C++使用POSIX线程库pthread或其他第三方库如Boost.Thread
  • Python使用threading模块创建和管理线程

死锁

死锁是多线程或多进程编程中常见的一个问题它发生在两个或多个进程或线程互相等待对方持有的资源而不释放自己持有的资源的情况下导致所有相关进程都无法继续执行下去死锁的发生会导致程序停滞不前直到系统干预或者重启程序

死锁的必要条件

⭐⭐ 死锁的发生必须同时满足以下四个条件

  • 互斥条件Mutual Exclusion至少有一个资源必须被独占即一次只能被一个进程使用
  • 保持和等待条件Hold and Wait一个进程已经持有一个资源但又尝试获取额外的资源而这些资源已被其他进程持有
  • 无抢占条件No Preemption资源请求者不能强行从资源占有者手中抢夺资源资源只能由占有者主动释放
  • 循环等待条件Circular Wait若干进程之间形成了一种循环等待链每个进程都在等待下一个进程所持有的资源

死锁的示例

假设一个简单的死锁情况有两个进程P1和P2它们都需要两种资源R1和R2才能完成任务
P1获得了资源R1然后尝试获得资源R2
P2获得了资源R2然后尝试获得资源R1
此时P1等待R2P2等待R1两者都无法继续执行形成了死锁

死锁的检测

⭐⭐ 为了避免死锁的发生可以通过以下几种方式来检测或预防死锁

  • 银行家算法Banker’s Algorithm这是一种经典的算法用于检测和避免死锁银行家算法通过模拟资源分配判断系统是否处于安全状态
  • 资源分配图Resource Allocation Graph使用图形表示资源和进程之间的关系通过检查图中是否存在环路来确定是否有死锁
  • 超时和重试当请求资源时设置超时时间超过一定时间未获取资源则放弃请求从而避免无限等待
  • 顺序加锁对于需要同时锁定多个资源的情况按照固定的顺序加锁这样可以避免循环等待

死锁的预防

⭐⭐ 除了检测之外还可以采取一些措施来预防死锁的发生

  • 破坏互斥条件尽可能让资源能够被共享使用而不是独占
  • 破坏保持和等待条件进程在请求新的资源之前必须释放已占有的资源
  • 破坏无抢占条件允许系统强制抢占某些资源从而打破死锁
  • 破坏循环等待条件对资源请求进行排序确保不会形成循环等待

死锁的避免

⭐⭐ 除了预防之外还可以通过算法来避免死锁

  • 银行家算法在每次分配资源之前先检查系统是否处于安全状态只有当系统处于安全状态时才分配资源
  • 资源预留在请求资源之前预留所需的资源确保一次性获得所需的所有资源

死锁的解除

⭐⭐ 一旦检测到死锁可以通过以下几种方式来解除

  • 撤销进程终止一个或多个死锁进程释放资源
  • 回滚进程将进程状态回滚到一个之前的安全点再次尝试获取资源
  • 优先级继承如果一个低优先级进程持有另一个高优先级进程所需要的资源那么低优先级进程将继承高优先级进程的优先级

注意事项

  • 尽量减少锁的使用尽可能使用无锁编程技术如原子操作CAS操作等
  • 锁粒度的选择合理选择锁的粒度过大可能导致争用过小可能导致过多的开销
  • 锁的顺序如果有多个锁需要获取应按照固定的顺序获取以避免循环等待
  • 使用高级同步工具利用高级的同步工具如SemaphoreConditionFuture等它们提供了更丰富的功能来帮助避免死锁

内存管理

内存管理是操作系统中的一个重要组成部分它负责管理和分配计算机的内存资源确保程序能够有效地使用内存并避免内存冲突和泄漏等问题内存管理不仅影响系统的性能还直接影响到程序的稳定性和安全性

内存管理的基本概念

⭐⭐ 物理内存Physical Memory

计算机硬件中的RAM是直接可以被CPU访问的实际存储器

⭐⭐ 虚拟内存Virtual Memory

通过地址映射技术操作系统为每个进程提供了一个抽象的地址空间这个地址空间的大小通常大于物理内存的大小虚拟内存可以包括物理内存的一部分和硬盘上的交换分区Swap Space

内存管理的主要目标

  • 内存分配Memory Allocation为进程分配足够的内存空间
  • 内存保护Memory Protection防止一个进程访问不属于它的内存区域
  • 内存共享Memory Sharing允许多个进程共享相同的内存区域例如共享库
  • 内存回收Garbage Collection自动回收不再使用的内存

内存管理的技术

地址映射技术

  • 连续分配Contiguous Allocation每个进程在内存中占据一块连续的空间这种方法简单但容易导致内存碎片
  • 分页Paging将内存划分为固定大小的页面每个页面可以独立地映射到虚拟地址空间中的页框这种方法可以有效减少内存碎片提高内存利用率
  • 分段Segmentation将内存划分为逻辑段每段对应进程中的一个逻辑部分如代码段数据段这种方法便于实现内存保护和共享
  • 段页式Segmentation with Paging结合了分页和分段的优点每个段内部再分成页既实现了逻辑上的分段又减少了内存碎片

内存分配算法

  • 首次适应算法First Fit从头开始搜索空闲列表找到第一个足够大的空闲块
  • 最佳适应算法Best Fit遍历空闲列表找到最接近所需大小的空闲块
  • 最差适应算法Worst Fit遍历空闲列表找到最大的空闲块

内存置换算法

  • 最近最少使用LRU, Least Recently Used置换最近最少使用的页面
  • 先进先出FIFO, First In First Out置换最早进入内存的页面
  • 最优置换算法Optimal Replacement理论上最好的置换算法但它需要未来访问信息因此在实际中难以实现

内存管理的实现

操作系统层面

  • 内存映射Memory Mapping操作系统维护一张虚拟地址到物理地址的映射表使得进程可以在虚拟地址空间中操作内存
  • 页面调度Page Scheduling管理页面在物理内存和交换分区之间的迁移
  • 内存保护机制通过对内存区域设置权限执行防止非法访问

编程语言层面

  • 手动管理开发者需要显式地分配和释放内存如C/C++中的malloc()和free()
  • 自动管理一些高级语言如JavaPython提供了垃圾回收机制自动回收不再使用的内存

内存管理的挑战

  • 内存碎片长期使用后内存中可能会出现大量的小块空闲空间使得无法分配大块的连续内存
  • 性能瓶颈频繁的内存分配和回收会影响程序的性能
  • 内存泄漏忘记释放不再使用的内存导致可用内存逐渐减少

内存管理的最佳实践

  • 避免内存碎片使用分页或分段技术来减少碎片
  • 及时释放内存在不再需要内存时立即释放避免内存泄漏
  • 合理分配内存根据实际情况选择合适的内存分配算法
  • 使用内存池对于频繁分配和释放的小对象可以使用内存池技术来提高性能
  • 内存泄漏检测定期检查程序中的内存泄漏问题并及时修复

局部性原理

局部性原理Principle of Locality是计算机科学中的一个重要概念它描述了程序访问内存的行为特征根据局部性原理程序倾向于重复访问最近访问过的内存位置或附近的内存位置这一原理被广泛应用于优化计算机系统的性能特别是在缓存设计和虚拟内存管理方面

局部性原理的分类

  • 时间局部性Temporal Locality
    • 如果一个项目被引用则在不久的将来很可能再次被引用
    • 例如程序中的循环结构常常会反复访问相同的数据这就是时间局部性的体现
  • 空间局部性Spatial Locality
    • 如果一个项目被引用则在不久的将来很可能访问其附近的其他项目
    • 例如在数组遍历过程中程序往往会连续访问数组中的元素这体现了空间局部性

局部性原理的应用

缓存设计

  • CPU缓存CacheCPU缓存是位于CPU内部或非常靠近CPU的高速存储器用于存储最近经常访问的数据或指令通过利用时间局部性CPU缓存可以显著减少访问主内存的次数从而提高性能
  • 磁盘缓存在磁盘读写过程中操作系统通常会缓存最近读取或写入的数据块利用空间局部性来减少磁盘访问的次数
  • Web缓存在互联网中Web缓存服务器会存储最近请求的网页内容利用时间局部性来减少对外部服务器的请求

虚拟内存管理

  • 分页机制Paging在分页机制下操作系统将内存划分为固定大小的页面通过预测程序的访问模式操作系统可以提前将可能需要访问的页面加载到物理内存中从而提高性能
  • 页面置换算法Page Replacement Algorithms在物理内存不足时操作系统需要决定哪些页面可以从物理内存中替换出去基于局部性原理操作系统会选择那些最近未被访问过的页面进行置换

数据结构和算法

  • 数组遍历在遍历数组时数据通常是连续存储的因此可以充分利用空间局部性来提高访问速度
  • 哈希表哈希表通过哈希函数将键映射到特定的位置这有助于利用空间局部性来快速查找数据

局部性原理的优化技术

  • 预取Prefetching系统预测将来可能需要的数据并提前将其加载到缓存中预取技术广泛应用于CPU缓存磁盘缓存等领域
  • 缓存一致性Cache Coherence在多处理器系统中保证各缓存之间数据的一致性避免数据冲突
  • 缓存替换策略Cache Replacement Policies如LRU最近最少使用LFU最不经常使用等算法用于决定何时替换缓存中的数据

局部性原理的局限性

  • 冷启动问题Cold Start Problem初次启动时缓存可能为空此时局部性原理的优势无法发挥
  • 伪局部性False Locality如果程序的访问模式不符合局部性原理例如随机访问模式那么基于局部性的优化可能会失效
  • 数据稀疏性Data Sparsity在某些应用中数据分布非常稀疏导致空间局部性较弱缓存效果不佳

学习资源

  • 视频
  • 书籍
    • 编码
    • 30天自制操作系统
    • 现代操作系统难度较大不推荐新手看
    • 深入理解计算机系统难度较大不推荐新手看
    • 自己动手写操作系统国产好书网上可以下载
  • 大学课件