虚拟地址转换[三] - 多级页表
🌲 使用单级页表的问题 上文为了演示的需要,使用的是一个单级页表。事实上,若内存容量较大,按照常规的4KB的page大小的话,page table entry的数目将会很大。因为page table是按照VPN(virtual page number)来索引查找的,如果把单级页表视作一个big array,则VPN就相当于数组下标,因此page table本身需要在内存中是连续分布的,而且...
🌲 使用单级页表的问题 上文为了演示的需要,使用的是一个单级页表。事实上,若内存容量较大,按照常规的4KB的page大小的话,page table entry的数目将会很大。因为page table是按照VPN(virtual page number)来索引查找的,如果把单级页表视作一个big array,则VPN就相当于数组下标,因此page table本身需要在内存中是连续分布的,而且...
在Linux,Windows等操作系统中,为什么不直接使用Physical Address(物理地址),而要用Virtual Address(虚拟地址)呢(在Intel的手册中也被称为Linear Address,具体原因请参考这篇文章)? 因为使用虚拟地址可以带来诸多好处: 在支持多进程的系统中,如果各个进程的镜像文件都使用物理地址,则在加载到同一物理内存空间的时候,可能发生冲突...
内存管理的实现涵盖了许多领域: 内存中的物理内存页的管理; 分配大块内存的伙伴系统; 分配较小块内存的slab、slub和slob分配器; 分配非连续内存块的vmalloc机制; 进程的地址空间。 实际上内核会区分3 种配置选项:FLATMEM、DISCONTIGMEM和SPARSEM...
什么是 IPC Namespace? IPC Namespace是Linux内核中的一种命名空间,用于隔离进程间通信资源。它主要隔离以下两类IPC机制: System V IPC:消息队列(msgget)、信号量(semget)、共享内存(shmget) POSIX 消息队列 通过 IPC Namespace,不同命名空间中的进程拥有各自独立的 IPC 资源,相互隔离,互不...
序言 今年初开始学习了解Raft协议,论文读下来之后决定结合一个成熟的代码进行更深的理解。etcd做为一个非常成熟的作品,其Raft库实现也非常精妙,屏蔽了网络、存储等模块,提供接口由上层应用者来实现。 本篇文章解析基于etcd 3.1.10版本。etcd的Raft库,位于其代码目录的raft中。 $ ls design.md log_unstable_test.go ...
Linux 系统中的 /run 目录是一个临时文件系统(tmpfs),用于在系统启动早期阶段保存运行时数据(runtime data)。它在系统引导时由内核挂载,通常挂载为 tmpfs 类型,这意味着它是驻留在内存中的、非持久化的。 ✅ /run 的主要作用 存储运行时进程数据 比如:服务的 PID 文件(如 /run/nginx.pid)、锁...
🔸 背景知识 在Linux中,namespace是容器技术的基础。它隔离了系统资源,比如进程、网络、挂载点等。UTS namespace是最基础的命名空间之一,主要用于隔离hostname和domainname。 🔸 CLONE_NEWUTS作用 允许进程在新的UTS命名空间中运行。 改变主机名sethostname()只影响当前命名空间。 常用于容器技术(如Docker...
🧩 CRC32简介 CRC32(循环冗余校验)是一种常用的错误检测编码,广泛用于网络通信、文件校验等领域。Go语言标准库中的hash/crc32包提供了CRC32算法的实现。 🧩 基本用法 🌲 计算字节切片的CRC32 package main import ( "fmt" "hash/crc32" ) func main() { data := []byte("Hello...
转载:Etcd存储的实现 在前面已经分析了Raft算法原理、etcd raft库的实现,接着就可以看etcd如何使用raft实现存储服务的了。 以下的分析主要针对etcd V3版本的实现。 下图中展示了etcd如何处理一个客户端请求的涉及到的模块和流程。图中淡紫色的矩形表示etcd,它包括如下几个模块: etcd server:对外接收客户端的请求,对应etcd代码中的etcd...
第1章介绍了BPF性能工具所涉及的各种技术,而本章将对它们进行更深入的讲解,包括它们的历史、接口、内部机制,以及与BPF的结合使用。 本章是全书中技术深度最高的一章。为了简洁起见,内容默认你已具备一定的内核内部结构和指令级编程方面的知识。 本章的学习目标并不是要你死记硬背每一页内容,而是希望你能够: 理解BPF的起源,以及扩展BPF(eBPF)在今天的作用; 掌握栈帧指针遍历...