首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程切换内核源码分析

罗军 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程调度的时机 (1)进程状态转换的时刻...schedule()进行进程切换,也可以在中断处理过程中进行调度,也就是说内核线程作为一类的特殊的进程可以主动调度,也可以被动调度; 用户态进程无法实现主动调度,仅能通过陷入内核态后的某个时机点进行调度...pop cs:eip/ss:esp/eflags from kernel stack (8)继续运行用户态进程Y 进程上下文信息 用户地址空间:包括程序代码,数据,用户堆栈等 控制信息:进程描述符,内核堆栈等...硬件上下文(注意中断也要保存硬件上下文只是保存的方法不同) 进程切换源码结构 ?...]\n\t" /* save ESP */ \//保存当前的栈顶 "movl %[next_sp],%%esp\n\t" /* restore ESP */ \//这里实现内核堆栈的切换

1.2K30

Linux内核源码分析方法

Linux内核源码分析方法 一、内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次。...我也是通过一个项目接触了Linux内核源码分析,从源码分析工作中,我受益颇多。除了获取相关的内核知识外,也改变了我对内核代码的过往认知: 1.内核源码分析并非“高不可攀”。...内核源码分析的难度不在于源码本身,而在于如何使用更合适的分析代码的方式和手段。...内核的庞大致使我们不能按照分析一般的demo程序那样从主函数开始按部就班的分析,我们需要一种从中间介入的手段对内核源码“各个击破”。...闲话少叙(已经罗嗦了很多了,囧~),下面我就来分享一下自己的Linix内核源码分析方法。 二、内核源码难不难?

5.2K70
您找到你想要的搜索结果了吗?
是的
没有找到

内核通信之 Netlink 源码分析和实例分析

什么是 netlink linux 内核一直存在的一个严重问题就是内核态和用户态的交互的问题,对于这个问题内核大佬们一直在研究各种方法,想让内核和用户态交互能够安全高效的进行。...利用内核协议栈有了缓冲队列,是一种异步通信机制。 可以是内核和用户态的双向通信,内核可以主动向用户态进程发送消息。这个是以往通信方式不具备的。...netlink 内核代码走读 netlink 内核相关文件介绍 netlink 的内核代码在内核代码的 net/netlink/ 目录下,我目前看的是 5.7.10 的内核版本,netlink 内核相关的文件不多...这里也就是说 netlink 是内核默认就直接支持的,是原生内核的一部分(这里其实想和内核的动态插拔模块区别)。...我能想到的就是内核数据审计,安全触发等,这类场景下内核可以实时的告知用户进程内核发生的情况。

2.9K30

【Binder 机制】分析 Android 内核源码中的 Binder 驱动源码 binder.c ( googlesource 中的 Android 内核源码 | 内核源码下载 )

文章目录 一、查看 Android 内核源码中的 Binder 驱动源码 binder.c 二、分析 Binder 驱动源码 binder.c 1、binder_ioctl 2、binder_ioctl_set_ctx_mgr...三、博客资源 一、查看 Android 内核源码中的 Binder 驱动源码 binder.c ---- Android 内核源码地址 : https://android.googlesource.com.../kernel/ 选择 common 版本的内核 ; common 版本内核 : https://android.googlesource.com/kernel/common/ 选择 android-mainline.../android/binder.c 二、分析 Binder 驱动源码 binder.c ---- 1、binder_ioctl 在 Android Native 层中的 service_manager.c...android/binder.c 三、博客资源 https://android.googlesource.com/kernel/common/+/refs/heads/android-mainline 内核源码放在了

76220

【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...VSCode 阅读 Linux 内核源码 ---- 参考 【开发环境】安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio...Code ) 博客 , 安装 VSCode 软件 ; 打开 VSCode , 选择 ” 菜单栏 / 文件 / 打开文件夹 ” 选项 , 选择 Linux 内核源码目录 , 点击 ” 选择文件夹 ”...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ; 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163620.html原文链接:https

23.2K32

Spark内核分析之SparkContext初始化源码分析

如标题所说,我们先来看看SparkContext在Spark作业提交后做了哪些事情,工作流程如下图所示;(注意:本篇文章及后续源码分析所有内容全部基于spark1.3.0源码进行分析,后续不再赘述) ?...()方法调用RegisterWithMaster方法,通过该方法向Master请求注册; 5.Master调用worker,worker启动executor后向backend注册信息; 下面附上源码部分截图...总结:以上即为SparkContext的初始化过程,源码涉及的类有:SparkContext,TaskSchedulerImpl,SparkDeploySchedulerBackend,AppClient...如需转载,请注明: 上一篇:Spark内核分析之spark作业的三种提交方式 本篇:Spark内核分析之SparkContext初始化源码分析

72230

【Linux 内核】Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

文章目录 一、下载 Linux 内核源码 二、使用 VSCode 阅读 Linux 内核源码 一、下载 Linux 内核源码 ---- 参考 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的...Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 ) 博客 , 下载 Linux 5.6.18 版本的内核源码 ; 5.x 内核源码下载地址...VSCode 阅读 Linux 内核源码 ---- 参考 【开发环境】安装 Visual Studio Code 开发环境 ( 下载 Visual Studio Code 安装器 | Visual Studio...Code ) 博客 , 安装 VSCode 软件 ; 打开 VSCode , 选择 " 菜单栏 / 文件 / 打开文件夹 " 选项 , 选择 Linux 内核源码目录 , 点击 " 选择文件夹 "...按钮 , 此时就可以在 VSCode 中阅读 Linux 内核源码 ;

21.2K30

Linux内核调度器源码分析 - 初始化

为了能够理解 Linux 调度器的设计与实现,我们将以 Linux kernel 5.4 版本(TencentOS Server3 默认内核版本)为对象,从调度器子系统的初始化代码开始,分析 Linux...在分析调度器的相关代码之前,需要先了解一下调度器涉及的核心数据(结构)以及它们的作用 运行队列(rq) 内核会为每个 CPU 创建一个运行队列,系统中的就绪态(处于 Running 状态的)进程(task...调度器初始化(sched_init) 下面进入正题,开始分析内核调度器的初始化流程,希望能通过这里的分析,让大家了解: 1、运行队列是如何被初始化的 2、组调度是如何与 rq 关联起来的(只有关联之后才能通过...通过分析后发现,这是由于是否往虚拟机透传超线程信息导致的。...结语 本文主要介绍了内核调度器的基本概念,并通过分析5.4内核中调度器的初始化代码,介绍了调度域、调度组等基本概念的具体落地方式。

1.6K30

内核源码编译

编译内核的目的在于把纷繁复杂的内核源码编译成一个可执行的镜像文件。当然,内核功能复杂,并不是所有的 功能都需要用到,所以,我们在使用make对其编译前,要做一件事——配置。...kconfig对内核进行配置,告诉make,哪些功能需要编译进内核,哪些功能要作为模块编译,make便根据配置文件来进行编译。...###编译步骤 获取内核源码(这几天kernel.org被黑了,该步骤方法暂时用不了): 1、使用git工具: ubuntu下安装git: sudo apt-get install git 使用git检出...git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.t.git 检出之后便可以通过下列命令进行升级: git pull 使用上述两个命令便可以获得内核源码的最新版本...2、直接从kernel.org上下载源码包: 源码包有两种格式: linux-x.y.z.tar.bz2和linux-x.y.z.tar.gz bz2结尾的压缩包使用的是bzip2压缩格式,而gz结尾的压缩包使用的是

1.7K70

高通GPIO驱动(DTS方式)

gpio调试的方式有很多,linux3.0以上ARM架构的处理器基本上都采用了DTS的方式,在linux3.0可以通过获取sysfs的方式来获取gpio状态; sysfs文件系统的建立可以参照下面的博客...//gpio_99不再使用后应当释放 gpio的申请和设置都可能会出现失败的情况,应该做好异常处理;; 2.2 pinctrl子系统设备树: Pin Control Subsystem是Linux内核抽象出的一套用于控制硬件引脚的一套子系统...比上面的方式多了许多配置GPIO的方式,例如配置电流(可以用于睡眠唤醒的功能),管理pin脚的复用,接口规格等功能;蜗窝科技的大牛们就有几篇写的很好: linux内核中的GPIO系统之(1):软件框架...linux内核中的GPIO系统之(2):pin control subsystem Linux内核中的GPIO系统之(3):pin controller driver代码分析 linux内核中的GPIO...系统之(4):pinctrl驱动的理解和总结 linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合 DTS代码: 1 device_node

4.6K40

【Linux 内核】编译 Linux 内核 ② ( 解压内核源码 | 查询当前 Linux 内核版本号 | 进入并查看 linux 内核源码目录 )

文章目录 一、解压内核源码 二、查询当前 Linux 内核版本号 三、进入并查看 linux 内核源码目录 一、解压内核源码 ---- 将 下载的 Linux 内核源码 linux-5.6.14.tar.gz...拷贝到 Ubuntu 虚拟机中 , 执行 tar xvf linux-5.6.14.tar.gz 命令 , 解压 Linux 内核源码 ; 解压完毕后 , linux-5.6.14 目录中就是解压后的...Linux 内核源码 ; 二、查询当前 Linux 内核版本号 ---- 执行 uname -a 命令 , 查询当前 Ubuntu 系统的 Linux 内核版本号 , 执行过程如下 : root@ubuntu...23:25:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux root@ubuntu:~/kernel# root@ubuntu:~/kernel# 当前的内核版本号是...4.13.0 ; 三、进入并查看 linux 内核源码目录 ---- 进入之前解压的 linux-5.6.14 内核源码目录 ; root@ubuntu:~/kernel# ls linux-5.6.14

86.8K60
领券