• <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>

            那誰的技術(shù)博客

            感興趣領(lǐng)域:高性能服務(wù)器編程,存儲,算法,Linux內(nèi)核
            隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
            數(shù)據(jù)加載中……

            linux內(nèi)核V2.6.11學(xué)習(xí)筆記(3)--switch_to宏

            這一節(jié)可以很長,也可以很短.要寫長是因?yàn)檫@里有不少細(xì)節(jié)可以寫,要寫短是因?yàn)槿绻魂P(guān)注細(xì)節(jié),而只關(guān)注基本的原理,那么幾句話就可以說完了.
            坦白的說,細(xì)節(jié)部分我還沒有完全吃透,即使是<<深入理解Linux內(nèi)核>>一書,講到這部分也費(fèi)了不少篇幅.因?yàn)槲以诘谝槐殚喿x時(shí)閱讀速度要盡可能的加快,一些不太明白的細(xì)節(jié)暫且放過去,等精讀第一遍完畢了再繼續(xù)深入,所以我選擇了長話短說.

            switch_to宏用于進(jìn)程切換,給定了前一個(gè)進(jìn)程結(jié)構(gòu)體指針prev,以及需要切換到的進(jìn)程結(jié)構(gòu)體指針next,從prev切換到next.
            但是,實(shí)際上,switch_to宏有三個(gè)參數(shù),除了上面說的兩個(gè)參數(shù)之外,還有一個(gè)last參數(shù).而且使用switch_to宏的時(shí)候傳入的prev和last都是同一個(gè)值,比如會這么調(diào)用這個(gè)宏:
            switch_to(prev,next,prev).

            這是為什么呢?

            考慮一種場景,進(jìn)程A切換到進(jìn)程B,因?yàn)槊總€(gè)進(jìn)程的空間是不同的,所以在切換之前,進(jìn)程A的空間里prev=A,next=B,last=A.
            一段時(shí)間之后,需要切換回到進(jìn)程A,假設(shè)當(dāng)前進(jìn)程是C,那么對于C而言prev=C,next=A,last=C.

            對比前后兩種場景:
            進(jìn)程A切換前:prev=A,next=B,last=A
            進(jìn)程C切換前:prev=C,next=A,last=C

            這時(shí)開始從進(jìn)程C切換到進(jìn)程A,注意到在切換之前switch_to宏將prev存放到了eax寄存器中,也就是在進(jìn)程C切換到進(jìn)程A之前,eax=C
            切換之后,很顯然,來到了進(jìn)程A的空間,因此prev,next,last指針要回到進(jìn)程A被切換出去之前的指向,因此prev=A,next=B,last=A,而eax的數(shù)據(jù)保持不變.
            在switch_to宏返回之前,將eax寄存器的數(shù)據(jù)存放到last中,因此,last=eax=C.
            此時(shí),也就是進(jìn)程A被切換回來之后,prev=A,next=B,last=C

            從上面的分析可以看出,實(shí)際上,prev指向的是進(jìn)程切換之前被切換走的進(jìn)程指針,而last指向的是切換之后從哪個(gè)進(jìn)程切換過來的.
            兩者的意義并不一樣,只不過是在切換之后原先的prev無用了,可以用于保存切換之后是從哪個(gè)進(jìn)程切換過來的,所以才會出現(xiàn)調(diào)用switch_to宏時(shí)prev和last相同的情況.

            posted on 2009-04-19 10:16 那誰 閱讀(4157) 評論(1)  編輯 收藏 引用 所屬分類: linux kernel

            評論

            # re: linux內(nèi)核V2.6.11學(xué)習(xí)筆記(3)--switch_to宏[未登錄]  回復(fù)  更多評論   

            這里簡單的說eax起了一個(gè)把進(jìn)程C內(nèi)核堆棧內(nèi)容復(fù)制到進(jìn)程A內(nèi)核堆棧的作用。而last完全可以沒有,直接填一個(gè)"=a"(prev)就可以了,因?yàn)樵诤暾归_后實(shí)質(zhì)上就是這樣的。這里用last只不過是為了便于理解。注意,在宏里面,出現(xiàn)last的地方實(shí)質(zhì)上就是prev。
            2009-04-19 16:11 | Stephen
            精品久久久久久久久久中文字幕| 亚洲美日韩Av中文字幕无码久久久妻妇 | 日韩久久久久久中文人妻| 久久无码专区国产精品发布| 亚洲国产美女精品久久久久∴ | 久久免费精品一区二区| 青青草国产97免久久费观看| 精品国产乱码久久久久久人妻| 77777亚洲午夜久久多喷| 亚洲欧洲久久久精品| 精品一区二区久久久久久久网站| 久久久久久久免费视频| 亚洲一区中文字幕久久| 午夜精品久久久久久中宇| 久久久无码精品午夜| 99久久精品免费看国产| 久久影院综合精品| 99蜜桃臀久久久欧美精品网站| 精品无码久久久久久久动漫| 91精品国产综合久久久久久| 亚洲va中文字幕无码久久不卡| 无码任你躁久久久久久| 久久国产精品视频| 国产福利电影一区二区三区久久老子无码午夜伦不 | 亚洲午夜久久久久久久久久| 久久男人AV资源网站| 国产巨作麻豆欧美亚洲综合久久| 91久久婷婷国产综合精品青草| 精品无码久久久久国产动漫3d| 欧美久久久久久精选9999| 久久精品国产精品亚洲人人| 国产香蕉97碰碰久久人人| 99久久免费只有精品国产| 久久久久免费精品国产| 国产精品九九久久精品女同亚洲欧美日韩综合区 | 久久国产精品一区| 国产精品伊人久久伊人电影| 久久九九免费高清视频| 久久久久久久久久久免费精品| 久久久久国产一区二区| 色婷婷久久久SWAG精品|