浅述同步和互斥机制

1.以下几种情况可能发生竞态:对称多处理器的多个cpu共同访问外设和存储器;中断与进程访问共享资源;高优先级进程抢占低优先级进程;高优先级中断打断低优先级中断。
解决 竞争状态 途径是保证对共享资源的互斥访问。解决的关键是 分析并发源,划定临界区,选择适合的操作系统提供的机制。
2.互斥机制:
屏蔽中断:由于linux内核的进程调度也是通过中断实现的,所以屏蔽中断也可以避免进程的并发,实质上,除了对称多处理器的多cpu共同访问外设和存储器,其他的都可以归为中断引起的并发。
原子操作:执行过程中不会被别的代码打断,一系列指令在处理器上执行时等同于一条指令
自旋锁spin_lock:自旋锁就是原地打转,一直忙等待。特点:在获得一个自旋锁时,cpu运行的代码需要先执行一个原子操作。只有在占用锁极短时间使用自旋锁才合理,因为忙等待是白白浪费cpu资源。一个已经拥有一个自旋锁的cpu像第二次获得这个自旋锁必将引起死锁,所以不能连续在没有释放的情况下获得同一个自旋锁。进程获得自旋锁后阻塞,也有可能死锁,引起阻塞的函数:copy_from_user,copy_to_user,kmalloc
信号量:当获取不到信号量是进入休眠状态。
3.同步机制:即按照顺序执行,一个事情要等待另一个事情做完之后再进行。缘由:当进程需要某个资源而不可得时,就需要等待而进入睡眠状态,内核由此生成一个新的等待队列节点将睡眠进程挂载到等待队列中,从而让出cpu,当进程被唤醒时从等待队列中取出。

猜你喜欢

转载自blog.csdn.net/qq_41648636/article/details/80285765