青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

string

string
posts - 27, comments - 177, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

用戶級線程切換

Posted on 2012-01-15 07:01 djx_zh 閱讀(5570) 評論(0)  編輯 收藏 引用
實現線程庫的一個核心問題是實現線程的切換。線程切換主要做了兩件事:一是舊線程執行環境的保存,二是新線程執行環境的恢復。執行環境主要指寄存器,棧的切換也是通過寄存器的切換來完成的。
非搶占式用戶級線程可以使用兩類接口來實現: longjmp和setjmp; swapcontext,makecontext,setcontext. 在此不再贅述。
搶占式用戶級線程切換
線程切換的時機。 切換分兩種,一種是主動切換,一種是被動切換。主動切換是非搶占式的;被動切換發生在時間片用完之后,一個線程的時間片用完后就要強行切換到另外的線程。那么被動切換很自然的要發生在時鐘中斷里。在linux里面我們使用alarm信號。既然如此,趕快動手吧。
void timeHandler (int signo)
{  
    thread_list 
*  old;    if(signo != SIGALRM) return ;   
    signal(SIGALRM,timeHandler);   
    //! 如果有結束了的線程,釋放該線程。
    ...   

    old  
=  sys.current;
    
if(old == 0){
        
if(sys.threads){
            sys.current  
=  sys.threads;
            longjmp(sys.current 
-> thread.buf,  1 );
        }
    }
else{
        sys.current  
=  GetNext(sys.current)
        
if(sys.current){
            
if  (!setjmp(old -> thread.buf,1)){
                longjmp(sys.current 
-> thread.buf,  1 );
            }
        }
    }
}
我們會很悲觀的發現,alarm信號只發生了一此。問題出在哪兒呢?原來linux的信號是不可重入的。進入信號處理函數之前,該信號被屏蔽,退出該信號處理函數之后該信號重新開放。而在信號處理函數中發生longjmp后,程序就跳轉到其他線程,該信號處理函數不能退出。為了能再次進入信號處理函數,我們在切換之前就要重新開放該信號。我們可以使用siglongjmp/sigsetjmp代替longjmp/setjmp.
雖然該方法能夠實現搶占功能,但總讓人覺得不舒服。沒有退出的信號處理函數讓人如骨鯁在喉。有沒有更優美的方法呢?
先來看一下信號處理的流程:以alarm信號為例。
1。 alarm信號到達,執行權由用戶空間進入內核空間,棧自動切換到內核棧(內核棧指針存放在TSS結構的ESP0中)。同時用戶空間的執行環境存放到內核棧中。
2。 內核進行一些信號相關工作。 最后發現我們注冊了alarm信號的處理函數,然后建立執行信號handler的棧環境(通常在用戶棧棧頂),將已經保存在內核棧中的用戶執行環境復制到信號處理函數棧。 然后通過reti從內核返回到用戶空間,恢復用戶空間執行環境,執行信號處理函數。
3。 執行完信號處理函數后,再次進入內核,注意此次進入內核后,內核棧會再次自動保存用戶空間執行環境,但這不是我們需要的。所以內核會將信號處理函數棧中的用戶執行環境復制回內核棧。
4。  再次從內核空間切換到用戶空間,用戶執行環境自動恢復到alarm信號到達時的執行狀態。
分析后我們會發現,當我們執行信號處理函數時,棧頂是保存了用戶執行環境的,通過更換這個執行環境,就可以達到用戶態線程切換的目的。
#include <sys/ucontext.h>
# if __WORDSIZE == 64
#define OFFSET_TO_SIGCONTEXT 7 
# else
#define OFFSET_TO_SIGCONTEXT 3 
# endif
void
 timeHandler (int signo)
{
    unsigned 
int i, j;
    sigcontext
* psig_context;        
    if(signo != SIGALRM) return ;
    signal(SIGALRM,timeHandler);
    __asm( 
"lea (%%" bp_register ", %1), %0":"=r"(psig_context): "r"(OFFSET_TO_SIGCONTEXT* sizeof(ptr_size*)));
    schedule(psig_context);

}
用戶執行環境用sigcontext結構體來描述, 在64位系統中,該結構體位于 RBP + 7*8 位置處; 在32位系統中位于EBP+3*4位置處。 __asm( "lea (%%" bp_register ", %1), %0":"=r"(psig_context): "r"(OFFSET_TO_SIGCONTEXT* sizeof(ptr_size*))); 用于獲得該結構體指針,然后就可以傳到 調度函數用戶線程切換了。

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一二三视频| 久久综合九色综合欧美狠狠| 亚洲高清123| 欧美aaaaaaaa牛牛影院| 91久久极品少妇xxxxⅹ软件| 欧美二区乱c少妇| 欧美韩日一区二区| 亚洲女爱视频在线| 欧美在线播放一区二区| 亚洲国产高清在线| 亚洲精品一区二区三区四区高清| 欧美午夜精品理论片a级大开眼界| 亚洲一区美女视频在线观看免费| 亚洲图片你懂的| 国产一区99| 91久久综合亚洲鲁鲁五月天| 欧美亚洲成人免费| 久久综合网hezyo| 欧美了一区在线观看| 亚洲欧美激情视频在线观看一区二区三区| 中国女人久久久| 亚洲第一区色| 一区二区三区国产在线| 狠狠色噜噜狠狠狠狠色吗综合| 欧美激情乱人伦| 国产精品www| 免费亚洲电影在线| 国产精品theporn| 欧美大胆人体视频| 国产精品婷婷午夜在线观看| 欧美刺激午夜性久久久久久久| 欧美日韩视频专区在线播放 | 国产午夜精品一区二区三区视频 | 久久久久久91香蕉国产| 欧美成人在线免费观看| 午夜精品美女久久久久av福利| 久久久噜噜噜久久久| 亚洲欧美在线高清| 欧美国产精品一区| 美女日韩在线中文字幕| 国产精品入口66mio| 亚洲日本中文字幕| ●精品国产综合乱码久久久久| 亚洲视频欧美在线| 日韩一区二区免费高清| 久久精品在这里| 性欧美暴力猛交69hd| 欧美日韩免费看| 亚洲第一色在线| 激情成人综合| 久久成人18免费网站| 午夜精品久久久久久久久久久| 欧美—级a级欧美特级ar全黄| 久久久久一区二区三区四区| 国产精品入口福利| 一区二区欧美日韩视频| 一本色道久久88精品综合| 麻豆精品精品国产自在97香蕉| 久久久久久**毛片大全| 国产精品丝袜91| 亚洲男人的天堂在线aⅴ视频| 亚洲一区二区动漫| 欧美日韩一区成人| 一本色道久久综合一区| 亚洲一二三级电影| 国产精品久久久久三级| 一区二区三区黄色| 性做久久久久久久免费看| 国产精品免费一区二区三区观看 | 蜜桃av噜噜一区| 狠狠色狠色综合曰曰| 久久精品人人做人人爽| 老司机一区二区三区| 伊人成人开心激情综合网| 久久久国产一区二区| 免费观看不卡av| 最新国产成人av网站网址麻豆| 欧美xxx在线观看| 亚洲国产一区二区三区a毛片| 亚洲伦伦在线| 国产精品第13页| 欧美一区二区三区在线| 久久久另类综合| 最新高清无码专区| 欧美日韩一区二区免费在线观看| 一本色道久久综合亚洲精品婷婷| 午夜视频在线观看一区| 国产自产2019最新不卡| 美女图片一区二区| 99国内精品久久久久久久软件| 亚洲一区二区三区在线看| 国产日韩欧美麻豆| 美女图片一区二区| 一区二区三区四区蜜桃| 久久久噜噜噜久噜久久| 亚洲乱码国产乱码精品精| 国产精品乱码一区二区三区| 久久九九免费| 亚洲人午夜精品免费| 久久国产手机看片| 亚洲精品国产精品久久清纯直播| 欧美午夜精品久久久久久久| 午夜精品久久久久久久蜜桃app | 亚洲嫩草精品久久| 欧美激情aaaa| 午夜在线电影亚洲一区| 亚洲国产精品嫩草影院| 国产精品v欧美精品v日韩精品| 欧美在线观看一区二区三区| 亚洲黄色高清| 久久精品日韩欧美| 亚洲视频久久| 亚洲日本中文| 国自产拍偷拍福利精品免费一| 欧美精品国产一区| 久久精品国产精品亚洲| 亚洲影院高清在线| 亚洲黄色一区二区三区| 久久综合九色欧美综合狠狠| 亚洲永久在线观看| 亚洲精品在线观看免费| 狠狠做深爱婷婷久久综合一区 | 国产精品视频不卡| 欧美国产在线视频| 久久综合激情| 欧美一区午夜精品| 亚洲女爱视频在线| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲视频电影在线| 亚洲精品网站在线播放gif| 免费h精品视频在线播放| 欧美一区二视频在线免费观看| 99精品欧美一区二区三区| 在线播放一区| 今天的高清视频免费播放成人| 国产精品永久免费视频| 国产精品theporn88| 欧美日韩日本国产亚洲在线| 欧美福利电影网| 欧美丰满少妇xxxbbb| 农村妇女精品| 欧美成人午夜激情视频| 欧美1区2区| 欧美国产亚洲视频| 欧美精品videossex性护士| 欧美成人激情视频免费观看| 毛片基地黄久久久久久天堂| 久久综合色天天久久综合图片| 久久久国产视频91| 久久综合中文| 欧美激情视频在线播放| 欧美精品久久久久久久| 欧美日韩网址| 国产伦精品一区二区三区照片91 | 国产视频一区二区三区在线观看| 国产精品人成在线观看免费 | 国产亚洲一区二区三区| 国内精品久久久久久久影视蜜臀 | 欧美久久久久| 欧美日韩一区二| 国产精品色一区二区三区| 国产日韩欧美精品| 尤物网精品视频| 亚洲最新视频在线播放| 亚洲影院色无极综合| 久久精品免费观看| 欧美激情精品久久久久久蜜臀| 亚洲欧洲另类| 午夜精品一区二区三区电影天堂| 欧美一区1区三区3区公司| 久热爱精品视频线路一| 欧美久久精品午夜青青大伊人| 国产精品久久久久久久久久久久| 国模精品一区二区三区色天香| 亚洲高清视频一区二区| 在线性视频日韩欧美| 久久精品99国产精品日本| 欧美成人免费va影院高清| 99pao成人国产永久免费视频| 亚洲欧美日本在线| 欧美成人性生活| 国产精品一区二区三区四区五区 | 亚洲免费av观看| 午夜欧美不卡精品aaaaa| 欧美成人a视频| 亚洲男女自偷自拍| 奶水喷射视频一区| 国产欧美短视频| 亚洲美女av网站| 久久综合狠狠综合久久激情| 亚洲免费观看高清在线观看 | 欧美激情综合在线| 国产一区二区三区直播精品电影| 日韩视频在线你懂得| 久久久久久精| 一区二区日本视频| 欧美成人免费在线观看| 国产一区日韩二区欧美三区| 一区二区久久久久| 欧美高清日韩|