OS實(shí)驗(yàn)指導(dǎo)書(shū) lab1總結(jié)歸納

0xFFFFFFF0 -> BIOS -> bootloader -> OS

  • BIOS是固化在主板的程序贮聂,初始化硬件,準(zhǔn)備環(huán)境认臊,為上層軟件提供訪問(wèn)和控制

  • bootloader位于存儲(chǔ)介質(zhì)的引導(dǎo)扇區(qū),切換保護(hù)模式圃庭,啟用分段機(jī)制,讀取ELF格式的操作系統(tǒng)到內(nèi)存

    • 保護(hù)模式擁有4GB的尋址空間以及更好的保護(hù)機(jī)制,提供虛擬化支持
    • 實(shí)模式只有16位尋址空間剧腻,沒(méi)有保護(hù)機(jī)制
    • 分段機(jī)制:將內(nèi)存劃分為以初始地址和長(zhǎng)度限制表示的內(nèi)存塊拘央,稱之為段
      • 邏輯地址,段描述符书在,段描述符表灰伟,段選擇子
      • 段描述符:是描述段的屬性
      • 段描述符表: 段描述符的數(shù)組
      • 段選擇子: 段寄存器,定位段描述符表項(xiàng)
    • ELF格式文件:
  • 分段存儲(chǔ)管理機(jī)制:

    1. 段寄存器:DS(Data segment) SS(Stack segment) CS(Code segment)
    2. 段寄存器里存放段選擇子
    3. 段選擇子由INDEX儒旬,TI栏账,RPL三部分組成
    4. 段選擇子結(jié)合GDTR里的基地址,來(lái)從GDT中選擇相應(yīng)的segment-descriptor,GDTR的LIMIT為GDT表項(xiàng)(包括第一個(gè)空表項(xiàng))數(shù)目*8-1
    5. segment-descriptor包含base addr,limit冰单,type艇炎,accessed,avaliable橡伞,granularity,dpl以及segment-present這些部分。由base addr以及l(fā)ogical addr里的offset一起組成linear addr前计,在ucore里便是physical addr,但實(shí)際中還會(huì)再由linear addr生成physical addr垃杖。
  • 保護(hù)機(jī)制

    1. DS和SS里的段選擇子為RPL男杈,CS的段選擇子為CPL,segment-descriptor里的為DPL
    2. CPL為進(jìn)程當(dāng)前的權(quán)限
    3. PL分為0-3调俘,最低為3伶棒,最高為0,這些特權(quán)級(jí)稱為環(huán)彩库,最內(nèi)為ring 0肤无,最外為ring 3,在ucore里只使用了兩級(jí)骇钦,ring 0: 內(nèi)核態(tài) ring 3:用戶態(tài)宛渐。
    4. 兩個(gè)關(guān)節(jié)節(jié)點(diǎn)時(shí)會(huì)檢查特權(quán):
      • 當(dāng)一個(gè)段選擇符被加載時(shí)
      • 通過(guò)linear addr訪問(wèn)內(nèi)存頁(yè)時(shí)
    5. MAX(CPL,RPL)<= DPL,如果為真眯搭,通過(guò)檢測(cè)否則不通過(guò)窥翩。即當(dāng)前權(quán)限或者請(qǐng)求權(quán)限的最低的一個(gè)必須比數(shù)據(jù)段的權(quán)限高,才可以通過(guò)鳞仙。
  • 地址空間

    • 邏輯地址由一個(gè)16bit的segment selector和一個(gè)32bit的offset構(gòu)成
  • 硬盤訪問(wèn)概述
    bootloader通過(guò)lba模式PIO(program IO)方式訪問(wèn)硬盤寇蚊。所有的IO操作都是通過(guò)CPU訪問(wèn)硬盤的IO地址寄存器實(shí)現(xiàn)的
    具體寄存器的訪問(wèn)方式參考指導(dǎo)書(shū)
    流程

  • Link addr&Load addr

    • Link addr:編譯器和指定代碼和數(shù)據(jù)所需要放置的內(nèi)存地址,由鏈接器配置
    • Load addr: 程序?qū)嶋H被加載到內(nèi)存的位置(由程序加載器ld配置)
    • 一般由可執(zhí)行文件結(jié)構(gòu)信息和加載器保證這兩個(gè)地址相同
  • 中斷與異常
    polling較為浪費(fèi)計(jì)算機(jī)資源棍好,因此采用iterrupt機(jī)制來(lái)節(jié)約資源

    1. interrupt分為三類:

      • asynchronous interrupt仗岸,簡(jiǎn)稱interrupt允耿,是由外部事件如IO,timer扒怖,console等異步事件產(chǎn)生的
      • synchronous interrupt右犹,簡(jiǎn)稱exception,是由內(nèi)部事件如指令錯(cuò)誤姚垃,或非法條件同步產(chǎn)生的
      • trap interrupt念链,簡(jiǎn)稱trap,也稱軟中斷soft interrupt积糯,是由system call產(chǎn)生的
    2. 當(dāng)CPU收到中斷信號(hào)時(shí)掂墓,會(huì)根據(jù)idtr的基地址和中斷編號(hào)來(lái)定位到idt,idtr由idt addr以及l(fā)imit組成看成,同gdtr

    3. 由idtr+編號(hào)*8即位interrupt-descriptor的地址君编。

    4. lidt(load idt register)根據(jù)內(nèi)存所存放的idtr格式內(nèi)存數(shù)加載idtr,ring 0川慌;sidt(store idt register)拷貝idtr的內(nèi)容到一個(gè)內(nèi)存地址吃嘿,任意特權(quán)級(jí)均可用運(yùn)行

    5. id(interrupt descrptor)分為三類

      • interrupt Gate: 調(diào)用時(shí)會(huì)禁止interrupt
      • trap Gate:不會(huì)禁止interrupt
      • task Gate: ucore里沒(méi)有使用
    6. id的結(jié)構(gòu):

      • selector: 段選擇子,會(huì)根據(jù)CPL和DPL的值確認(rèn)是否發(fā)生了特權(quán)級(jí)別的轉(zhuǎn)換
      • offset: 這兩者構(gòu)成了中斷處理程序的入口地址
      • dpl

      所謂自動(dòng)禁止梦重,是指CPU跳轉(zhuǎn)到Gate里的地址時(shí)兑燥,在將EFLAGS保存到棧上之后,清除EFLAGS里的IF位琴拧,以避免重復(fù)觸發(fā)中斷降瞳。當(dāng)然操作系統(tǒng)可以將EFLAGS里的IF設(shè)上,從而允許嵌套中斷蚓胸。當(dāng)然在此之前必須做好處理嵌套中斷的準(zhǔn)備

      而trap往往時(shí)系統(tǒng)調(diào)用挣饥,用戶進(jìn)程在用戶態(tài)不可以禁止中斷,而到達(dá)內(nèi)核態(tài)時(shí)禁止中斷沒(méi)有意義沛膳,因?yàn)椴粫?huì)有嵌套系統(tǒng)調(diào)用

  • 中斷與異常的流程

    1. 當(dāng)出發(fā)中斷時(shí)扔枫,根據(jù)CS里的CPL和selector所指向descriptor里的DPL判斷時(shí)是否發(fā)生了特權(quán)級(jí)轉(zhuǎn)換,這里锹安,特權(quán)級(jí)要么保持短荐,內(nèi)核態(tài)到內(nèi)核態(tài),要么提升八毯,用戶態(tài)到內(nèi)核態(tài)搓侄。如果發(fā)生了轉(zhuǎn)化瞄桨,那么會(huì)從當(dāng)前用戶的TSS信息里去的該程序的內(nèi)核棧地址话速,包括ss和esp的值,并且將當(dāng)前使用的棧切換成新的內(nèi)核棧芯侥,再把當(dāng)前用戶棧的ss和esp壓入內(nèi)核棧
    2. 保存現(xiàn)場(chǎng)信息泊交,像內(nèi)核棧依次壓入EFLAGS乳讥,CS,EIP廓俭,ERRORCODE
    3. 根據(jù)段選擇子和offset云石,執(zhí)行中斷服務(wù)例程。
  • 返回時(shí)
    通過(guò)iret(or iretd)指令恢復(fù)被打斷程序的執(zhí)行研乒,具體過(guò)程:

    1. 從內(nèi)核棧里彈出現(xiàn)場(chǎng)信息汹忠,即EFLAGS,CS雹熬,EIP重新開(kāi)始執(zhí)行
    2. 如果存在特權(quán)轉(zhuǎn)換宽菜,則還需要彈出用戶棧的ss和esp
    3. CPU在恢復(fù)過(guò)程中不會(huì)彈出errorcode,需要軟件完成
  • 中斷與異常保護(hù)機(jī)制

    1. check DPL in selector <= CPL in CS
    2. 如果中斷是被用戶態(tài)程序中的指令觸發(fā)竿报,還會(huì)chck DPL in Gate <= CPL in CS铅乡,放置用戶隨意觸發(fā)中斷。
    3. 如果檢查失敗烈菌,會(huì)產(chǎn)生一個(gè)general-protection exception
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阵幸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芽世,更是在濱河造成了極大的恐慌挚赊,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件济瓢,死亡現(xiàn)場(chǎng)離奇詭異咬腕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)葬荷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門涨共,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人宠漩,你說(shuō)我怎么就攤上這事举反。” “怎么了扒吁?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵火鼻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雕崩,道長(zhǎng)魁索,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任盼铁,我火速辦了婚禮粗蔚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘饶火。我一直安慰自己鹏控,他們只是感情好致扯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著当辐,像睡著了一般抖僵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缘揪,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天耍群,我揣著相機(jī)與錄音,去河邊找鬼找筝。 笑死世吨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呻征。 我是一名探鬼主播耘婚,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼陆赋!你這毒婦竟也來(lái)了沐祷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤攒岛,失蹤者是張志新(化名)和其女友劉穎赖临,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體灾锯,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兢榨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顺饮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吵聪。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖兼雄,靈堂內(nèi)的尸體忽然破棺而出吟逝,到底是詐尸還是另有隱情,我是刑警寧澤赦肋,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布块攒,位于F島的核電站,受9級(jí)特大地震影響佃乘,放射性物質(zhì)發(fā)生泄漏囱井。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一趣避、第九天 我趴在偏房一處隱蔽的房頂上張望庞呕。 院中可真熱鬧,春花似錦鹅巍、人聲如沸千扶。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)澎羞。三九已至,卻和暖如春敛苇,著一層夾襖步出監(jiān)牢的瞬間妆绞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工枫攀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留括饶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓来涨,卻偏偏與公主長(zhǎng)得像图焰,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蹦掐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容