写时复制

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