请注意:>原作者:张澍> 原创作品转载请注明出处> 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
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一个系统调用的流程
- 寄存器上下文
- 用户态顶地址、当前状态字、当前CS:eip的值
- 保护现场
- 进入中断程序,保存需要用到的寄存器数据
- 恢复现场
- 退出中断程序,恢复保存寄存器的数据
2.3系统调用三层皮
3.总结
系统调用的意义:
- 把用户从底层的硬件编程中解放出来
- 极大的提高了系统的安全性
- 使用户程序具有可移植性