news 2026/3/13 4:10:21

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式系统设计师软考个人笔记<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设备的使用效率

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 3:55:56

异步革命:C++20 协程(<coroutine>)深度全解与实战指南

掌握现代 C 异步编程的终极武器 在 C20 正式引入协程&#xff08;Coroutines&#xff09;之前&#xff0c;异步编程长期依赖回调、Future/Promise 或第三方库&#xff08;如 Boost.Asio、cppcoro&#xff09;&#xff0c;代码复杂、调试困难、可读性差。如今&#xff0c; 标准库…

作者头像 李华
网站建设 2026/3/10 12:54:44

开题报告 springboot和vue申请书杂志社订户信息管理系统

目录 系统概述技术栈说明核心功能模块系统优势应用场景 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 系统概述 SpringBoot和Vue结合的杂志社订户信息管理系统是一个前后端分离的现代化管理系统&#x…

作者头像 李华
网站建设 2026/3/11 20:09:47

第1章 Java语言概述----Java程序运行机制及运行过程

1.4 Java语言运行机制及运行过程 Java语言的特点 特点一&#xff1a;面向对象 两个基本概念&#xff1a;类、对象 三大特性&#xff1a;封装、继承、多态 特点二&#xff1a;健壮性 吸收了C/C语言的优点&#xff0c;但去掉了其影响程序健壮性的部分&#xff08;如指…

作者头像 李华