浅谈Linux内存alloc: kmalloc, vmalloc, malloc kmalloc 定义于include/linux/slab.h,用于内核分配大小小于页大小的内存, 物理上连续。 参数: size: 分配的内存大小,最小值:SLAB分配器为32Bytes,SLOB和SLUB为8Bytes;最大值:SLAB分配器为32MB(25阶)或…
Linux 上对系统调用的封装 Linux在内核中提供了诸多系统调用,Linux kernel是如何封装一个系统调用?具体我们如何使用,常见的命令又是如何使用系统调用的呢? Kernel使用一个SYSCALL_DEFINEx来封装源代码中的调用。 应用程序有四种调用的方式: glibc库函数 syscall函数 linux系统调用宏 软中断陷入 f…
前言 记录一下Linux内核中的杂项,希望能帮到你理解源码。 内核宏 container_of 在linux-5.15.54-xanmod源码中使用rg container_of | wc -l一共搜索到了18273次使用。 Linux中常常传入一个结构体的成员,但是想要得到所属结构体及其里面的其它成员,可以使用这个内核宏。 其定义在<lin…
前言 虚拟文件系统,也可以称之为虚拟文件系统转换,是一个用来处理与Unix标准文件系统相关的所有系统调用的内核软件层。 VFS的作用 以cp为例,可以看到下面的代码并没有与文件系统的交互,而是从read中读取到buf缓冲,然后使用full_write写入。 static bool sparse_copy (int src_fd, int dest_…
前言 在阅读Linux源码前,你需要了解下面的内容。 操作系统基本概念 操作系统的两个主要目标 与硬件交互,为硬件平台上的底层编程单元提供服务 为运行在计算机系统上的程序提供运行环境 用户态与内核态 现代的操作系统依靠特殊的硬件特性来禁止用户直接与底层硬件交互,或者禁止直接访问任意的内存地址。 在Intel/AMD CPU上,内核态运行在ring0…
前言 这是一系列巨长并且更新周期漫长的文章中的第一篇,以最新的longterm内核+XanMod补丁集作为参考,希望能帮助读者理解Linux内核。 当前内核版本: linux-5.15.54-xanmod1 当前架构:AMD64 快速上手 对于新手,仍推荐使用gentoo-kernel-bin来进入新安装的系统,在使用一段时间后,再进行内核的改动。…
前言 本文基本适用于所有发行版的脱离包管理器控制的内核编译安装,你可以通过git拉取仓库或者网站下载tar ball,但是更推荐使用包管理获取当前运行的内核的源代码,自己重新进行打包,或者手动编译内核。 在Gentoo Linux上,内核的编译占日常滚动的一大部分,编译出一个好用的内核,对Gentoo的整体表现至关重要。在main tree中,内核…
前言 这里所说的Linux,具体指 GNU/Linux 操作系统。含义是,含有GNU的系统+Linux内核,不管GNU的含量有多少,只要有GNU的存在,并且内核是Linux,就是 GNU/Linux 操作系统。 Linux基础分成两个部分介绍,一个是认识Linux,一个是使用Linux。 认识 Linux 即使你成功安装了Gentoo这样难度比较高…
Gentoo Linux 修行笔记 本笔记基于Gentoo Linux,意在分享一些使用Gentoo Linux的经验。 这是一篇引导,各个部分会在单独的文章里面讲述。 各个分区之间没有线性关系,因为先从Linux基础讲起,就不能介绍如何安装Gentoo Linux了。但是确实是按照从基础知识开始逐级提升的。 Linux 基础 这部分内容是,介绍L…
好的系统不需要自己优化 仅仅依靠前面两篇文章中提到的优化选项是不能够让你的系统运行地更快的。 而且如果自己水平不够的化,盲目优化,带来的后果可能是毁灭性的,所以耗费精力优化系统,得到很少的性能提升,是很愚蠢的。 主要是对env的定义和内核的配置,每个包都有可以删减的USE,去掉多余的选项对于使用KDE的桌面系统很重要。 env 首先创建一个路径/e…