实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

时间:2021-09-17 16:30:27

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

攥写人:杨光  学号:20135233

( *原创作品转载请注明出处*)

( 学习课程:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

实验要求:

  1. 选择一个系统调用(13号系统调用time除外),系统调用列表参见http://codelab.shiyanlou.com/xref/linux-3.18.6/arch/x86/syscalls/syscall_32.tbl

  2. 参考视频中的方式使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,推荐在实验楼Linux虚拟机环境下完成实验。

实验过程:


首先,选择使用的系统调用:我选择的是20号 getpid

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

然后,进入实验楼,编写c语言代码

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

保存,并用gcc编译  用./运行

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

运行成功,之后再修改yangguang.c,改为嵌入式汇编语句

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

保存并退出,之后使用gcc编译运行

实验--使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用(杨光)

知识点总结:

***用户通过库函数与系统调用联系起来。

***内核态

在高执行级别下,代码可以执行特权指令,访问任意的物理地址

***用户态:

代码的掌控范围受到限制。

intel x86 CPU有四个权限分级,0-3。Linux只取两种,0是内核态,3是用户态
区分权限级别使得系统更加稳定。

***系统调用的意义:

操作系统为用户态进程与硬件设备进行交互提供了一组接口,就是系统调用。

- 远离底层硬件编程
- 安全性
- 可移植性

***API - 应用编程接口

与系统调用区别:

- API只是一个函数定义
- 系统调用是通过软中断向内核发出一个明确的请求。

一般每个系统调用对应一个封装例程,库再用这些封装例程定义出用户的API,方便用户使用。

API与系统调用不是一一对应的

API可以:
- 直接提供用户态服务
- 一个单独的API可能调用几个系统调用
- 不同的API可能调用了同一个系统调用

返回值:

 - 大部分封装例程返回一个整数
- -1表示失败,不能满足请求
- errno 特定出错码

3.所谓“扒开系统调用的三层皮”

  • API(xyz)
  • 中断向量(system_call)
  • 中断服务程序(sys_xyz)

API xyz 与sys_xyz是以系统调用号相连的