请问linux中的堆栈
请问linux中的堆栈是怎么样的?为什么我在书上看到这个?
kernel/fork.c,92行:
p->tss.esp0 = PAGE_SIZE + (long)p;
p->tss.ss0 = 0x10;
其中,p是新任务的任务数据结构指针,tss是任务状态段结构
为什么esp在 高地址,而ss=0x10=00010 0 00
我没找到 gdt的0x10,不过我在别的书上看到gdt 0x10 是kernel——cs
即开始于0位置?如果这样,那堆栈不是 成了向上延伸的了?
小弟初学,希望各位大哥不吝赐教
内核对进程有自己的内核模式栈,tss.esp0会在用户模式切换到内核模式时得到内核栈的位置。
对ss0,我的理解是内核基本不用段的概念,所以内核CS和DS段的起止位置是一样的。所以其实ss0的含义是DS段。
你看的代码是2.4的?2.6后期的内核DS和CS似乎是从0x0开始的
这个代码应该是linux0.11的吧?内核栈和进程struct还在一页以内呢,2.4以后的都是占用两页了
p->tss.esp0 = PAGE_SIZE + (long)p; 设置内核的堆栈在这一页的末端,然后向下生长
相关问答:
写了个测试程序如下
struct hostent *hp;
char AlarmDevIP[20];
int x2;
hp = gethostbyname("www.google.com");
if (hp)
{
......
大家好,本人目前刚刚接触Linux。现在公司的项目需要缩减Linux的Kernel和APP部分的Code Size。目前我们使用的是Linux2.6.22.15版本,应用于ADSL Modem(家庭网关)。
1.我们产品应用是ADSL Gateway,Kernel部 ......
Linux新手,请大哥大姐不要见笑。
我用root用户登录到Linux系统。在根目录下面建了目录dir1,后用命令cd /dir1进入到dir1目录下,然后再用mkdir dir2建立了目录dir2 ,再后来用命令cd /dir2是,提示为:-bush ......
我之前制作的linux自动安装iso已经成功了,现在想对其进行一些定制修改,比如,更改grub图片等。
我在ks.cfg的%post段里面是这样写的:
%post --nochroot
# Move the contents of the tar into their new locati ......