当前位置: 代码迷 >> 汇编语言 >> 操作系统的堆栈在哪里?解决办法
  详细解决方案

操作系统的堆栈在哪里?解决办法

热度:977   发布时间:2013-02-26 00:00:00.0
操作系统的堆栈在哪里?
看了很多操作系统和机器的书。里面有许多函数调用和中断。我不是很明白。要是有函数一定要有堆栈空间。所以问问各位大侠。操作系统核心堆栈在哪里。怎么分配的。

------解决方案--------------------------------------------------------
操作系统在生成一个线程时会从它管理的内存池中分配一块内存作为该线程的堆栈.所以,对操作系统来说分配堆栈和你在应用程序中申请内存是一样的,都是从内存管理模块申请一块空闲内存.
至于汇编中没有定义堆栈,但因为线程有默认的堆栈大小,所以实际上还是有堆栈的.不过默认的堆栈较小,对于复杂调用,如递归调用,很容易导致堆栈益出
------解决方案--------------------------------------------------------
操作系统的堆栈由操作系统自己指定,通常是一个或多个起始地址(最高地址)确定,大小确定的连续内存空间。

------解决方案--------------------------------------------------------
大侠,核心本来就是一个进程或线程,在硬件驱动和进程管理、存储管理等初始化后开始启动,没他你怎么用得了系统啊。

------解决方案--------------------------------------------------------
1、系统初始化的堆栈理论上可以是任何有效的物理内存地址,在初始化进行到一定时候这个堆栈就被抛弃而切换到了新的堆栈。
2、系统核心的堆栈我不太明白是什么意思。是否是指核心态内核代码执行时使用的堆栈?
3、用户程序的堆栈准确地说是用户进程或线程的堆栈,在创建该进程/线程时由操作系统分配或指定。
4、根据操作系统的不同,进程进行系统调用时可以使用该进程的堆栈,或是内核的堆栈,或两者都有使用。
不同的操作系统这些堆栈的分配和使用有很大的不同,撇开操作系统的类型单纯讨论这些堆栈是没有意义的。
------解决方案--------------------------------------------------------
堆栈在哪里就不知道了,反正windows的代码进入ring0后,堆栈就只有8k(好像是这个数),一不小心就用完了
  相关解决方案