zoukankan      html  css  js  c++  java
  • initramfs机制

     1.什么是 Initramfs

        在2.6版本的linux内核中,都包含一个压缩过的cpio格式的打包文件。当内核启动时,会从这个打包文件中导出文件到内核的rootfs文件系统,然后内核检查rootfs中是否包含有init文件,如果有则执行它,作为PID为1的第一个进程。这个init进程负责启动系统后续的工作,包括定位、挂载“真正的”根文件系统设备(如果有的话)。然后执行 /sbin/init程序完成系统的后续初始化工作。

     2.Linux2.6 内核对 Initramfs 的处理流程

         (1. boot loader 把内核以及 Initramfs 文件加载到内存的特定位置。
         (2. 内核判断Initramfs的文件格式,如果是cpio格式。
         (3. 将Initramfs的内容释放到rootfs中。
         (4. 执行Initramfs中的sbin/init文件,执行到这一点,内核的工作全部结束,完全交给init文件处理。

     3.  cpio格式的Initramfs制作方法

        假设当前目录位于准备好的Initramfs文件系统的根目录下
             find . | cpio -o -Hnewc | gzip -9 > ../initrd.img.gz 

         解压:
            假设当前目录就是要解压后的目录   gunzip | cpio -idmv < ../initrd.img 

     4.  挂载rootfs文件系统

            rootfs是基于内存的文件系统,所有的操作都是在内存中完成,没有实际的存储设备,不需要设备驱动程序的参与。linux系统启动阶段使用rootfs文件系统,当磁盘驱动程序与磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。

            所有的2.6版本linux内核都有一个特殊的文件系统rootfs,是内核启动的初始根文件系统,initramfs的文件会复制到rootfs。如果把initramfs比作种子,那么rootfs就是它生长的土壤。大部分linux系统正常运行后都会安装另外的文件系统,然后忽略rootfs。
            rootfs是ramfs文件系统的一个特殊实例。ramfs是一种非常简单的文件系统,是基于内存的文件系统。ramfs文件系统没有容量大小的限制,它可以根据需要动态增加容量。
       ramfs直接利用了内核的磁盘高速缓存机制。所有的文件的读写数据都会在内存中做高速缓存(cache),当系统再次使用文件数据时,可以直接从内存中读写,以提供系统的I/O性能。高速缓存中的写入数据会在适当的时候回写到对应的文件系统设备(如磁盘等)中,这时它的状态就标识为clean,这样系统在必要时可以释放掉这些内存。ramfs没有对应文件系统设备,所以它的数据永远都不会回写回去,也就不会标识为clean,因此系统也永远不会释放 ramfs所占用的内存。
            因为ramfs直接使用了内核已有的磁盘高速缓存机制,所以它的实现代码非常小。也由于这个原因,它可能不停的动态增长直到耗尽系统的全部内存。

  • 相关阅读:
    MVC架构引入smarty视图引擎
    视图引擎smarty之插件
    视图引擎smarty 三
    视图引擎smarty 二
    视图引擎smarty 一
    .Net 框架
    onkeyup="this.value=this.value.replace(/D/g,'')
    cookie
    click
    html页面内容替换
  • 原文地址:https://www.cnblogs.com/tongyishu/p/12085153.html
Copyright © 2011-2022 走看看