http://blog.chinaunix.net/uid-14528823-id-4136760.html

Linux中有多种栈,很容易弄晕,简单说明一下:
1、用户态栈:在进程用户态地址空间底部,跟平时我们简单和理解的一样,就是虚拟地址空间中的一段,不多说~
2、内核栈:
    跟用户态栈是独立的,在用户态和内核态切换时,需要进行切换。
    默认8k,可以通过内核配置项修改
    跟thread_info结构放在一起,公用一个union:thread_union,

点击(此处)折叠或打开

  1. union thread_union {
  2. struct thread_info thread_info;
  3. unsigned long stack[THREAD_SIZE/sizeof(long)];
  4. };

放在特殊的段中:__(".data.init_task")))

点击(此处)折叠或打开

  1. union thread_union init_thread_union
  2. __attribute__((__section__(".data.init_task"))) =
  3. { INIT_THREAD_INFO(init_task) };

点击(此处)折叠或打开

  1. ENTRY(stack_start)
  2. .long init_thread_union+THREAD_SIZE
  3. .long __BOOT_DS

默认跟中断栈共享,可以通过内核配置项修改
    属于进程,即每个进程都有自己的内核栈 
3、中断栈:
    默认跟内核栈共享
    与内核栈中的内容独立,相互不可见
    中断、异常、软中断使用此栈
    使用被打断的进程的内核栈

Linux中的栈:用户态栈/内核栈/中断栈的更多相关文章

  1. 在linux中添加ftp用户,并设置相应的权限

    在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...

  2. linux中添加ftp用户,并设置相应的权限

    在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...

  3. 在Linux 中进入单用户模式的技巧

    在这篇简短的文章中,我们将向你介绍在 SUSE 12 Linux 中进入单用户模式的步骤.在排除系统主要问题时,单用户模式始终是首选.单用户模式禁用网络并且没有其他用户登录,你可以排除许多多用户系统的 ...

  4. linux中用户组和用户

    linux中用户组和用户 1.介绍 在我们的linux系统,有很多用户组,也可以手动创建用户组,不同的用户组下面有很多的用户. 2.创建用户组及有关的命令 groupadd phpzu:创建一个php ...

  5. Linux操作系统学习_用户态与内核态之切换过程

    因为操作系统的很多操作会消耗系统的物理资源,例如创建一个新进程时,要做很多底层的细致工作,如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录.页表等,这些操作显然不能随便让任何程序都可以做,于是就产 ...

  6. 在Linux中怎么把用户添加到组中

    (1)添加用户test,初始密码123456,该用户的主目录为/home/share,用户的基本组为root,用户的shell为/bin/tcsh,要求将该用户加到mail和new组中.请问该怎么做啊 ...

  7. 1、 Linux中的root用户切换(转载)

    su和su - 的区别 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或s ...

  8. Linux中组 与 用户的管理

    在linux中建立组的指令是 groupadd 组名 相应的,删除组的指令: groupdel 组名 查看自己用户的组: groups 一个用户可以在多个组里面,用这个命令可以将用户添加到组: add ...

  9. 如何在linux中批量建立用户并设置随机密码

    Ubuntu是基于linux的免费开源操作系统,同时也是真正意义上的“多任务多用户”操作系统,既然是多用户系统,自然就涉及到创建多个用户的问题.同时由于Ubuntu系统中的root用户具有最高权限,无 ...

随机推荐

  1. 常用到的Tomcat的修改方法

    1.修改端口号 打开tomcat的service.xml文件: 找到<Connector connectionTimeout="20000" port="8080& ...

  2. 创建ID3D11Device可能会遇到的问题,不能使用具体的IDXGIAdapter

    要使用具体硬件的显示适配器创建D3D11必须把driverTypes设为D3D_DRIVER_TYPE_UNKNOWN 如下 // 创建D3D11设备 HRESULT hr = D3D11Create ...

  3. wp8 自定义相机+nokia滤镜+录制amr音频

    demo截图:      代码量有点多,就不贴出来了. 备注: 1.自定义相机主要横竖屏时,对相机进行旋转. 2.播放amr格式可以在页面中直接添加MediaElement控件进行播放,或者使用Bac ...

  4. ubuntu grub 引导修复

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4167644.html   (1) 先使用ls命令,找到Ubuntu的安装分区: 在 grub ...

  5. Linux C 程序 预处理,结构体(13)

    C语言预处理,结构体 C语言预处理命令1.宏定义 1.无参数宏 #define 标识符 字符串 #代表本行是编译预处理命名 习惯上,宏定义大写 代替一个字符串,介绍重复书写某个字符串的工作量 有意义的 ...

  6. 压力测试工具siege的用法

    Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试. 安装 Siege 01 02 03 04 #wget h ...

  7. Node.js 【使用npm安装一些包失败之笔记】

    镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https://regist ...

  8. JavaScript 高级程序设计 02-变量、数据类型

    一.JavaScript变量 1.变量的定义 在定义变量时,统一使用关键字var,后跟变量名(即标识符,如果不知道什么是标识符,可以到这去查看),如下 var message; //定义一个变量 注意 ...

  9. xml学习总结(三)

    复杂Schema 扩展包含简单内容的复杂类型 <?xml version="1.0" encoding="UTF-8"?> <xs:schem ...

  10. ofbiz进阶之框架配置文件指导

    The Open For Business Project: Framework Configuration Guide 原文链接:http://ofbiz.apache.org/docs/corec ...