2020-2021-1 20209307《Linux内核原理与分析》第五周作业
2024-09-03 17:34:37
一、理论知识
系统调用:操作系统为用户态进程与硬件设备进行交互提供的一组接口。
系统调用的三层皮: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、系统调用的工作机制
最新文章
- 第一天ci框架开发商城2
- linux 关机要点
- c#:未将对象引用设置到对象的实例--可能出现的问题总结(转)
- 图表控件Edraw Max免费下载地址
- 企业应用架构模式阅读笔记 - Martin Fowler
- vijosP1629 八
- wordpress主题制作常用基本的模板及说明
- POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
- JS中事件代理与委托
- C#中KeyDown和KeyPress区别
- Java NIO系列教程(三) Buffer(转)
- 分离你的spring配置文件,让结构更清晰
- C#压缩解压文件
- latch releae overview
- react component onClick 函数带参数
- jenkins中shell脚本编写的两个注意点
- MySQL分页查询性能优化
- PSD的单位及计算方法[转]
- JPA使用指南 javax.persistence的注解配置讲解
- 论文笔记:Parallel Tracking and Verifying: A Framework for Real-Time and High Accuracy Visual Tracking