Linux中的栈:用户态栈/内核栈/中断栈

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、中断栈:
    默认跟内核栈共享
    与内核栈中的内容独立,相互不可见
    中断、异常、软中断使用此栈
    使用被打断的进程的内核栈

时间: 2024-11-10 07:23:55

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

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

在linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd -d /home/test test //增加用户test,并制定test用户的主目录为/home/testpasswd test //为test设置密码 3.更改用户相应的权限设置: usermod -s /sbin/nologin test //限定用户test不能telnet,只能ftpuse

理清Linux中的各种用户ID关系

在Eclipse中,出现"Access Restriction: The Type BASE64Encoder Is Not Accessible Due To Restriction"错误. 解决方法: 点击Window-->Preferences-->Java-->Compiler-->Errors/Warns,设置Deprecated And Restricted API 参数值. 问题解决. 理清Linux中的各种用户ID关系,布布扣,bubuko.co

Linux 内核信号量与用户态信号量(System V&POSIX)总结

一.什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒. 二.信号量的分类 在学习信号量之前,我们必须先知道——Linux提供两种信号量: (1) 内核信号量,由内核控制路径使用 (2) 用户态进程使用的信号量,这种信号量又分为POSIX信号量和SYSTEM V信号量. POSIX信号量又分为有名信号量和无名信号量. 有名信号

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

(1)添加用户test,初始密码123456,该用户的主目录为/home/share,用户的基本组为root,用户的shell为/bin/tcsh,要求将该用户加到mail和new组中.请问该怎么做啊???useradd -m -d /home/share -g root -s /bin/tcsh test 建立test用户 passwd test 系统会提示你为test输入密码 你输入123456 回车即可 usermod -G mail test 加入mail组 usermod -G new

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

su和su - 的区别 大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或su -,下面就su命令和su -命令最大的本质区别给大家详解一下: 前者只是切换了root身份,但Shell环境仍然是普通用户的Shell:而后者连用户和Shell环境一起切换成root身份了.只有切换了Shell环境才不会出现PATH环境变量错误.su切换成root用户以后,pwd一下,发现工作目

Linux中组 与 用户的管理

在linux中建立组的指令是 groupadd 组名 相应的,删除组的指令: groupdel 组名 查看自己用户的组: groups 用户管理: useradd -s/bin/bash -g 组名 用户名 -s表示用户登陆后打开的终端, 这里是/bin/bash,如果想禁止登陆,可设置为/sbin/nologin -M 不建立用户的主文件夹,用户登陆会跑到 / 去.可手工建立,如果是禁止登陆,建议加这个参数 既然有useradd指令,当然有对应的userdel... users是用来查看当前有

linux中手动添加用户(图解)

1.在/etc/group 中添加组,如果用户有附加组,则在附加组后添加上用户的名称 2.在/etc/passwd 中初始化添加用户和对应的组ID等 3.在/etc/shadow 中添加用户的一些设置 4.将/etc/skel/ 目录下文件拷贝到 home/用户目录下 5.修改/home/用户目录的所属者和所属组为此用户,及其组 6.修改/home/用户目录的g o 权限为----- 如果在shadow中没有给用户添加密码,则此用户无法登陆,但是可以通过su命令登陆. 暂未上图,需要图者,在下留

linux 中usermod、用户密码管理及密码随机生成工具mkpasswd

一. usermod命令 1. usermod更改用户的属性 usermod -u 111 user1 更改用户user1的UID为111 usermod -g grp2 user2 更改user2的组为user2 usermod -d /home/test user3 更改user3的家目录为/home/test/ usermod -s /sbin/nologin user2 更改user2登录的shell 为不能登录 2. id user1 查看用户UID,GID,扩展组等信息 一个用户可以

Linux中Mysql root用户看不到mysql库问题解决方式

第一种方式: 1.首先停止MySQL服务:service mysqld stop2.加参数启动mysql:/usr/bin/mysqld_safe --skip-grant-tables & 然后就可以无任何限制的访问mysql了3.root用户登陆系统:mysql -u root -p mysql4.切换数据库:use mysql5.显示所有的表:show tables;这里就可以访问表了6.查看user表中root用户的localhost权限:select * from user where