ramfs, rootfsinitramfs
什么是ramfs?
ramfs是一个非常简单的文件系统,它将Linux的磁盘缓存机制(页面缓存和dentry缓存)导出为一个动态可调整大小的基于ram的文件系统。
Linux通常将所有文件缓存在内存中。从后备存储(通常是挂载文件系统的块设备)读取的数据页被保留下来,以防再次需要,但标记为干净(可自由),以防虚拟内存系统需要内存做其他事情。类似地,写入文件的数据一旦写入后备存储,就会被标记为干净,但会保留下来用于缓存,直到VM重新分配内存。类似的机制(dentry缓存)大大加快了对目录的访问速度。
对于ramfs,没有后备存储。写入ramfs的文件像往常一样分配条目和页面缓存,但是没有地方可以写入它们。
这意味着页面永远不会被标记为干净的,因此当VM寻求回收内存时,它们无法被释放。
实现ramfs所需的代码量很少,因为所有的工作都是由现有的Linux缓存基础设施完成的。基本上,您将把磁盘缓存挂载为文件系统。正因为如此,ramfs不是一个可通过menuconfig删除的可选组件,因为节省的空间可以忽略不计。
ramfs and ramdisk
旧的“ramdisk”机制在ram区域之外创建一个合成块设备,并将其用作文件系统的后备存储。这个块设备的大小是固定的,因此挂载在它上面的文件系统的大小也是固定的。使用ram磁盘还需要不必要地将内存从假块设备复制到页面缓存中(并将更改复制回来),以及创建和销毁dentry。此外,它还需要一个文件系统驱动程序(比如ext2)来格式化和解释这些数据。
与ramfs相比,这浪费了内存(和内存总线带宽),为CPU创建了不必要的工作,并污染了CPU缓存。(有一些技巧可以通过玩弄页表来避免这种复制,但它们令人不快地复杂,而且结果证明和复制一样昂贵。)更重要的是,ramfs所做的所有工作都必须发生,因为所有文件访问都要经过页面和dentry缓存。RAM磁盘是完全不必要的;Ramfs在内部要简单得多。
ramdisk半过时的另一个原因是,环回设备的引入提供了一种更灵活、更方便的方式来创建合成块设备,现在是从文件而不是从内存块创建。
ramfs and tmpfs
ramfs的一个缺点是,您可以一直向它写入数据,直到填满所有内存,并且VM无法释放它,因为VM认为应该将文件写入后备存储(而不是交换空间),但是ramfs没有任何后备存储。因此,应该只允许root(或受信任的用户)对ramfs挂载进行写访问。
创建了一个名为tmpfs的ramfs衍生物,以增加大小限制,并能够将数据写入交换空间。可以允许普通用户对tmpfs挂载进行写访问。
什么是rootfs?
Rootfs是ramfs(或tmpfs,如果启用了的话)的一个特殊实例,它总是存在于2.6系统中。不能卸载rootfs的原因与不能终止init进程的原因大致相同;对于内核来说,不需要专门的代码来检查和处理空列表,只需要确保某些列表不会变为空,这样做更小、更简单。
大多数系统只是在rootfs上挂载另一个文件系统,并忽略它。ramfs的空实例占用的空间量很小。
如果启用了CONFIG_TMPFS, rootfs将默认使用tmpfs而不是ramfs。要强制使用ramfs,请在内核命令行中添加"rootfstype=ramfs"。
什么是initramfs?
initramfs是一个可以编译进内核的根文件映像,在Linux在启动init进程之前,用来准备系统,挂载真正的root文件系统.
所有2.6版本的Linux内核都包含一个gzip的“cpio”格式的存档文件,在内核启动时将其提取到rootfs中。在提取之后,内核检查rootfs是否包含一个文件“init”,如果是,它将其作为PID1执行。如果找到了,这个init进程负责将系统启动,包括定位和挂载真正的根设备(如果有的话)。如果在将嵌入的cpio归档文件提取到rootfs中后,它不包含init程序,那么内核将使用旧代码来定位和挂载根分区,然后从中执行/sbin/init的某些变体。
参考
相关文章:
ramfs, rootfsinitramfs
什么是ramfs? ramfs是一个非常简单的文件系统,它将Linux的磁盘缓存机制(页面缓存和dentry缓存)导出为一个动态可调整大小的基于ram的文件系统。 Linux通常将所有文件缓存在内存中。从后备存储(通常是挂载文件系统的块设备)读取的数据页被保留下来,以防…...
十三届蓝桥杯研究生组国赛-最大公约数(线段树+二分)
十三届蓝桥杯研究生组国赛-最大公约数 1、问题描述2、解题思路2.1 解法一:暴力查询区间gcd(75%)2.2 解法二:线段树+二分法(AC)1、问题描述 问题描述 给定一个数组, 每次操作可以选择数组中任意两个相邻的元素 x , y x,y x,y...
数据结构——二叉树层序遍历
数据结构——二叉树层序遍历 107. 二叉树的层序遍历 II199. 二叉树的右视图思路: 637. 二叉树的层平均值 107. 二叉树的层序遍历 II 107. 二叉树的层序遍历 II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节…...
【微机原理】8088/8086微处理器
目录 一、8088/8086的功能结构 1.总线接口部件(BIU) 2.执行部件(EU) 二、8088/8086的寄存器结构(14个) 溢出标志的概念 溢出和进位的区别 8086CPU是Intel系列的16位微处理器,他有16根数据…...
springboot第12集:DAO功能代码
在Spring Boot中,DAO是数据访问对象的缩写,它是一种设计模式用于提供对数据库操作的抽象层。通过使用DAO模式,我们可以将数据操作与业务逻辑分离,并提供一个单独的接口来执行所有的数据库操作。 在Spring Boot中,通常使…...
基于KZG多项式承诺方案的RLN
1. 引言 RLN——Rate-Limiting Nullifier为PSE团队主导的项目,源自: Barry White Hat 2019年博客 Semaphore RLN, rate limiting nullifier for spam prevention in anonymous p2p setting RLN(Rate-Limiting Nullifier)是一种…...
《站在巨人的肩膀上学习Java》
Java从诞生距今已经有28年了,在这段时间里,随着Java版本的不断迭代,Java新特性的不断出现,使得Java被使用的越来越广泛。在工程界Java语言一直是大家最喜欢的语言之一,Java一直排行在编程语言热门程度的前3名。 可想而…...
敏捷ACP.敏捷估计与规划.Mike Cohn.
第一部分 传统规划失败的原因 vs 敏捷规划有效的原因 传统的项目规划方式往往会让我们失望。要回答-一个 新产品的范围/进度/资源的组合问题,传统规划过程不一定会产生令人非常满意的答案和最终产品。以下- -些论据可以支持这个结论: ●大约2/3的项目会显著超…...
[创新工具和方法论]-01- DOE课程基础知识
文章目录 1.DOE实验设计的介绍1.1 什么是实验设计DOE?1.2 DOE的优势有哪些?1.3 如何开展DoE研究?步骤 2.DOE实验培训3.数据分析步骤4.实验的随机化5.偏差6.R方 相关系数假设检验 7.三因子二水平全因子设计 1.DOE实验设计的介绍 实验设计是一种安排实验和分析实验数…...
LeetCode-1033. 移动石子直到连续
题目链接 LeetCode-1033. 移动石子直到连续 题目描述 题解 题解一(Java) 作者:仲景 这题目挺难懂的,得画画图才能更好的理解 这也是LeetCode的尿性,习惯了,非得整这种别人看不懂的鸟语 你可以这样理解&a…...
JVM调优入门指南:掌握步骤、参数和场景
前言 作为Java开发者,我们经常需要优化应用的性能,其中JVM调优是非常重要的一部分。在本文中,我们将介绍JVM调优的一般步骤和方法,了解JVM调优参数,如堆大小、新生代比例、GC算法等参数的作用和配置方式,并…...
基于JSP+MySQL的跳蚤市场网站设计与开发
摘 要 在当今社会,网络信息已经不是什么很陌生的词汇,每天都在这个信息时代里生活着并且享受着它带来的与众不同。网络购物可以说是飞速发展的,这种购物方式逐渐的影响着人们的衣食住行。所以利用计算机实现 跳蚤市场网站设计与开发势在必行。本网站是一个校园的跳蚤市场网…...
内网穿透NPS和宝塔Nginx配合使用,开启SSL访问本地局域网网络
并非为了教学,仅供自己记录,方便下次用。所以内容不会刻意花时间写的很细节详细。 1. 服务器NPS配置 NPS install安装后,配置文件会在其他位置,通过是 /etc/nps/nps.conf目录。 找到进行修改,主要修改的是http_proxy_p…...
ToLua框架
ToLua 是一个用于在 Unity 中为 Lua 提供 C# 语言绑定的框架。通过 ToLua,你可以方便地将 C# 代码暴露给 Lua 脚本,并在 Lua 脚本中调用 C# 类、方法和属性。 更新流程 原理:使用AssetBundle进行资源的更新,而由于lua运行时才编…...
Golang-常见数据结构Map
Map map 是一种特殊的数据结构:一种元素对(pair)的无序集合,pair 的一个元素是 key,对应的另一个元素是 value,所以这个结构也称为关联数组或字典。这是一种快速寻找值的理想结构:给定 key&…...
基于空间矢量脉宽调制(SVPWM)的并网逆变器研究(Simulink)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
介绍tcpdump在centos中的使用方法
tcpdump是一款强大的命令行数据包分析器,支持多种过滤和抓包参数。下面将介绍tcpdump的常用抓包参数。当需要监控CentOS系统的网络流量或者进行网络故障排查时,可以使用tcpdump来捕获数据包并进行分析。 下面介绍在CentOS中使用tcpdump的方法࿱…...
机器学习实战:Python基于DT决策树模型进行分类预测(六)
文章目录 1 前言1.1 决策树的介绍1.2 决策树的应用 2 Scikit-learn数据集演示2.1 导入函数2.2 导入数据2.3 建模2.4 评估模型2.5 可视化决策树2.6 优化模型2.7 可视化优化模型 3 讨论 1 前言 1.1 决策树的介绍 决策树(Decision Tree,DT)是一…...
操作系统之进程同异步、互斥
引入 异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。 但是在一定的条件之下,需要进程按照一定的顺序去执行相关进程: 举例说明1: 举例说明2: 读进程和写进程并发地运行,由于并发必然导致异步性…...
你了解这2类神经性皮炎吗?常常预示着这5类疾病!
神经性皮炎属于慢性皮肤病,患者皮肤可出现局限性苔藓样变,同时伴有阵发性瘙痒。神经性皮炎易发生在颈部两侧和四肢伸侧,中年人是高发人群。到目前为止神经性皮炎病因还并不是很明确,不过一部分病人发病前常常出现精神神经方面异常…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
