系統(tǒng)調用
用戶界面的定義
OS提供給用戶控制計算機的機制,又稱用戶接口。
操作界面
系統(tǒng)調用(System Call,系統(tǒng)功能調用,程序界面)

例一:linux;兩個整數相加;函數add()
#include <stdio.h>
{
return (a+b);
}
int main(void)
{
int sum = add(100,300);
}
例二:Dos;21h中斷顯示字符串(09號功能)
String DB 'Hello!' :定義要顯示的字符串
........
Mov DX,string :DX<——字符串地址
Mov AH,09H :AH<——09H號功能
INT 21h
特點:09號功能涉及外設(顯卡)操作
例三:linux 打印一個字符串(printf)
#include <stdio.h>
int main(void)
{
printf("Hello world");
exit(0);
}
特點:函數涉及外設(顯卡)操作,涉及進程操作
系統(tǒng)調用的定義
操作系統(tǒng)內核為應用程序提供的服務/函數
21h(09),printf(),exit()

系統(tǒng)調用的特點
- 一般涉及資源完成或硬件的操作
- 運行于核態(tài)
- 每個系統(tǒng)調用具有唯一的編號:ID
-
調用過程會產生中斷:自愿中斷
系統(tǒng)調用的中斷過程

Dos利用INT 21h中斷實現系統(tǒng)調用
string DB'Hello!' :定義顯示的字符串
......
MOV DX,string :DX<——字符串地址
MOV AH,09h ;AH<——09H號子功能
INT 21h
特點:利用AH寄存器存放在系統(tǒng)調用的編號。
Dos利用INT 21h中斷實現系統(tǒng)調用
- 01:程序終止
- 02:鍵盤輸入并且顯示
- 03:顯示輸出
- 04:異步通信輸入
····· - 08:鍵盤輸入無回顯
- 09:顯示字符串
······ - 39:建立子目錄
- 3A:刪除子目錄
- 3B:改變當前目錄
- 3C:異步通信輸入
······ - 3F:讀文件
- 40:寫文件
······
Linux利用INT 80h中斷實現系統(tǒng)調用
輸出字符串:Hello world:
MOV EBX,1 ;EBX送1表示stdout
MOV ECX,MSG ;字符串的首地址送入ecx
MOV EDX,14 ;字符串的長度送入edx
MOV EAX,4 ;指定系統(tǒng)調用的編號
INT 80h ;中斷;輸出字串
MSG :DB “Hello world!”
特點:利用EAX寄存器存放系統(tǒng)調用的編號。
···
例:
include <stdio.h>
int main(void)
{
printf("Hello world");
exit(0);
}
···
特點:
- 類似API函數
- 在高級語言中使用
- 含有“INT 80h”中斷指令,執(zhí)行相應的系統(tǒng)調用
隱式系統(tǒng)調用
編譯時隱式系統(tǒng)調用轉化為顯示的系統(tǒng)調用:INT 80h

linux系統(tǒng)調用的工作原理


