目录
基础知识
内核态
用户态
中断处理
系统调用
实验内容
系统调用文件
库函数 API 进行系统调用
通过在C代码中嵌入汇编代码使用系统调用
总结
基础知识
内核态
由专业的程序员编写,健壮性强,不容易出错。执行级别高,代码可以执行特权指令。
用户态
有普通程序员编写,内容相对不够健壮,容易崩溃。执行级别低,不容易把整个操作系统整崩溃。cs寄存器最低两位表明当前代码的特权级,判断由硬件完成。
中断处理
用户态进入内核态的主要方式。
系统调用
是用户不与硬件直接接触,,提高了系统的安全性、提高程序的可移植性、吧用户从硬件编程中解放出来。通过软中断发出请求。api只是一个函数定义。
由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)。是应用程序同系统之间的接口。操作系统中的状态分为管态(核心态)和目态(用户态)。特权指令:一类只能在核心态下运行而不能在用户态下运行的特殊指令。不同的操作系统特权指令会有所差异,但是一般来说主要是和硬件相关的一些指令。访管指令:本身是一条特殊的指令,但不是特权指令。基本功能:“自愿进管”,能引起访管异常。用户程序只在用户态下运行,有时需要访问系统核心功能,这时通过系统调用接口使用系统调用。系统调用本质上是一种过程调用,但它是一种特殊的过程调用,与一般用户程序中的过程调用有明显的区别。运行状态不同,系统调用的调用过程和被调用过程运行在不同的状态,而普通的过程调用一般运行在相同的状态。调用方法不同。系统调用必须通过软中断机制首先进入系统核心,然后才能转向相应的命令处理程序。普通过程调用可以直接由调用过程转向被调用过程。返回问题。在采用抢先式调度的系统中,当系统调用返回时,要重新进行调度分析――是否有更高优先级的任务就绪。普通的过程调用直接返回调用过程继续执行。 --------摘自百度的百科。
实验内容
系统调用文件
库函数 API 进行系统调用
通过在C代码中嵌入汇编代码使用系统调用
遇到的问题以正常方式编译会报错,需要加“-m32”强制用32位编译。已经存在同名文件夹时程序运行会失败,需要删除后重新运行。
总结
mkdir的系统号是39,在汇编中39被放入eax寄存器,随后两个变量分别表示新建文件夹的名字和其拥有的权限。从“0x80”可以看出,系统调用是通过中断的方式进行工作的。随后系统调用的返回值存入eax寄存器,再将eax寄存器中的值传给预先设定好的变量“flag”,在mkdir中,返回值为0表示调用成功,-1则表示调用失败。



