黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 操作系统 >> LINIX UNIX >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]Linux内核中的同步和互斥分析报告
      ★★★

Linux内核中的同步和互斥分析报告

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-11-21 8:59:50
 

 可以看出,它和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 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体:
    中介交易区
    最 新 热 门
    Linux服务器傻瓜式安装完全接触08-31
    Linux中新闻组服务器和客户端的使08-14
    Linux下查找漏洞的几种必备工具08-13
    Linux操作系统上摄像头的使用小技08-11
    网络工程师 Linux系统日志的分析08-08
    Ubuntu 7.04操作系统下安装Man在07-27
    从USB移动硬盘上引导Portable Li07-27
    Ghost程序参数四则 系统备份与恢07-27
    系统安全:分级防御对Linux服务器07-24
    Linux操作系统中厉害的“七种武器07-21
    体系架构是不是桌面Linux系统的弱07-19
    Linux系统的各种后门和日志工具详07-19
    相 关 文 章
    爆料:一个linux提权用的技巧
    Windows与Linux本地用户提权体验
    Linux 2.6.9内核键盘记录
    logtamper-v1.0 修改linux 日志的工具
    结合内核和病毒技术的最新远程控制软件
    linux平台下渗透日本著名XXXXXX.TV
    LINUX下写入一句话木马的方法整理
    wnps 0.26 一款Linux后门程序
    Linux服务器傻瓜式安装完全接触
    Linux中新闻组服务器和客户端的使用
    Linux下查找漏洞的几种必备工具
    Linux操作系统上摄像头的使用小技巧
    Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886