Skip to content

Commit a4277ad

Browse files
committed
docs: 接入操作系统锁与同步机制文章 — 操作系统与并发文档
- 新增操作系统锁与同步机制专题,补齐 SEO 头部信息、配图和参考资料 - 更新操作系统侧边栏与 README 阅读顺序,串联锁与同步机制和死锁专题 - 优化 Java 锁文章部分表达,减少模板化二分句 - 验证 prettier、markdownlint 和 VuePress 构建通过
1 parent c37d53f commit a4277ad

6 files changed

Lines changed: 407 additions & 32 deletions

File tree

‎docs/.vuepress/sidebar/cs-basics.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ export const csBasics = [
143143
children: [
144144
{ text: "⭐️进程与线程详解", link: "process-and-thread" },
145145
{ text: "进程间通信(IPC)详解", link: "ipc" },
146+
{ text: "⭐️锁与同步机制", link: "os-lock-and-sync" },
146147
{ text: "⭐️死锁详解", link: "dead-lock" },
147148
],
148149
},

‎docs/cs-basics/README.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ head:
3737
## 学习重点
3838

3939
- 计算机网络重点理解分层模型、TCP/UDP、HTTP/HTTPS、DNS、ARP、NAT 和常见网络安全问题。
40-
- 操作系统重点理解进程线程、内存管理、虚拟内存、零拷贝、I/O 多路复用、文件系统、Linux 基础和 Shell 使用。
40+
- 操作系统重点理解进程线程、锁与同步、内存管理、虚拟内存、零拷贝、I/O 多路复用、文件系统、Linux 基础和 Shell 使用。
4141
- 数据结构重点理解数组、链表、栈、队列、哈希表、树、图、堆、Trie、并查集、跳表、红黑树、布隆过滤器和 LRU 的特点与适用场景。
4242
- 算法重点理解复杂度分析、二分、双指针、滑动窗口、DFS/BFS、回溯、动态规划、贪心、Top K、排序、字符串、链表和 LeetCode 高频题。
4343
- 面试中要能把“概念 -> 原理 -> 对比 -> 场景 -> 常见问题”串成完整回答。
@@ -71,6 +71,7 @@ head:
7171
- [操作系统常见面试题总结(下)](./operating-system/operating-system-basic-questions-02.md):继续整理文件系统、I/O、Linux 等面试考点。
7272
- [进程与线程详解:区别、状态、通信、上下文切换与虚拟线程](./operating-system/process-and-thread.md):讲清进程和线程的资源边界、状态转换、上下文切换和 Java 虚拟线程。
7373
- [进程间通信(IPC)详解:管道、消息队列、共享内存、Socket 与 Binder](./operating-system/ipc.md):对比管道、消息队列、共享内存、Socket、Binder 等 IPC 机制。
74+
- [操作系统锁与同步机制详解:mutex、semaphore、condition variable、spinlock 与 futex](./operating-system/os-lock-and-sync.md):讲清临界区、互斥锁、信号量、条件变量、自旋锁和 futex。
7475
- [虚拟内存详解:地址转换、TLB、缺页中断与页面置换](./operating-system/virtual-memory.md):讲清分页、页表、TLB、缺页中断和页面置换。
7576
- [I/O 多路复用详解:select、poll、epoll 原理与区别](./operating-system/io-multiplexing.md):讲清 select、poll、epoll 的实现原理、性能差异和适用场景。
7677
- [零拷贝详解:mmap、sendfile 与 splice](./operating-system/zero-copy.md):讲清传统 I/O、mmap、sendfile、splice 的拷贝路径和工程应用。

‎docs/cs-basics/operating-system/README.md‎

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: 操作系统专题:进程线程、IPC、虚拟内存、I/O 多路复用、Linux 与 Shell
3-
description: 操作系统面试与学习路线,涵盖进程线程、进程间通信、死锁、虚拟内存、零拷贝、I/O 多路复用、文件系统、Linux 基础、Shell 编程和常见操作系统面试题。
2+
title: 操作系统专题:进程线程、锁与同步、虚拟内存、I/O 多路复用、Linux 与 Shell
3+
description: 操作系统面试与学习路线,涵盖进程线程、进程间通信、锁与同步机制、死锁、虚拟内存、零拷贝、I/O 多路复用、文件系统、Linux 基础、Shell 编程和常见操作系统面试题。
44
category: 计算机基础
55
tag:
66
- 操作系统
@@ -13,10 +13,10 @@ sitemap:
1313
head:
1414
- - meta
1515
- name: keywords
16-
content: 操作系统,操作系统面试题,进程,线程,进程间通信,IPC,死锁,内存管理,虚拟内存,零拷贝,I/O多路复用,select,poll,epoll,文件系统,Linux,Shell,后端面试
16+
content: 操作系统,操作系统面试题,进程,线程,进程间通信,IPC,锁与同步,互斥锁,信号量,条件变量,futex,死锁,内存管理,虚拟内存,零拷贝,I/O多路复用,select,poll,epoll,文件系统,Linux,Shell,后端面试
1717
---
1818

19-
这份 **操作系统专题** 面向后端学习和面试复习,整理操作系统基础、进程线程、进程间通信、内存管理、虚拟内存、零拷贝、I/O 多路复用、文件系统、Linux 和 Shell 相关内容。
19+
这份 **操作系统专题** 面向后端学习和面试复习,整理操作系统基础、进程线程、进程间通信、锁与同步、内存管理、虚拟内存、零拷贝、I/O 多路复用、文件系统、Linux 和 Shell 相关内容。
2020

2121
## 适合谁看
2222

@@ -29,7 +29,7 @@ head:
2929

3030
- 操作系统负责管理 CPU、内存、文件、I/O 和进程,是理解上层软件运行机制的基础。
3131
- 进程、线程和进程间通信是并发编程、服务端性能和问题排查的基础概念。
32-
- 死锁、上下文切换、调度、同步互斥是面试高频点。
32+
- 锁与同步、死锁、上下文切换、调度是面试高频点。
3333
- 内存管理、虚拟内存、分页、页面置换能帮助理解 JVM、数据库和缓存。
3434
- 零拷贝、I/O 多路复用能帮助理解 Kafka、RocketMQ、Redis、Nginx、Netty 等高性能组件。
3535
- Linux 和 Shell 是后端开发、部署、排障、自动化脚本的常用能力。
@@ -40,19 +40,21 @@ head:
4040
2. [操作系统常见面试题总结(下)](./operating-system-basic-questions-02.md):继续补齐文件系统、I/O、Linux 等问题。
4141
3. [进程与线程详解:区别、状态、通信、上下文切换与虚拟线程](./process-and-thread.md):系统理解进程、线程、PCB/TCB、fork/exec/wait、线程模型和上下文切换。
4242
4. [进程间通信(IPC)详解:管道、消息队列、共享内存、Socket 与 Binder](./ipc.md):对比管道、消息队列、共享内存、信号量、Socket、Binder 等 IPC 方案。
43-
5. [死锁详解:四个必要条件、Java 死锁排查与数据库死锁处理](./dead-lock.md):讲清死锁等待环、四个必要条件、Java 线程死锁排查和数据库事务重试。
44-
6. [虚拟内存详解:地址转换、TLB、缺页中断与页面置换](./virtual-memory.md):把分页、页表、TLB、缺页中断和页面置换串起来。
45-
7. [I/O 多路复用详解:select、poll、epoll 原理与区别](./io-multiplexing.md):理解一个线程处理海量连接背后的内核机制。
46-
8. [零拷贝详解:mmap、sendfile 与 splice](./zero-copy.md):搞清传统 I/O、mmap、sendfile、splice 的拷贝路径和适用场景。
47-
9. [Linux 基础知识总结](./linux-intro.md):掌握目录结构、文件权限、常用命令和基础排障能力。
48-
10. [Shell 编程基础知识总结](./shell-intro.md):学习变量、条件、循环、函数和常用脚本写法。
43+
5. [操作系统锁与同步机制详解:mutex、semaphore、condition variable、spinlock 与 futex](./os-lock-and-sync.md):理解临界区、互斥锁、信号量、条件变量、自旋锁和 futex 的职责边界。
44+
6. [死锁详解:四个必要条件、Java 死锁排查与数据库死锁处理](./dead-lock.md):讲清死锁等待环、四个必要条件、Java 线程死锁排查和数据库事务重试。
45+
7. [虚拟内存详解:地址转换、TLB、缺页中断与页面置换](./virtual-memory.md):把分页、页表、TLB、缺页中断和页面置换串起来。
46+
8. [I/O 多路复用详解:select、poll、epoll 原理与区别](./io-multiplexing.md):理解一个线程处理海量连接背后的内核机制。
47+
9. [零拷贝详解:mmap、sendfile 与 splice](./zero-copy.md):搞清传统 I/O、mmap、sendfile、splice 的拷贝路径和适用场景。
48+
10. [Linux 基础知识总结](./linux-intro.md):掌握目录结构、文件权限、常用命令和基础排障能力。
49+
11. [Shell 编程基础知识总结](./shell-intro.md):学习变量、条件、循环、函数和常用脚本写法。
4950

5051
## 核心文章
5152

5253
- [操作系统常见面试题总结(上)](./operating-system-basic-questions-01.md):覆盖操作系统基础、进程线程、死锁、内存管理等高频问题。
5354
- [操作系统常见面试题总结(下)](./operating-system-basic-questions-02.md):继续整理文件系统、I/O、多路复用、Linux 等知识点。
5455
- [进程与线程详解:区别、状态、通信、上下文切换与虚拟线程](./process-and-thread.md):讲清进程和线程的资源边界、状态转换、Linux 创建机制和 Java 虚拟线程。
5556
- [进程间通信(IPC)详解:管道、消息队列、共享内存、Socket 与 Binder](./ipc.md):讲清常见 IPC 方式的原理、优缺点和选型思路。
57+
- [操作系统锁与同步机制详解:mutex、semaphore、condition variable、spinlock 与 futex](./os-lock-and-sync.md):讲清临界区、互斥锁、信号量、条件变量、自旋锁、futex、内存顺序和内核锁上下文。
5658
- [死锁详解:四个必要条件、Java 死锁排查与数据库死锁处理](./dead-lock.md):讲清死锁形成条件、资源分配图、Java 排查工具、数据库死锁检测和应用层重试策略。
5759
- [虚拟内存详解:地址转换、TLB、缺页中断与页面置换](./virtual-memory.md):讲清虚拟地址、物理地址、分页、多级页表、TLB、缺页中断和页面置换算法。
5860
- [I/O 多路复用详解:select、poll、epoll 原理与区别](./io-multiplexing.md):讲清网络 I/O 的两个阶段、五种 I/O 模型,以及 select、poll、epoll 的区别。
@@ -65,6 +67,7 @@ head:
6567
- 进程和线程有什么区别?线程之间共享哪些资源?
6668
- 进程间通信有哪些方式?各自适合什么场景?
6769
- 什么是上下文切换?频繁上下文切换有什么影响?
70+
- mutex、semaphore、condition variable、spinlock 和 futex 分别解决什么问题?
6871
- 死锁产生的必要条件是什么?Java 和数据库里如何排查死锁?
6972
- 虚拟内存是什么?分页和分段有什么区别?
7073
- TLB、缺页中断和页面置换分别解决什么问题?

‎docs/cs-basics/operating-system/dead-lock.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ head:
2828

2929
后面会用 Java 代码演示,是因为这类例子最容易复现。但要记住,死锁不是 Java 专属的问题。只要系统里同时出现独占资源、持有后继续等待、资源不能被强制剥夺、等待关系成环,线程、进程和事务都会踩进去。
3030

31+
如果你想先把 mutex、semaphore、condition variable、futex 这些同步原语的职责边界理清楚,可以先看:[操作系统锁与同步机制详解:mutex、semaphore、condition variable、spinlock 与 futex](./os-lock-and-sync.md)。这篇死锁专题会把重点放在等待关系怎么成环,以及线上怎么排查和恢复。
32+
3133
这篇文章按排查时更常用的顺序来讲:先看等待环怎么形成,再看四个必要条件、Java 复现代码、资源分配图、处理策略,最后落到线上该怎么抓线程栈、怎么看数据库锁。
3234

3335
## 死锁是怎么卡住的?

0 commit comments

Comments
 (0)