码迷,mamicode.com
首页 > 系统相关 > 详细

《linux 内核分析》 第4周

时间:2017-03-19 23:33:09      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:不能   技术分享   进程   退出   返回值   system   linu   保存   flags   

 王一 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

一、linux 系统的状态

 Linux在x86平台下支持0内核态和3用户态。在内核态32位平台能访问0x00000000以上的空间,而用户态只能访问小于0xc0000000一下的地址空间

(此处的地址空间为逻辑地址)。当用户态切换到内核态的时候主要方式为中断。

1、当int128调用时,系统会自动的两个状态下的cs:eip,ss:esp,eflags(标志寄存器)到堆栈。加载当前的中断的处理入口到cs:eip和 当前堆栈段加载到ss:esp。

2、进入中断之后,会把大部分通用寄存器的值保存起来。(save_all)。相反的,在退出的时候会pop这些寄存器(restore_all).

二、系统调用

1、用户态进程调用硬件设备的一组接口。提高安全性、增强可移植性。

系统调用是中断的特殊方式

API只是函数定义,而系统调用是软中断向内核发出的请求。

系统调用对应着封装例程,封装例程会调用libc库中的API函数。

封装历程的返回值依赖于系统调用。-1表示不能满足请求。

三层调用关系:

系统调用—>(API)xyz()->int0x80(eax传递参数-系统调用号)---------进入内核态------>system_call() ->sys_xyz()->system_call()->iret

如果有多个参数输入的话,保存到其他的寄存器(ebx,ecx,edx.esi,edi,ebp最多6个)中,这些寄存器中保存着要输入的数据的内存地址。

 实验采用mkdir函数创建一个文件夹:

技术分享

 

技术分享

 

《linux 内核分析》 第4周

标签:不能   技术分享   进程   退出   返回值   system   linu   保存   flags   

原文地址:http://www.cnblogs.com/tomyco/p/6582617.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!