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

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

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

系統(tǒng) 2095 0

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

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

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

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

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)是少不了的比如說(shuō)書(shū)中的進(jìn)程(PROGREE),TSS ,IDT,GDT等

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

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

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

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

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

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

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

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

6. 最后說(shuō)下《自己動(dòng)手寫(xiě)操作系統(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í)候用中斷門(mén)和陷阱門(mén)(沒(méi)有任務(wù)門(mén)),由于0.12是用TSS自動(dòng)保存進(jìn)程的狀態(tài)所以中斷/切換的時(shí)候就直接跳轉(zhuǎn)到相應(yīng)的處理函數(shù),這里感

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

?

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


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 老司机福利深夜亚洲入口 | 日本特级aⅴ一级毛片 | 久久久久久久久66精品片 | 国内精品视频在线观看 | 亚洲精品国产成人7777 | 亚洲国产一区二区三区 | 欧美三级在线观看不卡视频 | 99热黄色| 亚洲国产精品一区二区第四页 | 久久美剧| 国产精品国产色综合色 | 精品国产欧美一区二区最新 | 香蕉国产在线观看免费 | 国产在线精品一区二区中文 | 国产成人香蕉在线视频fuz | 精品日本久久久久久久久久 | 成人不卡| 亚洲国产国产综合一区首页 | 884hutv四虎永久7777 | 99热久久精品首页 | 久久精品成人国产午夜 | 天天摸夜夜摸爽爽狠狠婷婷97 | 国产日本欧美亚洲精品视 | 日本自己的私人影院 | 青青爽| 狠狠干欧美 | 日日干日日操日日射 | www.性视频| 亚洲精品久久久久影院 | 国产高清视频在线 | 中文字幕一区久久久久 | 我想看一级毛片免费的 | 奇米第四色在线观看 | 伊人色网站 | 91青青青国产在观免费影视 | 久久99精品一久久久久久 | 中文字幕在线不卡精品视频99 | 玖玖免费 | 激情开心婷婷 | 国产91页| 香蕉久久夜色精品国产2020 |