日期:2014-05-16 浏览次数:20701 次
第四章中讲的是内核的调试技术。。。以后用到在学习吧
第五章 并发和竞态
1,操作系统编程的核心问题之一是并发管理
2,什么是竞态:linux中存在大量的并发源,当这些并发源访问可共享的数据时就会发生竞态
3,竞态的危害:竞态会导致共享的数据非控制访问,导致系统崩溃、数据破坏及安全问题
4,如何避免竞态:常用的技术是 锁定和互斥
5,记:linux中信号量的作用绝大多数是为互斥
自旋锁
6,锁定功能的实现用的多的是自旋锁,自旋锁要更高效
7,自旋锁由spinlock_t 类型定义
初始化:
spinlock_t my_lock=SPIN_LOCK_UNLOCKED;
void spin_lock_init(spinlock_t my_lock);
通过void spin_lock(spinlock_t *lock);获得自旋锁
通过void spin_unlock(spinlock_t *lock);释放
8,自旋锁弄不好会出现死锁的问题,这里要遵守一定的规则:
@任何拥有自旋锁的代码必须是原子的。因为内核的抢占机制,当有高优先级的进程代码排挤带有自旋锁的代码时,带有自旋锁的代码就一直不能运行,就会陷入死锁状态。 这里解释下自旋锁的机制:共享代码被上锁后,其他进程要想访问,就得一直等着解锁,等待的过程中会一直访问,这种状态称为自旋。
@中断中有自旋锁会进入自旋陷阱,所以要禁止中断。
@自旋锁必须最短时间拥有。因为自旋是原子操作,如果时间长的话,其他优先级高的真正需要先运行的就要等待,内核延迟。
最后说一点个人理解:自旋锁的作用是内核管理并发出现竞态问题的有效手段,用法和线程间的锁是一个原理,访问共享资源的时候,锁定,这个时候其他线程要访问的话会先看是不是上锁,如果上锁的话其他进程会等待。退出前释放,其他进程就可以再用这个共享资源了。