loader-->kernel這整個(gè)過程中代碼都運(yùn)行在特權(quán)級0(最高特權(quán)級),進(jìn)程工作的特權(quán)級1(即低特權(quán)級),當(dāng)然這是出于安全性的考慮,如果不考慮安全性,進(jìn)程完全可以工作在特權(quán)級0.1.第一個(gè)問題,要從高特權(quán)級向低特權(quán)級轉(zhuǎn)變,怎么轉(zhuǎn)變呢?這里用到一個(gè)人工模擬的中斷返回(iretd),這里有個(gè)小疑問根據(jù)我的了解,iret和iretd都可以表示中斷返回,書中是用的iretd,不知道為什么,當(dāng)然這并不影響我們對全局的了解,嗯,繼續(xù),首" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

自己動(dòng)手寫操作系統(tǒng)之進(jìn)程

系統(tǒng) 1755 0

程序的運(yùn)行從boot-->loader-->kernel這整個(gè)過程中代碼都運(yùn)行在特權(quán)級0(最高特權(quán)級),進(jìn)程工作的特權(quán)級1(即低特權(quán)級),當(dāng)然這是出于安全性的考慮,如果不考慮安全性,進(jìn)程

完全可以工作在特權(quán)級0.

1. 第一個(gè)問題,要從高特權(quán)級向低特權(quán)級轉(zhuǎn)變,怎么轉(zhuǎn)變呢?這里用到一個(gè)人工模擬的中斷返回(iretd),這里有個(gè)小疑問根據(jù)我的了解,iret和iretd都可以表示中斷返回,書中是

用的iretd,不知道為什么,當(dāng)然這并不影響我們對全局的了解,嗯,繼續(xù),首先我們要把將要運(yùn)行在特權(quán)級1上的進(jìn)程所需的寄存器準(zhǔn)備好,這個(gè)準(zhǔn)備好怎么理解呢,具體來說,

cs中保存的是將要從ring0跳轉(zhuǎn)到ring1的進(jìn)程A的選擇子,ds,es,fs等原理一樣(應(yīng)該是數(shù)據(jù)段描述符),ip應(yīng)該是進(jìn)程A第一個(gè)條要執(zhí)行的指令,按照順序把它們壓入棧中

2. 完成上一步一些數(shù)據(jù)結(jié)構(gòu)是少不了的比如說書中的進(jìn)程(PROGREE),TSS ,IDT,GDT等

3. 為了以后多進(jìn)程的考慮我們要把每一個(gè)進(jìn)程放到一個(gè)段中,即每個(gè)進(jìn)程一個(gè)LDT,所以需要一個(gè)在全局描述符表中添加一個(gè)局部描述符,當(dāng)然一個(gè)描述符對應(yīng)一個(gè)選擇子。

每個(gè)局部描述符所指的段中都有什么東西呢?想想看,程序運(yùn)行需要代碼段,需要堆棧,需要數(shù)據(jù)段,所以LDT中有兩個(gè)描述符,分別是代碼段描述符和數(shù)據(jù)段(堆棧段)描述符

4. 最后初始化TSS,TSS中只用到了兩項(xiàng),ring0的es和esp,為什么要用到這兩項(xiàng)呢?這是在保存ring0狀態(tài)時(shí)寄存器的值?

5. 最后細(xì)說一下這個(gè)中斷,其實(shí)很好理解,但是我表達(dá)的可能不是太好,當(dāng)從ring1到ring0時(shí),這時(shí)會(huì)讀取TSS的值,TSS中只用到了兩項(xiàng),分別為es和esp,esp記錄的是進(jìn)程

表的位置,進(jìn)程表位于特權(quán)級為0的段中(這個(gè)一定要注意),讀取TSS的值后,esp就指向了進(jìn)程表,這時(shí)把進(jìn)程A的狀態(tài)保存,其實(shí)就是把進(jìn)程A所有的寄存器保存下來,這時(shí)候就

進(jìn)入了ring0,這時(shí)就可以執(zhí)行相應(yīng)的中斷處理,中斷處理的內(nèi)容當(dāng)然可以包括進(jìn)程調(diào)度,如果這個(gè)過程中用到堆棧的話,那么毫無疑問會(huì)破壞進(jìn)程表,為什么呢?因?yàn)楫?dāng)壓棧完成的

時(shí)候esp指向進(jìn)程表的首地址處,所以此時(shí)進(jìn)程堆棧操作的話會(huì)破壞堆棧(但也不是絕對,破壞了在復(fù)原就好了,不過這里是容易讓人疏忽的地方),所以這里要把堆棧指向另一個(gè)位

置,然后在這個(gè)位置隨意使用。 另外要說的一點(diǎn)事處在ring1的進(jìn)程沒有用到TSS

6. 最后說下《自己動(dòng)手寫操作系統(tǒng)》和linux0.12的區(qū)別,0.12是這樣實(shí)現(xiàn)的,0.12用TSS保存進(jìn)程的狀態(tài),0.12進(jìn)程進(jìn)程切換的時(shí)候用到了TSS描述符(其實(shí)0.12進(jìn)程切換直接

或者間接都用到了TSS描述符),中斷的時(shí)候用中斷門和陷阱門(沒有任務(wù)門),由于0.12是用TSS自動(dòng)保存進(jìn)程的狀態(tài)所以中斷/切換的時(shí)候就直接跳轉(zhuǎn)到相應(yīng)的處理函數(shù),這里感

覺0.12設(shè)計(jì)還是要好的,因?yàn)橛玫搅薚SS的功能,畢竟這是硬件實(shí)現(xiàn),速度上要快,而且要省心不少,《自己》中也用到了TSS,不過給人的感覺只是用到了一小部門功能

?

自己動(dòng)手寫操作系統(tǒng)之進(jìn)程


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲精品免费在线 | 国产成人久久一区二区三区 | 91青娱国产 | 亚洲香蕉久久一区二区三区四区 | 99久久精品国产免看国产一区 | 私人影院aaaaa毛片 | 亚洲欧美另类视频 | 五月桃花网婷婷亚洲综合 | 国产成人一区免费观看 | 欧美一区二区三区香蕉视 | 日韩亚洲综合精品国产 | 国产精品999视频 | 国产h版大片在线播放 | 国内精品久久影视 | 色播五月激情五月 | 国产99视频精品免视看7 | 免费播放欧美毛片欧美aaaaa | 爱搞逼综合| 久久一日本道色综合久久m 久久一色本道亚洲 | 国产精品乱 | 国产精品乱码在线观看 | 国农村精品国产自线拍 | 毛片福利 | 欧美精品久久久亚洲 | 亚洲精品啪啪一区二区三区 | 成人a毛片在线看免费全部播放 | 国产福利在线观看永久视频 | 免费国产成人综合 | 大毛片a大毛片 | 国产一区亚洲二区 | 99精品国产成人一区二区 | 国产成人一区二区三中文 | 国模和精品嫩模私拍视频 | 99热精品久久只有精品黑人 | 天天操人人干 | 5060午夜一级毛片免费观看 | 北条麻妃手机在线观看 | 国产护士一级毛片高清 | 欧美黄业 | 亚洲成精品动漫久久精久 | 亚洲一区日韩二区欧美三区 |