proc文件系统
/proc/self/exe 是 Linux 系统中一个特殊的符号链接,它指向 当前进程的可执行文件 的绝对路径。这个机制在多种场景下非常有用,以下是它的主要用法和示例: 1. 获取当前程序的绝对路径 最常见的用途是 动态获取当前运行程序的完整路径,无需硬编码路径或依赖 argv[0](可能不准确)。 C 语言示例 c #include <unistd.h> #in...
/proc/self/exe 是 Linux 系统中一个特殊的符号链接,它指向 当前进程的可执行文件 的绝对路径。这个机制在多种场景下非常有用,以下是它的主要用法和示例: 1. 获取当前程序的绝对路径 最常见的用途是 动态获取当前运行程序的完整路径,无需硬编码路径或依赖 argv[0](可能不准确)。 C 语言示例 c #include <unistd.h> #in...
Linux中的mount命令用于将文件系统挂载到目录树的指定位置,使存储设备(如硬盘、分区、网络存储等)的内容可访问。以下是mount的核心概念、常用参数及示例: 🧱 1 基本语法 mount [-选项] [设备] [挂载点] 设备:如/dev/sda1、UUID=xxxx、网络路径(NFS/CIFS)。 挂载点:必须是一个已存在的目录。 🧰 2 常用挂载参数 通用选...
🧩 概要 losetup是Linux系统中用于管理loop设备的命令行工具。loop设备是一种虚拟块设备,允许将普通文件“映射”为块设备,从而可以对文件进行像对磁盘分区那样的操作。losetup负责将一个普通文件绑定到一个loop设备,或者解除绑定。 💡 loop设备简介 Linux中的块设备(block device)通常是物理硬盘、SSD、U盘等。 loop设备将普通文件...
手动使用runc来运行一个容器。 ✅ 1. 准备基本环境 确保已经有: 已安装的runc(从GitHub编译或通过包管理器) 一个root权限的shell(比如使用 sudo) ✅ 2. 准备一个rootfs 容器启动需要一个根文件系统(rootfs),可以用busybox来构造一个轻量的rootfs。 使用BusyBox构造最小rootfs $ mkdir ~/m...
回顾上文TLB entry和PTE entry的组成,你有没有意识到,在多级页表系统中,TLB其实只是最后一级PTE的缓存(对于large pages的TLB则最后一级是PDE或者PDPTE,本文以下的讨论都是针对非large page的情况),这和在单级页表中是一样的。 多级页表的查找是一个串行的,链式的过程。试想一下,访问在虚拟地址空间里连续的两个pages(比如虚拟地址分别为0x00...
cache根据写操作后是否要直接同步到内存,可分为write back(稍后同步)和write through(立刻同步)。write through的方式虽然享受不到写cache带来的性能优势,但是还是可以享受读cache的好处的,而且其(和内存的)一致性维护也更简单,适用场景包括视频输出等。 而write back可以减少不必要的内存写入,减轻总线竞争。现在大部分应用场景下,cache...
TLB作为一种cache,也需要维护(和页表PTE的)一致性,区别在于普通cache对应的是属于物理硬件的内存,CPU可以维护cache和内存的一致性。而TLB对应的是page table(一种软件的数据结构),因此需要软件(操作系统)去维护TLB和page table的一致性。 在页表PTE的内容出现变化时,比如page fault时页面被换出,munmap()时映射被解除,就需要inv...
RTC(Real Time Clock)作为一个常用的外设,可以记录实时时钟数据,即便是在其连接的系统电源关闭的情况下。那要实现上述功能,需要哪些组件呢? 要在电源关闭的情况下还可以正常工作,那就需要一个备用的电池,因为电池提供的能量的很有限的,所以需要尽可能低的功耗。要能保存时钟数据,就需要一段小的RAM。 一个RTC能用多久呢?RTC只有在系统主电源关闭的情况下才会切换到备用电池...
上文提到,使用large page(在Linux中对应的概念叫hugepage)可以优化对多级页表的访问时间,那处理器硬件层面是如何实现large page的呢? 在页表的任何级别,指向下一级的指针可以为空,表示该范围内没有有效的虚拟地址。中间级别也可以有特殊条目(设置了page size flag),表明它们直接指向large page。 例如,在32位的x86系统中,支持4MB的hu...
转载:虚拟地址转换[二] - 具体实现 关于上文提到的“关于在TLB中具体是怎么找的,在page table中又是怎么”walk”的问题,下面通过一个简单的例子说明一下。 假设当前CPU支持的虚拟地址是14位,物理地址是12位,page size为64字节(这里要说明一下,通常情况下呢,虚拟地址和物理地址的位数是一样的,但其实并不一定需要一样,因为本来就可以多个虚拟地址指向同一个物理...