linux df

本文介绍了Linux下的udev和tmpfs。udev是用户空间的设备管理工具,动态管理/dev目录下的设备文件。tmpfs是一种基于内存的临时文件系统,类似于ramdisk但更灵活,可使用swap分区。同时,文章还探讨了Linux的内存管理子系统,包括用户空间和内核空间的划分,以及tmpfs的实现原理。最后提到了/dev/loop设备,用于将文件当作块设备访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(base) ➜  ~ df 
文件系统           1K-块     已用      可用 已用% 挂载点
udev             8137076        0   8137076    0% /dev
tmpfs            1633052     2128   1630924    1% /run
/dev/sda10     199793984 56065704 133509632   30% /
tmpfs            8165248   352300   7812948    5% /dev/shm
tmpfs               5120        4      5116    1% /run/lock
tmpfs            8165248        0   8165248    0% /sys/fs/cgroup
/dev/loop1         56320    56320         0  100% /snap/core18/1880
/dev/loop4        223232   223232         0  100% /snap/gnome-3-34-1804/60
/dev/loop0         56704    56704         0  100% /snap/core18/1885
/dev/loop2        166784   166784         0  100% /snap/gnome-3-28-1804/145
/dev/loop3        261760   261760         0  100% /snap/gnome-3-34-1804/36
/dev/loop6         44288    44288         0  100% /snap/snap-store/415
/dev/loop5         63616    63616         0  100% /snap/gtk-common-themes/1506
/dev/loop7         51968    51968         0  100% /snap/snap-store/481
/dev/loop8         31104    31104         0  100% /snap/snapd/9279
/dev/loop9         31744    31744         0  100% /snap/snapd/9607
/dev/nvme0n1p1    103186    52312     50874   51% /boot/efi
tmpfs            1633048       80   1632968    1% /run/user/1000

udev (user dev)

udev 是一个工作在用户空间的工具,它能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建,删除,权限等。这些文件通常都定义在/dev 目录下,但也可以在配置文件中指定。udev 必须内核中的sysfs和tmpfs支持,sysfs 为udev 提供设备入口和uevent 通道,tmpfs 为udev 设备文件提供存放空间。
注意,udev 是通过对内核产生的设备文件修改,或增加别名的方式来达到自定义设备文件的目的。但是,udev 是用户模式程序,其不会更改内核行为。也就是说,内核仍然会创建sda,sdb等设备文件,而udev可根据设备的唯一信息来区分不同的设备,并产生新的设备文件(或链接)。而在用户的应用中,只要使用新产生的设备文件即可。

tmpfs(temporary file storage)

tmpfs,临时文件系统,是一种基于内存的文件系统,它和虚拟磁盘ramdisk比较类似像,但不完全相同,和ramdisk一样,tmpfs可以使用RAM,但它也可以使用swap分区来存储,而且传统的ramdisk是个块设备,要用mkfs来格式化它,才能真正地使用它;而tmpfs是一个文件系统,并不是块设备,只是安装它,就可以使用了。tmpfs是最好的基于RAM的文件系统。

ramdisk : 相当于一个磁盘,需要先格式化再使用(可以格式化成各种文件系统),如果umount再加载,只要不重启,则数据依然会存在。
ramfs:位于虚拟文件系统(VFS)层, 无需格式化, 只使用物理内存.
tmpfs:也是位于虚拟文件系统层, 使用的是Linux系统内存, 不管是物理内存还是swap,只负责向系统申请。

虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作

ext:全称Linux extended file system, extfs,即Linux扩展文件系统,Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版,只不过为了快速恢复文件系统,减少一致性检查的时间,增加了日志功能,所以Ext2被称为索引式文件系统,而Ext3/Ext4被称为日志式文件系统

Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存变少。当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap空间中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行Swap交换。

实现原理:基于VM子系统

内存管理子系统职能:
  1. 管理虚拟地址和物理地址的映射;
  2. 管理物理内存的分配
用户空间(0~3G)

空间简介
其从0x0000 00000xBFFF FFFF共3GB的线性地址空间,每个进程都有一个独立的3GB用户空间,当然这是虚拟的空间。

常见十六进制对应内存单位大小:

0x4001K
0x10004K
0x1 000064K
0x10 00001M
0x100 000016M
0x1000 0000256M
0x4000 00001G
内核空间(3~4G)

其从0xC0000000到0xFFFFFFFF共1GB大小,内核空间又可以根据映射方式的不同分为下面四块

  • 内核逻辑地址空间
    空间简介
    其从0xC0000000到high_memory(图中896MB的地方)最大为896MB(也就是说这块空间有可能不满,但最大为896MB),当然是虚拟空间。
    注:在此注意一下896MB我们一会在分析。
    如何转换为物理空间
    这一部分虚拟地址与物理内存中对应的地址只差一个固定偏移量(3G),如果内存物理地址空间从0x00000000地址编址,那么这个固定偏移量就是PAGE_OFFSET(如上图)。
  • Vmalloc空间
    空间简介
    其地址没有严格的界限,这段空间既可以访问到我们的高端内存,也可以访问到低端内存。(高端和低端一会解释)
  • 永久内核映射
    空间简介:其固定用来访问高端内存。
  • 固定映射
    空间简介:其在系统初始化期间永久映射I/O地址空间,或者特殊的寄存器。
  1.   遗留知识
    

在刚才我们前面的分析中我们留下了一些问题下面进行解释。
a) 低端内存
内核逻辑地址空间所映射的物理内存就是低端内存(实际物理内存的大小,但是小于896MB)
b) 高端内存
低端内存地址之上的物理内存是高端内存(物理内存896MB之上)。
c) 896MB来由
Linux将内存分为内核空间和用户空间,其中内核空间中的0xC0000000-high_memory部分用来映射物理内存,但是我们还需要映射I/O空间和固定的寄存器,所以留出了high_memory-0xFFFFFFFF之间的地址来映射I/O空间和固定的寄存器,而在X86平台根据经验设定了这个high_memory为896MB

  • /run
    /run 目录是说, 里面的东西是系统运行时需要的, 不能随便删除. 但是重启的时候应该抛弃. 下次系统运行时重新生成.
    在我的电脑上, /run是个tmpfs, /var/run是个指向/run的链接, 换句话说他俩是同一个东西.

dev/loop

/dev/loop(或称vnd (vnode disk)、lofi(循环文件接口))是一种伪设备,这种设备使得文件可以如同块设备一般被访问。

在使用之前,循环设备必须与现存文件系统上的文件相关联。这种关联将提供给用户一个应用程序接口,接口将允许文件视为块特殊文件(参见设备文件系统)使用。因此,如果文件中包含一个完整的文件系统,那么这个文件就能如同磁盘设备一般被挂载。

这种设备文件经常被用于光盘或是磁盘镜像(IOS、IMG)。通过循环挂载来挂载包含文件系统的文件,便使处在这个文件系统中的文件得以被访问。这些文件将出现在挂载点目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

t0tott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值