操作系统笔记

本文详细介绍了操作系统的定义、功能、特征和发展,涵盖了进程与线程、处理机调度、进程同步与死锁、存储管理和I/O管理等内容。操作系统作为系统软件,协调硬件和软件资源,提供用户接口。文章还深入讨论了进程的状态转换、调度算法、存储空间管理和I/O设备控制等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作系统

1、概述

1.1 定义

  1. 负责管理协调硬件、软件等计算机资源的工作
  2. 为上层的应用程序、用户提供简单易用的服务(提供接口)
  3. 操作系统是系统软件,而不是硬件

在这里插入图片描述

1.2 操作系统的功能

  1. 处理机管理
  2. 存储器管理
  3. 设备管理
  4. 文件管理

1.2.1 进程调度

1.2.2 为用户提供服务(接口):

  • 命令接口:允许用户直接使用(联机命令接口、脱机命令接口)
  • 程序接口:(由一组**系统调用(也称广义指令)**组成):允许用户通过程序间接使用
  • GUI:现代操作系统中最流行的图形用户接口

1.3 特征

  1. 并发:
  • 并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。
  • 并行:指两个或多个事件在同一时刻同时发生。
  1. 共享
  • 互斥共享方式(如:同一段时间内摄像头只能分配给其中一个进程)
  • 同时共享方式(如:对硬盘资源的共享使用)
  1. 虚拟
  • 空间复用技术(如虚拟存储器)
  • 时分复用技术(如处理器的分时共享)
  1. 异步

多道程序环境允许多个程序并发执行,但由于资源有限,如cpu只有一个,进程的执行并不是一贯到底的,而是走走停停的,它以不可预知的速度向前推进。

1.4 OS的发展和分类

  1. 手工操作阶段

  2. 批处理阶段

  • 单道批处理系统(缺:内存仅能有一道程序运行,资源利用率低)
  • 多道批处理系统(操作系统开始出现,并引进中断技术,各程序可并发执行;缺:没有人机交互功能)
  1. 分时操作系统
  • (以时间片为单位轮流为各个用户服务,实现人机交互功能,缺:平均时间,无应对紧急任务的能力)
  1. 实时操作系统
  • (主要特点:及时性和可靠性;优:能及时处理紧急任务)
    • 硬实时系统(必须在绝对严格的规定时间内完成处理)
    • 软实时系统
  1. 网络操作系统
  • (实现网络资源的共享和各计算机之间的通信)
  1. 分布式操作系统
  • (主要特点:分布性和并发性)
  1. 个人计算机操作系统

1.5 OS的运行机制和体系结构

1.5.1 运行机制

  1. 两种指令

    • 特权指令(如:内存清零指令)
    • 非特权指令
  2. 两种处理器状态(通过寄存器PSW的标志位来识别)

    • 核心态
    • 用户态(CPU只能执行非特权指令)
  3. 两种程序

    • 内核程序

    • 应用程序(只能执行非特权指令)

1.5.2 操作系统内核功能

  1. 时钟管理:实现计时功能

  2. 中断处理

  3. 原语(具有原子性;运行时间短,调用频繁)

  4. 对系统资源进行管理的功能

    • 进程管理
    • 存储器管理
    • 设备管理

1.5.3操作系统的体系结构

  • 大内核–>优:高性能,结构混乱,难以维护;缺:内核代码庞大,

  • 微内核–>优:结构清晰;缺:需频繁在核心态和用户态之间切换,性能低

1.6 中断和异常

1.6.1 中断分类:

  • 内中断(异常、例外、陷入)信号来源CPU内部,与当前执行的指令有关
    • 自愿中断——指令中断
    • 强迫中断
      • 硬件故障(如:缺页)
      • 软件中断(如:整数除零)
  • 内中断(另一种分类方式)
    • 陷阱
    • 故障
    • 终止
  • 外中断(中断)与当前执行的指令无关
    • 外设请求(I/O中断请求)
    • 人工干预(强行终止)

1.6.2 系统调用

系统调用会使处理器从用户态进入核心态,发生在用户态,执行在核心态(执行陷入指令会产生内中断,使处理器进入核心态)

  • 系统调用——(按功能分类)
    • 设备管理:完成设备的请求释放/动等功能
    • 文件管理:完成文件的读/写/创建删除等功能
    • 进程控制:完成进程的创建撒销/阻塞唤醒等功能
    • 进程通信:完成进程之间的消息传递信号传递等功能
    • 内存管理:完成内存的分配回收等功能

2、进程与线程

2.1 进程

程序段、数据段、PCB三部分组成了进程实体

2.1.1 进程的特性

  • 动态性(动态性是进程最基本的特征)
  • 并发性
  • 异步性(各进程以不可预知的速度向前推进,可能导致运行结果的不确定性)
  • 独立性(进程是资源分配、接受调度的基本单位)
  • 结构性

2.2 进程的状态

  • 运行态
  • 就绪态
  • 阻塞态–>指进程因发生某事件(如请求 I/O、申请缓冲空间等)而暂停执行时的状态
  • 创建态–>进程正在被创建,操作系统为进程分配资源、初始化PCB
  • 终止态

2.2.1 进程状态的转换

在这里插入图片描述

2.3 进程的控制

用原语实现进程控制,原语采用“关中断指令”和“开中断指令”实现

2.3.1 进程映像

一般由程序、数据、栈、PCB组成

2.3.2 PCB(控制代码块)

  1. 进程描述信息(PCB是进程存在的唯一标志)

    • 进程标识符PID
    • 用户标识符UID
  2. 进程控制和管理信息

    • 进程当前状态

    • 进程优先级

  3. 资源分配清单

    • 程序段指针、数据段指针、键盘、鼠标
  4. 处理机相关信息

    • 各种寄存器值

2.3.3 原语操作

  1. 更新PCB中的信息
  2. 将PCB插入适合的队列
  3. 分配/回收资源

2.3.2 相关原语

  • 进程的创建
  • 进程的终止
  • 进程的阻塞
  • 进程的唤醒(阻塞和唤醒要成对出现)
  • 进程的切换

2.4 进程的组织

  • 链接方式
  • 索引方式

2.5 进程的通信

  • 共享存储(两个进程对共享空间的访问必须是互斥的)
    • 基于数据结构的共享
    • 基于存储区的共享(速度快)
  • 消息传递(进程间的数据交换以格式化的消息为单位)
    • 直接通信方式(直接挂到进程的消息缓冲队列)
    • 间接通信方式(通过中间体(信箱))
  • 管道通信(半双工通信

2.6 线程、多线程模型

引进线程:可增加并发度,减少并发带来的开销
线程是处理机调度的单位,进程是资源分配的单位

  1. 线程的实现方式
    • 用户级线程(所有的线程管理工作都由应用程序负责(包括线程切换))
    • 内核级线程(内核级线程的管理工作由操作系统内核完成。)
    • 组合方式(操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。)
  2. 多线程模型
    • 多对一(优:进程管理开销小效率高、、缺:一个线程阻塞会导致整个进程都被阻塞(并发度低))
    • 一对一(优:进程管理开销大、、缺:各个线程可分配到多核处理机井行执行,并发度高)
    • 多对多(集二者之所长)

在这里插入图片描述

3、 处理机调度

按照一定的算法选择一个进程并将处理机分配给它运行

3.1 调度的三个层次

  1. 高级调度(作业调度):外存–>内存
  2. 中级调度(内存调度):挂起–>唤醒
  3. 低级调度(进程调度):就绪态–>运行态

进程的挂起状态与七状态模型

在这里插入图片描述

进程切换的过程主要完成了:

  1. 对原来运行进程各种数据的保存
  2. 对新的进程各种数据的恢复

3.2 进程调度

3.2.1 时机

  1. 什么时候进行进程调度?

    • 主动放弃
      • 进程正常结束
      • 因IO请求、P操作、阻塞原语等,从运行态进入阻塞态
    • 被动放弃
      • 优先级更高的进程占用
      • 时间片用完
  2. 什么时候不能进行进程调度?

    • 在处理中断的过程中
    • 进程在操作系统内核程序临界区中不能进行调度与切换
    • 原子操作过程中(原语)

3.2.2.进程调度的方式

  • 非剥夺调度方式(非抢占式)–>只能由当前运行的进程主动放弃CPU
  • 剥夺调度方式(抢占式)–>可由操作系统剥夺当前进程的CPU使用权

3.2.3 调度算法的评价指标

在这里插入图片描述

3.3 调度算法

3.3.1 先来先服务(FCFS)

非抢占式的算法

3.3.2 短作业优先(SJF)

追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间

最短的作业先服务

SJF是非抢占式的算法

也有抢占式的算法–最短剩余时间优先算法(SRTN

3.3.3 高响应比优先(HRRN)

响应比:(等待时间+要求服务时间)/要求服务时间

非抢占式的算法


3.3.4 时间片轮转调度算法(RR)

各进程轮流执行一个时间片的时间

抢占式算法

3.3.5 优先级调度算法

非抢占式:执行完一个进程再按优先级次序进行调度

抢占式:当执行时发现有更高优先级的进程到达就绪队列,则立即发生调度

3.3.6 多级反馈队列调度算法

抢占式算法


4、进程同步与死锁

4.1 进程同步

并发性带来了异步性,进程同步是为了解决进程的异步问题。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。
有的进程之间需要相互配合地完成工作,各进程的工作推进需要遵循一定的先后顺序。

4.2 进程互斥

进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。
即同一时间段内只能允许一个进程访问该资源(临界资源)。

4.2.1 临界资源

只允许一个进程访问的共享资源称为临界资源。

4.2.2 临界资源的访问过程

  1. 进入区:检查是否可进入临界区,若可进入,需要“上锁”
  2. 临界区:访问临界资源的那段代码
  3. 退出区:负责解锁
  4. 剩余区:其他代码

4.2.3 临界区访问准则

  1. 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
  2. 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待;
  3. 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿);
  4. 让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

4.3 互斥的软件实现方法

  1. 单标志法
  2. 双标志先检查
  3. 双标志后检查
  4. Peterson算法
    1. 在进入区"主动争取一主动谦让—检查对方是否想进、己方是否谦让"
      主要问题:不遵循"让权等待"原则,会发生“忙等”

4.4 互斥的硬件实现方法

  1. 中断屏蔽方法
  2. TestAndSet(TS指令/TSL指令)
  3. Swap指令 (XCHG指令)

4.5 信号量机制

一对原语:wait(S)原语、signal(S)原语,简称P(S)、V(S)操作

  1. 整型信号量
    1. 用一个整数型变量作为信号量,数值表示某种资源数
    2. 整型信号量与普通整型变量的区别:对信号量只能执行 初始化、P、V 三种操作
    3. 整型信号量存在的问题:不满足让权等待原则
  2. 记录型信号量
    1. S.value 表示某种资源数,S.L 指向等待该资源的队列
    2. P 操作中,一定是先S.value–之后可能需要执行 block 原语
    3. V 操作中,一定是先S.value++,之后可能需要执行 wakeup 原语
    4. 注意:要能够自己推断在什么条件下需要执行 block或wakeup
    5. 可以用记录型信号量实现系统资源的“申请”和“释放”
    6. 可以用记录型信号量实现进程互斥、进程同步
  3. AND型信号量

4.6 经典的进程同步问题

  1. 生产者-消费者问题
  2. 多生产者-多消费者问题
  3. 读者-写者问题
  4. 哲学家进餐问题
  5. 吸烟者问题
  6. 打瞌睡的理发师问题

4.7 管程

为了解决信号量机制编程麻烦、易错的问题

4.8 死锁

死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进。
饥饿:由于长期等待得不到想要的资源,无法向前推进。

4.8.1 产生死锁的必要条件

  1. 互斥条件
  2. 部分分配(占有且等待)条件
  3. 不可抢占(非剥夺)条件
  4. 循环等待条件

4.8.2 什么时候会发生死锁?

  1. 各进程对不可剥夺的资源(如打印机)的竞争
  2. 请求和释放资源的顺序不当
  3. 实现互斥的P操作在实现同步的P操作之前

4.8.3 死锁的处理策略

  1. 预防死锁:破坏死锁产生的四个必要条件中的一个或几个。

  2. 避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)

    1. 安全序列、安全状态、不安全状态
    2. 避免系统进入不安全状态------银行家算法
  3. 死锁的检测和解除:允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措
    施解除死锁。

  4. 死锁的检测

  5. 解除死锁的主要方法有:

    1. 资源剥夺法:挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿。
    2. 撤销进程法(或称终止进程法):强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一旦被终止可谓功亏一赛,以后还得从头再来。
    3. 进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。

5、存储管理

5.1 存储

内存可存放数据。程序执行前需要先放到内存中才能被CPU处理-----缓和CPU与硬盘之间的速度矛盾

指令的工作原理—操作码+若干参数(可能包含地址参数)

5.1.1 地址空间

  • 逻辑地址(相对地址)
  • 物理地址(绝对地址)

5.1.2 从写程序到程序运行—编译、链接、装入

编译:由编译程序将用户源代码编译成若干个目标模块(编译就是把高级语言翻译为机器语言
链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块
装入(装载):由装入程序将装入模块装入内存运行

5.1.3 链接的三种方式

1.静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块)之后不再拆开。
2.装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
3.运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。

5.1.4 装入的三种方式

绝对装入:编译时产生绝对地址

静态重定位:装入时将逻辑地址转换为物理地址

动态重定位:运行时将逻辑地址转换为物理地址,需设置重定位寄存器

5.2 内存管理

1.操作系统负责内存空间的分配与回收
2.操作系统需要提供某种技术从逻辑上对内存空间进行扩充(实现虚拟性)

5.2.1 地址转换
操作系统负责实现逻辑地址到物理地址的转换
三种方式
1.绝对装入:编译器负责地址转换(单道程序阶段,无操作系统)
2.可重定位装入:装入程序负责地址转换(早期多道批处理阶段)
3.动态运行时装入:运行时才进行地址转换(现代操作系统)

5.2.2 存储保护

保证各进程在自己的内存空间内运行,不会越界
两种方式
1.设置上下限寄存器
2.利用重定向继勋奇、界地址寄存器进行判断

5.2.3 内存空间扩充

  1. 覆盖技术
  2. 交换技术
  3. 覆盖与交换的区别

5.2.4 内存空间的分配与回收

5.2.4.1 连续分配管理方式

  1. 单连续分配
  2. 固定分区分配
  3. 动态分区分配
    1. 动态分区分配算法:
      1. 首次适应算法(First Fit)
        最佳适应算法(Best Fit)
        最坏适应算法(Worst Fit)
        邻近适应算法(Next Fit)

5.2.4.2 非连续分配管理方式

  1. 基本分页存储管理
  2. 基本分段存储管理
  3. 段页式存储管理

5.3 虚拟内存管理

5.3.1 传统存储管理的特征、缺点

一次性:作业数据必须一次全部调入内存
驻留性:作业数据在整个运行期间都会常驻内存

5.3.2 局部性原理

时间局部性:现在访问的指令、数据在不久后很可能会被再次访问
空间局部性:现在访问的内存单元周围的内存空间,很可能在不久后会被访问
高速缓存技术:使用频繁的数据放到更高速的存储器中

5.3.3 虚拟内存的定义和特征

定义:程序不需全部装入即可运行,运行时根据需要动态调入数据,若内存不够,还需换出一些数据

特征

多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存。
对换性:无需在作业运行时一直常驻内存,而是允许在作业运行过程中,将作业换入、换出。
虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量。

5.3.4 实现虚拟内存技术

  1. 请求分页存储管理
  2. 请求分段存储管理
  3. 请求段页式存储管理

5.4 页面置换算法

5.4.1 算法

  1. 最佳置换算法(OPT)
  2. 先进先出置换算法(FIFO)
  3. 最近最久未使用置换算法(LRU)
  4. 时钟置换算法(CLOCK)
  5. 改进型的时钟置换算法

5.4.2 页面分配策略

**抖动(颠簸) 现象:**页面频繁换入换出的现象。主要原因是分配给进程的物理块不够
**工作集:**在某段时间间隔里,进程实际访问页面的集合,驻留集大小一般不能小于工作集大小

  1. 局部分配策略
  2. 全局分配策略

6、文件管理

6.1 磁盘组织与管理

6.1.1 磁盘的结构(磁盘、磁道、扇区、盘面、柱面、磁头)

磁盘的物理地址—>(柱面号,盘面号,扇区号)

6.1.2 磁盘调度算法

一次磁盘读/写操作需要的时间:寻找时间、延迟时间、传输时间

  • 先来先服务(FCFS)
  • 最短寻找时间优先 (SSTF)
  • 扫描算法(SCAN)
  • 循环扫描算法(C-SCAN)

减少延迟时间的方法:交替编号、错位命名、磁盘地址结构的设

6.1.3 磁盘的管理

  • 磁盘初始化

  • 引导块

  • 坏块的管理

6.2 文件的基础知识

6.2.1 文件的定义:
一组有意义的信息的集合

6.2.2 文件的逻辑结构

  • 无结构文件(流式文件)

  • 有结构文件(记录式文件)

    • 顺序文件
    • 索引文件
    • 索引顺序文件

6.2.3 文件的物理结构(文件分配方式)

  • 连续结构(分配)
  • 链接结构
    • 隐式链接
    • 显式链接
  • 索引结构

6.2.4 文件目录

文件控制块(实现文件目录的关键数据结构)

目录结构:

  • 单级目录结构
  • 两级目录结构
  • 多级目录结构(树形目录结构)
  • 无环图目录结构

索引结点(对文件控制块的优化)

6.2.5 文件共享

  • 基于索引结点的共享方式(硬链接)
  • 基于符号链的共享方式(软链接)

6.2.6 文件保护

  • ☐令保护
  • 加密保护
  • 访问控制

6.3 存储空间

6.3.1 概念

空闲区表

位示图

6.3.2 管理方法

  • 空闲表法
  • 空闲链表法
  • 位示图法
  • 成组链接法

6.4 文件基本操作

  • 创建文件(create系统调用)
  • 删除文件(delete系统调用)
  • 读文件(read系统调用)
  • 写文件(write系统调用)
  • 打开文件(open系统调用)
  • 关闭文件(close系统调用)

7 、 I/O管理

7.1 I/O设备基础

7.1.1 概念

将数据 Input/Output(输入/输出)计算机的外部设备

7.1.2 分类

  • 按使用特性分类
    • 人机交互类外部设备
    • 存储设备
    • 网络通信设备
  • 按传输速率分类
    • 低速设备
    • 中速设备
    • 高速设备
  • 按信息交换的单位分类
    • 块设备(传输快,可寻址)
    • 字符设备(传输慢,不可寻址,常采用中断驱动方式)

7.2 I/O设备控制

7.2.1 I/O控制器的功能

  • 接受和识别CPU发出的命令
  • 向CPU报告设备的状态
  • 数据交换
  • 地址识别

7.2.2 I/O控制器的两种寄存器编址方式

  • 内存映像
  • 寄存器独立编址

7.2.3 I/O设备的方式

  • 程序直接控制方式
  • 中断驱动方式
  • DMA方式
  • 通道控制方式

7.2.4 l/O软件层次

  1. 用户层软件
  2. 设备独立性软件
    六大功能
    逻辑设备表—LUT
    不同的设备需要不同的驱动程序
  3. 设备驱动程序
  4. 中断处理程序

7.3 I/O核心子系统

7.3.1 功能

用户层软件:假脱机技术(SPOOLing技术)

设备独立性软件:I/O调度、设备保护、设备分配与回收、缓冲区管理(即缓冲与高速缓存管理)

7.3.2 假脱机技术(SPOOLing)

  • 脱机技术
  • 假脱机技术
  • 共享打印机

7.3.3 分配与回收(DCT-COCT-CHCT-SDT)

7.3.4 缓冲区管理(单缓冲-双缓冲-循环缓冲-缓冲池)

一般利用内存作为缓冲区
缓解CPU与设备的速度矛盾、减少对CPU的中断频率、解决数据粒度不匹配的问题、提高CPU与I/O设备之间的并行性

  • 单缓冲
  • 双缓冲
  • 循环缓冲
  • 缓冲池
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值