操作系統-操作系統概念及啓動代碼

  • 本系列博客爲觀看哈工大李治軍老師的操作系統視頻而做的整理總結。
  • 本文爲第一篇,主要是概念認知及閱讀啓動代碼,瞭解操作系統的啓動過程

一、操作系統是什麼?

在這裏插入圖片描述如圖所示,操作系統就是界於應用和硬件之間,方便 我們使用硬件(如顯存)的一層軟件。
它管理哪些硬件?
在這裏插入圖片描述
我們重點關注它的 CPU管理、內存管理、終端管理、磁盤管理、文件管理

學習操作系統的三個層次:

  • 應用軟件調用操作系統接口
  • 應用軟件進入操作系統,瞭解和修改操作系統
  • 從底層硬件出發設計並實現操作系統

四個樣例實驗大體指明操作系統的學習方向和需要具備的能力
在這裏插入圖片描述

二、計算機結構及計算機啓動過程

1.馮`諾依曼存儲程序思想: 將程序和數據放到計算機內部的存儲器中,計算機在程度的控制下一步一步進行處理。
2.計算機由五大部件組成:輸入設備、輸出設備、存儲器、運算器、控制器
在這裏插入圖片描述
3.計算機開機過程

操作系統剛開始在磁盤上
但是取址執行需要代碼放入內存中
所以第一部分工作是將操作系統從磁盤上讀入內存中。

在這裏插入圖片描述計算機剛開機進入的是BIOS, 引導系統啓動。
硬盤的第一個扇區上存放着開機後執行的第一段我們可以控制的程序。操作系統從這裏開始。
在這裏插入圖片描述

計算機開機執行的第一段啓動代碼:
在這裏插入圖片描述
MOVW:將DS:SI的內容送至ES:DI,複製過去
此處是將DS ES 左移4位後加上SI DI 值

rep movw
rep 是重複執行直到CX =0 ,movw 是移動1個字
jumpi go ,INITSEG 間接跳轉, 段基址加段內偏移(go)

在這裏插入圖片描述
ah al 爲ax的高字節,低字節
ch cl 爲cx的高字節,低字節
dh dl 爲dx的高字節,低字節
如圖示,內存地址跨過boot的512字節後如今在90200處,即setup 扇區的起始地址。
該段代碼從第2個扇區開始,讀4個扇區。 地址從90200開始。 即讀入setup

在這裏插入圖片描述
載入setup模塊後, msg1爲定義的啓動階段顯示的字符。
這裏的字符串可以自已修改, 對應的要修改mov cx,#24 中的字符個數。
在這裏插入圖片描述

bootsect 完成後要執行 setup 模塊

在這裏插入圖片描述
15號中斷,獲取內存大小
mov [2],ax 是間接尋址 9000<<4 +2 90002
形成管理的數據結構

setup 要移動操作系統到0地址處,此後操作系統一直在這裏。
(這就是爲什麼要將引導扇區從 0x7c00處複製到 90000處開始執行,防覆蓋)
在這裏插入圖片描述
實模式是16位 。 保護模式是32位
16位左移4位加IP,最多20位,能尋址的空間是1M . 滿足不了內存訪問。
32位可以訪問4G的內存

這裏的jmpi 0,8 是保護模式下的尋址方式,要查gdt表
在這裏插入圖片描述
gdt ( global discription table) 全局描述符表
cs 從該表中選擇表項,根據表項+ip產生地址
這個表中必需有內容,所以setup要執行操作,初始化該表
中斷表是後面調用接口時會用到
在這裏插入圖片描述
4個字就是8個字節
所以 8 對應的是第二個表項

在這裏插入圖片描述
這樣取出的段基址是 0 ,ip也是0 。所以跳到內存0x0000處(32位)
這裏放的是system 模塊, 開始執行system 模塊
要執行system 模塊的第一部分代碼 head.s
在這裏插入圖片描述
操作系統必須按這樣的結構編寫。如何保證呢?通過makefile
在這裏插入圖片描述
操作系統寫完後是一個鏡像 image ,將這個鏡像放到0磁道0扇區。
再用這個鏡像引導,操作系統就起來了
在這裏插入圖片描述
在head .s 中,要再一次建立idt ,gdt 表。 剛纔建立是爲了執行jmpi 0,8 .
現在是爲了系統運行。
此處是32位彙編代碼

head .s 出來要進入main .c
在這裏插入圖片描述
此處的棧是向下生長 ,main函數永不返回

在這裏插入圖片描述
在這裏插入圖片描述
這是初始化內存,以4K爲一頁,逐頁清零

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章