2024年9月7日

原子变量

摘要: 参考网友帖子:学习笔记五 :linux驱动之原子变量_驱动中添加一个原子变量-CSDN博客 实现一个驱动只能被一个进程打开: #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <li 阅读全文

posted @ 2024-09-07 12:15 f1engmin11 阅读(2) 评论(0) 推荐(0) 编辑

中断屏蔽

摘要: 1. 中断屏蔽将使得中断与进程之间的并发不再发生; 2. 内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也不再发生; 3. 接口: local_irq_disable() //屏蔽中断 . . . critical section //临界区 . . . local_irq_enabl 阅读全文

posted @ 2024-09-07 12:15 f1engmin11 阅读(6) 评论(0) 推荐(0) 编辑

互斥锁-基于堵塞的互斥机制

摘要: 解决对单个资源的互斥访问 问题 当加锁失败,互斥锁使用线程切换应对,本线程放弃时间片。直到加锁成功,CPU再重新调度本线程,重新获得时间片。 P/加锁 临界区 V/解锁 阅读全文

posted @ 2024-09-07 12:15 f1engmin11 阅读(2) 评论(0) 推荐(0) 编辑

自旋锁-基于忙等待的并发控制机制

摘要: 自旋锁,只能解决互斥问题; 不能堵塞; 当加锁失败,自旋锁用忙等待应对,本线程不放弃时间片,一直死循环直到加锁成功; 适用于: 1. 异常上下文之间共享资源 2. 异常上下文与任务上下文之间共享资源 3. 任务上下文之间、且临界区时间很短(即无堵塞)的情况 4. 互斥问题 阅读全文

posted @ 2024-09-07 12:15 f1engmin11 阅读(5) 评论(0) 推荐(0) 编辑

信号量-基于堵塞的同步机制

摘要: 适用于:任务上下文之间且临界区执行时间较长的互斥或者同步问题 阅读全文

posted @ 2024-09-07 12:14 f1engmin11 阅读(3) 评论(0) 推荐(0) 编辑

并发控制机制选择原则

摘要: 1. 不允许睡眠的上下文需要采用忙等待类 2. 可以睡眠的上下文可以采用堵塞类 3. 在异常上下文中访问的竞争资源一定要采用忙等待类 4. 临界区操作较长的应用建议采用堵塞类 5 临界区很短的操作建议采用忙等待类 6. 中断屏蔽仅在有与中断上下文共享资源时使用 7. 共享资源仅仅是一个整型变量时,使 阅读全文

posted @ 2024-09-07 12:14 f1engmin11 阅读(2) 评论(0) 推荐(0) 编辑

时钟中断

摘要: 1. 硬件滴答时钟,周期性产生中断,每中断异常,jiffies_64的值加1,jiffies是jiffies_64的低32位 2. HZ,一个宏定义,一般为100或者200,代表1秒时间对应的滴答中断次数 阅读全文

posted @ 2024-09-07 12:13 f1engmin11 阅读(5) 评论(0) 推荐(0) 编辑

内核定时器

摘要: 有滴答定时器触发软中断 内核定时器时间到达后,执行回调函数,回调函数执行过程,属于:异常上下文 这就意味着,在回调函数内,不能有堵塞产生。 Linux在驱动里做定时循环 - f1engmin11 - 博客园 (cnblogs.com) 阅读全文

posted @ 2024-09-07 12:13 f1engmin11 阅读(6) 评论(0) 推荐(0) 编辑

延时机制

摘要: 非堵塞类: 1. 短延时,不睡眠,在延时函数内,跑循环 2. 长延时 堵塞类: msleep 深度睡眠 msleep_interruptible 浅度睡眠 延时类型选择原则: 堵塞时,任务会进入等待队列,等堵塞结束后,任务会出现出队,这个过程产生了任务切换的过程,会产生开销。所以在任务上下文中短延时 阅读全文

posted @ 2024-09-07 12:13 f1engmin11 阅读(4) 评论(0) 推荐(0) 编辑

导航