华的专栏

讨论与进步

请求调页和写时复制

在刚开始看的时候感觉缺页异常(这可是异常啊,搞Java的人表示对着个比较敏感)肯定是一些进程在搞鬼,看完才发现原来是内核在搞鬼,它是故意的!!! 1、请求调页     请求调页是一种动态分配内存的策略,把页面的分配推迟到不能再迟的时候(不能再迟的时候就是进程要访问的时候)。为什么要这样呢?...

2016-05-17 09:51:57

阅读数:1243

评论数:0

linux缺页异常处理--用户空间

用户空间的缺页异常可以分为两种情况-- 1.触发异常的线性地址处于用户空间的vma中,但还未分配物理页,如果访问权限OK的话内核就给进程分配相应的物理页了 2.触发异常的线性地址不处于用户空间的vma中,这种情况得判断是不是因为用户进程的栈空间消耗完而触发的缺页异常,如果是的话则在用户...

2016-05-15 20:05:12

阅读数:584

评论数:0

linux缺页异常处理--内核空间

缺页异常被触发通常有两种情况—— 1.程序设计的不当导致访问了非法的地址 2.访问的地址是合法的,但是该地址还未分配物理页框 下面解释一下第二种情况,这是虚拟内存管理的一个特性。尽管每个进程独立拥有3GB的可访问地址空间,但是这些资源都是内核开出的空头支票,也就是说进程手握着和自...

2016-05-15 20:04:01

阅读数:352

评论数:0

用户空间缺页异常pte_handle_fault()分析--(下)--写时复制

在pte_handle_fault()中,如果触发异常的页存在于主存中,那么该异常往往是由写了一个只读页触发的,此时需要进行COW(写时复制操作)。如当一个父进程通过fork()创建了一个子进程时,子进程将会共享父进程的页框。之后,无论是父进程还是子进程要对相应的内存进行写操作,都要进行COW,也...

2016-05-15 20:02:39

阅读数:688

评论数:0

用户空间缺页异常pte_handle_fault()分析--(上)

前面简单的分析了内核处理用户空间缺页异常的流程,进入到了handle_mm_fault()函数,该函数为触发缺页异常的地址address分配各级的页目录,也就是说现在已经拥有了一个和address配对的pte了,但是这个pte如何去映射物理页框,内核又得根据pte的状态进行分类和判断,而这个过程又...

2016-05-15 20:01:26

阅读数:608

评论数:0

fork,你拿什么证明你的写时拷贝(COW)

前段时间在学习内核的进程管理方面的东西,看了进程创建和进程调度的代码,想写个大而全的东西,即有内核代码分析,又有一些实验在效果上证明内核的代码。 但是这篇文章很难产,感觉自己还是驾驭不了这个宏大的主题。 好久没写文章了,今天就放弃这个想法,写一个简单的东西。       我们都知道fo...

2016-05-15 19:52:41

阅读数:702

评论数:0

linux页表创建与更新

简单来说,讨论linux页表就是讨论linux进程的的页表:linux页表的创建与更新都包含于进程的创建与更新中。当前的linux内核采用的是写时复制方法,在创建一个linux进程时,完全复制父进程的页表,并且将父子进程的页表均置为写保护(即写地址的时候会产生缺页异常等)。那么父子进程谁向地址空间...

2016-05-15 12:02:41

阅读数:402

评论数:0

linux 用户空间与内核空间——高端内存详解

摘要:Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。用户空间的内存映射采用段页式,而内核空间有自己的规则;本文旨在探讨内核空间...

2016-05-14 09:16:29

阅读数:264

评论数:0

Linux进程地址管理之mm_struct

Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起。(所依据的代码是2.6.32.60) 无论是内核线程还是用户进程,对于内核来说,无非都是 task_struct这个数据结构的一个实例而已,task_struct被称为进程描述符(process desc...

2016-05-14 08:29:31

阅读数:432

评论数:0

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