linux kernel中的进程栈
1、linux中的user mode的进程栈
在thread_info.h中,设置进程栈的大小为16k
#define THREAD_SIZE 16384
#define THREAD_START_SP (THREAD_SIZE - 16)
在head.S中, 在进程切换的时候:
将内核这个进程栈的栈顶写入到了sp中,sp = init_thread_union + THREAD_SIZE
将init_task写入到了sp_el0中,设置用户空间的程序栈
__mmap_switched:
......
#ifdef CONFIG_THREAD_INFO_IN_TASKadrp x4, init_thread_unionadd sp, x4, #THREAD_SIZEadr_l x5, init_taskmsr sp_el0, x5 // Save thread_info
#elseadr_l sp, initial_sp, x4mov x4, spand x4, x4, #~(THREAD_SIZE - 1)msr sp_el0, x4 // Save thread_info
#endif
在linux 中每一个应用程序,在内核中都有一个task_struct结构体,每个task_struct代码一个内核进程,都有一个进程栈,该栈的栈顶写入到了sp
另外,每一个应用程序,在userspace空间,都有一个程序栈,该栈的栈顶写入到了sp_el0中
总结:每个应用程序有两个栈,一个是在linux kernel中的task_struct结构体中指向的进程栈、一个是user程序中的栈
linux kernel中的进程栈相关推荐
- linux kernel中的栈的介绍
目录 1.linux kernel中的中断irq的栈stack (1).arm32体系的irq的栈 (2).arm64体系的irq的栈 2.linux kernel中的栈stack (1).概念介绍: ...
- linux内核arc4算法,linux内核中与进程相关的数据结构(基于linux-mainline-rc4)
1.进程描述符 struct task_struct { volatile long state; ....... struct list_head tasks; ....... struct mm_ ...
- Linux Kernel中AEP的现状和发展
阿里 石洋内核月谈Yesterday AEP简介 AEP是Intel推出的一种新型的非易失Optane Memory设备,又被称作Apache Pass,所以一般习惯称作AEP.在这之前也有类似的设备 ...
- Linux内核中的进程组及会话
Linux内核中的进程组及会话 将阐述Linux内核中的如下几个概念 1) 进程组 2) 会话 3) 控制终端 前面的概念来源于前人,我只是站在前人的肩膀上结合内核中的实现加深概念理解. 1.概念: ...
- Linux kernel 中模块化的平台驱动代码介绍
介绍 在linux kernel中通过module_platform_driver来实现模块化平台驱动.大量的设备驱动程序都基于该种方式来实现,使用频次非常的高,在linux kernel 5.4.1 ...
- Linux kernel中常见的宏整理
0x00 宏的基本知识 // object-like #define 宏名 替换列表 换行符 //function-like #define 宏名 ([标识符列表]) 替换列表 换行符 替换列表和标识 ...
- Linux系统中的进程管理
Linux系统中的进程管理 了解进程 进程是已启动的可执行程序的运行实例,进程有以下组成部分: • 已分配内存的地址空间: • 安全属性,包括所有权凭据和特权: • 程序代码的一个或多个执行线程: • ...
- 搞它!!!Linux系统中查看进程和计划任务管理
文章目录 首先我们了解一下程序和进程的关系: 一.查看进程 1.查看静态的进程统计信息(ps) 2.查看静态的进程统计信息(top) 3.pgrep命令(查询进程信息) 4.pstree命令(查看进程 ...
- 内存访问顺序 - part2: 屏障及Linux kernel中屏障的使用
文章目录 屏障是什么 Linux Kernel 中的屏障 Linux 屏障 API 一般的屏障 强制性屏障 SMP 条件屏障 隐式屏障 其他屏障 屏障的开销 未来的文章 本文翻译自 Memory ac ...
最新文章
- 让DJANGO里的get_success_url定义的reverse_lazy带参数跳转
- 【数字信号处理】线性时不变系统 LTI “ 输入 “ 与 “ 输出 “ 之间的关系 ( 线性卷积计算方法列举 | 线性卷积计算案例一 | 根据 线性卷积 定义直接计算 卷积 )
- android第一次作业
- win7系统去除图标箭头的方法
- 结合DvaJS来写小程序
- ListDictionary:改进的OrderedDictionary
- java用户输入_如何用Java获取用户输入?
- 机器学习-1-.py文件的导入问题
- datetime数据类型_当pandas遇上数据类型问题
- 安装mysql2005出错_SQL Server 2005 安装遇到的错误提示和解决方法
- 美团架构师探秘Java生态系统,介绍JDK、JVM、JEP
- 云输入法linux版,ubuntu云输入法ibus cloud pinyin
- SECS/GEM概念
- 西门子、施耐德、罗克韦尔等巨头告诉你,为何你大爷始终是你大爷
- libcef(二)基于VS2019编写CEF简单样例
- SPSS 25.0中文版安装教程【001期】
- 通达信大资金进出指标公式
- 修改UE4的缓存路径
- 阿里云-物联网MQConsumerSTS 订阅失效问题
- 用moment获取一年内指定周的起始时间和结束时间、用户所选时间和前端传参时间不一致问题
热门文章
- 数据中心成为生态系统向绿色氢经济转变的催化剂
- 传统数据中心升级方案
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
- ML之catboost:基于自带Pool数据集实现二分类预测
- 成功解决MSB8020 The build tools for v141 (Platform Toolset = ‘v141‘) cannot be found. To build using the
- DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(四)
- 成功解决ImportError: Could not find 'msvcp140.dll'. TensorFlow requires that this DLL be installed in a
- Blockchain:《Blockchain applications in insurance》Deloitte—德勤区块链技术研究报告正文版—听课记录
- 深入浅出计算机组成原理学习笔记:总线-计算机内部的高速公路(第42讲)
- 未完全关闭数据库导致ORA-01012: not logged的解决