操作系统学习笔记(十)

系统调用

用户界面的定义

OS提供给用户控制计算机的机制,又称用户接口。

操作界面

系统调用(System Call,系统功能调用,程序界面)



例一:linux;两个整数相加;函数add()

#include 
{
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 
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

int main(void)
{
printf("Hello world");
exit(0);
}
···
特点:

  • 类似API函数
  • 在高级语言中使用
  • 含有“INT 80h”中断指令,执行相应的系统调用

隐式系统调用

编译时隐式系统调用转化为显示的系统调用:INT 80h


linux系统调用的工作原理


你可能感兴趣的:(操作系统学习笔记(十))