发布时间:2016-09-03 23:59:33
近期深入学习linux内核,先从内存管理下手吧,考虑到老版本的内核分析文章已经较多,于是找了一个较新的LTS内核版本尝试自行分析,这里选择了linux 3.14版本,环境主要是x86。 Linux系统的内存管理是一个很复杂的“工程”,它不仅仅是物理内存管理,同时包括虚拟内存管理、内存交换和回收等,还有管理中的各.........【阅读全文】
发布时间:2016-09-03 23:57:09
至此linux首次进入保护模式所需的准备工作已经基本完成,段描述符表准备好了,而且GDTR也设置完毕了。 那么接下来看一下go_to_protected_mode()最后的调用:protected_mode_jump(boot_params.hdr.code32_start,(u32)&boot_params + (ds() ......【阅读全文】
发布时间:2016-09-03 23:54:42
接下来,我们看看linux首次进入的保护模式的内存映射方式,然后再看一下linux是如何实现保护模式的进入,进入前做了什么准备和设置。 还是借用Intel文档中的图来说明这个保护模式的保护功能:根据不同的段寄存器内容查找到对应的段描述符,描述符指明了此时的环境的可以通过段访问到内存基地址、空.........【阅读全文】
发布时间:2016-09-03 21:47:11
既然都说是分析x86环境的linux系统内存管理,如果不分析一下x86那绕来绕去的内存映射机制,个人感觉等于什么都没分析。其实x86的内存映射机制,说复杂也不复杂,说简单也不简单,简单点说x86内存映射莫过于就两个映射:段式映射和页式映射。其中页式映射是基于段式映射的基础上而形成的,那就意味着可以是:纯段式映射和.........【阅读全文】
发布时间:2016-09-03 21:18:02
机器启动到linux初始化是一个比较复杂并且细节性较强的过程,大部分的实现都是由于历史遗留问题以及各种协议约定而来的,衔接性比较强,而且比较难跟踪,毕竟不是C语言那么简单,一个函数调用一个函数,整个脉络比较清晰明了。这里主要是以linux-3.2.55版本内核为基础,将整个系统的初始化流程梳理了一下。进入正.........【阅读全文】