link list and wait queue

-  test2.c (/usr/src/linux-2.6.23/joseph)
|-   struct                  
||     _mydrv_wq             
||     _mydrv_work           
|                            
|-   variable                
||     mydrv_wq              
||     mydrv_work            
||     hello_init            
||     hello_exit            
|                            
|-   function                
||     my_task       // Test task         
||     mydrv_submit_task   //Testing kernel thread used to submmit two task to worker thread and then exit   
||     mydrv_worker        //  The worker thread
||     submit_work         //  Submitting Work to be executed
||     mydrv_init          // init mydrv_wq and mydrv_work
||     hello_init            
||     hello_exit

------------------------------------------------------------------------------------------------------------------------------------------

Introduction:
    In this experiment, I will show you how to use list and wait queue.
we create two kernel thread. One is mydrv_worker which is our worker thread used to handle the submitted tasks
in mydrv_wq.mydrv_worklist. When there is no task to handle, it will add itself to wait queue. It will be wake
up by submit_work when new tasks are added to work list. The other is mydrv_submit_task used to submit two tasks
 and then exit. When we execute ' kill -s 9 thread_id_of_mydrv_worker' mydrv_worker will exit.

source code:

 

 

steps:
    1. compile
        # make -C /path/to/your/kernel/tree -M `pwd' modules
    2. #echo "" > /var/log/messages
    3. insmod test2.ko
    4. cat /var/log/messages
        May 13 02:27:11 joseph kernel: [160219.386631] Hello, I am a test module
        May 13 02:27:11 joseph kernel: [160219.386843] mydrv_worker go to sleep
        May 13 02:27:11 joseph kernel: [160219.386932] Create mydrv_submit_task <---------<<<<<<<<
        May 13 02:27:11 joseph kernel: [160219.387016] submit_work get lock
        May 13 02:27:11 joseph kernel: [160219.387042] submit_work release lock
        May 13 02:27:11 joseph kernel: [160219.387061] my_task is called the 1 time(s)
        May 13 02:27:11 joseph kernel: [160219.387081] mydrv_worker go to sleep
        May 13 02:27:11 joseph kernel: [160219.387099] submit_work get lock
        May 13 02:27:11 joseph kernel: [160219.387117] submit_work release lock
        May 13 02:27:11 joseph kernel: [160219.387136] my_task is called the 2 time(s)
        May 13 02:27:11 joseph kernel: [160219.387154] mydrv_worker go to sleep
        May 13 02:27:11 joseph kernel: [160219.387171] mydrv_submit_task exit
    5. # ps -ef
        you can find 'mydrv_worker'. assume its thread ID is 21996.
       # kill -s 9 21996  // kill the thread
    6. # cat /var/log/messages
        May 13 19:36:49 joseph kernel: [221908.003286] mydrv_worker exit
        May 13 19:37:04 joseph kernel: [221922.735699] Bye, my dear!
        May 13 19:37:04 joseph kernel: [221922.735701]  Cruel world
   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值