转自:http://www.lupaworld.com/forum.php?mod=viewthread&tid=61425

原名:内核与ramdisk到底是什么关系?


个人Notes:

      (1)有这个必要吗? --相当有!不然内核太大!不符“内核”原则。

      (2)作用:“既要内核小,又要内核不带草”,解决“先有鸡还是先有蛋的问题”。

      (3)解决该问题所依据的客观事实:ramdisk根文件系统也是由bootloader通过低级的读写命令加载到内存的,因此内核启动后可以轻松挂载内存中的ramdisk。

      (4)总结:出来“混”,总是要“还”的,只是迟早问题。


问题:

http://Linux.chinaunix.NET/bbs/archiver/tid-1135273.html

内核与ramdisk到底是什么关系?系统在启动的过程中,内核与ramdisk分别扮演什么角色啊?
我对启动的过程一直不明白,懂的朋友帮我讲讲。
谢谢

精彩回答:
ramdisk一个作用就是用来解决boot过程中mount根文件系统的“先有鸡还是先有蛋”的问题的。
一般来说,根文件系统在形形色色的存储设备上,不同的设备又要不同的硬件厂商的驱动,比如intel的南桥自然需要intel的ide/sata驱动,VIA的南桥需要VIA的ide/sata驱动,根文件系统也有不同的文件系统的可能,比如ubuntu发行版可能一般用ext3,suse可能就不是了,不同的文件系统也需要不同的文件系统模块;假如把所有驱动/模块都编译进内核(注:即编一个通用的、万能的内核),那自然没问题,但是这样就违背了“内核”的精神或本质,所以一般来说驱动/模块都驻留在根文件系统本身上/lib/modules/xxx,那么“鸡蛋”问题就来了,现在要mount根文件系统却需要根文件系统上的模块文件,怎么办?于是,就想出ramdisk,内核总是能安装ramdisk的(注:这是因为ramdisk临时文件系统和内核一样,也是由bootloader通过低级读写命令(如uboot用nand read,而不用通过文件系统层提供的高级读写接口)加载进内存,因此内核可以挂载内存里ramdisk文件系统),然后把所有可能需要的驱动/模块都放在ramdisk上,首先,让内核将ramdisk当作根文件系统来安装,然后再用这个根文件系统上的驱动来安装真正的根文件系统,就将这个矛盾问题解决了 

ramdisk还举出一个作用,现在的发行版在boot时一般都是图形界面的,那么,ramdisk就可以放framebuffer驱动和一些图片来做这种简单的动画。
前一段时间刚好也在研究ramdisk, 下面是我找到的关于ramdisk的资料,希望对楼主有用
在 Linux kernel 2.4 中,initrd 大致的处理流程如下:(方括号表示主要的执行单元)[boot loader] Boot loader 依据预先设定的条件,将 kernel 与 initrd 这两个 image 载入到 RAM [boot loader -> kernel] 完成必要的动作后,准备将执行权交给 Linux kernel [kernel] 进行一系列初始化动作,initrd 所在的记忆体被 kernel 对应为 /dev/initrd 装置设备,        透过 kernel 内部的 decompressor (gzip 解压缩) 解开该内容并複製到 /dev/ram0 装置设备上 [kernel] Linux 以 R/W (可读写) 模式将 /dev/ram0 挂载为暂时性的 rootfs [kernel-space -> user-space] kernel 准备执行 /dev/ram0 上的 /linuxrc 程式,并切换执行流程 [user space] /linuxrc 与相关的程式处理特定的操作,比方说准备挂载 rootfs 等 [user-space -> kernel-space] /linuxrc 执行即将完毕,执行权转交给 kernel [kernel] Linux 挂载真正的 rootfs 并执行 /sbin/init 程式 [user space] 依据 Linux distribution 规范的流程,执行各式系统与应用程式 

值得一提的是,以上「两阶段开机」是 initrd 提出的弹性开机流程,在真实的应用中,也可能从未需要挂载真正的 rootfs,换言之,只是把系统当作都在 RAM disk 上运作,或者永远都在 initrd 所引导执行的 /linuxrc 程序中执行 (注意:kernel 永远保留 PID=1 作为 init process 识别,而 /linuxrc 执行的 PID 必非为 1),在许多装置如智慧型手机,都是行之有年的,不过这不影响我们后续的探[/quote]
里边所说的 initrd 大体上就是指 包含根文件系统的ramdisk。

内核与ramdisk到底是什么关系的更多相关文章

  1. JS原型的问题Object和Function到底是什么关系

    var F = function(){}; Objcert.prototype.a = function(){}; Function.prototype.b = function(){}; F 既能访 ...

  2. 0.11内核rd_load@ramdisk.c中memcpy函数好像有bug

    0.11内核rd_load@ramdisk.c中memcpy函数好像有bug,如:#define memcpy(dst,src,n) \    __asm__("cld;rep;movsl& ...

  3. SOA和微服务到底是什么关系

    本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5847441.html SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上 ...

  4. SOA和微服务到底是什么关系?

    SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式.我倒觉得微服务其实就是随着互联网的发展,复杂的平台.业务的出现, ...

  5. ARM内核和架构都是什么意思,它们到底是什么关系?

    ARM产品越来越丰富,命名也越来越多.很多朋友提问: ARM内核和架构都是什么意思?内核和架构的关系是什么?比如ARMv7架构,这个架构指的是什么?小编选出了几个精彩回答!希望对嵌友们在选择设计电路时 ...

  6. 深入解析Linux内核及其相关架构的依赖关系

    Linux kernel 成功的两个原因: 灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中:每个子系统(尤其是那些需要改进的)都具备良好的可扩展性.正是这两个原因使得Linux kern ...

  7. Unicode,UTF-32,UTF-16,UTF-8到底是啥关系?

    编码的目的,就是给抽象的字符赋予一个数值,好在计算机里面表示.常见的ASCII使用8bit给字符编码,但是实际只使用了7bit,最高位没有使用,因此,只能表示128个字符:ISO-8859-1(也叫L ...

  8. 内核的ramdisk

    ramdisk 内核中的特性之一,使用缓冲和缓存来加速对磁盘上的文件访问,并加载相应的硬件驱. ramdisk --> ramfs,提高速度 CentOS 5: initrd 工具程序:mkin ...

  9. C# 读写文件从用户态切到内核态,到底是个什么流程?

    一:背景 1. 一个很好奇的问题 我们在学习 C# 的过程中,总会听到一个词叫做 内核态 ,比如说用 C# 读写文件,会涉及到代码从 用户态 到 内核态 的切换,用 HttpClient 获取远端的数 ...

随机推荐

  1. 关于在repeater中的checkbox实行多选和全选

    今天项目中用到这一块,是一个b2b商城,业务是别人给客户留言后,客户从会员中心的留言管理中查看,用checkbox实行多选和全选后进行批量审核 首先在checkbox后加个hidden,作用见代码: ...

  2. MySQL查询执行的基础

    当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.一旦理解这一点,很多查询优化实际上就是遵循一些原则让优化器能够按照预想的合理的方式运行. 换句话说,是 ...

  3. Postman 安装及使用入门教程(转)

    安装 本文只是基于 Chrome 浏览器的扩展插件来进行的安装,并非单独应用程序. 首先,你要台电脑,其次,安装有 Chrome 浏览器,那你接着往下看吧. 1. 官网安装(别看) 打开官网,http ...

  4. nodejs学习记录

    一.环境搭建 1.安装express 局部安装 npm i express 全局安装 npm i -g express (命令行express无法使用) 环境变量 npm i -g express-g ...

  5. ubuntu新建某个目录的快捷方式到桌面,有三种方法

    0. ln -sf /home/wjs ~/Desktop (wjs是我的登录用户名). 1. 在文件浏览器里 ,目录的右键有个make link 或 创建链接 ,然后cut or copy 到 桌面 ...

  6. Android 安装和启动另外一个应用

    有时候一个应用需要启动另外一个应用来完成操作,比如在某些应用中打开闹钟,相机,日历等等. 启动或安装相应的应用的方法: Step1:判断是否安装目标应用.只要知道目标应用的安装包名就可以通过判断&qu ...

  7. target vs currentTarget, clientWidth vs offsetWidth

    width: document < window(browser) < screen document--> clientWidth < offsetWidth(include ...

  8. altium designer不经过原理图直接在空白pcb上加封装然后画线

    如果是复杂点的PCB,建议还是画下SCH,如果PCB只有几个元件,那么可以用这种方法,想不画原理图,直接进行布线,往往是很多初学者最想知道的,但是这也一定不是初学者能学到的.因为你买的书,都是按画PC ...

  9. DACL, NULL or not NULL

    上周 hBifTs在折腾他的文件映射封装类的时候,碰到了不能在 ASP.NET 中直接打开由桌面程序创建的内核对象的问题. 内存映射文件与用户权限 他当时是的方法是修改 ASP.NET 配置文件,让 ...

  10. Another Look at Events(再谈Events)

    转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...