南京大学蒋炎岩操作系统笔记(p4-p7)
P4理解并发程序执行Model Checker通用检查器负责通用任务枚举所有可达状态生成并探索状态转移搜索错误状态输出状态图Python Generator生成器是后面实现Model Checker的一个关键技术Generator 可以让一个函数暂停下次再从暂停的位置继续执行。yield会保存整个函数的执行现场包括局部变量、程序执行位置等。下一次next()时会从上一次yield的下一条语句继续执行而不是重新进入函数。利用 GeneratorModel Checker 可以控制不同线程每次只执行一步从而模拟不同的线程调度顺序。P5并发控制互斥自旋锁、互斥锁和futexlock保证一条指令原子执行不会被其他 CPU 或线程打断。xchg一种原子交换指令能够一次性完成“读旧值 写新值”常用于实现自旋锁等同步机制。实际开发通常使用stdatomic.h提供的原子操作接口而不是直接编写这些汇编指令。利用xchg原子交换指令实现自旋锁如果锁被别人占用就一直在CPU上循环等待直到锁释放的代码int table YES; void lock() { retry: int got xchg(table, NOPE); if (got NOPE) goto retry; assert(got YES); } void unlock() { xchg(table, YES); }其中YES表示锁是空闲的NOPE表示锁已经被别人占用RISC-V原子操作LR/SCLoad-Reserved / Store-ConditionalLRLoad Reserved 作用 ① 读取内存数据 ② 对该内存建立 reservation预约/保留SCStore Conditional 作用 只有 reservation 未失效时才允许写入。返回值 0写入成功 非0写入失败reservation 已失效reservation 失效条件 1、其他 CPU/线程修改该内存 2、中断多数实现会取消 reservation实现流程 LR → 本地计算 → SC 成功则完成原子操作 失败则重新执行 LR/SC直到成功。RISC-V 不像 x86 提供 lock add、lock xchg 等专用原子指令RISC-V 通过LR预约读取 SC条件写回实现原子操作若期间数据被其他处理器修改则 SC 失败需要重新尝试。自旋锁的缺陷① 缓存同步开销 - 多个 CPU 不断访问同一个锁变量。 - 会触发缓存一致性Cache Coherence增加通信延迟降低性能。② CPU空转- 获得锁的线程执行临界区。 - 其他线程一直 while 循环等待自旋占用 CPU 但不做有效工作。 - 竞争线程越多CPU 利用率越低。③ 持锁线程被切换 - 持有锁的线程可能被操作系统切换出去。 - 其他线程持续自旋等待无法进入临界区。 - 造成 CPU 100% 占用但没有有效工作资源严重浪费自旋锁的使用场景操作系统内核的并发数据结构短临界区实现长临界区的互斥长临界区不适合一直自旋而是采用“阻塞 唤醒”机制。流程 ① 获得锁的线程进入临界区。 ② 后来的线程加入等待队列并调用 yield() 主动让出 CPU。 ③ 持锁线程释放锁后唤醒等待队列中的一个线程若无人等待则释放锁。自旋锁Spin Lock优点获取锁很快不需要系统调用缺点获取不到锁就一直自旋浪费 CPU。睡眠锁Mutex优点获取不到锁就睡眠不浪费 CPU。缺点每次加锁、解锁都可能进入内核系统调用开销较大。FutexFast Userspace Mutex自旋锁睡眠锁核心思想 先在用户态尝试获取锁只有竞争时才进入内核。工作流程 ① 获取锁成功用户态完成无系统调用Fast Path。 ② 获取锁失败调用 futex()进入内核睡眠等待Slow Path。 ③ 解锁若有等待线程调用 futex_wake() 唤醒否则直接释放锁。优点 无竞争时无需系统调用速度快。 有竞争时线程睡眠不会一直自旋浪费 CPU。Fast Path 用户态完成加锁/解锁无系统调用。Slow Path 锁竞争时进入内核睡眠和唤醒线程。注意 Futex 实现复杂容易出现竞争、死锁、丢失唤醒等问题因此常借助 Model Checker 验证其正确性。P6并发控制同步条件变量、信号量在多处理器上协同多个线程完成任务。线程同步在某个时间点共同达到互相已知的状态因为并发程序的步调很难保持一致所以需要先到的先等)经典线程同步问题生产者-消费者模型生产者生成数据并放入共享缓冲区。消费者从共享缓冲区取出数据并处理。缓冲区两者共享的有限空间。也就是不断重复尝试属于忙等待会浪费 CPU。更合理的方式是使用条件变量或信号量让缓冲区满或空时线程阻塞睡眠。1、条件变量万能同步方法条件变量通常用于在某个线程等待特定条件的满足时将其挂起并在其他线程满足条件时唤醒它。条件变量提供了一种有效的方式来实现线程之间的通信以及在某个条件成立时阻塞和唤醒线程。2、信号量(Semaphore)信号量是一种基于计数器的同步机制用于控制多个线程对有限资源的访问也可实现线程同步。线程通过Pwait和Vsignal操作申请和释放资源。Pwait信号量减 1若结果小于 0或资源不足线程阻塞等待。Vsignal信号量加 1若有等待线程则唤醒其中一个线程。特点内部维护一个计数器。可实现互斥初值为 1称二值信号量。可实现资源管理初值大于 1表示可同时访问的资源数量。常用于生产者—消费者问题、读者—写者问题等同步场景。P7真实时间的并发编程高性能计算/数据中心/人机交互中的并发编程数据中心特点低延迟、有备份、能同步线程Thread特点由操作系统调度。多个线程共享同一进程地址空间。可以真正利用多核 CPU并行执行。获取共享资源时需要使用Mutex、信号量、条件变量等同步机制。优点能充分利用多核 CPU。适合计算密集型任务。缺点线程切换开销较大。容易出现竞争、死锁等并发问题。协程Coroutine特点由程序自身调度。在用户态完成切换。遇到yield或await时主动让出执行权。一个线程中可以运行多个协程。优点切换速度快。开销小。编程简单不容易产生线程竞争。缺点通常不能充分利用多核 CPU。CPU 密集型任务性能不如多线程。Go语言能像线程一样利用多核也能像协程一样轻量。

相关新闻

TMS320F280015x SPI应用:从寄存器到DriverLib的实战配置与调试

TMS320F280015x SPI应用:从寄存器到DriverLib的实战配置与调试

1. 项目概述:从寄存器到驱动,打通TMS320F280015x SPI应用之路搞嵌入式开发,尤其是用TI的C2000系列,SPI(串行外设接口)绝对是绕不开的“老朋友”。无论是驱动一块OLED屏幕、读取一个高精度ADC芯片的数据&…

2026/10/10 16:15:46 阅读更多 →
机器说服不是拟人化,而是行为驯化的工程实践

机器说服不是拟人化,而是行为驯化的工程实践

1. 项目概述:当“说服”开始脱离人类喉咙,进入算法回路你有没有过这种体验:刚在购物App里搜了一双跑鞋,半小时后刷短视频,首页就精准推送了三款同类型新品测评;或者深夜浏览了几篇关于“如何缓解焦虑”的文…

2026/10/13 1:19:42 阅读更多 →
2026跨境新站做不起来的隐形元凶:不是外链弱,是内容同质化废掉你的权重

2026跨境新站做不起来的隐形元凶:不是外链弱,是内容同质化废掉你的权重

很多跨境独立站新手都有一个误区:站点没流量、没排名,就是外链不够、权重太低。 于是疯狂堆外链、批量发文、抄同行结构,忙活大半年,最后发现:收录一堆、排名飘忽、AI完全不引用,站点始终卡在冷启动阶段无…

2026/10/3 5:06:29 阅读更多 →

最新新闻

CODE V 镜头缩放与像差曲线分析:从双胶合设计到系统优化

CODE V 镜头缩放与像差曲线分析:从双胶合设计到系统优化

简介:面向光学设计人员的 CODE V 镜头设计实例文档,围绕数码相机定焦物镜的完整设计流程展开,重点演示建立镜头、缩放镜头以及像差曲线分析方法。文档从 VGA 相机规格提取、半视场角计算等基础出发,讲解如何借助新镜头向导筛选专利…

2026/10/14 3:29:35 阅读更多 →
JSDoc与TypeScript选型:老项目类型安全提升的性价比实践

JSDoc与TypeScript选型:老项目类型安全提升的性价比实践

“不是Typescript用不起,而是JSDoc更有性价比”——这句话我一开始是把后半句当段子看的,直到手里维护着几个跑了三四年的老前端项目,才琢磨出味儿来。JSDoc 嵌套在注释里,没有独立的类型系统、没有编译步骤,看起来像“…

2026/10/14 3:29:35 阅读更多 →
8th math [equilateral triangle] 2026.10.11

8th math [equilateral triangle] 2026.10.11

8th math [equilateral triangle] 2026.10.11 等边三角形 HL SSS SAS ASA AAS [congruent triangles] 2026.10.11 8th math [isosceles triangle] 2026.10.08 8th math [congruent triangles] 2026.10.05

2026/10/14 3:29:35 阅读更多 →
Claude Code实战:AI辅助从零搭建宠物生命周期管理App

Claude Code实战:AI辅助从零搭建宠物生命周期管理App

最近我用 Claude Code 从零搭完了一个宠物生命周期管理 App,整个过程从需求梳理、工程初始化、功能开发到模块联调,基本都是在 AI 辅助下完成的。这篇文章就顺着这个项目讲讲全流程是怎么跑的,哪些地方顺畅,哪些地方踩了坑&#x…

2026/10/14 3:29:35 阅读更多 →
A股专业操盘手的盈利逻辑与风险控制

A股专业操盘手的盈利逻辑与风险控制

1. 项目概述"每天躺赚70万的操盘手说出的A股暴利真相"这个标题背后,实际上揭示的是资本市场中专业交易者的盈利模式和操作逻辑。作为一名在证券行业摸爬滚打十余年的从业者,我想通过这篇文章,拆解那些真正在A股市场持续盈利的专业操…

2026/10/14 3:29:35 阅读更多 →
电子能级跃迁:从原子结构到光谱的量子之旅

电子能级跃迁:从原子结构到光谱的量子之旅

1. 引言 电子能级跃迁是量子力学中最核心、最迷人的现象之一。从原子发光到激光技术,从霓虹灯到天文光谱分析,背后都离不开电子在不同能级之间的跳跃。本文将从原子结构出发,系统讲解电子能级跃迁的基本原理、类型、规律以及它在现实世界中的广泛应用。 2. 原子结构与能级…

2026/10/14 3:28:35 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →