随笔分类 -  linux 内核源码分析

摘要:2017-05-20 聚会回来一如既往的看了会羽毛球比赛,然后想到前几天和朋友讨论的逆向映射的问题,还是简要总结下,免得以后再忘记了!可是当我添加时间……这就有点尴尬了……520还在写技术博客…… 闲话不多说,之前一个问题是想要根据物理页框号得到映射的虚拟地址,一时间不知道如何下手了,在群里和一个朋 阅读全文
posted @ 2017-05-20 20:20 jack.chen 阅读(2044) 评论(1) 推荐(0)
摘要:2017-05-10 今天重点对linux网络数据包的处理做下分析,但是并不关系到上层协议,仅仅到链路层。 之前转载过一篇文章,对NAPI做了比较详尽的分析,本文结合Linux内核源代码,对当前网络数据包的处理进行梳理。根据NAPI的处理特性,对设备提出一定的要求 1、设备需要有足够的缓冲区,保存多 阅读全文
posted @ 2017-05-10 21:30 jack.chen 阅读(6660) 评论(0) 推荐(0)
摘要:2017-04-25 我们都知道,现代操作系统使用分页机制和虚拟内存,同时为了提高物理页面的利用率,采用了请求调页的机制,即物理内存的分配只有在真正需要的时候才会进行,比如发生了真正的读写操作,而普通内存的alloc,并不会和物理内存有什么关系。启动一个程序时,装载器把进程可执行文件映射到进程的虚拟 阅读全文
posted @ 2017-05-10 14:31 jack.chen 阅读(3267) 评论(0) 推荐(0)
摘要:2017-04-26 KSM是内核中的一种内存共享机制,在2.6.36版本的内核中开始引入,简单来说就是其会 合并某些相同的页面以减少页面冗余。在内核中有一个KSM守护进程 ksmd,它定期扫描用户向它注册的内存区,寻找相同的页面,从而用一个添加写保护的页面来代替, 当有进程尝试写入的时候,会自动分 阅读全文
posted @ 2017-05-10 11:02 jack.chen 阅读(7852) 评论(0) 推荐(0)
摘要:2016-09-27 前篇文章通过分析源代码,大致描述了各个数据结构之间的关系是如何建立的,那么今天就从数据包的角度,分析下数据包是如何在这些数据结构中间流转的! 这部分内容需要结合前面两篇文章来看,我们还是按照从Tap设备->Hub->NIC的流程。 首先看Tap设备,在Tap.c文件中: 先看下 阅读全文
posted @ 2017-05-09 12:45 jack.chen 阅读(2443) 评论(0) 推荐(0)
摘要:今天看了下tasklet,重点分析了其和软中断的关系,特此记录 关于软中断,在之前的中断文章中已经有所介绍,这里就不多说了,只是说明下,系统中默认支持32种软中断,而实际上系统定义的软中断仅有以下几种。 实际上并没有什么关系,只有中枢的内核代码才使用软中断,而如果用户想要使用这种方式,直接使用软中断 阅读全文
posted @ 2017-05-06 20:27 jack.chen 阅读(2131) 评论(0) 推荐(0)
摘要:2017-04-25 本节就聊聊页缓存这个东西…… 一、概述 页缓存是一个相对独立的概念,其根本目的是为了加速对后端设备的IO效率,比如文件的读写。页缓存顾名思义是以页为单位的,目前我能想到的在两个地方页缓存的作用比较明显。1、在文件的读写中。2、在普通进程的匿名映射区操作中。在文件的读写中,进程对 阅读全文
posted @ 2017-04-25 20:40 jack.chen 阅读(5944) 评论(0) 推荐(0)
摘要:2017-04-20 上篇文章对qemu部分的内存虚拟化做了介绍,上篇文章对于要添加的FR,调用了 MEMORY_LISTENER_UPDATE_REGION(frnew, as, Forward, region_add) 该宏实际上是另一个宏MEMORY_LISTENER_CALL的封装,在MEM 阅读全文
posted @ 2017-04-23 20:23 jack.chen 阅读(2911) 评论(0) 推荐(0)
摘要:背景分析: 在之前分析EPT violation的时候,没有太注意qemu进程页表和EPT的关系,从虚拟机运行过程分析,虚拟机访存使用自身页表和EPT完成地址转换,没有用到qemu进程页表,所以也就想当然的认为虚拟机使用的物理页面在qemu进程的页表中没有体现。但是最近才发现,自己的想法是错误的。L 阅读全文
posted @ 2017-04-23 20:16 jack.chen 阅读(2922) 评论(0) 推荐(0)
摘要:2017-04-12 前篇文章对Linux进程地址空间的布局以及各个部分的功能做了简要介绍,本文主要对各个部分的具体使用做下简要分析,主要涉及三个方面:1、MMAP文件的映射过程 2、用户 内存的动态分配 Text:进程代码 Data:全局和静态数据区,但是已初始化 BSS:全局和静态数据区,但是未 阅读全文
posted @ 2017-04-20 12:29 jack.chen 阅读(2028) 评论(0) 推荐(0)
摘要:2017-04-07 脱离物理内存的管理,今天咱们来聊聊进程虚拟内存的管理。因为进程直接分配和使用的都是虚拟内存,而物理内存则是有系统“按需”分配给进程,在进程看来,只知道虚拟内存的存在! 前言: 关于虚拟内存和物理内存这些东东,本篇不作介绍,此等基础知识参考最普通的操作系统参考书籍即可。当然有问题 阅读全文
posted @ 2017-04-10 16:06 jack.chen 阅读(3731) 评论(2) 推荐(0)
摘要:2017-03-13 上文针对VFS的基本信息做了介绍,并简单介绍了VFS涉及的几个数据机构,本节结合LInux源码,对各个结构之间的关系进行分析。 一、总体架构图 总体架构图如上图所示,结合进程访问文件的实际情况,根据上图进行细节化的描述。进程通过其结构中的files_struct结构和文件建立联 阅读全文
posted @ 2017-04-07 15:57 jack.chen 阅读(704) 评论(0) 推荐(0)
摘要:2017-03-08 10:37:55 一、虚拟文件系统VFS 文件系统用于将位于磁盘上的文件按照某种方式组织进内存,并给上层应用程序提供统一的访问接口。Linux支持多种文件系统EXT2/3,NTFS,XFS等,而LInux下支持这些文件系统的方式就是VFS,即虚拟文件系统。虚拟文件系统向上层提供 阅读全文
posted @ 2017-04-07 15:55 jack.chen 阅读(552) 评论(0) 推荐(0)
摘要:2017-04-07 管道通信在linux中使用较为频繁的进程通信机制。基于unix一切皆文件的传统,管道也是一种文件。所以可以使用一般的VFS接口对管道进行读写操作,如read、write。具体管道分为有名管道和无名管道。无名管道的使用场景较为局限,仅仅限制在有亲缘关系的进程之间通信,多由于父子进 阅读全文
posted @ 2017-04-07 15:51 jack.chen 阅读(582) 评论(0) 推荐(0)
摘要:这里涉及到的几个概念:DPL、RPL、CPL DPL:存在于段描述符中,描述访问此段的最低特权级,即访问此段的进程CPL和RPL必须大于等于此段的DPL RPL:存在于段选择符中的最低两位,成为请求特权级即进程的请求权限,这个可以由程序员自己设置但是其功能受到CPL的制约 CPL:存在于cs和ss寄 阅读全文
posted @ 2017-04-07 14:06 jack.chen 阅读(493) 评论(0) 推荐(0)
摘要:2017-04-06 之前在看LinuxThreads线程模型的时候,看到该模型是通过信号实现线程间的同步,当时没有多想,直接当做信号量了,现在想起来真是汗颜……后来想想并不是那么回事,于是,就有了今天这篇博文! 其实关于信号的文章,网上有很多,写的也很好,而笔者仅仅是想把自己的想法记录下来,一来帮 阅读全文
posted @ 2017-04-07 10:43 jack.chen 阅读(2772) 评论(0) 推荐(0)
摘要:2017-04-05 16:14:22 今天脑子中突然想起进程的挂起和阻塞有什么区别,自己头脑风暴了下,还真不好解释,结合进程的睡眠,于是就有了今天这篇文章,以下内容均是个人参考资料后得到的自己的理解,如有错误,还请指正! 要说挂起、阻塞、睡眠难免让人想到进程生命周期中的阻塞态或者等待状态,而挂起和 阅读全文
posted @ 2017-04-05 17:20 jack.chen 阅读(24093) 评论(3) 推荐(10)
摘要:在编译2.6内核的时候,你会在编译选项中看到[*] Enable futex support这一项,上网查,有的资料会告诉你"不选这个内核不一定能正确的运行使用glibc的程序",那futex是什么?和glibc又有什么关系呢?1. 什么是FutexFutex 是Fast Userspace muT 阅读全文
posted @ 2017-04-04 20:20 jack.chen 阅读(3092) 评论(0) 推荐(0)
摘要:2017-03-10 回想下最初的计算机设计,在单个CPU的情况下,同一时刻只能由一个线程(在LInux下为进程)占用CPU,且2.6之前的Linux内核并不支持内核抢占,当进程在系统地址运行时,能打断当前操作的只有中断,而中断处理完成后发现之前的状态是在内核,就不触发地调度,只有在返回用户空间时, 阅读全文
posted @ 2017-04-04 20:07 jack.chen 阅读(707) 评论(0) 推荐(0)
摘要:2017-04-03 最近深入研究了下Linux线程的问题,发现自己之前一直有些许误解,特记之…… 关于Linux下的线程,各种介绍Linux的书籍都没有深入去解释的,或许真的如书上所述,Linux本质上不存在线程的概念!在某种程度上的确是这样,但是难道LInux就只有一种进程的东西么??答案肯定是 阅读全文
posted @ 2017-04-04 16:40 jack.chen 阅读(5829) 评论(1) 推荐(0)

以马内利