专栏首页linux驱动个人学习用户态/内核态、用户栈/内核栈

用户态/内核态、用户栈/内核栈

一、用户态和内核态

内核态和用户态是操作系统的两种运行级别,用于区分不同程序的不同权利。

内核态就是拥有资源多的状态,或者说访问资源多的状态,也称为特权态。相对来说,用户态就是非特权态,访问的而资源将受到限制。如果一个程序运行在特权态,该程序就可以访问计算机的任何资源,它的资源访问权限不受限制。如果一个程序运行在用户态,其资源需求将受到各种限制。如:要访问操作系统的内核数据结构,如进程表,则需要在特选态下才能办到。如果要访问用户程序里的数据,在用户态即可。

二、用户栈和内核栈

内核在创建进程的时候,在创建task_struct的同时,会为进程创建相应的堆栈。每一个进程都有两个栈,一个用户栈,存在于用户空间;一个内核栈,存在于内核空间。当进程在用户空间运行时,CPU堆栈指针寄存器里面的内容都是用户栈地址,使用用户栈;当进程在内核空间时,CPU堆栈指针寄存器里面的内容是内核栈空间地址,使用内核栈。

当进程因为中断或者系统调用陷入到内核态时,进程所使用的堆栈也要从用户栈转到内核栈。进程陷入到内核态后,先把用户态堆栈的地址保存在内核栈之中,然后设置堆栈指针寄存器的内容为内核栈的地址,这样就完成了用户栈向内核栈的转换;当进程从内核态恢复到用户态之后时,在内核态之后的最后将保存在内核栈里面的用户栈的地址恢复到堆栈指针寄存器即可。这样就实现了用户栈和内核栈的互转。

那么,知道从内核转到用户态时,用户栈的地址是在陷入内核的时候保存在内核栈里面的,但是在陷入内核的时候,如何知道内核栈的地址?关键在进程从用户态转到内核态的时候,进程的内核栈总是空的。这是因为当进程在用户态运行时,使用的用户栈,当进程陷入到内核态时,内核保存进程在内核态运行的相关信息,但是一旦进程返回到用户态后,内核栈中保存的信息无效,会全部恢复,因此每次进程从用户态陷入内核的时候得到的内核栈都是空的。所以在进程陷入内核的时候,直接把内核栈的栈顶地址给堆栈指针寄存器就可以了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux内核打印时间戳

     较为简单可行的方式是通过PrintkTime功能为启动过程的所有内核信息增加时间戳,便于汇总分析。PrintkTime最早为CELF所提供的一个内核补丁,在后...

    233333
  • Linux用户抢占和内核抢占详解(概念, 实现和触发时机)--Linux进程的管理与调度(二十)

    多任务系统中, 内核负责管理各个任务, 或者说为每个任务分配CPU时间, 并且负责任务之间的通讯.

    233333
  • linux缺页异常处理--内核空间

    下面解释一下第二种情况,这是虚拟内存管理的一个特性。尽管每个进程独立拥有3GB的可访问地址空间,但是这些资源都是内核开出的空头支票,也就是说进程手握着和自己相关...

    233333
  • 重学css3(概览)

    浏览器内核又可以分成两部分:渲染引擎(layout engineer或者Rendering Engine)和JS引擎。

    IT人一直在路上
  • K8S内核故障[内核BUG]

    开启7个异常会触发OOM的节点,在一个NODE上,经过测试发现,3.10内核,是并行创建了7个任务,同时触发oom,导致内核锁耗死。测试 2-3分钟内,服务器会...

    院长技术
  • 1.内核态与用户态

    后面几篇文章开始整理多路复用相关的知识,特别是epoll相关的原理介绍。本篇文章是第1篇文章,也是后续知识的基础,笔者觉得只有真正弄清楚了内核态和用户态,才能更...

    灰子学技术
  • 宏内核和微内核

    所有的内核代码都编译成一个二进制文件,所有的内核代码都运行在一个大内核地址空间里,内核代码可以直接调用和访问,效率高且性能好。

    HeaiKun
  • centos yum update只升级软件不升级内核

    CentOS升级软件时不升级内核的命令如下 CentOS7.5/7.6 yum update --exclude "kmod-kvdo*,kernel*,cen...

    shawyang
  • Linux 的启动流程

    本篇的重点是讲解设备和驱动的启动流程,设备和驱动的流程是整个内核启动的核心,也是工作中最常面对的问题。出于知识点的系统性考虑,在进入主题之前我们先看下整个 Li...

    刘盼
  • 操作系统内核之争

    1、内核分类 内核(Kernel)在计算机科学中是操作系统最基本的部分,主要负责管理系统资源。 中文版维基百科上将内核分为四大类: 单内核(宏内核); 微内核;...

    大数据和云计算技术

扫码关注云+社区

领取腾讯云代金券