日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

自己动手写操作系统 - Hello DTOS

發布時間:2023/12/9 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自己动手写操作系统 - Hello DTOS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列筆記參考整理于狄泰未來 - 操作系統專題、于淵 《自己動手寫操作系統》(《一個操作系統的實現》)

基于x86架構從零開始編寫操作系統內核,旨在通過實踐的方式掌握操作系統原理


目錄

1、BIOS

2、主引導程序

1、主引導程序

2、編寫一個主引導程序

3、主引導程序的擴展

3、調試環境的搭建(Bochs)

4、小結


1、BIOS

什么是操作系統?

? ? - Windows,UNIX,Linux,Mac OS,Android,iOS.…

? ? - 操作系統是直接運行于硬件之上的計算機程序

? ? - 操作系統用于管理和控制計算機的硬件與軟件資源

? ? - 操作系統為用戶軟件的開發提供必要的服務和接口

現代計算機系統架構

BIOS - Base Input & Output System

? ? - BIOS是計算機上電后第一個運行的程序

? ? - BIOS首先檢測硬件狀態,檢測通過后立即進行硬件初始化

? ? - BIOS會在內存中建立中斷向量表(提供硬件訪問的方法)

? ? - BIOS 最后將控制權交由主引導程序執行

注意:BIOS不是軟件(Software),而是固件(Firmware)!

? ? ? ? (固件是固化于硬件中的程序,在硬件出廠前已經燒寫固定)

關于中斷向量表和BIOS的詳細介紹可參考:王爽《匯編語言》筆記(詳細)·?十一、內中斷

系統啟動流程(×86架構)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? BIOS 是如何被運行起來的?

BIOS的運行機制

? ? - BIOS 存儲于ROM中,地址映射為0xF0000-0XFFFFF(實地址

? ? - BIOS的入口地址為:0XFFFF0

? ? - 硬件電路的特殊設計使得:開機后,CPU從0XFFFF0處開始執行

? ? ? ? ? ?★ 開機后,CPU一加電,初始化(CS)= 0FFFFH,(IP)= 0,自動從FFFF:0單元開始執行程序

? ? ? ? ? ?★ FFFF:0處有一條轉跳指令,CPU執行該指令后,轉去執行BIOS中的硬件系統檢測和初始化程序。

? ? ? ? ? ?★ 初始化程序將建立BIOS所支持的中斷向量,即將BIOS提供的中斷例程的入口地址登記在中斷向量表中

? ? ? ? ? ?★ 硬件系統檢測和初始化完成后,調用int 19h進行操作系統的引導。從此將計算機交由操作系統控制

BIOS 最后的使命

? ? - 按照用戶設置掃描各個存儲介質(光驅,軟驅,U盤,等)

? ? - 發現主引導區后,將主引導區中的主引導程序載入內存

? ? - 主引導程序在內存中的入口地址為0x0000 : 0x7c00(即0x07c00)

? ? - 將控制權交由主引程序執行(jmp 0x0000:0x7c00

問題

? ? ? BIOS如何在存儲介質中尋找主引導區?

? ? ? 如何判斷引導區中有沒有主引導程序?

主引導區(記錄)(MBR:Master Boot Record)

? ? - 位置:位于存儲介質的最開始位置處大小為512字節

? ? - 特點:前512字節的最后2個有效字節為0x55aa

? ? - 數據:0x55aa之前的數據被視為主引導程序

例如:使用二進程工具查看我的C盤(GPT分區)如下

? ? ? ? ? ? ? ? ? ? ? ? ? ? 關于MBR和GPT的知識點是裝系統必掌握的知識點,篇幅有限,不解釋

更詳細的系統啟動流程(x86架構)

?

2、主引導程序

1、主引導程序

問題

? ? ? ? ?主引導程序是軟件還是固件?如果是軟件,

? ? ? ? ?那么由誰開發?如何開發?

主引導程序

? ? - 一段存儲在主引導區(MBR)中的有效代碼

? ? - 并不固化于硬件,屬于操作系統代碼的一部分

? ? - 啟動操作系統內核的橋梁,由匯編程序寫成

? ? - 代碼總量不能超過512個字節(包含0x55aa)

?

主引導程序的開發

2、編寫一個主引導程序

課程實驗

? ? - 編寫一個主引導程序(匯編語言)

? ? - 可獨立運行于x86架構的主機(無操作系統)

? ? - 運行后在屏幕上打印" Hello,DTOS!"

實現思路

? ? ?1. 將關鍵寄存器的值設置為0(mov ax,0)

? ? ?2. 定義需要打印的數據(db "Hello,DTOS!")

? ? ?3. 打印預定義好的字符數據(int 0x10)

中斷調用 VS 函數調用

編程實驗

第一個引導加載程序? boot.asm

org 0x7c00;告訴編譯器程序將加載到內存7c00偏移處start:mov ax, csmov ss, axmov ds, axmov es, axmov si, msgprint:mov al, [si] ;默認段地址dsadd si, 1cmp al, 0x00je last ;almov ah, 0x0e ;10號中斷0e號子功能:打印字符 參數:AH=0EH,AL=字符,BH=頁碼,BL=前景色(圖形模式)mov bx, 0x0f ;字符顏色int 0x10 jmp printlast:hlt ;停止運行,CPU進入暫停狀態,不執行任何操作,HLT instruction with IF=0!jmp last msg:db 0x0a, 0x0a;換行db "Hello DTOS!"db 0x0a, 0x0atimes 510 -($-$$) db 0x00;db 0x55, 0xaa

$是當行的匯編地址,$$是是當前匯編節(段)的起始匯編地址,當前程序沒有定義節或段,默認生成一個匯編段,起始匯編地址為0。當前程序還很簡陋,但后續會一步步完善。

如何驗證編寫的主引導程序?

解決方案設計

? ? - 將匯編源碼編譯為二進制機器碼(nasm

? ? - 創建虛擬盤(bximage

? ? - 將二進制代碼寫入虛擬盤起始位置(dd

? ? - 在虛擬機中將虛擬盤作為啟動盤執行(vmware

把a.img拷到Windows下用VMware模擬計算機啟動

? ? ? ? ? ? ? ? ? ? ? ? ?那么如何調試主引導區的代碼?

?

3、主引導程序的擴展

限制

? ? ? ? 主引導程序的代碼量不能超過512字節!!

突破限制的思路

? ? -?主引導程序

? ? ? 1. 完成最基本的初始化工作

? ? ? 2. 從存儲介質中加載新程序到內存中

? ? ? 3. 將控制權交由新加載的程序執行(jmp)

? ? ? 4. ...

? ? ? ? ? ? ? ? ? ? ?主引導程序如何加載存儲介質中的其它程序?后續講解
?

3、調試環境的搭建(Bochs)

Bochs(另一款優秀的虛擬機軟件)

? ? - 專業模擬x86架構的虛擬機

? ? - 開源且高度可移植,由C++編寫完成

? ? - 支持操作系統開發過程中的斷點調試

? ? - 通過簡單配置就能夠運行絕大數主流的操作系統

支持調試功能的Bochs版本

1. 下載源碼:https://sourceforge.net/projects/bochs/files/

2. 解壓縮 bochs-2.x.x.tar.gz→bochs-2.x.x(這里選擇 bochs-2.4.5)

3. 進入源碼目錄:cd bochs-2.x.x

4. 配置:./configure --enable-debugger --enable-disasm

5. 編譯:make

6. 安裝:sudo make install、

安裝過程中的錯誤:

? ? ? ? ? ? ? ?再配置一次若提示gtk...錯誤,運行sudo apt-get install libgtk2.0-dev,再配置

若出現下面錯誤

? ? ? ? ? ? ? ? ? ? ? ? ? 缺少?pthread 庫,修改 Makefile 文件,添加下面的部分,然后成功編譯 Bochs 源碼。

配置Bochs的啟動文件

即必須

確定 bochs的安裝路徑(which bochs)

安裝vgabios(apt-get install vgabios)

確定vgabios的安裝路徑(whereis vgabios)

啟動文件bochsrc?

############################################################### # Configuration file for Bochs ################################################################ how much memory the emulated machine will have megs: 32# filename of ROM images romimage: file=/usr/local/share/bochs/BIOS-bochs-latest vgaromimage: file=/usr/share/vgabios/vgabios.bin# what disk images will be used floppya: 1_44=a.img, status=inserted# choose the boot disk. boot: floppy# where do we send log messages? # log: bochsout.txt# disable the mouse mouse: enabled=0# enable key mapping, using US layout as default. keyboard_mapping: enabled=1, map=/usr/local/share/bochs/keymaps/x11-pc-us.map

啟動bochs虛擬機(通過啟動文件)

? ? - 顯示方式:bochs -f bochsrc_file

? ? - 隱式方式:bochs(嘗試尋找下列啟動文件)

? ? ? ? ? ? ? ? ? ? ? 輸入c(continue)繼續執行?

Bochs中的常用調試命令

?

4、小結

BIOS 是計算機上電后第一個運行的程序

BIOS 進行必要的初始化,并加載運行主引導程序

主引導程序位于存儲介質的最開始512字節處

主引導程序負責后續初始化,并加載運行操作系統內核

主引導程序的代碼量不能超過512字節

可以通過主引導程序加載新程序的方式突破限制

主引導程序需要使用匯編語言開發

主引導程序中可以通過BIOS中斷使用硬件功能

主引導程序運行于實模式(地址都是實際的物理地址

Bochs 是一款專業模擬x86架構的虛擬機

從源碼安裝Bochs 可以獲得調試功能的支持

Bochs的啟動配置文件是正確運行關鍵

Bochs 支持斷點調試,其調試命令與GDB類似

?

總結

以上是生活随笔為你收集整理的自己动手写操作系统 - Hello DTOS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。