Markdown to HTML

AuroBreeze Blog

A tiny, fast Markdown blog for GitHub Pages.

C/C++

Posts grouped in this category.

Linux Slub Slow Allocate path

在上文中,slub通过fast路径分配内存对象失败后会进入到慢速路径当中 慢速分配路径总览 ___slab_alloc() 先尝试从 partial 链表获取对象,失败后申请新 slab。指定首选节点但未设置 __GFP_THISNODE 时,先限制在目标节点尝试;新 slab 分配失败后,恢复原始标志重试。 flowchart TD A["进入 ___slab_alloc()per-C...

Read more

slub devlog 10-6

time start: 2026年10月6日 time end: 2026年10月8日 slub 慢速分配路径 4564 进入___slab_alloc函数后,就是慢速分配路径 /* * The slab lists for all objects. */ struct kmem_cache_node { spinlock_t list_lock; unsigned long ...

Read more

Linux Slub Fast Allocate path

在 Linux 中,以字节为单位申请内存时,通常会使用 kmalloc()。对于适合对象缓存的分配请求,kmalloc() 会使用底层的 SLUB 对象分配器。 SLUB 的分配流程包含快速路径和慢速路径。本文主要分析所列代码中基于 per-CPU sheaves 的快速路径。 kmalloc 调用链 kmalloc() 会根据请求大小是否为编译期常量,选择不同的入口: flowchart TD...

Read more

slub devlog 9-14

slub 快速分配路径 static __fastpath_inline void *slab_alloc_node(struct kmem_cache *s,         gfp_t gfpflags, int node, const struct slab_alloc_context *ac) {} 在快速分配路径中,会使用 slab_pre_alloc_hook进行预检,通过在 m...

Read more

spinlock和sleeplock锁的使用及其注意事项

锁的使用 本文默认读者有对应的编程经验,过多细节不再赘述 在写FrostVistaOS的时候,在 OS 初始化早期,由于调度器尚未启动、进程尚未建立,会导致依赖进程上下文的睡眠锁无法正常工作。所以,我打算还是专门写一篇博客用来讲解锁的使用,因为我的锁的编写借鉴了xv6的代码,所以,理论上与xv6的锁的使用是通用的。 spinlock struct spinlock { uint lo...

Read more

一次FrostVista的排错

一次FrostVista的排错 前言 那几天在尝试使用gdb来追踪OS的运行流程的时候发现,自己的OS无法在-O0优化下运行(无优化),但是可以在-O2优化下运行,这就让我感到很奇怪,这是为什么?同一套代码竟然会在不同的优化下产生这么大的差异? 优化 1. -O0:零优化(默认级别) 核心目标:最快的编译速度,最好的调试体验。 特点: 如果你在编译时不加任何 -O 参数,编译器默认使用...

Read more

FrostVista: Minimal U-mode implementation

FrostVista: Minimal U-mode implementation 本文主要讲述在实现简单的U-mode时可能遇到的问题,以及一些疑问。 本文主要讲解思路而非代码,本文中的代码也仅仅是我实现所用的代码,仅供参考。 需要使用到以下文件: RISCV_ABI.pdf RISCV-Privileged.pdf 涉及到的章节: ABI: Chapter 1.1 Integer Re...

Read more

FrostVista Tutorial -- (2) UART驱动编写

FrostVista Tutorial -- (2) UART驱动编写 我们在上一章中已经说明完如何进入OS并启动了,现在我们要做的事情就是要让OS可以开口说话,也就是UART驱动的编写。 要知道,在正常的OS中,是没人帮你配置好简单的UART的,所以,我们需要自己编写一个UART驱动,来完成这个功能。 而且只有实现了UART驱动,才能让OS开口说话,我们也可以正常的打印错误日志,消息等,否则的话...

Read more