频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

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

来源:网络收集 作者: 出处:巧巧读书 2006-11-20 进入讨论组
下一页 1 2 3 

  先看进程间的互斥。在linux内核中主要通过semaphore机制和spin_lock机制实现。主要的区别是在semaphore机制中,进不了临界区时会进行进程的切换,而spin_lock刚执行忙等(在SMP中)。先看内核中的semaphore机制。前提是对引用计数count增减的原子性操作。内核用atomic_t的数据结构和在它上面的一系列操作如atomic_add()、atomic_sub()等等实现。(定义在atomic.h中)semaphone机制主要通过up()和down()两个操作实现。semaphone的结构为:

struct semaphore 
{ 
atomic_t count; 
int sleepers; 
wait_queue_head_t wait; 
};

  相应的down()函数为:

static inline void down(struct semaphore*sem) 
{ 
/* 1 */sem->count--; //为原子操作 
if(sem->count<0) 
{ 
struct task_struct *tsk = current; 
DECLARE_WAITQUEUE(wait, tsk); 
tsk->state = TASK_UNINTERRUPTIBLE; 
add_wait_queue_exclusive(&sem->wait, &wait); 
spin_lock_irq(&semaphore_lock); 
/* 2 */ sem->sleepers++; 
for (;;) { 
int sleepers = sem->sleepers; 
/* 
* Add "everybody else" into it. They aren't 
* playing, because we own the spinlock. 
*/ 
/* 3 */ if (!atomic_add_negative(sleepers - 1, &sem->count)) { 
/* 4 */ sem->sleepers = 0; //这时sem->count=0 
break; 
} 
/* 4 */ sem->sleepers = 1; /* us - see -1 above */ // 这时sem 
->count 
=-1 
spin_unlock_irq(&semaphore_lock); 
schedule(); 
tsk->state = TASK_UNINTERRUPTIBLE; 
spin_lock_irq(&semaphore_lock); 
} 
spin_unlock_irq(&semaphore_lock); 
remove_wait_queue(&sem->wait, &wait); 
tsk->state = TASK_RUNNING; 
wake_up(&sem->wait); 
} 
}

  相应的up()函数为:

void up(struct semaphore*sem) 
{ 
sem->count++; //为原子操作 
if(sem->count<=0) 
{ 
//唤醒等待队列中的一个符合条件的进程(因为每个进程都加了TASK_EXCLUSIVE标志) 
。 
};

  假设开始时,count=1;sleepers=0。当进程A执行down()时,引用计数count--,如果这时它的值大于等于0,则从down()中直接返回。如果count少于0,则A的state改为TASK_INTERRUPTIBLE后进入这个信号量的等待队列中,同时使sleepers++;然后重新计算count=sleepers - 1 + count,若这时引用计数仍小于0(一般情况下应为-1,因为count = - sleepers,不过在SMP结构中,期间别的进程可能执行了up()和down()从而使得引用计数的值可能变化),则执行进程切换。Web: http://www.qqread.com/linux/2006/11/y278851.html 更多文章 更多内容请看Linux集群技术体验Linux的音影世界Linux驱动大全专题,或进入讨论组讨论。

下一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章