使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API在屏幕上显示进程的ID


使用C语言内嵌汇编代码在屏幕上显示进程ID

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用_第1张图片使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用_第2张图片


  1. API:第一层是指Libc中定义的API,这些API封装了系统调用,使用int 0x80触发一个系统调用中断;当然,并非所有的API都使用了系统调用,如完成数学加减运算的API就没有使用系统调用;也有可能某个API使用了多个系统调用;这一层存在的价值就是为应用程序员提供易于使用的API来调用系统调用;
  2. system_call:运行于内核态。system_call是所有系统调用在内核的入口点,在其中的开始处保护用户态程序执行上下文,结束处恢复用户态程序执行上下文,在中间根据传入的系统调用号对应的中断服务程序;
  3. sys_xyz 系统调用封装例程:执行具体的系统调用操作,完成用户的系统调用请求;每个系统调用都对应一个封装例程;

实验总结

对于本次实验实在有太多不懂之出代码虽是网上寻找不过还是让我了解许多。系统调用其实就是操作系统提供的服务。我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量打印在屏幕上,就必须调用printf,而printf这个函数内部就使用了write这个系统调用。操作系统之所以以system call的方式提供服务,是因为如果程序员能够任意操作OS所有的资源,那么将无比危险,所以OS设计出了内核态和用户态。我们平时编程都是在用户态下,如果我们想要调用系统资源,那么就必须采用系统调用,陷入内核态,才能达到目的。


你可能感兴趣的:(使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用)