4.理解系统调用的工作机制

来源:互联网 发布:f117和f22 知乎 编辑:程序博客网 时间:2024/05/16 12:22

请注意:>原作者:张澍> 原创作品转载请注明出处> 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

  • 实验步骤
  • 实验分析
    • 1内核态用户态
    • 2一个系统调用的流程
    • 3系统调用三层皮
  • 总结

1.实验步骤

Linux中编辑运行:

$vim fork.c#include<stdio.h>#include<unistd.h>main(){    int pid = fork();    if(pid == -1)    {        printf("error\n");    }    else if(pid == 0)    {        printf("This is the child process!\n");    }    else    {        printf("This is the parent process! child process id = %d\n",pid);    }    return 0;}$gcc fork.c -o fork -m32 $./fork

运行结果

这里写图片描述

2.实验分析

2.1内核态/用户态

  • 内核态:

    • 可以直接操作内存的程序。
  • 用户态:

    • 间接操作内存的程序。

2.2一个系统调用的流程

  1. 寄存器上下文
    • 用户态顶地址、当前状态字、当前CS:eip的值
  2. 保护现场
    • 进入中断程序,保存需要用到的寄存器数据
  3. 恢复现场
    • 退出中断程序,恢复保存寄存器的数据

2.3系统调用三层皮

这里写图片描述

3.总结

系统调用的意义:

  1. 把用户从底层的硬件编程中解放出来
  2. 极大的提高了系统的安全性
  3. 使用户程序具有可移植性
0 0
原创粉丝点击