存档

‘内核技术’ 分类的存档

利用UML调试内核

2012年4月21日 没有评论 5,262 次浏览

利用UML调试内核的方便之处在于我们可以直接使用gdb(前面推荐过cgdb)来进行,但不方便之处在于只能调试与硬件不相干的内核代码。前面有文章描述过UML内核的编译,如果要调试UML内核,我们得选上如下两项,否则调试时将提示找不到符号: Kernel... [阅读更多]

kvm初体验

2012年4月13日 没有评论 9,187 次浏览

硬件环境如下:一台host主机,上面安装的是CentOS 5.4,ip地址为200.200.77.163,内核已被我升级为支持kvm的2.6.30: # cat /etc/issue CentOS release 5.4 (Final) Kernel \r on an \m # uname -a Linux... [阅读更多]

Triple Fault的捕获与处理

2012年4月11日 没有评论 6,079 次浏览

前面有文章说Triple Fault无法捕获,经过几天资料搜寻,对于这个问题还是有办法的。如果可以,对于捕获Triple Fault,最简便的方法就是使用虚拟机来进行操作,这样在发生Triple... [阅读更多]

Double Fault & Triple Fault

2012年4月7日 没有评论 11,064 次浏览

之前我曾提到过intel x86... [阅读更多]

UML/User-mode Linux

2012年4月6日 没有评论 6,230 次浏览

之前提到过KML,这里描述一下UML,但关于UML的编译和使用不想做过多的介绍,因为官网等都有很多这方面的资料,不过我乐意提供另外一些汇总信息,也是我在编译使用UML过程中遇到的问题,当然限于环境关系,这些问题在另外的环境里不一定就出现,另外的环境里出现的问题我这里可能没有遇到。 一,不错的相关站点:http://user-mode-linux.sourceforge.net/、http://uml.devloop.org.uk/index.html 二,文件系统:http://fs.devloop.org.uk/ 三,邮件列表:http://dir.gmane.org/gmane.linux.uml.devel、http://dir.gmane.org/gmane.linux.uml.user 四,UML项目并没有废弃,一直在更新维护,这从邮件列表的活动情况可以看出来,Linux... [阅读更多]

应用程序与物理内存之间的关系

2012年4月3日 没有评论 7,749 次浏览

应用程序与物理内存本没有直接关系,因为应用程序看到的都是虚拟内存,至于这块虚拟内存到底映射哪块物理内存,应用程序并不关心,也没有能力关心。不过既然文章标题叫做“应用程序与物理内存之间的关系”就说明应用程序与物理内存之间虽然没有直接关系,但有间接关系;我们知道应用程序能够在运行时主动申请、释放的内存主要有Heap(malloc/free/…)、Mapping(mmap/munmap/…),这里就以Heap为例(因为前面曾详细分析过应用程序里的堆内存管理),看它们之间有如何微妙的间接关系。 当应用程序malloc一块内存时,如果应用程序自己管理的堆内存还有缓冲(这个不难理解,对于应用程序的内存申请,内核都比较大方,即使应用程序只申请4字节的内存,内核也会给它4KB,假设内存页大小为4KB),那么就直接使用了,无需再向内核讨要;否则的话,只有调用sbrk()或mmap()向内核讨要新的内存了,dlmalloc解析连载完整word文档里已经描述过,应用程序优先调用sbrk()以扩展当前Heap的连续空间,如果无法扩展(比如此时,前面待延伸的内存地址空间恰好被某个文件映射占用了),那就只有mmap()申请另外的一段地址空间。 以sbrk()为例,syscall到内核里对应的是do_brk()函数,带有两个参数,第一个为内存地址addr,第二个为增减的长度len,可正(比如:malloc)可负(比如:free),这个函数所做的工作只有一个,那就是根据进程请求情况进行判断并调整进程的vma(或增大或减小或拆分或合并等)并返回给进程对应的地址空间,当然这是成功的情况,如果vma判断调整失败,那就直接返回ENOMEM或其它错误码。 既然应用程序进行内存申请时没和物理内存扯上关系,那么当应用程序实际进行内存访问时,总该和物理内存扯上关系了吧?的确也是如此。当应用程序访问(读写)一个并没有对应物理地址的逻辑地址时,CPU就会产生一个中断号为14的中断,该中断将被内核捕获。查看源码的话,在这里: /*... [阅读更多]

Linux X86-64 进程内存空间布局(续)

2012年4月3日 没有评论 7,138 次浏览

在很久很久以前,我曾详细的分析过应用程序里的内存管理,也就是应用程序里的内存分配与释放过程,具体可以参考:dlmalloc解析连载完整word文档,这是站在应用程序角度来看的内存管理视图,更具体点说只是应用程序对自己所用到的堆空间内存的管理视图。 在不久之前,我又提到过Linux... [阅读更多]

Linux下hugetlbpage使用详解

2012年3月3日 没有评论 11,060 次浏览

就Linux应用程序而言,使用的都是虚拟地址,当应用程序读写一个指定的虚拟地址时,内存管理单元会自动进行虚拟地址到物理地址的转换。一个虚拟地址可以映射到多个物理地址,但当前映射到哪一个物理地址取决于当前的页表(Page... [阅读更多]

利用pktgen发包工具做性能测试(续)

2012年3月3日 4 条评论 10,236 次浏览

最近在真实机器上测试了一下pktgen发包工具的性能,使用的pktgen来之:http://tslab.ssvl.kth.se/pktgen/,在Linux... [阅读更多]

利用error指令判断宏是否已定义

2012年2月24日 没有评论 5,759 次浏览

Linux下特别的东西特别的多,比如说宏定义,看Linux内核代码,无数个宏开关,当然,这并不是Linux的过错,要知道Linux内核特性的开启与否都要靠这些宏定义。 在判断一个宏定义是否开启时,各人有各人的办法,最简单的当然是直接看代码,但这不一定准确,因为有可能此处define的宏在别处又undef了,在代码实际用到这个宏的地方,这个宏到底是否还存在呢?所以,最保险的方法就是在实际用到这个宏的地方做判断,此时可利用error指令,在编译时就可以准确判断出结果,直接看示例: #... [阅读更多]