ARM中的linux页表与硬件页表(linux4.0)

背景: 在看内核代码初始化arm页表的时候,发现linux内核做了一些特殊处理,引入了硬件页表、linux页表的概念,这篇文章描述为何需要这样处理以及具体的实现方式。 原因: linux中ARM32采用2级页表映射方式,MMU映射过程如下: ...

2019-04-26 18:51:41

阅读数 49

评论数 0

系统启动流程

问题: 1)加电后CPU从哪里执行代码? 2)boot loader如何加载到RAM? 3)内核镜像如何加载到RAM并运行的?注意分两次加载,需要解压。 4)protect mode何时开启?分页模式何时开启? 5)0号进程、1号进程何时创建的? 一、流程 CPU加电复位后处于real mo...

2019-02-14 10:56:14

阅读数 37

评论数 0

inode的i_nlink(linux4.0.4)

一、背景 1)通过命令ln a b创建硬链接b->a后(a是一个普通文件),stat a命令看到Links值是多少? gsf@ubuntu:~$ stat a   File: 'a'   Size: 0             Blocks: 0 ...

2019-02-11 23:58:11

阅读数 64

评论数 1

fork-父子进程读写文件的偏移量(linux4.0.4)

一、背景 本文阐述的问题是:fork进程后父子进程操作文件的偏移量是否相同? 该问题可以用以下代码来展示,如您能知道代码执行后forkfile文件的内容是什么,那么请略过此文。 #include <stdio.h> #include...

2019-02-10 14:24:05

阅读数 95

评论数 0

buddy找伙伴块算法(linux 3.10.102)

背景 本文描述内核找伙伴块的算法,根据给定order及page_idx(buddy块中第一个page的index),找到伙伴块的page_idx。如果需要查阅buddy的原理知识,请参考其他资料。 算法分析 内核找伙伴块的代码如下: mm/page_alloc.c /* ...

2018-08-21 20:50:19

阅读数 343

评论数 0

rename代码阅读(linux 3.10.104)

前言 本文通过分析rename的代码,让读者对rename流程有清晰的认识。对于文中涉及的dentry、inode、ext3 disk layout、rcu锁、dcache等基础知识,请参考其他博文。 为避免用大篇篇幅介绍dentry lookup过程,我们假设路径名中各级分量的dentry存...

2018-08-07 16:34:52

阅读数 412

评论数 0

openwrt无线uci文件生成流程

openwrt无线uci文件生成流程 系统开机启动,执行/etc/init.d/boot(源码:package/base-files/etc/init.d/boot) boot() { /sbin/wifi detect > /tmp/wireless...

2018-07-10 09:30:09

阅读数 562

评论数 0

vmalloc申请线性地址空间(linux 2.4.22)

参考《ULK》 p343,vmalloc线性地址区范围为VMALLOC_START~ VMALLOC_END(ULK中定义为非连续内存区),在Physicalmemory mapping的末尾与第一个vmalloc area之间插入一个8M的隔离区,目的是为了捕获对内存的越界访问。出于同样的理由,...

2018-07-06 14:49:58

阅读数 96

评论数 0

read代码阅读一(linux3.10.14)

本文对read涉及的各个模块做个简单描述,具体的细节在后面文章中描述。

2016-10-30 11:07:51

阅读数 815

评论数 0

linux进程切换(linux3.4.5,x86)

本文描述linux x86的进程切换实现原理,叙述了寄存器、堆栈的备份与恢复操作。 Intel设计的意图是通过硬件方式切换进程,但是linux并没有使用这种方式,而是使用了软件方式,文章对这两种方式分别做了描述

2016-06-18 15:35:20

阅读数 1658

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭