美文网首页
操作系统学习笔记(十)

操作系统学习笔记(十)

作者: itczt | 来源:发表于2019-04-21 18:05 被阅读0次

    系统调用

    用户界面的定义

    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


    linux系统调用的工作原理


    相关文章

      网友评论

          本文标题:操作系统学习笔记(十)

          本文链接:https://www.haomeiwen.com/subject/kjztgqtx.html