进程地址空间图示

2016-4-25 chenhui 进程管理

自绘图,配合进程地址空间观看。

阅读全文>>

评论(0) 浏览(265)

进程管理图示

2016-4-25 chenhui 进程管理

自绘图,配合 进程调度 观看。

阅读全文>>

评论(0) 浏览(285)

SLAB 分配器图示

2016-4-24 chenhui 内存管理

自绘图,请搭配 SLAB分配器 观看

阅读全文>>

评论(0) 浏览(273)

伙伴系统图示

2016-4-24 chenhui 内存管理

自绘图,请搭配 伙伴系统 观看 在观看本图前,需理解 内存管理图示

阅读全文>>

评论(0) 浏览(242)

设备模型图示

2016-4-24 chenhui 设备驱动

阅读全文>>

评论(0) 浏览(274)

内存管理图示

2016-4-24 chenhui 内存管理

自绘图,请搭配 节点、内存管理区及页框 观看

阅读全文>>

评论(0) 浏览(239)

文件的打开、共享与复制

2016-4-22 chenhui 文件系统

在我们创建一个进程时,系统会根据创建时的参数来决定共享或复制一些文件给新进程。 进程的创建可参考:进程的创建 在了解文件的共享和复制之前,需要先了解进程是怎么打开文件的,而了解进程是怎么打开文件的之前,需要了解进程是怎么管理打开的文件的。 进程描述符(task_struct)中,有一个类型为 files_struct 的&nbs...

阅读全文>>

评论(0) 浏览(333)

用户栈和内核栈

2016-4-22 chenhui 其他

current 是一个宏,这是一个很神奇的宏,无论你现在在什么时候,只要调用这个宏,就能得到当前进程的进程描述符。 关于 current 的一些知识,可阅读:Linux 的启动过程详解(汇编部分) 这篇文章对 current 的获取进程描述符的原理进行了大概的讲解,但只有这些是不够的,但如果把所以的东西都写在那里,又觉得啰嗦,所以我们需要通过本文来写完剩余的部分。 ...

阅读全文>>

评论(0) 浏览(236)

super_block、file、dentry、inode 详解

2016-4-21 chenhui 文件系统

 Linux 的虚拟文件系统中,super_block、file、dentry、inode 这四个结构体是非常重要的,要了解 VFS,就必须了解他们。 本文详细讲解这四个结构体的作用和来源。 dentry 称为目录项描述符,每一个文件都会有这么一个目录项描述符,但是一个文件只会有一个目录项描述符。他的作用是,VFS 通过 dentry 来形成树形的文件系统目录结构...

阅读全文>>

评论(0) 浏览(265)

块设备的读写

2016-3-12 chenhui 设备驱动

阅读本文前,请先阅读:文件读写和页缓存 。这篇文章详细解释了文件读写的缓存,而在这篇文章的结尾,也因为涉及到块设备的读写并没有继续写下去,本文也算是对这篇文章的续写吧! 因是续写,所以先要续缓存页的回写步骤: 遍历 address_space 中的每一个脏页 把所有相邻的脏页加入一个 bio 对象, 提交 bio...

阅读全文>>

评论(0) 浏览(266)

BusyBox init 分析

2016-1-25 chenhui 移植

分析完这个程序,就对 init 程序有了初步的了解。 首先得谈谈 /etc/inittab 这个配置文件。 inittab 由一行又一行格式为 <id>:<runlevels>:<action>:<process> 的配置组成,下面是他们的作用: id:配置行的标识 ...

阅读全文>>

评论(0) 浏览(232)

根文件系统和 Busybox

2016-1-15 chenhui 移植

系统启动到最后时,会挂载根文件系统到系统中,该文件系统的根目录成为 init 内核线程的工作目录和根目录,然后内核会从该文件系统中读出 init 可执行文件,并让 init 内核线程去执行他,执行成功后,init 内核线程转身一变,变成了正宗的一号进程。 在这个流程中,我们要考虑两个大的问题: 我们知道根文件系统的挂载原理,但是根文件系统本身是怎么做出来的? ...

阅读全文>>

评论(0) 浏览(257)

Linux 内核移植之流程

2016-1-14 chenhui 移植

当我们为某一块单板移植 Linux 内核时,最先需要考虑的是 Linux 是否已包含了单板上使用的处理器的驱动,也就是 BSP。 如果没有包含,那也可以看一下相近的处理器,当然这必须是有继承关系的处理器,因为这样的话我们可以直接修改这个处理器的 BSP 来实现移植。 如果存在,那就好办了,我们直接使用这个处理器的配置进行编译然后烧写到单板里运行,一般是 machine_de...

阅读全文>>

评论(0) 浏览(172)

Linux 内核移植之 BSP

2016-1-13 chenhui 移植

本文通过 S3C2440 的 BSP 的部分实现来介绍 Linux 内核移植的 BSP 部分,S3C2440 是 ARM 初学者大多会经历的一个芯片,所以通过他来学习是比较好的 。 U-Boot 在启动内核时,会传入几个参数,其中一个是存放在 R1 寄存器的 " 机器代码 ",这个机器代码非常重要,他告诉内核当前主板应该使用哪个 BSP。Linux 启动后(汇编),会在...

阅读全文>>

评论(1) 浏览(877)

SLAB分配器

2016-1-12 chenhui 内存管理

Linux 根据内存的访问速度把不同的内存按照节点进行分类,而一个节点的内存又通过内存管理区分成 DMA 内存和 NORMAL 内存,每个内存管理区又通过伙伴系统把自己的内存分为各种大小的内存块,伙伴系统的这些内存块大小不一,由一个或多个页框组成。一个页框的大小是 4K,这个大小是不可改变的,这就会导致一个问题,那就是如果我需要分配 10 个字节的内存,难道你也要给我一个页框(4K)吗?这很显然是...

阅读全文>>

评论(0) 浏览(202)

写时复制

2015-12-25 chenhui 程序的运行原理

所谓写时复制技术,即创建子进程时(非创建线程),共享父进程的页框(一个页框就是 4K 物理内存)。 为什么要这么干?这是因为,创建子进程后,其执行的程序和父进程是一样的,只是分支不同而已,所以我们根本不需要重新申请物理内存给新进程,而是让他直接使用父进程已经加载好的程序即可。这会产生一个问题,那就是子进程和父进程是各自独立的,他们不是进程和线程的关系,子进程对某些...

阅读全文>>

评论(0) 浏览(288)

程序的加载和运行

2015-12-25 chenhui 程序的运行原理

在阅读本文前,请先阅读:进程的创建 了解 fork() 的实现原理。 Linux 支持多种可执行文件格式,但通常使用的是 ELF 格式的可执行文件,关于这个格式,可自行往上搜索相关资料进行了解。 先概括一下总流程吧: 读入命令行参数和环境变量参数,以及他们的个数。 为用户栈提前分配好32个页框,并读入命令行参数和环境参数 ...

阅读全文>>

评论(0) 浏览(409)

页表的页描述符

2015-12-24 chenhui 程序的运行原理

之前说明了页表的段描述符的转换原理,段描述符有非常多的不足之处,比如说他以1M为单位来进行映射,这仅仅只能满足最基本的映射要求,而像linux之类的嵌入式操作系统,则一般使用二级页表来实现4K大小的映射。 二级页表分为粗粒度二级页表和细粒度二级页表,本文主要讲解的是粗粒度二级页表,他可以实现以 4K 字节为单位的映射(Linux 里一个页刚好就是 4K),且可以通过操作子页的方式来实现对1...

阅读全文>>

评论(0) 浏览(254)

页表的段描述符

2015-12-24 chenhui 程序的运行原理

前文提到,页表是用来提供 MMU 的地址转换规则的页表项的集合,对于 Linux 来说,他使用了二级页表来管理内存的映射。 所谓的二级页表,就是有两层页表,第一层是称为段描述符的页表项,第二层是称为页描述符的页表项。本文介绍第一种也就是段描述符。 段描述符,他以段为单位映射虚拟内存和物理内存,一个段的段大小为 1M,这个段大小又是怎么回事?这个地方我们得先...

阅读全文>>

评论(0) 浏览(257)

多进程的原理之页表

2015-12-24 chenhui 程序的运行原理

现代操作系统都支持多进程,所谓的多进程,就是系统能够同时运行多个进程。乍一看,好像同时运行多个进程是个很正常的事情,不就是每一个程序都执行一段时间吗?有什么好说的?但只要仔细一想,就会觉得有点匪夷所思。我们知道,程序里面的各自符号的地址在编译时就已经决定了,那么,如果我们同时运行两个程序,他们的地址发生了重叠怎么办?那岂不是后面的进程要覆盖掉之前的进程?这样还怎么实现多进程? ...

阅读全文>>

评论(0) 浏览(252)

Copyright ©2015-2016 freehui All rights reserved