作業系統 2 作業系統介面

2022-09-21 22:24:12 字數 2284 閱讀 1066

介面是什麼? 使用者用很熟悉的東西進入系統——連線兩個東西、訊號轉換、遮蔽細節......

第一部分:作業系統介面

首先從命令列和圖形介面來引入我們作業系統介面的介紹:

命令列是一段程式, 系統初始化完之後便進入這段程式, 這個程式是乙個死迴圈, 不斷等待著使用者敲入命令。

圖形介面是包括畫圖的c程式(c語言邏輯+重要函式),其中包括了訊息處理機制:迴圈呼叫函式, 從核心裡把訊息取出來, 每取乙個都會呼叫乙個訊息處理函式。

從上面兩個例子,計算機是如何使用硬體的呢? 

普通的c程式+重要函式

回到最初的問題: 什麼是作業系統介面?

作業系統提供的重要函式。

起乙個好聽的名字——系統呼叫

一些具體的作業系統介面:

第二部分:系統呼叫的實現

(1)系統呼叫的實現動機

系統呼叫的直觀想法

實現乙個whoami系統呼叫

使用者程式呼叫whoami, 乙個字串「lizhijun」放在作業系統中(系統引導 時載入),取出來列印

為什麼不能直接訪問該記憶體,要去作業系統中取?

——不能隨意的呼叫資料, 不能隨意的jmp。否則,可以看到root密碼, 可以修改它…可以通過視訊記憶體看到別人word裡的內容…

(2)如何不讓使用者隨意進入核心

核心(使用者)態, 核心(使用者)段

將核心程式和使用者程式隔離!!!

使用者態執行在使用者段下,核心態執行在核心段下

特權級:數字越大,級別越低

(3)硬體提供了「主動進入核心的方法」

對於intel x86,那就是中斷指令,int 指令將使cs中的cpl改成0, 「進入核心」

這是使用者程式發起的呼叫核心**的唯一方式 (此時,cpl=3而 dpl=0),也是系統呼叫的核心:

(1) 使用者程式中包含一段包含int指令的**

(2) 作業系統寫中斷處理,獲取想調程式的編號

(3) 作業系統根據編號執行相應**

其中 int 0x80非常重要

prinf 使用了 write

write 系統呼叫中 包含int指令的**

linux系統呼叫的細節:

其系統呼叫從 #define _syscall3(_syscall3(int, write, int, fd, const char *buf, off_t, count)) type 繼續說起

顯然,__nr_write是系統呼叫號,放在eax中

在linux/include/unistd.h中

#define __nr_write 4 //一堆連續正整數(陣列下標, 函式表索引)

同時eax也存放返回值,ebx,ecx,edx存放3個引數

中斷處理程式: system_call

參考:

作業系統 作業系統介面

介面表現為函式呼叫,由作業系統提供,連線作業系統和應用軟體。出於安全性考慮,應用程式不能直接在記憶體中任意訪問 將核心程式和使用者程式隔離 通過比較訪問資料段cpl和rpl的特權級和當前段dpl的特權級之間的關係 應用程式呼叫庫函式printf printf呼叫庫中的write函式 write將函式...

作業系統複習 作業系統介面

1 作業系統為了方便使用者方便的使用向使用者提供了兩類介面 使用者介面 聯機使用者介面與離線使用者介面 和程式介面 2 程式介面是os專門為使用者程式設定的,它是使用者程式取得os服務的唯一介面。3 系統呼叫提供了使用者程式和作業系統之間的介面,應用程式通過系統呼叫實現與os的通訊並取得服務。由此可...

作業系統 作業系統與人的介面

作業系統為正在執行的程式提供服務並與之通訊的乙個設施 1 功能 裝入並建立程序 對程式的正常或異常終止給出適當的響應 乙個程式執行時,接受其對系統服務及資源的申請 2.由一系列的 系統呼叫 構成。系統呼叫並沒有明確規定是以什麼形式實現的,是庫函式還是其它形式。庫函式可以隱藏訪管指令的細節,使系統呼叫...