要理解大致的啟動流程現需要了解幾組常用的暫存器:
2,ss + sp:其實,ss是堆疊暫存器,而sp是堆疊暫存器偏移。前者儲存的是堆疊的基位址,後者儲存的是棧的棧頂。另外,如果使用到了bp,預設的基位址也是ss,通過bp可以訪問的不僅僅是棧頂,通過ss和bp可以訪問整個堆疊。
上面就是常用的幾組暫存器,其中linux啟動階段關係比較大的還是第一組。
當電腦啟動或者復位的按鈕按下的時候,cpu會把cs暫存器設定為0xfff0,段基位址設定為0xffff0000,段長度設定為64kb。而ip被設定為0xfff0。因此此時cpu的**指向0xfffffff0,也就是4gb最後64kb的最後64b處。
上面這段基本上是來自於別人的書籍,但是從理解來看,最初的cs暫存器賦值為0xfff0我還是沒有弄明白什麼含義。是完全沒有用還是賦值為0xfff0之後其段基位址的數值就是0xffff0000?總體的程式執行位置還是把握住基位址加ip偏移量計算出來應該問題就不大了。
程式的執行位置正好是現在的系統bios的存放位置,而這裡會存放一條jmp的指令。跳轉到bios的程式中的某個位置開始執行。
bios開始執行後,在一系列的硬體檢測等操作結束之後,bios會把與老機器相容的程式複製到最低端位址大小為1mb記憶體的末端64kb區域中。然後跳轉到這個地方,讓cpu在真是的位址模式下進行執行。而這個1mb記憶體的末端64kb的區域被稱為bios的影子區域。
上面的過程完成之後,bios會從硬碟或者其他的裝置載入引導程式,程式被載入到記憶體的0x7c00的地方開始執行。
這整個過程的流程還是比較清晰的,但是**實現以及硬體啟動軟體的模式我還是比較感興趣,這跟我現在嵌入式軟體中遇到的startup是很像的。而這部分的實現,直到現在我都沒有弄明白。
linux作業系統svn開機自啟
常用的有兩種方法 一,svn服務自起指令碼,把這個指令碼放在 etc rc.d init.d 目錄下,這個指令碼命名 svn vi etc rc.d init.d svn bin bash chkconfig 85 15 description svn server svn home svnroot...
Linux 作業系統原理 作業系統的本質
在作業系統尚不存在的年代,人們通過各種按鈕來控制計算機,這一過程非常麻煩。於是,有人開發出了僅僅具有載入和執行功能的監控程式 supervisor 這就是作業系統的原型。通過監控程式,程式設計師可以根據需要將各種應用程式載入到記憶體中執行。雖然仍舊比較麻煩,但現在開發的工作量得到了很大的緩解。隨著時...
Linux作業系統
本書以當前最流行的red hat linux的最新發行版本為基礎,論述作業系統的基本原理 基本思想和基本方法,並在此基礎上介紹linux網路作業系統的核心結構 安裝 配置 基本操作 系統管理及網路應用等,從而系統 完整地講述linux作業系統從基本原理到應用實踐的主要內容。本書注意理論內容的選取,注...