ch1-系統(tǒng)啟動_第1頁
ch1-系統(tǒng)啟動_第2頁
ch1-系統(tǒng)啟動_第3頁
ch1-系統(tǒng)啟動_第4頁
ch1-系統(tǒng)啟動_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、哈工大計算機科學與技術學院哈工大計算機科學與技術學院軟件基礎教研室軟件基礎教研室操作系統(tǒng)操作系統(tǒng)Operating System第第1 1章章 系統(tǒng)啟動系統(tǒng)啟動Chapter 1: Power On- 2 -Operating System操作系統(tǒng)課,我們希望學會什么操作系統(tǒng)課,我們希望學會什么? ?- 3 -Operating System所有目標都要從所有目標都要從“明白操作系統(tǒng)明白操作系統(tǒng)”開開始始控制器控制器紙帶紙帶0111010n明白操作系統(tǒng)從明白操作系統(tǒng)從“明白系統(tǒng)啟動明白系統(tǒng)啟動”開始開始打開電源開關后發(fā)生了什么打開電源開關后發(fā)生了什么?打開電源打開電源計算機開始工作計算機開始工

2、作計算機怎么工作計算機怎么工作?又是誰決定了計算機是那樣工作的又是誰決定了計算機是那樣工作的?計算模型計算模型1936年,英國數(shù)年,英國數(shù)學家學家A.C.圖靈圖靈提提出了一種模型出了一種模型人人筆筆紙紙偉大的創(chuàng)舉往往都是從樸素的想法開始的偉大的創(chuàng)舉往往都是從樸素的想法開始的!- 4 -Operating System從圖靈機到通用圖靈機從圖靈機到通用圖靈機控制器控制器紙帶紙帶0111010圖靈機圖靈機通用圖通用圖靈機靈機一個會做一道菜的廚師一個會做一道菜的廚師舀舀2大碗面放入盆中大碗面放入盆中打打6個雞蛋放入盆中個雞蛋放入盆中盆中加入盆中加入500克水克水將盆中的物質攪拌均勻將盆中的物質攪拌均

3、勻做成等厚度的餅狀物做成等厚度的餅狀物大火蒸大火蒸15分鐘分鐘一個能看懂菜譜的廚師一個能看懂菜譜的廚師將這個過程將這個過程描述描述: 菜譜菜譜 廚師廚師菜譜菜譜1菜肴菜肴1菜肴菜肴2菜譜菜譜2這樣的廚師才具這樣的廚師才具有競爭力有競爭力 控制器控制器紙帶紙帶數(shù)據(jù)對象數(shù)據(jù)對象設置控制器動作設置控制器動作修改控制器修改控制器控制器狀態(tài)控制器狀態(tài)處理處理- 5 -Operating System從通用圖靈機到計算機從通用圖靈機到計算機n偉大想法的工程實現(xiàn)偉大想法的工程實現(xiàn)又一個偉大的發(fā)明又一個偉大的發(fā)明: 馮馮諾依曼諾依曼存儲程序思想存儲程序思想 mov ax, 100 100: 0 IPmov a

4、x, 100IRax0存儲器存儲器運算器、控制器運算器、控制器就是那個就是那個讀寫指針讀寫指針1946年提出年提出存儲程序的主要思想:將程序和數(shù)據(jù)存放到計算機內部的存儲存儲程序的主要思想:將程序和數(shù)據(jù)存放到計算機內部的存儲器中,計算機在程序的控制下一步一步進行處理器中,計算機在程序的控制下一步一步進行處理計算機由五大部件組成計算機由五大部件組成:輸入設備、輸出設備、存儲器、運算器、輸入設備、輸出設備、存儲器、運算器、控制器控制器- 6 -Operating System打開電源,計算機發(fā)生了什么打開電源,計算機發(fā)生了什么? ?- 7 -Operating System可以打開電源了可以打開電源

5、了n計算模型計算模型我們要我們要關注關注指針指針I(yè)P及其及其指向的內容指向的內容計算機剛打開電源時,計算機剛打開電源時,IP=?由硬件設計者決定由硬件設計者決定!看看看看x86 PC(1)x86 PC剛開機時剛開機時CPU處于實模式處于實模式(2)開機時,開機時,CS=0 xFFFF; IP=0 x0000(3)尋址尋址0 xFFFF0(ROM BIOS映射區(qū)映射區(qū))(4)檢查檢查RAM,鍵盤,顯示器,軟硬磁盤,鍵盤,顯示器,軟硬磁盤 (5)將磁盤將磁盤0磁道磁道0扇區(qū)讀入扇區(qū)讀入0 x7c00處處(6)設置設置cs=0 x07c0,ip=0 x0000和保護模式對應,實模式和保護模式對應,實

6、模式的尋址的尋址CS:IP(CS左移左移4位位+IP),和保護模式不一樣,和保護模式不一樣!ROM BIOS0 x000000000 xFFFFFFFF0 xF00000 x100000ROM BIOS映射區(qū)映射區(qū)- 8 -Operating System0 x7c00處存放的代碼處存放的代碼n就是從磁盤引導扇區(qū)讀入的那就是從磁盤引導扇區(qū)讀入的那512個字節(jié)個字節(jié)引導扇區(qū)就是引導扇區(qū)就是啟動設備的第一個扇區(qū)啟動設備的第一個扇區(qū)啟動設備信息被設置在啟動設備信息被設置在CMOS中中 開機時按住開機時按住del鍵可進入鍵可進入啟動設備設置界面,可啟動設備設置界面,可以設置為光盤啟動以設置為光盤啟動!

7、CMOS: 互補金屬氧化物半互補金屬氧化物半導體導體(64B-128B)。用來存儲。用來存儲實時鐘和硬件配置信息。實時鐘和硬件配置信息。因此,硬盤的第一個扇區(qū)上存放著開機后執(zhí)行的第因此,硬盤的第一個扇區(qū)上存放著開機后執(zhí)行的第一段我們可以控制的程序。一段我們可以控制的程序。操作系統(tǒng)的故事從這里開始操作系統(tǒng)的故事從這里開始- 9 -Operating System引導扇區(qū)代碼引導扇區(qū)代碼: bootsect.s .globl begtext,begdata,begbss,endtext,enddata,endbss.text /文本段文本段begtext:.data /數(shù)據(jù)段數(shù)據(jù)段begdata:

8、.bss /未初始化數(shù)據(jù)段未初始化數(shù)據(jù)段begbss:.textentry start /關鍵字關鍵字entry告訴鏈接器告訴鏈接器“程序入口程序入口”start: mov ax, #BOOTSEG mov ds, ax mov ax, #INITSEG mov es, ax mov cx, #256 sub si, si sub di,di rep movw jmpi go, INITSEG.text等是偽操作符,告訴編譯器產生等是偽操作符,告訴編譯器產生文本段,文本段,.text用于標識文本段的開始用于標識文本段的開始位置。位置。此處的此處的.text、.data、.bss表明這表明這3個

9、個段重疊,不分段段重疊,不分段!此條語句就是此條語句就是0 x7c00處存放的語句處存放的語句!BOOTSEG = 0 x07c0INITSEG = 0 x9000SETUPSEG = 0 x9020將將0 x07c0:0 x0000處的處的256個字個字移動到移動到0 x9000:0 x0000處處- 10 -Operating Systemjmpi go, INITSEG go: mov ax,cs /cs=0 x9000 mov ds,ax mov es,ax mov ss,ax mov sp,#0 xff00load_setup: /載入載入setup模塊模塊 mov dx,#0 x0

10、000 mov cx,#0 x0002 mov bx,#0 x0200 mov ax,#0 x0200+SETUPLEN int 0 x13 /BIOS中斷中斷 jnc ok_load_setup mov dx,#0 x0000 mov ax,#0 x0000 /復位復位 int 0 x13 j load_setup /重讀重讀jmpi (jump intersegment段間跳轉段間跳轉): cs=INITSEG, ip=go為為call做準備做準備!啟動盤啟動盤boot扇區(qū)扇區(qū)setup的的4個扇區(qū)個扇區(qū)system模塊模塊(OS代碼代碼)0 x13是是BIOS讀磁盤扇區(qū)的中斷讀磁盤扇區(qū)的

11、中斷: ah=0 x02-讀磁盤,讀磁盤,al=扇區(qū)數(shù)量扇區(qū)數(shù)量(SETUPLEN=4),ch=柱面號,柱面號,cl=開始扇區(qū),開始扇區(qū),dh=磁頭號,磁頭號,dl=驅動器驅動器號,號,es:bx=內存地址內存地址- 11 -Operating System讀入讀入setup模塊后模塊后: ok_load_setup Ok_load_setup: /載入載入setup模塊模塊 mov dl,#0 x00 mov ax,#0 x0800 /ah=8獲得磁盤參數(shù)獲得磁盤參數(shù) int 0 x13 mov ch,#0 x00 mov sectors,cx mov ah,#0 x03 xor bh,bh

12、 int 0 x10 /讀光標讀光標 mov cx,#24 mov bx,#0 x0007 mov bp,#msg1 mov ax,#1301 int 0 x10 /顯示字符顯示字符 mov ax,#SYSSEG /SYSSEG=0 x1000 mov es,ax call read_it /讀入讀入system模塊模塊 jmpi 0,SETUPSEG7是顯示屬性是顯示屬性!bootsect.s中的數(shù)據(jù)中的數(shù)據(jù) /在文件末尾在文件末尾sectors: .word 0 /磁道扇區(qū)數(shù)磁道扇區(qū)數(shù)msg1: .byte 13,10 .ascii “Loading system.” .byte 13,1

13、0,13,10顯示這顯示這24個字符將是個字符將是大家的第一個大家的第一個“創(chuàng)創(chuàng)舉舉”!轉入轉入0 x9020:0 x0000執(zhí)行執(zhí)行setup.sboot的工作的工作:讀讀setup,讀讀system- 12 -Operating Systemread_it /讀入讀入system模塊模塊 read_it: mov ax,es cmp ax,#ENDSEG jb ok1_read retok1_read: mov ax,sectors sub ax,sread /sread是當前磁道已讀扇區(qū)數(shù)是當前磁道已讀扇區(qū)數(shù),ax未讀扇區(qū)數(shù)未讀扇區(qū)數(shù) call read_track /讀磁道讀磁道.sy

14、stem模塊可能很大,模塊可能很大,要跨越磁道要跨越磁道!為什么讀入為什么讀入system模塊還需要定義一個函數(shù)模塊還需要定義一個函數(shù)?ENDSEG=SYSSEG+SYSSIZESYSSIZE=0 x8000 /該變量可根據(jù)該變量可根據(jù)Image大小設定大小設定(編譯操作系統(tǒng)時編譯操作系統(tǒng)時)引導扇區(qū)的末尾引導扇區(qū)的末尾 /BIOS用以識別引導扇區(qū)用以識別引導扇區(qū).org 510 .word 0 xAA55 /扇區(qū)的最后兩個字節(jié)扇區(qū)的最后兩個字節(jié)否則會打出非引導設備否則會打出非引導設備可以轉入可以轉入setup執(zhí)行了,執(zhí)行了,jmpi 0, SETUPSEG- 13 -Operating Sy

15、stemsetup模塊,即模塊,即setup.s 根據(jù)名字就可以想到根據(jù)名字就可以想到: setup將完成將完成OS啟動前的設置啟動前的設置start: mov ax,#INITSEG mov ds,ax mov ah,#0 x03 xor bh,bh int 0 x10/取光標位置取光標位置dx mov 0,dx mov ah,#0 x88 int 0 x15 mov 2,ax . cli /不允許中斷不允許中斷 mov ax,#0 x0000 clddo_move: mov es,ax add ax,#0 x1000 cmp ax,#0 x9000 jz end_move mov ds,a

16、x sub di,di sub si,si mov cx,#0 x8000 rep movsw jmp do_move 取出光標位置取出光標位置(包包括其他硬件參數(shù)括其他硬件參數(shù))到到0 x90000處處擴展內存大小擴展內存大小內存地址內存地址長度長度名稱名稱0 x900002光標位置光標位置0 x900022擴展內存數(shù)擴展內存數(shù)0 x901FC2根設備號根設備號0 x9000C2顯卡參數(shù)顯卡參數(shù)SYSSEG = 0 x1000將將system模塊模塊移到移到0地址地址- 14 -Operating System將將setup移到移到0地址處地址處.但但0地址處是有重要內容的地址處是有重要內容

17、的end_move: mov ax,#SETUPSEG mov ds,ax lidt idt_48 lgdt gdt_48/設置保護模式下的中斷和尋址設置保護模式下的中斷和尋址 進入保護模式的命令進入保護模式的命令.idt_48:.word 0 .word 0,0 /保護模式的中斷處理函數(shù)表保護模式的中斷處理函數(shù)表gdt_48:.word 0 x800 .word 512+gdt,0 x9 gdt: .word 0,0,0,0 .word 0 x07FF, 0 x0000, 0 x9A00, 0 x00C0 .word 0 x07FF, 0 x0000, 0 x9200, 0 x00C0 RO

18、M BIOS0 x000000000 xFFFFFFFF0 xF00000 x100000ROM BIOS映射區(qū)映射區(qū)中斷向量表中斷向量表前面的前面的int指令指令才可以使用才可以使用!以后不調用以后不調用int指令了嗎指令了嗎?因為操作系統(tǒng)要讓硬件進入保護模式了因為操作系統(tǒng)要讓硬件進入保護模式了保護模式下保護模式下int n和和cs:ip解釋不再和實模式一樣解釋不再和實模式一樣又一個函數(shù)表又一個函數(shù)表將將cs:ip變成物變成物理地址理地址- 15 -Operating System保護模式下的地址翻譯和中斷處理保護模式下的地址翻譯和中斷處理保護模式下的地址翻譯保護模式下的地址翻譯保護模式下中

19、斷處理函數(shù)入口保護模式下中斷處理函數(shù)入口即即gdt的作用的作用 t是是table,所以實模式,所以實模式下下:cs左移左移4+ip。保護模。保護模式下式下:根據(jù)根據(jù)cs查表查表+ipt仍是仍是table,仿照,仿照gdt,通過通過int n的的n進行查表進行查表GDTcs:ip物理內存地址物理內存地址IDTint n中斷處理函數(shù)入口中斷處理函數(shù)入口即即idt的作用的作用 - 16 -Operating System進入保護模式進入保護模式call empty_8042 mov al,#0 xD1 out #0 x64,al /8042是鍵盤控制器,其輸出端口是鍵盤控制器,其輸出端口P2用來控制

20、用來控制A20地址線地址線call empty_8042 mov al,#0 xDF out #0 x60,al /選通選通A20地址線地址線 call empty_8042初始化初始化8259(中斷控制中斷控制) /一段非常機械化的程序一段非常機械化的程序mov ax,#0 x0001 mov cr0,axjmpi 0,8 empty_8042: .word 0 x00eb,0 x00eb in al,#0 x64 test al,#2 jnz empty_8042 ret 跳到下一句指跳到下一句指令的機器碼令的機器碼!位位1=0,輸入緩存,輸入緩存器為空,不空說器為空,不空說明明PC機有問

21、題機有問題D1表示寫數(shù)據(jù)到表示寫數(shù)據(jù)到8042的的P2端口端口cr0一個非??岬募拇嫫饕粋€非常酷的寄存器PGPE031PE=1啟動保護模式,啟動保護模式,PG=1啟動分頁啟動分頁jmpi 0,8 /cs=8用來查用來查gdt- 17 -Operating Systemjmpi 0,8 /gdt中的中的8gdt: .word 0,0,0,0 .word 0 x07FF, 0 x0000, 0 x9A00, 0 x00C0 .word 0 x07FF, 0 x0000, 0 x9200, 0 x00C0 ?GDTcs:ip0816段基址段基址15.0段限長段限長15.004段基址段基址31.24段

22、基址段基址23.16段限長段限長19.16P DPLGGDT表項表項0310 x00C09A00000007FFFjmp到內存到內存0 x0000處處是是system模塊模塊!兩個兩個gdt表項,都是表項,都是0 x0000,一個只讀,一個只讀(代代碼碼),一個讀寫,一個讀寫(數(shù)據(jù)數(shù)據(jù))- 18 -Operating System跳到跳到system模塊執(zhí)行模塊執(zhí)行.system模塊模塊(目標代碼目標代碼)中的第一部分代碼中的第一部分代碼? head.sdisk: Image dd bs=8192 if=Image of=/dev/PS0 Image: boot/bootsect boot/s

23、etup tools/system tools/build tools/build boot/bootsect boot/setup tools/system Imagetools/system: boot/head.o init/main.o $(DRIVERS) $(LD) boot/head.o init/main.o $(DRIVERS) -o tools/systemsystem由許多文件編譯而成,為什么是由許多文件編譯而成,為什么是head.s?linux/Makefileif=input file/dev/PS0是軟驅是軟驅A明白為什么明白為什么head.s就這樣一個名字了吧就這

24、樣一個名字了吧?- 19 -Operating Systemhead.s /一段在保護模式下運行的代碼一段在保護模式下運行的代碼setup是進入保護模式,是進入保護模式,head是進入之后的初始化是進入之后的初始化stratup_32: movl $0 x10,%eax mov %ax,%ds mov %ax,%es mov %as,%fs mov %as,%gs /指向指向gdt的的0 x10項項(數(shù)據(jù)段數(shù)據(jù)段) lss _stack_start,%esp /設置棧設置棧(系統(tǒng)棧系統(tǒng)棧) call setup_idt call setup_gdt xorl %eax,%eax1:incl %

25、eax movl %eax,0 x000000 cmpl %eax,0 x100000 je 1b /0地址處和地址處和1M地址處相同地址處相同(A20沒開啟沒開啟),就死循環(huán),就死循環(huán) jmp after_page_tables /頁表,什么東東頁表,什么東東?setup_idt: lea ignore_int,%edx movl $0 x00080000,%eax movw %dx,%ax lea _idt,%edi movl %eax,(%edi) 和前面的代碼不和前面的代碼不一樣了一樣了?因為是因為是32位匯編代碼位匯編代碼!structlong *a; short b;stack_s

26、tart=&user_stackPAGE_SIZE2,0 x10; idt_48:.word 0 word 0,0_idt: .fill 256,8,0現(xiàn)在忽略中斷現(xiàn)在忽略中斷- 20 -Operating System關于匯編關于匯編head.s的匯編和前面不一樣的匯編和前面不一樣?mov ax, cs /csax, 目標操作數(shù)在前目標操作數(shù)在前 (1) as86匯編:能產生匯編:能產生16位代碼的位代碼的Intel 8086(386)匯編匯編(2) GNU as匯編:產生匯編:產生32位代碼,使用位代碼,使用AT&T系統(tǒng)系統(tǒng)V語法語法AT&T美國電話電報公司,美國電

27、話電報公司,包含貝爾實驗室等,包含貝爾實驗室等,1983年年AT&T UNIX支持支持組發(fā)布了系統(tǒng)組發(fā)布了系統(tǒng)Vmovl var, %eax/(var)%eaxmovb -4(%ebp), %al /取出一字節(jié)取出一字節(jié)(3) 內嵌匯編,內嵌匯編,gcc編譯編譯x.c會產生中間會產生中間 結果結果as匯編文件匯編文件x.s_asm_(“匯編語句匯編語句”: 輸出輸出: 輸入輸入: 破壞部分描述破壞部分描述); _asm_(“movb %fs:%2, %al”:”=a”(_res):”0”(seg),”m”(*(addr);a表示使用表示使用eax,并編號并編號%0%2表示表示addr,

28、m表示使用內存表示使用內存0或空表示使用與或空表示使用與相應輸出一樣的相應輸出一樣的寄存器寄存器- 21 -Operating Systemafter_page_tables /設置了頁表之后設置了頁表之后setup是進入保護模式,是進入保護模式,head是進入之后的初始化是進入之后的初始化after_page_tables: pushl $0 pushl $0 pushl $0 pushl $L6 pushl $_main jmp set_paging L6: jmp L6setup_paging: 設置頁表設置頁表 ret將來學到將來學到!簡單的幾句程序,控制流卻很復雜簡單的幾句程序,控制流卻很復雜setup_paging執(zhí)行執(zhí)行ret后后? 會執(zhí)行函數(shù)會執(zhí)行函數(shù)main() p3p2p1返回地址返回地址C執(zhí)行執(zhí)行func(p1,p2,p3)進入進入main()后的棧為后的棧為0,0,0,L6 main()函數(shù)的三個參數(shù)是函數(shù)的三

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論