linux内核
luomoweilan
做为一个普通人,只需做好三件事:看清这世界修炼好自己影响身边人。
展开
-
linux文件系统初始化过程(1)---概述
linux文件系统主要分为三个部分:文件系统调用;虚拟文件系统(VFS);挂载到VFS的实际文件系统。 其中,VFS是核心,linux文件系统的本质就是在内存中创建一棵VFS树。当根目录被创建后,用户就可以使用系统调用在VFS上创建文件、删除文件、挂载各种文件系统等操作。 该系列文章主要分析linux3.10文件系统初始化过程,分为三个阶段: 1、挂载根文件系统(rootfs); 2、加载initrd; 3、挂载磁盘文件系统;原创 2014-01-04 21:30:36 · 8886 阅读 · 2 评论 -
linux文件系统调用(2)---umount
本文将介绍linux卸载文件系统的过程,从系统调用umount()函数开始解析,主要分为三个阶段:1、查找挂载目录下所有已挂载的文件系统;2、删除这些已挂载文件系统的挂载节点;3、释放这些已挂载文件系统的挂载点数据结构;原创 2014-11-24 23:07:00 · 4997 阅读 · 0 评论 -
linux进程管理(5 完结)---进程消亡
当前进程消亡时主要做了三件大事:释放当前进程占用的资源;为当前进程的子进程重新寻找“养父”;通知当前进程的父进程,释放当前进程剩下的资源。原创 2014-04-30 21:52:56 · 2938 阅读 · 0 评论 -
linux文件系统初始化过程(6 完结)---执行init程序
内核加载完initrd文件后,为挂载磁盘文件系统做好了必要的准备工作,包括挂载了sysfs、proc文件系统,加载了磁盘驱动程序驱动程序等。接下来,内核跳转到用户空间的init程序,由init完成创建磁盘设备文件、加载磁盘文件系统、从rootfs切换到磁盘根文件系统等工作。 由于在不同的linux发行版中,init的实现方式差异很大,不能将所有的发行版都分析一遍,因此本文选取ubuntu12.04发行版来描述如何从rootfs切换到磁盘根文件系统。原创 2014-02-28 21:30:02 · 4661 阅读 · 1 评论 -
linux进程管理(4)---进程执行
本文将讲述进程如何加载并执行一个二进制文件。 进程被创建完成后,如果需要执行自己的程序,需要做两件事情:从文件系统中读取二进制文件;识别该二进制文件的格式并加载到进程内存地址空间。原创 2014-04-06 20:53:21 · 2567 阅读 · 0 评论 -
linux进程管理(2)---进程的组织结构
linux为了不同的进程管理目的,使用了不同的方法组织进程之间的关系,为了体现进程创建关系,使用了父子关系;为了区分进程和线程,使用了进程组;为了快速查找某个进程,使用了哈希表;为了进程调度,使用了运行队列、等待队列,将不同运行状态的进程放入不同的队列中。原创 2014-03-17 22:15:35 · 4442 阅读 · 1 评论 -
linux进程管理(1)---进程描述符
linux支持多进程特性,可以最大化的使用cpu资源;用户可以在同一个cpu上运行多个用户程序。多进程的原理是:时钟中断触发进程调度程序,调度程序分时运行多个进程。这就要求每个进程能够保留现场信息(cpu现场、系统资源、调度信息等)。原创 2014-03-13 22:55:19 · 7065 阅读 · 0 评论 -
linux进程管理(3)---进程创建
本文将介绍linux下创建进程的过程,不同于其他操作系统,linux创建进程的实现方式有自己的显著特点,具体的实现代码可以在kernel/fork.c中找到。 linux没有线程和进程的区别,但是父进程在创建子进程时,可以根据参数标志让子进程选择性的继承父进程的资源;如果指定子进程继承父进程的地址空间、打开的文件、文件系统、信号量等资源,那么此时的子进程就相当于父进程的“线程”。虽然linux不直接提供线程,但是通过参数标志的方式间接提供被称为“轻量级进程”的线程,显得更加灵活和简单。原创 2014-03-18 22:15:25 · 2667 阅读 · 0 评论 -
linux文件系统初始化过程(5)---加载initrd(下)
linux把文件分为常规文件、目录文件、软链接文件、硬链接文件、特殊文件(设备文件、管道文件、socket文件等)几种类型,分别对应不同的新建函数sys_open()、sys_mkdir()、sys_symlink()、sys_link()、sys_mknod()。 系统初始化阶段成功加载initrd后,调用这些接口函数创建各种文件,因此这些函数在linux文件系统初始化过程中起到了重要作用,本文将详细描述这些接口函数的实现过程。 这些接口函数主要在fs/namei.c、fs/open.c文原创 2014-02-09 17:06:09 · 4826 阅读 · 0 评论 -
linux文件系统初始化过程(4)---加载initrd(中)
上文详细介绍了CPIO格式的initrd文件,本文从源代码角度分析加载并解析initrd文件的过程。 initrd文件和linux内核一般存储在磁盘空间中,在系统启动阶段由bootload负责把磁盘上的内核和initrd加载到指定的内存空间中;然后,再由内核读取和解析initrd文件,在VFS(目前只有rootfs的根目录)中新建目录、常规文件、符号链接文件以及特殊文件;这样VFS就从根目录"/"成长为一棵枝繁叶茂的大树了。原创 2014-01-15 23:01:51 · 5354 阅读 · 0 评论 -
linux文件系统初始化过程(2)---挂载rootfs文件系统
本文主要讲述linux3.10文件系统初始化过程的第一阶段:挂载rootfs文件系统。 rootfs是基于内存的文件系统,所有操作都在内存中完成;也没有实际的存储设备,所以不需要设备驱动程序的参与。基于以上原因,linux在启动阶段使用rootfs文件系统,当磁盘驱动程序和磁盘文件系统成功加载后,linux系统会将系统根目录从rootfs切换到磁盘文件系统。原创 2014-01-05 23:02:11 · 22225 阅读 · 1 评论 -
linux文件系统初始化过程(3)---加载initrd(上)
本文主要讲述linux3.10文件系统初始化过程的第二阶段:加载initrd。 initrd是一个临时文件系统,由bootload负责加载到内存中,里面包含了基本的可执行程序和驱动程序。在linux初始化的初级阶段,它提供了一个基本的运行环境。当成功加载磁盘文件系统后,系统将切换到磁盘文件系统并卸载initrd。 如果是嵌入式设备,那么最终的文件系统就是initrd。原创 2014-01-12 12:00:25 · 4753 阅读 · 0 评论 -
linux文件系统调用(1)---mount
本文将介绍linux挂载文件系统的过程,从系统调用mount()函数开始解析,主要分为三个阶段:1、新建源文件系统;2、查找目的文件系统的挂载目录;3、将源文件系统挂载到目的文件系统的挂载目录;原创 2014-11-20 22:57:29 · 4707 阅读 · 0 评论