随笔分类 -  源码笔记

摘要:mimalloc是微软去年6月开源的(竟然拖了半年才开始写笔记)新的内存分配器, 其最早由Daan Leijen开发, 为Koka与Lean等语言的runtime system提供内存管理. 根据 "官方文档" 描述, mimalloc在各类benchmark上性能均优于其它主流allocator( 阅读全文
posted @ 2020-01-09 02:23 Five100Miles 阅读(7859) 评论(0) 推荐(3)
摘要:在上一节我们讨论了用户态向内核申请内存的接口(系统调用), 发现内核仅仅是判断进程的虚拟地址空间是否足够划分出新的区间, 实际并未分配物理内存. 这是因为内核分配内存的机制是仅当进程实际使用该地址后才为其分配物理内存, 借此提升物理内存使用率. 本节我们就来看看内核究竟是如何分配物理内存的.以32b 阅读全文
posted @ 2018-06-27 19:48 Five100Miles 阅读(1356) 评论(0) 推荐(0)
摘要:之前分析errno的实现时有讲过系统调用的实现, 但是写到一半烂尾了, 于是决定重新挖个坑(- -!). 假设我们调用了一个open(), 从pc指向open()入口到pc执行open()的后一条指令中间究竟发生了什么. 首先明确第一点, 当我们调用open()时并不是直接调用系统调用open, 而 阅读全文
posted @ 2018-04-18 22:32 Five100Miles 阅读(3516) 评论(0) 推荐(0)
摘要:关于rcu的内容本来想放在内核锁介绍里, 后来发现要解释的内容太多了, 索性就分成几章. 本章来分析rcu的实现. 5. rcu Added on 2017.12.20之前看rcu代码时一直没有弄明白rcu_node的分布, 直到最近看到https://lwn.net/Articles/305782 阅读全文
posted @ 2018-04-10 22:20 Five100Miles 阅读(2008) 评论(0) 推荐(0)
摘要:今天讨论下内核常见锁的机制与实现分析. 第一个问题内核何时会发生临界资源的竞争访问? 对于非抢占UP(uni processor)内核只有一种情况会发生竞争, 即高优先级异常/中断处理函数抢占内核线程的cpu并访问了临界资源. 如果内核开启抢占还会引发另一种可能, 即在中断返回或系统调用返回时另一线 阅读全文
posted @ 2018-04-10 22:16 Five100Miles 阅读(1895) 评论(0) 推荐(0)
摘要:很久以前挖的坑, 现在还没填上, 也许以后再详细分析吧. kprobe是内核提供的代码跟踪工具, 其使用方法见Documentation/kprobes.txt, 此处做个简要说明. kprobe允许你在任何内核程序位置动态打断并收集调试信息. 你可以在几乎热河内核代码地址陷入中断, 指定断点触发时 阅读全文
posted @ 2018-03-25 15:59 Five100Miles 阅读(3760) 评论(0) 推荐(0)
摘要:当我们在linux编写用户态程序时并不需要考虑进程间是如何切换的, 即使当我们编写驱动程序时也只需调用一些阻塞接口来让渡cpu. 但是cpu究竟是如何切换进程的, 在进程切换过程中需要做什么, 今天我们通过分析内核schedule()的实现来看下内核是如何完成进程切换的. 先看下几个相关的数据结构: 阅读全文
posted @ 2018-03-25 15:48 Five100Miles 阅读(2114) 评论(0) 推荐(0)
摘要:在上一节ptmalloc源码分析中我们提到dlmalloc向系统申请内存的方式有两种, 对应Linux系统下分别是sbrk()与mmap()系统调用. 本节我们就来看下brk()/sbrk()与mmap()/munmap()的实现, 作为切入点来一窥内核内存管理的特点. 在正文开始之前我们先大致描述 阅读全文
posted @ 2018-02-28 00:34 Five100Miles 阅读(1656) 评论(0) 推荐(0)
摘要:之前写过关于内存管理的几篇文章, 但是比较零碎, 网上很多文章又偏于理论或者局限一块内容, 少有一个系列的分析. 一直想自己写个, 正好借助这次培训机会写篇文章, 从源码分析申请内存之后到实际访问内存之间系统究竟做了什么, 探讨一下源码作者如此设计内存管理模块的目的与意义. 暂时规划分四部分完成: 阅读全文
posted @ 2018-02-27 21:47 Five100Miles 阅读(2335) 评论(1) 推荐(1)
摘要:以SIGSEGV为例详解信号处理(与栈回溯) 信号是内核提供的向用户态进程发送信息的机制, 常见的有使用SIGUSR1唤醒用户进程执行子程序或发生段错误时使用SIGSEGV保存用户错误现场. 本文以SIGSEGV为例, 详细分析信号使用方法, 内核信号的发送与接收机制. 1. 信号处理例程 以下是一 阅读全文
posted @ 2018-02-22 13:53 Five100Miles 阅读(7763) 评论(0) 推荐(0)