一、理论知识

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

系统调用的三层皮:API(应用程序接口),中断向量system_call,中断服务程序sys_xyz

宏观上Linux操作系统的体系架构分为:用户态和内核态

当一个进程在执行用户自己的代码时处于用户运行态(用户态),此时特权级最低,为3级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态。Ring3状态不能访问Ring0的地址空间,包括代码和数据;当一个进程因为系统调用陷入内核代码中执行时处于内核运行态(内核态),此时特权级最高,为0级。执行的内核代码会使用当前进程的内核栈,每个进程都有自己的内核栈。

用户态切换到内核态的3种方式:系统调用、异常、外围设备的中断

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

第一步:选择使用的系统调用:我选择的是20号 getpid

第二步:用C语言编程

第三步:用gcc编译运行

第四步:将C的代码改为嵌入式汇编语句

第五步:编译并运行

三、实验总结

1、API:应用程序接口是一个函数定义,系统调用通过软中断向内核发出一个明确的请求。 
系统调用:操作系统为用户态进程与硬件设备进行交互提供了一组接口。 
当API中包含系统调用时,通过系统调用号进入相应的系统调用,然后使用软中断进入内核态。中断发生后会保护现场,将用户的当前栈顶地址,当时的状态字和cs:eip的值进行压栈。之后进入由用户态切换到内核态,处理完中断程序后还原现场,返回用户态。 
通过使用API和C代码中嵌入式汇编代码两种方式实现系统调用,理解了系统调用的工作过程。

2、系统调用的工作机制

最新文章

  1. 第一天ci框架开发商城2
  2. linux 关机要点
  3. c#:未将对象引用设置到对象的实例--可能出现的问题总结(转)
  4. 图表控件Edraw Max免费下载地址
  5. 企业应用架构模式阅读笔记 - Martin Fowler
  6. vijosP1629 八
  7. wordpress主题制作常用基本的模板及说明
  8. POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
  9. JS中事件代理与委托
  10. C#中KeyDown和KeyPress区别
  11. Java NIO系列教程(三) Buffer(转)
  12. 分离你的spring配置文件,让结构更清晰
  13. C#压缩解压文件
  14. latch releae overview
  15. react component onClick 函数带参数
  16. jenkins中shell脚本编写的两个注意点
  17. MySQL分页查询性能优化
  18. PSD的单位及计算方法[转]
  19. JPA使用指南 javax.persistence的注解配置讲解
  20. 论文笔记:Parallel Tracking and Verifying: A Framework for Real-Time and High Accuracy Visual Tracking

热门文章

  1. 原生javascript包装一个ajax方法
  2. centos虚拟机配置网络
  3. 面试BAT问的最多的27道MyBatis 面试题(含答案和思维导图总结)
  4. 怎么用Folx自动标签功能自动分类文件
  5. 精尽MyBatis源码分析 - SQL执行过程(四)之延迟加载
  6. k8S 搭建集群
  7. 怎样安装Arch Linux以及Deepin桌面环境
  8. react高阶组件的一些运用
  9. poi 1182
  10. python 爬取喜马拉雅节目生成RSS Feed