内核堆栈和用户堆栈

转载 2015年07月09日 23:33:17

内核堆栈和用户堆栈

续上篇《进程上下文和中断上下文》,介绍一下内核堆栈和用户堆栈。

1. linux 0.11系统使用的4种堆栈

Linux0.11系统中共使用了四种堆栈。一种是系统初始化时临时使用的堆栈:一种是供内核程序自己使用的堆栈(内核堆栈),只有一个,位于系统地址空间的固定位置,也是后来任务0的用户态堆栈:另一种是每个任务通过系统调用,执行内核程序时使用的堆栈,我们称之为任务的内核态堆栈,每个任务都有自己独立的内核态堆栈;最后一种是任务在用户态执行的堆栈,位于任务(进程)地址空间的末端。

2. 任务的堆栈

每个任务都有两个堆栈,分别用于用户态和内核态程序的执行,并且分别称为用户态堆栈和内核态堆栈。这两个堆栈之间的主要区别在于任务的内核态堆栈很小,所保存的数据量最多不能超过(4096 - 任务数据结构)个字节,大约为3K字节。而任务的用户态堆栈却可以在用户的64MB空间内延伸。
我理解的内核态堆栈是指,kmalloc申请的堆空间,用户态堆栈是指,malloc申请的堆空间。

3. 内核态与用户态堆栈之间的切换

任务调用系统调用时就会进入内核,执行内核代码。此时内核代码就会使用该任务的内核态堆栈进行操作。当进入内核程序时,由于优先级别发生了改变(从用户态转到内核态),用户态堆栈的堆栈段和堆栈指针以及eflags会被保存在任务的内核态堆栈中。而在执行iret退出内核程序返回到用户程序时,将恢复用户态的堆栈和eflags。
见下图:
内核态和用户态堆栈的切换
另外:
查到,Linux内核的堆栈一般是8K,所以在写内核程序的时候一定要小心,防止函数递归的出现,递归可能导致内核堆栈溢出,还有如果内核态编程,内核堆空间大小8K,如定义数组变量过大,也会崩溃。有待考证。

相关文章推荐

用户态和内核态堆栈

1、高位地址:栈(存放着局部变量和函数参数等数据),向下生长   (可读可写可执行) 2、           堆(给动态分配内存是使用),向上生长             (可读可写可执行) 3...

用户态内核态及用户空间内核空间关系

1 用户态与内核态  当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的...

通过/proc查看Linux内核态调用栈来定位问题

前几天碰到一个问题:一个进程运行过程中挂死了,把gdb挂上去之后bt打印的内容为空,后来通过查看 /proc 文件系统,查看程的调用栈,才发现是发消息给内核态程序时,内核态一直没有响应,导致用户态进程...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...

Matlab绘图-很详细,很全面

Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...

CT图像重建技术

由于csdn贴图不方便,并且不能上传附件,我把原文上传到了资源空间CT图像重建技术 1.引言 计算机层析成像(Computed Tomography,CT)是通过对物体进行不同角度的射线投影测量而...

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串  find .|xargs grep -ri "IBM"  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名  find .|xargs g...

Radon变换入门matlab CT原理

http://hi.baidu.com/hi9394/blog/item/0d492b8bfd714700c8fc7aa9.html 简介 图像投影,就是说将图像在某一方向上做线性积分(或理解为累...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内核堆栈和用户堆栈
举报原因:
原因补充:

(最多只允许输入30个字)