概述
操作系统(OS,Operating System)
- 管理系统的硬件、软件、数据资源
- 控制程序运行
- 人机之间的接口
- 应用软件与硬件之间的接口
任务
- 进程管理
- 存储管理
- 文件管理
- 作业管理
- 设备管理
进程管理
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单元。它由程序块、进程控制块(PCB:是进程存在的唯一标志。内容包含进程标识符、状态、位置信息、控制信息、队列指针(链接同一状态的进程)、优先级、现场保护区等)和数据块三部分组成
- 进程可拥有资源的独立单元
- 进程可独立调度和分配资源的基本单位
进程 vs 程序
- 区别:进程是程序的一次执行过程,没有程序就没有进程
- 程序是一个静态的概念,而进程是一个动态的概念,它有创建而产生,完成任务后因撤销而消亡
- 进程是系统进行资源分配和调度的独立单元,而程序不是
进程 vs 线程
线程只能被独立调度,不可分配资源。多个线程可共享进程中的某些资源(内存地址空间、代码、数据、文件等),但是线程中的程序计数器、寄存器、栈都是独立的
进程状态
进程同步 & 互斥
- 互斥:多个进程都要访问同一资源(临界资源:多个进程间需要互斥方式对其进行共享的资源。Case:打印机、缓冲区)。由于临界资源问题,多个进程之间是间接制约关系
- 同步:多个进程间存在依赖关系,多个进程都到达同一位置后才能继续。多个进程之间是直接制约关系。先后顺序的影响
- 临界区:每个进程中访问临界资源的那段代码称为临界区
PV操作
- P操作:荷兰语的 Passeren。对资源(S)加锁(占用资源),之后会检查资源是否充足,如果不足就会进入阻塞队列
- V操作:荷兰语的 Verhoog。对资源(S)解锁(释放资源)之后检查是否有阻塞队列(S <= 0),如果有则唤醒阻塞进程
- 信号量 S:一种特殊的变量。全局变量。表示资源数量或者排队进程数(S < 0 时),S 初值表示资源个数
- 互斥模型信号量(S)初始值为1
- PV操作一定是成对存在的
前驱图 PG(Precedence Graph)
有向无环图,节点表示进程,箭头表示进程之间的依赖关系。可以体现直接制约(同步)关系。箭头流出对应V操作,箭头流入对应P操作
死锁
如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁
存储管理
页式存储
将程序和内存均划分为同样大小的块,以页为单位将程序调入内存。程序使用逻辑地址(逻辑地址 = 页号 + 页内地址),内存使用物理地址(物理地址 = 页帧号(物理块号) + 页内地址),两者使用页表一一对应。
- 优点:利用率高,碎片小,分配及管理简单
- 缺点:增加了系统开销;可能产生抖动现象
页面淘汰原则:状态位1 & 访问位0 & 修改位0
段式存储
按用户作业中的自然段来划分逻辑空间,然后调入内存,段的长度(段长)可以不一样。 逻辑段地址 = (段号, 段内偏移量)。物理地址 = 基址 + 段内偏移量
- 优点:多道程序共享内存,各段程序修改互不影响
- 缺点:内存使用率低,内存碎片浪费大
段页式存储
段氏和页式的综合体。先分段,再分页。一个程序中有若干个段,每个断中可以有若干页,每个页大小相同,但每个段的大小不同。段页式地址 = 段号 + 页号 + 页内地址
- 优点:空间浪费小、存储共享容易、存储保护容易、能动态链接
- 缺点:由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内容也有所增加,使得执行速度大大下降
文件管理
- 顺序结构
- 链式结构
- 索引结构
结构 | 访问方式 | 速度 | 存储连续性 | 适用场景 |
---|---|---|---|---|
顺序结构 | 直接计算偏移 | 最快 | 必须连续 | 大文件、顺序读写 |
链式结构 | 顺序查找指针 | 慢 | 无需连续 | 日志、存储小文件 |
索引结构 | 直接查索引表 | 快 | 无需连续 | 数据库、大型文件系统 |
索引结构
- UNIX 默认有13个索引结点(地址指向,物理块号)
- 0-9号是直接索引方式。索引结点直接指向物理块,物理块直接保存了文件的逻辑页或数据(0到9号逻辑页)
- 10号索引结点是一级间接索引方式。索引结点指向一级间接索引表(10到
一级间接索引表个数 + 9
号逻辑页) - 11号索引结点是二级间接索引方式。经过两次间接查找才能确定物理块号
- 12号索引结点是三级间接索引方式。经过三次间接查找才能确定物理块号
- 文件在逻辑上一定是连续的,在物理上可以是分散的
空闲空间管理
空闲空间管理用于追踪磁盘上的空闲存储块,以便分配给新文件或释放已删除文件占用的空间
方法 | 主要思想 | 优点 | 缺点 |
---|---|---|---|
空闲区表法 | 记录每个空闲区域的起始地址和大小 | 适合存储连续大文件,存取快 | 可能导致碎片化 |
位示图法 | 用二进制位(0/1)表示磁盘块是否空闲 | 结构简单,占用空间小 | 查找连续空闲块可能较慢 |
链式空闲表法 | 用链表存储空闲块地址 | 易于动态管理 | 访问速度较慢 |
成组链接法 | 结合链式和块存储,提升效率 | 查找快,减少遍历 | 需要额外的存储块存索引 |
索引空闲表法 | 用索引表管理空闲块 | 支持快速查找 | 需要额外存储索引表 |
位示图法
用二进制位表示磁盘块是否空闲:
- 0:表示该块空闲
- 1:表示该块已占用
树形目录结构
- 文件属性
- R:只读文件属性
- A:存档属性
- S:系统文件
- H:隐藏文件
- 文件名组成:驱动器号 + 路径 + 主文件名 + 扩展名
- 绝对路径:是从盘符开始的路径
- 相对路径:是从当前目录开始的路径
嵌入式操作系统(EOS)
嵌入式系统主要由嵌入式硬件平台、相关支撑运满满、嵌入式操作系统、支撑软件和应用软件组成。其中,嵌入性、专用性和计算机系统是嵌入式系统的三个核心要素。典型的嵌入式系统具有以下特点:
- 系统专用性强
- 系统实时性强
- 软硬件依赖性强
- 处理器专用
- 多种技术紧密结合
- 系统透明性
- 系统资源受限
- 嵌入式操作系统特点:微型化、代码质量高、专业化、实时性强、可裁减、可配置
- 针对不同的硬件平台,操作系统通常建立在一个硬件抽象层(HAL,与硬件相关,与操作系统相关,也称 BSP(板级支撑包))上,该层位于底层硬件和内核之间,为内核提供各种方便移植的宏定义接口,在不同的平台间移植时,只需要修改宏定义即可
- 宿主机和目标机之间需要建立逻辑连接和物理线路的连接
- 在宿主机上必须采用交叉编译器来生成目标机的可执行代码
硬件抽象层
硬件抽象层(Hardware Abstraction Layer,简称 HAL)是嵌入式操作系统中的一种软件结构,它为上层应用程序和硬件之间提供了一个抽象接口。通过 HAL,操作系统和应用程序可以不直接依赖硬件的具体实现,而是通过标准接口与硬件进行交互。简而言之,HAL 使得硬件操作和具体的硬件平台无关,让应用层代码可以 在不同硬件平台之间移植,而不需要修改应用代码。
- 硬件抽象层将操作系统和硬件平台隔开
- 硬件抽象层使软硬件的设计与调试可以并行
- 硬件抽象层与硬件密切相关,可对操作系统隐藏硬件的多样性
作用 | 描述 |
---|---|
硬件抽象 | 为上层应用和操作系统提供硬件无关接口,屏蔽具体硬件的差异。 |
硬件移植性 | 使得操作系统和应用程序能够在不同硬件平台上运行,提高了系统的移植性。 |
简化开发 | 降低硬件开发的复杂性,开发者只需关注 HAL 提供的接口,而不必深入理解硬件细节。 |
统一接口 | 提供统一的硬件访问接口,不同硬件可以实现相同的接口,从而简化了多硬件平台的支持。 |
硬件资源管理 | 管理硬件资源,如中断、时钟、存储器、外设接口等,使操作系统能统一管理这些资源。 |
嵌入式系统开发设计 - 交叉开发环境
嵌入式系统开发设计 - 低功耗设计
基于硬件的低功耗设计
- 板级电路低功耗设计
- 选择低功耗处理器
- 总线的低功耗设计
- 接口驱动电路的设计
- 分区分时供电技术
基于软件的低功耗设计
- 编辑优化技术:指令开销
- 软件与硬件的协同设计:硬件功能交由软件完成,减少硬件规模,从而降低电路功耗
- 算法优化:低时间复杂度
实时操作系统(RTOS)
实时性能指标
- 任务切换时间
- 中断处理相关的时间指标
- 中断延迟时间
- 中断响应时间
- 系统响应时间:对用户的输入和请求做出反应的时间
- 信号量混洗时间:指从一个任务释放信号量到另一个等待该信号量的任务被激活的时间延迟
多任务调度算法
大多数 RTOS 调度算法都是抢占式方式(可剥夺方式)
优先级调度算法
分配一个相对固定的优先顺序,然后调度程序根据优先级的高低排序,按时间顺序进行高优先级任务优先调度(非抢占式)
抢占式优先级调度算法
在优先级调度算法基础上,允许高优先级任务抢占低优先级任务而运行
时间轮转调度算法
调度程序会依次调度每个任务运行一个小的时间片,然后再调度另一个任务,每个任务运行完一个时间片,无论是否结束都会释放 CPU 让下一个任务运行(纯粹的时间轮转调度无法满足实时系统的要求,取而代之的是基于优先级的抢占式时间轮转调度)
最晚截止期调度算法
调度程序按每个任务的最接近其截止期末端的时间进行调度
最早截止期调度算法
调度程序按每个任务的截止期时间,选择最早到截止期头端时间的任务进行调度