• linux源码解析16- Linux内核常用锁机制总结

    时间:2023-02-23 12:06:26

    首先看看Linux内核中的并发场景;单CPU多进程系统,产生并发访问因素有:中断处理程序可以打断软中断,tasklet和进程上下文;软中断和tasklet之间不会并发,但可以打断进程上下文;在支持抢占的内核中,进程上下文之间会并发;在不支持抢占的内核中,进程上下文不会并发;在多CPU和多进程系统中,...

  • linux源码解析15- 匿名页面的生命周期

    时间:2023-02-22 15:22:33

    1.匿名页面的产生从内核角度看,如下情况会产生匿名页面:1.1 用户空间malloc()/mmap()分配的内存;在内核发生缺页中断时,调用do_anonymous_page()产生匿名页;1.2 写时复制:当缺页终端出现写保护错误时,分两种情况:(1)调用do_wp_page()函数分配a.只读的...

  • linux源码解析14- 页面回收详解

    时间:2023-02-20 17:02:39

    0.前沿:1.当前的应用都倾向于内存密集型,物理内存多大都是不够用的,所以必须有页面回收机制;2.CPU的高速缓存,也是类似页面回收的原理;1.Linux页面回收的实现原理当前内核版本5.13,采用的LRU链表算法(不同于经典LRU算法)和第二次机会法;LRU(Least Recently Used...

  • linux源码解析12–page数据结构

    时间:2023-02-17 18:03:18

    几个问题:1.当开启了MMU之后,CPU访问内存的最小单位是多少呢?page2.linux怎样描述这个页呢?3.linux内核里,怎么理解和使用这个页?linux内核用stuct page来描述一个物理页面:1.简化版的page结构体/* * page描述一个物理页面 */struct page {...

  • linux源码解析10–缺页异常之写时复制

    时间:2023-02-15 11:24:51

    接上篇https://www.daodaodao123.com/?p=776本篇解析缺页异常分支之一,写时复制缺页异常;1.写时复制缺页异常触发条件(1)pte页表项的PRESENT置位(2)pte表项为不为空(3)vma可写,pte只读,进行写操作2.应用场景(1)进程fork子进程的时候,为了避...

  • linux源码解析09–缺页异常之文件映射

    时间:2023-02-14 18:14:24

    接上篇https://www.daodaodao123.com/?p=776本篇解析文件映射。1.文件映射触发条件(1)pte表项为空,且vma->vm_ops不为空,属于文件映射;(2)pte表项为空,且vma->vm_ops为空,属于匿名映射;2.应用场景(1)exec加载程序的时候...

  • linux源码解析08–缺页异常之匿名页面

    时间:2023-02-13 13:05:57

    接上篇https://www.daodaodao123.com/?p=776本篇解析缺页异常分支之一,匿名页面;1.缺页中断触发条件(1)pte页表项的PRESENT没有置位(2)pte表项为空(3)vma->vm_ops->fault为空(对于私有的匿名页)2.应用场景(1)局部变量较...

  • linux源码解析06–常用内存分配函数kmalloc、vmalloc、malloc和mmap实现原理

    时间:2023-02-12 08:04:59

    1.kmalloc函数static __always_inline void *kmalloc(size_t size, gfp_t flags){if (__builtin_constant_p(size)) {#ifndef CONFIG_SLOBunsigned int index;#endi...

  • linux内核源码解析04–用户进程页表创建

    时间:2023-02-09 16:03:03

    进程是独立的资源空间,每个进程都有自己独立的页表;用户进程创建页表发生在三个时刻:创建进程fork时;缺页异常时;进程切换时;1.创建进程fork核心函数__do_fork() -->copy_process -->dup_mm()dum_mm函数static struct mm_st...

  • linux内核源码解析02--启动代码分析之固定映射

    时间:2023-02-07 17:01:18

    Linux初始化过程页表建立Linux初始化过程,会依次建立如下页表映射:1.恒等映射:页表基地址idmap_pg_dir;2.粗粒度内核镜像映射:即上篇博文里的“第二次建立页表映射”,页表基地址init_pg_dir;3.fixmap映射:页表基地址为init_pg_dir,待paging_ini...

  • linux内核源码解析01–启动代码分析之汇编部分

    时间:2023-02-06 16:05:21

    首先是引导程序,即bootloader,简单说即bootloader会做如下事情:(1)初始化物理内存;(2)设置设备树;(3)解压缩内核映像,将其加载到内核运行地址(可选);(4)跳转到内核入口地址; 下面进入Linux范畴:链接脚本vmlinux.lds.S第一个要看的文件,“arch/arm6...

  • Linux源码解析-进程-进程状态

    时间:2022-07-15 17:20:12

    1.进程的三种理论基本状态 1)就绪(ready)状态 当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行,进程这时的状态称为就绪状态。在一个系统中处于 就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列 2)执行状态 进程已获得CPU,其程序正在执行。在单处理机...

  • linux线程池thrmgr源码解析

    时间:2021-08-22 21:56:27

    linux线程池thrmgr源码解析1         thrmgr线程池的作用thrmgr线程池的作用是提高程序的并发处理能力,在多CPU的服务器上运行程序,可以并发执行多个任务。2         thrmgr线程池的原理thrmgr并非像常规线程池那样,创建线程池时,创建固定数量的线程,线程一...

  • Linux源码解析-内核栈与thread_info结构详解

    时间:2021-01-12 14:41:38

    1.什么是进程的内核栈?在内核态(比如应用进程执行系统调用)时,进程运行需要自己的堆栈信息(不是原用户空间中的栈),而是使用内核空间中的栈,这个栈就是进程的内核栈2.进程的内核栈在计算机中是如何描述的?linux中进程使用task_struct数据结构描述,其中有一个stack指针struct ta...