Chinaunix首页 | 论坛 | 博客
  • 博客访问: 657973
  • 博文数量: 185
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2107
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(185)

文章存档

2024年(1)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2016-09-06 22:39:57

linux内核资料收集

    1. 等待队列
        进程经常要等待某些事件,如,磁盘操作完成,一段时间间隔等。等待队列实现了在事件上的条件待:进程把自己放进
    合适的等待队列,并放弃控制权。因此,等待队列表示一组睡眠的进程。当某一条件满足时,由内核唤醒它们。
           等待队列由双向链表实现,其元素指向进程描述符的指针。每个等待队列都有一个等待队列头。等待队列头是一个类型
   为wait_queue_head_t的数据结构:
              struct __wait_queue_head {
                    spinlock_t lock;
                    struct list_head task_list;
              };
              typedef struct __wait_queue_head wait_queue_head_t;
           等待队列由中断和主要内核函数修改,因此必须用队列中的自旋锁lock对双向链表进行访问同步。task_list是链表头。
           等待队列链表中的元素类型为wait_queue_t
                struct __wait_queue {
                    unsigned int flags;
                    struct task_struct * task;
                    wait_queue_func_t  func;
                    struct list_head task_list;
                }
                typedef struct __wait_queue wait_queue_t;
           等待队列链表中的每个元素代表一个睡眠进程,该进程等待某一事件发生。其进程符描述符地址放在task字段中。task_list
           字段中包含双向链表指针,它可以把元素链入到等待相同事件的进程链表中。
           有两种睡眠进程:互斥进程,由内核有选择的唤醒。非互斥进程,总是由内核在事件发生时唤醒。等待队列元素的func字段
       用来表示等待队列中睡眠进程应该用什么方式唤醒。
    2. 等待队列的操作
        初始化:
         用DECLARE_WAIT_QUEUE_HEAD(name)定义一个新的等待队列的头,表态的声明一个叫name的等待队列头变量,并初始化
    其中的变量。 init_waitqueue_head()初始化动态分配的等待队列头变量。
        唤醒:
            default_wake_function()
            autoremove_wake_function()
        加入等待队列:
            add_wait_queue()
            add_wait_queue_exclusive()
        移出等待队列:
            remove_wait_queue()
        ......
    3. 等待特定条件
        sleep_on()
        sleep_on_timeout()
        interruptible_sleep_on_timeout()
        prepare_to_wait()/prepare_to_wait_exclusive()
        wait_event/wait_event_interruptible
        wake_up_locked/wake_up
阅读(412) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~