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

歡迎訪問 生活随笔!

生活随笔

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

windows

操作系统 真象还原 读书笔记

發布時間:2023/12/20 windows 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统 真象还原 读书笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 環境配置
        • 1、虛擬機virtualBox和centos
        • 2、最小化虛擬機安裝后需要配置的基本軟件
          • 2、1虛擬機連網
          • 2.2 虛擬機軟件安裝
        • 3、共享文件設置
          • 3.1安裝virtualBox增強工具
          • 3.2掛載文件
        • 4、bochs安裝使用
      • 1 實模式下內存布局及BIOS
        • bios(base input output system)干了什么事情?
      • 2 mbr與loader引導程序
        • loader 創建全局描述符表進入保護模式
        • loader創建頁表進行內存分頁管理(虛擬地址核心)
        • loader中掃描內存大小 加載內核文件 進行內核文件映象的創建 執行內核文件
      • 3 計算機開機過程總結
          • 計算機上電
          • 執行 bios
          • 執行mbr
          • 執行loader進入內核程序(操作系統)
      • 補充計算機特權級的知識
      • 4函數調用的約定
        • 4.1 匯編代碼和C語言調用
      • 5 中斷機制
        • 中斷的分類
        • 中斷描述符表
        • 可編程中斷芯片
      • 6 內存管理
      • 7 線程
        • 7.1多線程機制
      • 8 鎖機制

環境配置

1、虛擬機virtualBox和centos

下載virtualBox 安裝centos 這個比較簡單,但是安裝centos可以選擇安裝完整版也可以選擇安裝最小版,安裝最小版就需要補充安裝其他包

2、最小化虛擬機安裝后需要配置的基本軟件

2、1虛擬機連網

首先在virtualBox中將網絡設置為 NAT

然后到虛擬機中修改虛擬機的網絡腳本文件,主要就是將存在于/etc/sysconfig/network-scripts/ifcfg-enp0s3中的ONBOOT改為yes就可以了,不需要其他設置,之前重啟虛擬機就可以聯網了

可以嘗試拼一下百度網站

2.2 虛擬機軟件安裝

常用軟件安裝

yum groupinstall "Development Tools" //gcc, gcc-c++等常用軟件都會裝上gcc –v //正常則會顯示gcc 版本 [root@localhost ~]# yum -y install vim* [root@localhost ~]# yum install ncurses-devel zlib-devel texinfo gtk2-devel qt-devel tcl-devel tk-devel kernel-headers kernel-devel //不裝則bochs編譯時會出錯 [root@localhost ~]# yum install gtk* //前一行的gtk2-dvel已經安裝,此行可不執行 [root@localhost ~]# yum install build-essential nasm

圖形化軟件安裝

因為bochs需要在圖形界面下才能正常運行,所以需要安裝X Windows和Gnome [root@localhost ~]# yum grouplist |more //察看Gnome安裝包的名稱 [root@localhost ~]# yum groupinstall "X Window System" // 安裝基本的X系統組件 [root@localhost ~]# yum groupinstall "Gnome Desktop " //這一行根據第一行代碼查出來的名稱確定 [root@localhost ~]# startx //進入Gnome

3、共享文件設置

3.1安裝virtualBox增強工具

選擇安裝曾強工具,虛擬機中會出現一個新的DVD盤,

進入這個vbox中在命令行用

sh ./VBoxLinuxAdditions.run //執行這個工具的安裝


第一次安裝可能會保存有kernerl headers沒有安裝,根據提示用yum將缺少的軟件包安裝后重啟,再重新用上面的命令安裝增強工具

3.2掛載文件

增強工具安裝成功后
在設備中設置共享文件夾就可以了

然后虛擬機中就會出現一個新的文件夾

4、bochs安裝使用

第一下載bochs文件,這本書使用的是bochs2.6.2 在bochs官網就可以直接下載,下載tar.gz版本然后解壓
利用,進入解壓目錄設置配置文件

./configure \ --prefix=/root/learnOperaSys/bochs262G \ //這個是bochs軟件最終安裝的目錄 --enable-debugger \ --enable-disasm \ --enable-iodebug \ --enable-x86-debugger \ --with-x \ --with-x11

執行完這一個configure命令之后。會生成一個makefile文件,這個時候需要打開makefile文件,在第92行中加上-lpthread 庫
然后執行make 在執行make install

執行完make install
會在configure中指定的目錄下生成bochs可執行文件

在安裝目錄根據書上教程添加bochsrc文件hd60M.img文件 mbr.bin等文件可以測試bochs是否正常,但是bochs報錯不會彈出書中的對話框
bochsrc.disk中內容

megs:32 romimage:file=/root/learnOperaSys/bochs262G/share/bochs/BIOS-bochs-latest vgaromimage:file=/root/learnOperaSys/bochs262G/share/bochs/VGABIOS-lgpl-latest boot:disk log:bochs.out mouse:enabled=0 keyboard_mapping:enabled=1,map=/root/learnOperaSys/bochs262G/share/bochs/keymaps/x11-pc-us.map ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14 ata0-master: type=disk, path="hd60M.img", mode=flat, cylinders=121, heads=16, spt=63


注意按下C仿真程序才會執行

1 實模式下內存布局及BIOS

書中采用intel8086系列講解,實模式下內存大小為1MB,分為ROM(只讀內存)和RAM(隨機存儲)。BIOS存在于ROM中,并且所處的位置也是固定的在F000-fffff中,但是計算機開機最開始cs:ip指令指向的確實F0000:FFFF0,是因為這一行存儲的是一個跳轉指令,程序會跳轉到bios中的起點出,為什么這么設計呢?我覺得就是因為這個地址設計是靠硬件設計的,不好改,但是bios的大小可能會變,所以bios的起始地址可能會變,所以需要用一條跳轉指令來間接的確定bios的起始地址。

bios(base input output system)干了什么事情?

第1件事情: 檢測基本硬件
第2件事情: 初始化中斷向量表,中斷向量表存在最低地址處,中斷向量表指向的中斷程序存在于bios中
第3鍵事情最重要: 加載mbr引導程序,(這個是一個基礎引導程序,(會引導loader加載器程序)),并且跳轉執行這個引導程序,加載mbr的時候就把它加載到0x7000這個位置,跳轉頁跳轉到這個位置執行程序。

2 mbr與loader引導程序

mbr最主要的工作就是加載loader引導程序,loader程序做了很多工作,

loader 創建全局描述符表進入保護模式

其中最關鍵之一就是將系統從實模式轉變為了保護模式。
實模式轉變為保護模式中起到關鍵作用的就是全局描述符表GDT(存在去內存中),全局描述符表中記錄的是段描述符,段描述符中記錄了一個段的屬性(這是保護模式的精髓):有段基址,內存段類型,段界限,特權級,段是否存在于內存中。也就是說訪問一個地址時,需要通過這個全局描述符表找到對應的段。怎么找段描述符呢?這個時候段寄存器中存著的就是選擇子(選擇子中0-1位表示特權級(將這里的特權級和段描述符中的特權級比較就可以實現一個權限等級的保護) 第2位表示在全局描述符表還是局部描述符表中查找段描述符),通過選擇子作為索引在全局描述符表中查找段描述符。全局描述符表通過全局描述符表指針GDTR找到,GDTR通過lgdt指令完成初始化,lgdt可以在實模式和保護模式實用。

進入保護模式還需要其他工作配合:比如打開控制寄存器CR0的PE標志位,匯編程序中用bit[32]來標記。

loader創建頁表進行內存分頁管理(虛擬地址核心)

首先頁式管理和段式管理的不同在于,段式管理是將執行文件分成不同的段,但是每一個段中地址必須是連續的,在物理地址上和邏輯地址都是相同的,但是頁式管理實現了邏輯地址式連續的但是物理地址是不連續的,程序執行的時候首先是獲取了邏輯地址(線性地址),經過頁部件的轉化為物理地址后,給相應的寄存器去尋址。具體來說:分頁就是將段按照4kb大小來進行分頁,然后每一個邏輯頁對應一個物理頁。當每次獲取一個邏輯地址(32位),前面20位相當于頁索引,后面12位相當于頁內偏移。這20位索引又可以分為兩個10位的索引,形成頁目錄和頁表兩級索引。頁表項中內容:4字節:20位頁地址,12位屬性。

loader中掃描內存大小 加載內核文件 進行內核文件映象的創建 執行內核文件

loader程序首相創建全局描述符表,進入保護模式,然后檢查系統最大內存,將內核文件加載到內存中,創建頁表,進入分頁模式,將內核文件按照編譯地址完成內核映射,形成內核映像,然后跳轉到內核映像中執行內核內容。

在這本書中當編譯內核文件時需要修改一下編譯命令,不然gcc編譯出來的時elf64的頭文件而不是elf32的頭文件

gcc -m32 -c -o main.o main.c ld -m elf_i386 main.o -Ttext 0xc0001500 -e main -o kernel.bin

3 計算機開機過程總結

計算機上電

計算機上電后,cpu的指令地址寄存器被初始化為0xF000:0xFFF0,這個地址指向一段物理內存區域(ROM區域),然后獲取一個跳轉指令轉到bios代碼的執行處,執行bios代碼,完成硬件自檢的任務。注意這一段代碼載rom中,只可讀不可改。

執行 bios

bios執行最后會從磁盤(硬盤)中加載主引導程序MBR,

執行mbr

MBR主要用來初始化CPU各種寄存器的值,然后從硬盤中讀取loader內核加載程序。

執行loader進入內核程序(操作系統)

內核加載程序需要完成比較多的事情,最主要的是內核加載程序中實現了從實模式到保護模式的變換,以及虛擬地址的使用。在加載器中需要初始化全部描述符表GDT,全局描述符表主要用來在虛擬地址中通過選擇子(段寄存器中的內容)查找段基址,以及通過描述段的屬性,來判定命令是否違規,這里涉及到特權級的表示。加載器完成了這些負載工作后就可以加載真正的內核程序了,加載內核程序后創建頁表 ,開啟分頁管理模式,完成內核映像,進入內核程序執行。

補充計算機特權級的知識

計算機中將程序按照權限分為不同的級別0 1 2 3四個級別,級別數子越小權限越大。每一個段描述符中都有一個權限描述(DPL),然后訪問者也就是段寄存器中的屬性(除了選擇器,還有一個CPL訪問者權限),只有CPL <= DPL訪問才可以進行。程序的執行的權限可以改變,通過各種門結構。比如用戶程序變為內核程序的時候CPL就會改變。

除了CPL DPL還有RPL,就是用戶程序的請求指令通過門變換為內核程序等更高權限的指令時候,用RPL來記錄這條指令真正的背后發起者所擁有的權限。
權限檢查發生在利用選擇子去全局描述符表中查找段的時候。

4函數調用的約定

函數調用的核心就是參數傳遞,CS:IP地址指針的保存。參數傳遞利用棧來實現,參數就是壓棧,調用者先把參數按照某個順序(從右到左)壓棧,然后被調用者按照順序取出參數。最后由調用者或者被調用者重置棧指針的值(相當于清空棧)。

4.1 匯編代碼和C語言調用

因為C代碼也會被編譯成匯編代碼,所以C代碼可以和匯編代碼相互調用,只要遵守相當的調用約定。

5 中斷機制

中斷的分類

可以分為內中斷和外中斷,內中斷是由內部軟件驅動了,外中斷是由硬件驅動
中斷是否可屏蔽,有的中斷不可屏蔽(比如外部斷電等緊急外中斷,運行時錯誤等內部中斷),有的中斷可屏蔽。

中斷描述符表

中斷描述符表中的每一條數據是八個字節,記錄了中斷處理程序的地址以及其他屬性,中斷發生時通過中斷描述符表找到對應的中斷處理程序進行處理。

可編程中斷芯片

給外設用的,用于將外部中斷統一管理,可編程體現在中斷向量號可以分配,優先級等其他屬性可以設置。

6 內存管理

內存管理真正管理的是物理內存,內存管理是通過位圖來管理的,用一位來管理4kb的內存(bitmap)。具體來說,將內存分為物理內核內存區,物理用戶內存區,虛擬內核內存區,虛擬用戶內存區。內存管理就是當發現虛擬地址所表示的空間不在物理內存中,就要向操作系統申請空間,分配內存。

7 線程

進程是一個程序執行的完整描述,包含完整的地址空間,完整的資源控制。線程只是一段執行流,包含執行代碼段以及執行的上下文環境(寄存器環境)。一個進程中可以有多個線程,多個線程共享進程的資源(鎖機制),

7.1多線程機制

多線程機制的核心在于需要線程表(記錄所有線程,這個線程表可以是鏈表),一個調度器,適時的調度不同的線程上處理器,并且為線程的調度創建或者保護上下文環境。
多線程可以在用戶級實現,比如C++中提供的poxis多線程機制,也可以在內核級實現。用戶級實現的多線程在操作系統層面不可見,操作系統依然以為只是一個進程一個線程在運行,但是內核級的多線程機制,在操作系統層面也對應多個任務,這樣同一個進程就可以占用更多的處理器資源。
操作系統層面的多線程需要借助PCB這種進程線程的的文件格式進行管理。
在操作系統中線程切換需要三步:時鐘中斷處理,調度器調度,任務切換函數。

8 鎖機制

加鎖釋放鎖本質上也是很多操作的集合,怎么保證加鎖釋放鎖的原子性呢?這就是通過關中斷實現鎖操作的原子性(所以開關中斷是實現鎖的最底層技術)。
臨界區:多線程進程對共享資源的競爭代碼
阻塞是一個線程或者進程的主動行為,自己將自己移動到阻塞隊列中
喚醒:是當前線程將鎖上等待的其他線程從阻塞隊列中救出來放到就緒隊列首部

總結

以上是生活随笔為你收集整理的操作系统 真象还原 读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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