黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图
您现在的位置: 黑客风云 >> 黑客文章 >> 操作系统 >> LINIX UNIX >> 文章正文
[推荐]Linux内核中的同步和互斥分析报告
        ★★★
Linux内核中的同步和互斥分析报告
文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-11-21
 

 可以看出,它和semaphore机制解决的都是两个进程的互斥问题,都是让一个进程退出临界区后另一个进程才进入的方法,不过sempahore机制实行的是让进程暂时让出CPU,进入等待队列等待的策略,而spin_lock实行的却是却进程在原地空转,等着另一个进程结束的策略。

  下边考虑中断对临界区的影响。要互斥的还有进程和中断服务程序之间。当一个进程在执行一个临界区的代码时,可能发生中断,而中断函数可能就会调用这个临界区的代码,不让它进入的话就会产生死锁。这时一个有效的方法就是关中断了。

#define local_irq_save(x) __asm__ __volatile__("pushfl ; popl %0 ;  
cli": 
"=g" (x): /* no input */ :"memory") 
#define local_irq_restore(x) __asm__ __volatile__("pushl %0 ; popfl": /*  
no  
output */ :"g" (x):"memory") 
#define local_irq_disable() __asm__ __volatile__("cli": : :"memory") 
#define local_irq_enable() __asm__ __volatile__("sti": : :"memory") 
#define cpu_bh_disable(cpu) do { local_bh_count(cpu)++; barrier(); } while (0) 
#define cpu_bh_enable(cpu) do { barrier(); local_bh_count(cpu)--; } while (0) 
#define local_bh_disable() cpu_bh_disable(smp_processor_id()) 
#define local_bh_enable() cpu_bh_enable(smp_processor_id())

  对于UP来说,上面已经是足够了,不过对于SMP来说,还要防止来自其它cpu的影响,这时解决的方法就可以把上面的spin_lock机制也综合进来了。

#define spin_lock_irqsave(lock, flags) do {  
local_irq_save(flags); sp 
in_lock(lock); } while (0) 
#define spin_lock_irq(lock) do { local_irq_disable();  
spin_lock(lo 
ck); } while (0) 
#define spin_lock_bh(lock) do { local_bh_disable();  
spin_lock(loc 
k); } while (0) 
#define spin_unlock_irqrestore(lock, flags) do { spin_unlock(lock); local_i 
rq_restore(flags); } while (0) 
#define spin_unlock_irq(lock) do { spin_unlock(lock);  
local_irq_enable(); 
} while (0) 
#define spin_unlock_bh(lock) do { spin_unlock(lock);  
local_bh_enable();  
} while (0)

  前面说过,对于UP来说,spin_lock()是空的,所以以上的定义就一起适用于UP 和SMP的情形了。

read_lock_irqsave(lock, flags) , read_lock_irq(lock),  
read_lock_bh(lock) 和 
write_lock_irqsave(lock, flags) , write_lock_irq(lock),  
write_lock_bh(lock 
)

  就是spin_lock的一个小小的变型而己了。

上一页  [1] [2] [3] 

文章录入:sygbox    责任编辑:cainiaowang 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    VIP 专 区
    抽根憋闷烟的心声
    学习网页制作的理由
    加入终身会员的理由!!!
    学习黑客编程的5大理由
    学习免杀的6大理由
    学习软件破解的理由
    会员账号开通查询
    常见问题解答
    汇款向导
    学员报名咨询
    最 新 热 门
    基于Linux操作系统实现的传真系统12-09
    Linux操作系统上最好的10款开源游11-20
    Linux 系统中的超级权限的控制11-09
    Linux操作系统下的常见系统资源共11-07
    Linux下的中文显示和支持常见问题10-23
    嵌入式Linux系统的动态电源管理技10-13
    从硬盘安装Linux操作系统的方法步10-12
    深入浅出分析Linux设备驱动程序中10-10
    使用kgdb调试linux内核及内核模块10-04
    使用Linux 文本工具简化数据的提10-04
    如何在Linux操作系统下检测内存泄09-27
    Linux内核编译菜单中相关选项的意09-20
    相 关 文 章
  • 网游防沉迷系统全面实施 4月9日宣布

  • 40个Windows XP和Vista系统应用技巧

  • Linux操作系统中超级权限控制的应用

  • 40个Windows XP和Vista系统应用技巧

  • 网游防沉迷系统全面实施 4月9日宣布

  • 1000人使用Windows Vista之后的体验

  • 22个最实用的Vista应用技巧和常见问题

  • 将Vista系统分级评分提升至9.9的满分

  • Vista解惑100点之用Defender的10项知识

  • 谁在保证数据安全 深挖Vista安全特性

  • webshell+serv-u获取系统最高权限

  • 将如何改变?DX10主流显卡前景分析

  • Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886