首页
学习
活动
专区
工具
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.3K30

Linux内核源码分析方法

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

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

    【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 内核源码放在了

    1K20

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

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

    3.4K30

    【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.6K32

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

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

    76130

    【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.4K30

    鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源?

    OpenHarmony内核中的进程采用抢占式调度机制,支持时间片轮转调度方式和FIFO调度机制。...开始正式分析对应张大爷的故事,进程就是那些在场馆外32个队列里排队的,那些队列就是进程的就绪队列。请注意 进程是资源管理单元 ,而非最终调度单元,调度单元是谁?...,能想到main函数中肯定会创建一个内核态的最高优先级进程,他就是 KProcess通过task命令查看任务运行状态,可以看到 KProcess 进程 ,看名字就知道是一个内核进程,在系统启动时创建,图中可以看到...Kprocess进程,内核态下其他进程由它 forkLITE_OS_SEC_BSS UINT32 g_kernelIdleProcess = OS_INVALID_VALUE;// 内核态idle进程,...当任何进程或者中断异常进入内核后,都是使用相同的内核代码段描述符和内核数据段描述符,它们是__KERNEL_CS和__KERNEL_DS。这里要明确记得,内核数据段实际上就是内核态堆栈段。

    3410

    OpenHarmony内核源码分析(任务调度篇) | 任务是内核调度的单元

    鸿蒙内核每个进程内的线程独立运行、独立调度,当前进程内线程的调度不受其它进程内线程的影响。鸿蒙内核中的线程采用抢占式调度机制,同时支持时间片轮转调度和FIFO调度方式。...鸿蒙内核的线程一共有32个优先级(0-31),最高优先级为0,最低优先级为31。...图 1 线程状态迁移示意图 注意官方文档说的是线程,没有提到task(任务),但内核源码中却有大量 task代码,很少有线程(thread)代码 ,这是怎么回事?...前后指针指向自己    }    return LOS_OK;}注意看g_priQueueList 的内存分配,就是32个LOS_DL_LIST,还记得LOS_DL_LIST的妙用吗,不清楚的去 鸿蒙系统源码分析...答案是:看源码是 9LITE_OS_SEC_TEXT_MINOR UINT32 ShellTaskInit(ShellCB *shellCB){ CHAR *name = NULL;

    3320

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

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

    1.9K30

    内核源码编译

    编译内核的目的在于把纷繁复杂的内核源码编译成一个可执行的镜像文件。当然,内核功能复杂,并不是所有的 功能都需要用到,所以,我们在使用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.8K70
    领券