Linux内核分析实验四----
2016-03-19 11:03
387 查看
一、用户态、内核态
权限分级——为了系统本身更稳定,使系统不宜崩溃。(并不是所有程序员缩写的代码都很健壮!!)
x86 CPU四种不同的执行级别:0(内核态)—3(用户态)
区分方法:CS:EIP(CPU的每条指令都是通过这里执行)(代码段选择寄存器:偏移量寄存器)
CS寄存器的最低两位表明了代码级别——逻辑地址(不是物理地址)
内核态:可以访问4G地址空间的任意地址 用户态:0x00000000—0xbfffffff空间内的地址
二、中断——从用户态进入内核态
系统调用是一种特殊的中断(用户态进程与硬件设备的接口)
切换时就会涉及到上下文的问题?
即中断int指令在堆栈上会保存一些值:1.用户态栈顶地址 2.当时状态字 3.当时CS:EIP的值
save—cs:eip ss:eip eflag
load—cs:eip ss:eip
过程:1.SAVE_ALL——保存现场
判断是否有进程调度?
(无进程调度)last.RESTORE_ALL+iret(popl cs:eip/ss:eip/efalg)
(有进程调度)last.暂时保存当前的值直到该进程再次被调度
三、API——应用程序编程接口(不同于系统调用)
API是一个函数定义
系统调用请求一个软中断
触发系统调用通过传递系统调用号实现(压栈传递参数)
四、实验截图
权限分级——为了系统本身更稳定,使系统不宜崩溃。(并不是所有程序员缩写的代码都很健壮!!)
x86 CPU四种不同的执行级别:0(内核态)—3(用户态)
区分方法:CS:EIP(CPU的每条指令都是通过这里执行)(代码段选择寄存器:偏移量寄存器)
CS寄存器的最低两位表明了代码级别——逻辑地址(不是物理地址)
内核态:可以访问4G地址空间的任意地址 用户态:0x00000000—0xbfffffff空间内的地址
二、中断——从用户态进入内核态
系统调用是一种特殊的中断(用户态进程与硬件设备的接口)
切换时就会涉及到上下文的问题?
即中断int指令在堆栈上会保存一些值:1.用户态栈顶地址 2.当时状态字 3.当时CS:EIP的值
save—cs:eip ss:eip eflag
load—cs:eip ss:eip
过程:1.SAVE_ALL——保存现场
判断是否有进程调度?
(无进程调度)last.RESTORE_ALL+iret(popl cs:eip/ss:eip/efalg)
(有进程调度)last.暂时保存当前的值直到该进程再次被调度
三、API——应用程序编程接口(不同于系统调用)
API是一个函数定义
系统调用请求一个软中断
触发系统调用通过传递系统调用号实现(压栈传递参数)
四、实验截图
相关文章推荐
- Vim学习笔记(二) - linux与windows之间文件乱码问题
- Ubuntu下创建Linux启动图标问题
- 【Linux学习】Vi 操作命令集合
- Linux线程 之 线程 线程组 进程 轻量级进程(LWP)
- IT忍者神龟之 Linux必学的60个命令
- 《linux内核设计与实现》读书笔记第五章——系统调用
- linux中ssh登录Permanently added (RSA) to the list of known hosts问题解决
- linux基本知识
- Linux驱动修炼之道-RTC子系统框架与源码分析【转】
- Linux中常用操作命令
- 自学鸟哥linux服务-named
- Linux并发(无名管道)
- linux 中如何修改时间 date
- linux下的sed用于分类标签的建立
- linux内核分析第四周-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
- 嵌入式软件书籍
- plsql和linux和commonio的关联
- framework和linux和jboss的关联
- .net和linux和velocity的关联
- linux和samba和framework的关联