系统调用
用户界面的定义
OS提供给用户控制计算机的机制,又称用户接口。
操作界面
系统调用(System Call,系统功能调用,程序界面)
例一: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);
}
特点:函数涉及外设(显卡)操作,涉及进程操作
系统调用的定义
操作系统内核为应用程序提供的服务/函数
21h(09),printf(),exit()
系统调用的特点
- 一般涉及资源完成或硬件的操作
- 运行于核态
- 每个系统调用具有唯一的编号:ID
-
调用过程会产生中断:自愿中断
系统调用的中断过程
Dos利用INT 21h中断实现系统调用
string DB'Hello!' :定义显示的字符串
......
MOV DX,string :DX<——字符串地址
MOV AH,09h ;AH<——09H号子功能
INT 21h
特点:利用AH寄存器存放在系统调用的编号。
Dos利用INT 21h中断实现系统调用
- 01:程序终止
- 02:键盘输入并且显示
- 03:显示输出
- 04:异步通信输入
····· - 08:键盘输入无回显
- 09:显示字符串
······ - 39:建立子目录
- 3A:删除子目录
- 3B:改变当前目录
- 3C:异步通信输入
······ - 3F:读文件
- 40:写文件
······
Linux利用INT 80h中断实现系统调用
输出字符串:Hello world:
MOV EBX,1 ;EBX送1表示stdout
MOV ECX,MSG ;字符串的首地址送入ecx
MOV EDX,14 ;字符串的长度送入edx
MOV EAX,4 ;指定系统调用的编号
INT 80h ;中断;输出字串
MSG :DB “Hello world!”
特点:利用EAX寄存器存放系统调用的编号。
···
例:
include <stdio.h>
int main(void)
{
printf("Hello world");
exit(0);
}
···
特点:
- 类似API函数
- 在高级语言中使用
- 含有“INT 80h”中断指令,执行相应的系统调用
隐式系统调用
编译时隐式系统调用转化为显示的系统调用:INT 80h
网友评论