logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

linux内核源码分析之物理内存

当剩余内存在WMARK_MIN,WMARK_LOW时,说明内存有压力,但能满足进程此时的内存分配要求,当给进程分配好后,会唤醒kswapd进程开始回收内存,直到剩余内存在WMARK_HIGI之上。GFP_HIGHUSER 给用户空间分配高端内存,因为在用户虚拟内存空间中,都是通过页表来访问非直接映射的高端内存区域,所有用户空间一般使用的是高端内存区域ZONE_HIGHMEM。WMARK_MIN(页

文章图片
#linux#运维#服务器
linux内核源码分析之虚拟内存

linux内核虚拟内存一览

文章图片
#linux
linux内核—进程调度时机

Arm64中断处理入口的函数el1_irq 中断处理程序处理完成后,如果进程的抢占计数器是0,并且设置了重新调度的标志,那么调用函数el1_preempt,函数调用preempt_schedule_irq以执行抢占调度。如果不设置,不会抢占,现象是,如果一个进程在内核模式下运行很长时间,将会导致交互进程等到很长时间,响应慢。当时钟中断处理程序准备把处理器还给被打断的进程时,如果被打断的进程在用户模

文章图片
linux内核—进程调度(核心)

如果当前进程属于空闲调度类或公平调度类,并且所有可运行的进程属于公平调度类,那么直接调用公平调度类的pick_next_task方法。如果公平调度类没有选择下一个进程,那么从空闲调度类选择下一个进程。一般情况,从优先级最高的调度类开始,调用调度类的pick_next_task方法来选择下一个进程,如果选中了下一个进程,就调度这个进程。1)停机调度类:pick_next_task_stop,如果运行

文章图片
#linux
linux内核调度问题分析

假如内核只有3个线程,线程0创建线程1和线程2.当系统时钟到来时,时钟中断处理函数会检查是否有进程需要调度。当有进程需要调度时,调度器会选择线程1或者线程2。start_kernel运行在线程0里,线程0创建线程1和线程2。函数调用关系start_kernel()->kernel_debug()->do_fork 创建新线程,并把新线程添加到调度器的就绪队列中。线程0创建线程1和线程2后,进入wh

文章图片
#linux
linux内核—启动程序

在shell中执行./a.out程序的时候,内核是如何执行的?//父进程else if(ret == 0)//子进程execve()else//失败shell进程首先创建子进程,然后子进程装载程序a.out。

linux内核调度浅析

linux进程调度相关的知识再重新梳理一遍。抽取主要数据结构中的主要成员,以最简单的方式实现进程调度。

文章图片
linux内核调试工具之kprobe

kprobe 可以在系统运行期间,自定义回调函数,动态插入探测点。2005年使用的典型CPU,kprobe命中需要0.5到1.0微秒来处理,返回探测命中的时间通常比kprobe命中的时间长50-75%在运行过程中想看某个函数的变量,需要重新编译内核。将内核输出都写到log.txt中(dmesg只能写部分),使用grep检索所需要查询的信息。测试程序打开/home/kprobe.c测试在kprobe

文章图片
linux内核调试工具之kprobe(二)

前一章使用kprobe编程,需要编码手动编译。本章使用trace追踪技术,在任何函数上设置动态kprobe(通过kprobe事件)。

Linux内核中KCSAN 数据竞争检测

共享可写数据,并行执行时需要用锁来保护,或用lock-free。

    共 110 条
  • 1
  • 2
  • 3
  • 11
  • 请选择