Markdown to HTML

AuroBreeze Blog

A tiny, fast Markdown blog for GitHub Pages.

Kernel

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

ArceOS 2026训练营题目解析

ArceOS 2026训练营题目解析 前言 本文依赖ArceOS Breakdown of the Startup Process,若有部分跳过的地方可以查看此文章。 练习 print_with_color 本题的问题很简单,给我们输出的内容上颜色,我们可以随便加一个ASCII的颜色即可通过。 ... println!("\x1b[32m[WithColor]: Hello, Arce...

Read more

ArceOS Architecture Analysis

Arceos 启动流程拆解 前言 注:本文默认读者已具备基础的 RISC-V 体系结构及常规操作系统理论知识,底层硬件常识将不再赘述。 于我而言,写项目前,完整了解项目前期的启动及相关的内容是及其必要,可以完整了解整个项目的运转方式,掌握开发流程。 所以下文是简单的对ArceOS的架构解析,只针对RISCV。 Makefile分析 ArceOS并不是一个大型或者中型的项目,所以,可以直接来...

Read more

ArceOS start

这几天一直都在参加rcore的比赛,这几天的赛段是写ArceOS中的题目 尽管自己无权评判他人的设计思路,但是这些只是我的个人感受,并无恶意。 前几天在写rcore的时候,给我的感觉就是,rust不太适合拿来做操作系统,他的抽象过多,不适合项目的维护,(不知道为什么,感觉rust要是做大型项目的话,感觉也不太合适,不知道是我自己没有参加过中型或大型项目的原因)。 在看ArceOS的时候,很多的库也...

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