---- 整理自狄泰软件唐佐林老师课程
文章目录
- 1. 问题
- 2. 系统调用重设计
- 2.1 互斥锁系统调用功能设计
- 2.2 整体调用流程
- 2.3 编程实验:互斥锁模块的创建
- 2.4 思考
- 3. 在内核态实现互斥锁功能的考虑
- 3.1 互斥锁内核数据结构及接口实现
- 3.1.1 创建互斥锁
- 3.1.2 销毁互斥锁
- 3.1.3 进入临界区
- 3.1.4 退出临界区
- 3.2 编程实验:互斥锁的内核实现
- 3.3 思考
- 3.4 问题
- 3.5 再论任务状态
- 3.6 互斥锁与任务调度
- 3.6.1 互斥锁与任务调度一
- 3.6.2 互斥锁与任务调度二
- 3.6.3 互斥锁与任务调度三
- 3.7 编程实验:互斥锁与任务调度
- 3.8 思考
1. 问题

2. 系统调用重设计

2.1 互斥锁系统调用功能设计
void SysCallHandler(uint type, // 中断功能号uint cmd, // 子功能号uint param1, uint param2);



2.2 整体调用流程


2.3 编程实验:互斥锁模块的创建
【参看链接】:62-63-64 - 进程互斥锁的初步实现 / 62


2.4 思考
3. 在内核态实现互斥锁功能的考虑
- 进入内核态之后所有任务均 暂停执行
- 直观的决定当前任务是否能进入临界区(True or False)
- Mutex空闲状态 ==> True:返回用户态,当前任务继续执行
- Mutex占用状态 ==> False:当前任务进入阻塞状态,调度下一个任务执行
- 内核拥有最高特权级,能够决定任务的生死
3.1 互斥锁内核数据结构及接口实现
设计思想:通过内核链表管理Mutex变量,只有链表中的Mutex变量才能完成任务间的互斥

3.1.1 创建互斥锁

3.1.2 销毁互斥锁

3.1.3 进入临界区

3.1.4 退出临界区

3.2 编程实验:互斥锁的内核实现
【参看链接】:62-63-64 - 进程互斥锁Mutex的初步实现 / 63

3.3 思考
3.4 问题
3.5 再论任务状态

由互斥锁触发的内核操作:
- 当任务获取锁失败时:
- 将当前任务移入等待队列(进入阻塞态)
- 调度下一个任务执行
- 当互斥锁被标记为空闲时:
3.6 互斥锁与任务调度
MtxSchedule:
- 调度当前任务进入等待队列
- 将等待队列中的任务调度进就绪队列
3.6.1 互斥锁与任务调度一

3.6.2 互斥锁与任务调度二

3.6.3 互斥锁与任务调度三

3.7 编程实验:互斥锁与任务调度
【参看链接】:62-63-64 - 进程互斥锁Mutex的初步实现 / 64


3.8 思考