
linux内核笔记 自旋锁(spinlock)
自旋锁 spin_lock spin_lock 是一种 忙等(busy waiting)锁。 当一个 CPU 想要进入临界区,但锁已被其他 CPU 持有时,它不会睡眠,而是反复循环检查锁状态,直到锁被释放。 它适合:临界区很短、不可睡眠 的场景(比如中断上下文)。 锁的结构 typedef struct spinlock { union { struct raw...

自旋锁 spin_lock spin_lock 是一种 忙等(busy waiting)锁。 当一个 CPU 想要进入临界区,但锁已被其他 CPU 持有时,它不会睡眠,而是反复循环检查锁状态,直到锁被释放。 它适合:临界区很短、不可睡眠 的场景(比如中断上下文)。 锁的结构 typedef struct spinlock { union { struct raw...

引言 Read-Copy Update(RCU)是一种同步机制,2002年10月添加到 Linu 内核中。RCU 通过允许读取与更新同时发生来实现可扩展性的提高。相比于传统的锁函数(传统锁函数使并发线程之间互斥,无论它们是 reader 还是 updater ),或读写锁(允许并发读但不能更新),RCU 支持单个 updater 和多个 reader 之间的并发。 RCU 通过维护多个版本...

vmalloc、持久映射、固定映射 回顾一下第五、六章的内容:在32位的内核虚拟地址空间中, 只有$1G$的可用空间 (总共$2^{32} = 4G$ - 用户空间$3G$),如果物理内存超出$1G$, 那么kernel将无法寻址超出的那部分物理内存 (即高端内存 HIGH_MEMORY), 为了解决这个问题,kernel将内核空间分了两部分:可直接线性映射物理内存的$896MiB$普通内...

伙伴系统 在内核初始化完成后,内存管理的责任由伙伴系统(Buddy System)承担。它是基于一种相对简单效率的算法的高效的内存管理技术,一直到最新版本都还在使用。 伙伴系统的基本思想是将内存或资源分成大小相等的块(称为伙伴),每个块可以被分配给一个进程或线程使用。当一个进程或线程请求内存或资源时,系统会搜索一个空闲的伙伴来满足请求,如果找到了一个空闲的伙伴,系统会将其分配给请求者,并...

启动时的内存初始化 涉及硬件架构相关的功能均以i386结构为例 (经典的x86 且有高端内存的处理逻辑) 系统引导时,内核在物理内存中的结构 引导将内核载入到内存中,并跳转到相应的内存地址开始执行内核代码,在ia32架构下,内核在内存中的架构如上。 _text、_etext、_edata、_end的具体地址在编译后的System.map下,以线性地址表示,如: ...

通用内存的表示 基础概念 内存管理涉及的领域 内存中的物理内存页的管理; 分配大块内存的伙伴系统; 分配较小块内存的slab、slub和slob分配器; 分配非连续内存块的vmalloc 机制; 进程的地址空间。 内存地址空间、32位系统的寻址限制 Linux内核将地址空间划...

完全公平调度器类 Completely Fair Scheduler 数据结构 CFS的就绪队列 struct cfs_rq { struct load_weight load; unsigned long nr_running; //可运行进程数量 u64 exec_clock; //运行时间 u64 min...

进程的调度 概念 内存中保存了对每个进程的唯一描述,并通过若干结构与其他进程连接起来。内核必须提供一种方法,在各个进程之间尽可能公平地共享CPU时间,而同时又要考虑不同的任务优先级,而这就是调度器的目标。 调度器的一般原理是,按所能分配的计算能力,向系统中的每个进程提供最大的公平。如果通过轮流运行各个进程来模拟多任务(现实情况是CPU数目总比要运行的进程数目少),那么当前运行的进程,其...

进程的表示 进程的数据结构 struct task_struct { volatile long state; // 进程状态 void *stack; // 线程栈地址指针 void * 万能指针 ... /* 是历史遗留的 int 类型接口,方便使用 */ pid_t pid; //进程pid pid_t tgid; // 线程组id ... st...

概念 操作系统 整个系统中负责完成最基本功能和系统管理的那些部分。应该包括:内核、设备驱动、启动引导、shell、文件管理和系统功能 内核 技术层面上,内核是硬件与软件之间的中间层,其作用是将应用程序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。系统其他部分必须依靠内核提供的服务(管理设备、分配系统资源)。一般包含中断服务程序、管理多进程任务的调度程序、管理...