嵌入式系统设计师软考个人笔记<4>

一、操作系统概述

1.1 操作系统定义与作用

操作系统是管理和控制计算机硬件与软件资源的系统软件,作为用户与计算机硬件之间的接口,为用户和应用程序提供良好的运行环境。

1.2 操作系统的主要功能

  1. 资源管理:高效管理CPU、内存、I/O设备等硬件资源

  2. 程序控制:控制程序执行,改善人机交互

  3. 环境优化:合理组织工作站配置,提升系统性能

1.3 操作系统的基本特性

并发性 (Concurrency)
  • 定义:多个进程在同一时间段内交替执行

  • 实现:通过时间片轮转、优先级调度等机制

  • 与并行区别:并发是宏观上的同时,微观上交替;并行是真正的同时执行

共享性 (Sharing)
  • 资源共享方式

    • 互斥共享:如打印机、磁带机(临界资源)

    • 同时访问:如磁盘、内存(可分时复用)

虚拟性 (Virtualization)
  • 核心技术:SPOOLing(假脱机)技术

  • 实现原理:使用物理设备模拟虚拟设备

  • 应用示例

    • 虚拟内存:小内存运行大程序

    • 虚拟打印机:多用户共享打印设备

异步性 (Asynchronism)
  • 定义:多个进程以不可预知的速度向前推进

  • 原因:资源竞争、调度算法、外部事件等

  • 管理策略:同步机制(信号量、管程等)

二、进程管理

2.1 进程定义与组成

进程概念模型
复制代码
┌─────────────────────────────────┐
│          进程实体               │
├─────────────────────────────────┤
│ 程序块   │ 数据块   │ 进程控制块 │
│ (代码段) │ (数据段) │   (PCB)   │
└─────────┴──────────┴───────────┘
进程与程序的区别
对比维度 程序 进程
存在形式 静态的指令集合 动态的执行过程
生命周期 永久存储 创建→运行→终止
组成结构 代码文件 PCB+程序+数据
资源分配 不参与分配 资源分配的基本单位

2.2 进程状态与转换

三态模型及其转换

状态说明

  1. 就绪态:具备运行条件,等待CPU分配

    • 特点:所有资源就绪,只缺CPU
  2. 运行态:正在CPU上执行

    • 特点:占用CPU,执行指令
  3. 等待态:等待某种事件发生

    • 特点:不占用CPU,等待I/O等事件

2.3 进程同步与互斥

临界资源与临界区
复制代码
// 临界区示例
void critical_section() {
    enter_critical_section();  // 进入临界区
    // 访问临界资源的代码
    access_shared_resource();
    leave_critical_section();  // 离开临界区
}
信号量与PV操作

信号量定义

  • S ≥ 0:表示资源的可用数量

  • S < 0:|S|表示等待该资源的进程数

PV操作原语

复制代码
// P操作(wait操作,申请资源)
void P(semaphore S) {
    S.value--;
    if (S.value < 0) {
        block(S.queue);  // 阻塞当前进程
    }
}

// V操作(signal操作,释放资源)
void V(semaphore S) {
    S.value++;
    if (S.value <= 0) {
        wakeup(S.queue);  // 唤醒等待进程
    }
}
复制代码
同步与互斥应用实例
复制代码
// 互斥访问示例(信号量初始值=1)
semaphore mutex = 1;

// 进程A
P(mutex);
// 访问临界资源
critical_operation();
V(mutex);

// 进程B
P(mutex);
// 访问临界资源
critical_operation();
V(mutex);

// 同步示例(生产者-消费者问题)
semaphore empty = N;   // 空缓冲区数量
semaphore full = 0;    // 满缓冲区数量
semaphore mutex = 1;   // 缓冲区互斥访问

// 生产者进程
producer() {
    while (true) {
        produce_item();
        P(empty);      // 等待空缓冲区
        P(mutex);      // 申请缓冲区访问权
        put_item();
        V(mutex);      // 释放缓冲区访问权
        V(full);       // 增加满缓冲区计数
    }
}

// 消费者进程
consumer() {
    while (true) {
        P(full);       // 等待满缓冲区
        P(mutex);      // 申请缓冲区访问权
        get_item();
        V(mutex);      // 释放缓冲区访问权
        V(empty);      // 增加空缓冲区计数
        consume_item();
    }
}
复制代码

三、存储管理

3.1 存储管理目标与功能

主要功能

  • 内存分配与回收

  • 地址映射

  • 内存保护

  • 内存共享

  • 内存扩充(虚拟内存)

3.2 分区存储管理

固定分区分配

特点

  • 预先划分固定大小的分区

  • 简单但内存利用率低

  • 存在内部碎片

可变分区分配

分配算法对比

算法名称 原理 优点 缺点
首次适应 从低地址开始找第一个足够大的空闲区 简单快速 低地址端易产生碎片
最佳适应 找能满足要求的最小空闲区 减少大空闲区分割 产生大量小碎片
最坏适应 找能满足要求的最大空闲区 减少小碎片产生 大空闲区被消耗
循环首次适应 从上一次查找位置开始循环查找 空闲区分布均匀 缺乏大空闲区

3.3 分页存储管理

基本原理
复制代码
逻辑地址空间          物理地址空间
┌──────────┐        ┌──────────┐
│  页0     │        │  块2     │
│  页1─────┼───────>│  块5     │
│  页2     │        │  块8     │
│  页3─────┼───────>│  块1     │
└──────────┘        └──────────┘
    页表
地址转换过程
复制代码
逻辑地址 = 页号 + 页内偏移
        ↓
    查页表获取物理块号
        ↓
物理地址 = 物理块号 × 页大小 + 页内偏移

分页管理的优缺点

  • 优点

    • 内存利用率高

    • 碎片少(仅存在页内碎片)

    • 分配管理简单

  • 缺点

    • 程序模块化性能较差

    • 页表占用空间大

    • 需要硬件支持(MMU)

3.4 段页式存储管理

结合分段与分页的优势
复制代码
逻辑地址 = 段号 + 段内页号 + 页内偏移
        ↓
段表→找到段描述符
        ↓
页表→找到物理块号
        ↓
物理地址 = 物理块号 × 页大小 + 页内偏移

段页式特点

  • 优点

    • 结合分段和分页的优点

    • 便于程序模块化管理

    • 支持内存保护和共享

  • 缺点

    • 地址转换复杂

    • 硬件成本高

    • 需要多次访存

3.5 虚拟存储技术

虚拟内存原理
关键技术
  1. 请求分页系统

    • 部分页面装入内存

    • 页面置换算法(FIFO、LRU、OPT等)

    • 缺页中断处理

  2. 页面置换算法对比

    算法 原理 优点 缺点
    FIFO 淘汰最早进入的页面 实现简单 Belady异常
    LRU 淘汰最近最久未使用的页面 性能较好 实现复杂
    OPT 淘汰将来最长时间不用的页面 理论最优 无法实现
    Clock 循环扫描,淘汰访问位为0的页面 折中方案 可能效率低

四、设备管理

4.1 设备管理功能

核心任务

  • 设备分配与回收

  • 设备驱动与控制

  • 设备无关性实现

  • 提高设备利用率

4.2 SPOOLing技术(假脱机)

SPOOLing系统组成
复制代码
┌─────────┐    ┌─────────┐    ┌─────────┐
│ 输入井 │←──┤输入进程│←──│ 输入设备 │
└─────────┘    └─────────┘    └─────────┘
      ↓
┌─────────┐    ┌─────────┐    ┌─────────┐
│ 输出井 │───→│输出进程│───→│ 输出设备 │
└─────────┘    └─────────┘    └─────────┘
SPOOLing技术特点:
  1. 虚拟设备:将独占设备变为共享设备

  2. 速度匹配:缓解CPU与I/O设备速度差异

  3. 提高利用率:设备可被多个进程共享使用

4.3 设备分配策略

分配方式

  1. 静态分配:进程运行前分配所需全部设备

    • 优点:简单,不会死锁

    • 缺点:设备利用率低

  2. 动态分配:进程运行中根据需要分配

    • 优点:设备利用率高

    • 缺点:可能产生死锁

五、文件管理

5.1 文件目录结构

树形目录结构
复制代码
         根目录 /
         /     |     \
       bin   home   etc
              / \
          user1 user2
            /     \
        docs   downloads
路径表示
  • 绝对路径:从根目录开始的完整路径

    • 示例:/home/user1/docs/report.txt
  • 相对路径:从当前目录开始的路径

    • 示例:当前在/home/user1docs/report.txt

5.2 文件存储管理

位示图管理
复制代码
// 位示图示例:用位表示磁盘块使用情况
#define DISK_BLOCKS 1024
#define BITMAP_SIZE (DISK_BLOCKS / 8)

unsigned char bitmap[BITMAP_SIZE];

// 分配磁盘块
int allocate_block() {
    for (int i = 0; i < BITMAP_SIZE; i++) {
        for (int j = 0; j < 8; j++) {
            if (!(bitmap[i] & (1 << j))) {
                bitmap[i] |= (1 << j);
                return i * 8 + j;
            }
        }
    }
    return -1; // 无空闲块
}

// 释放磁盘块
void free_block(int block_no) {
    int i = block_no / 8;
    int j = block_no % 8;
    bitmap[i] &= ~(1 << j);
}
索引文件结构
复制代码
文件控制块(FCB)
┌─────────────┐
│ 文件属性    │
├─────────────┤
│ 直接索引    │──→数据块0
├─────────────┤   数据块1
│ 一级间接索引│──→索引块──→数据块...
├─────────────┤
│ 二级间接索引│──→索引块→索引块→数据块...
└─────────────┘

六、操作系统的现代发展

6.1 操作系统发展趋势

  1. 微内核架构:将核心功能最小化

  2. 分布式操作系统:管理多台计算机资源

  3. 实时操作系统:保证任务截止时间

  4. 嵌入式操作系统:资源受限环境优化

6.2 操作系统性能指标

  • 吞吐量:单位时间内完成的工作量

  • 响应时间:从提交请求到得到响应的时间

  • 周转时间:从作业提交到完成的时间

  • 资源利用率:CPU、内存、I/O设备的使用效率

相关推荐
克里斯蒂亚诺更新1 小时前
vue+Cesium示例中缺少要素以至于运行不起来
笔记
2501_901147831 小时前
学习笔记:单调递增数字求解的迭代优化与工程实践
linux·服务器·笔记·学习·算法
三水不滴3 小时前
计算机网络核心网络模型
经验分享·笔记·tcp/ip·计算机网络·http·https
凉、介3 小时前
静态路由探究
网络·笔记·操作系统·嵌入式
hssfscv4 小时前
Javaweb学习笔记——后端实战8 springboot原理
笔记·后端·学习
浩浩的科研笔记4 小时前
入门读物---一篇24年的负荷预测综述---逐句翻译整理版
笔记·能源
爱吃羊的老虎4 小时前
【大模型开发】学习笔记一:RAG & LangChain 实战核心笔记
人工智能·笔记·语言模型·langchain
蒸蒸yyyyzwd4 小时前
DDIA学习笔记
笔记·学习
2501_901147834 小时前
学习笔记:基于摩尔投票法的高性能实现与工程实践
笔记·学习·算法·性能优化