一、控制系統啟動過程
1.要想順利啟動系統,bootsect.s必須讓在磁碟的固定位置上,這個工作是由 make / makefile 完成的
3.在setup中獲取記憶體大小這乙個硬體引數的目的是為後面的mem_init()做準備
4.在螢幕上打出「loading system…」等系統logo的時候,計算機內部正在:初始化記憶體管理資料結構、讀磁碟、啟動保護模式
5.windows系統啟動和linux系統啟動時,初始化核心資料結構不一樣
6.根據gdt表,jmpi 0, 8要跳到0位址處去執行,那麼能不能執行jmp 0呢?也可能,但首先要設定cs,並且要保證cs指向的那個gdt表項中的基位址為0
7.作業系統啟動要完成的工作:初始化idt表、初始化mem_map、初始化gdt表
8.mem_init就是初始化乙個陣列,如果某個陣列項中的內容為0,則表示對應的那一段記憶體空閒;陣列中的每個項表示固定大小的一段記憶體;mem_init呼叫之前可以不獲得物理記憶體的大小;此外,並非初始化時將所有陣列項中的內容都設定為0
二、系統介面
1.使用者程式呼叫printf(「hello world!」)最終要通過寫視訊記憶體來完成hello world!的輸出,從使用者程式到寫視訊記憶體中間經過的順序為:使用者程式;c函式庫;系統呼叫;sys_write;寫視訊記憶體
2.將程式的執行分為使用者態和核心態是為了保護作業系統核心
3.在系統呼叫的實現中,在int 0x80指令呼叫之前,給eax賦值的目的是傳遞系統呼叫號
4.為什麼稱為系統呼叫:為了和其他的函式呼叫相區別,表現為乙個函式呼叫,最終呼叫了作業系統提供的功能;而並非call了乙個核心中的函式
5.鼓勵作業系統實現posix介面的真正目的是上層應用程式可以移植
6.printf(「hello world!」)中的字串位址最終是通過暫存器和棧的配合以引數的形式傳遞給sys_write函式的
7.int 0x80是唯一能從cpl=3(使用者態)到cpl=0(核心態)的指令跳轉,所以應用程式中的系統呼叫要展開成一段包含int 0x80的**
8.系統呼叫有open,printf,write等,但cos不是
9.windows的系統介面和linux介面的不一樣導致了windows上的程式不能在linux上執行
10.在linux上新增乙個系統呼叫foo()的步驟有:在int 0x80的中斷處理程式中增加對sys_foo的函式呼叫,修改sys_call_table這個函式表,將foo展開成一段包含int 0x80的**;而不是設定int 0x80的中斷處理程式入口位址
01 作業系統基礎
一 控制系統啟動過程 1.要想順利啟動系統,bootsect.s必須讓在磁碟的固定位置上,這個工作是由 make makefile 完成的 3.在setup中獲取記憶體大小這乙個硬體引數的目的是為後面的mem init 做準備 4.在螢幕上打出 loading system 等系統logo的時候,計...
作業系統基礎 01 概述
1.作業系統是乙個控制程式 2.作業系統是乙個資源管理器 計算機系統中同時存在多個執行的程式。併發 vs 並行 併發是指一段時間內,同時允許多個程式執行 並行是指乙個時間點上,同時允許多個程式執行。需要多核心才可以。表面上我們可以同時訪問記憶體 io,但其實在計算機內部,這會變成互斥互相訪問以及分時...
作業系統01
大家熟悉的作業系統?windows作業系統 安卓系統 ios作業系統 mac os linux作業系統 注意 作業系統可以和使用者進行直接的互動,但是絕大多數情況下使用者通過軟體和作業系統進行互動。作業系統的概念 作業系統 operating system,os 是指控制和管理整個計算機系統的硬體和...