12 2013 档案
摘要:Linux的内存管理,实际上是借助80x86的硬件分段和分页电路,将逻辑地址转化为物理地址的。 物理内存中,有一部分是一直(Permanently)映射给内核使用的,这部分主要用于保存内核的代码,以及内核中静态的数据结构体。之所以要一直将这些物理内存映射给内核,是因为这些内容(代码,静态数据结构)是在整个操作系统运行过程中都一直需要不断地引用的,如果是通过动态分配和翻译的方式来维护它们在物理内存中...
阅读全文
摘要:1: int eax; 2: _asm_("nop":"=a"(eax)); 3: printk("Get Eax Value:\n"); 4: printk("0x%08X\n", eax); 5: printk(""); 1: int eax; 2: 3: asm("mov %%cr0, %%eax;":"=a"(eax)); 4: print...
阅读全文
摘要:过程一波三折 参考 http://blog.csdn.net/zxia1/article/details/8254113 http://stackoverflow.com/questions/3544155/about-the-pil-error-ioerror-decoder-zip-not-available 解决方法: 到http://www.lfd.uci.edu/~gohlke/pyt...
阅读全文
摘要:1: struct per_cpu_pageset __percpu *pageset;首先,分析一个函数,__free_pages,这个函数是Buddy System提供的API接口函数,用于翻译曾经分配的一组页(多少个页视order大小而定) 1: void __free_pages(struct page *page, unsigned int order) 2: { ...
阅读全文
摘要:导出符号是什么? 符号,是软件链接过程的用到的术语。 我们编写自己的软件生成目标文件,但是通常情况下,只有自己的目标文件是不够的。 比如我们用c++编写的程序,必然要与C++的运行时库链接在一起才能工作,否则我们在代码中使用的fopen或者std::cout之类的符号要到哪里去找。 在链接的过程中,相当于是让目标文件之间镶嵌到一起,因此最重要的是找到精确的接入点,这就是符号。 符号是目标文件之...
阅读全文
摘要:什么是GDI? GDI, Graphics Device Interface GDI在以下位置已经被微软列为Legacy Graphics,不建议使用来开发应用程序(http://msdn.microsoft.com/zh-CN/library/windows/desktop/hh309470(v=vs.85).aspx)。 但是这里我们需要了解的是GDI的原理,比如为什么能够用它来做出透明的效果...
阅读全文
摘要:kmalloc分配物理上连续的空间,可以不是整页大小的。 vmalloc分配逻辑上连接的空间,可以不是物理上连接的。
阅读全文
摘要:1 Pages Page的概念来源为处理器Processor的部件MMU(Memory Management Unit),MMU通过设置好的页表(通过设置CR3寄存器,指向页目录所在的物理内存)对内存进行管理,管理操作包括: a) 建立线性内存地址与物理内存地址的对应关系,即pa()和va()函数; b) 管理哪些内存页驻存(Resident)于物理内存中,而哪些内存被交换到Swap文件中; c...
阅读全文
摘要:1: template inline 2: void sort(_RanIt _First, _RanIt _Last) 3: { // order [_First, _Last), using operator inline 4: void _Sort(_RanIt _First, _RanIt _Last, _Diff _Ideal, _Pr _Pr...
阅读全文
摘要:1: template 2: ForwardIterator unique (ForwardIterator first, ForwardIterator last) 3: { 4: if (first==last) 5: return last; 6: 7: ForwardIterator result = first; 8: w...
阅读全文
摘要:1: template 2: OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, 3: InputIterator2 first2, InputIterator2 last2, 4: ...
阅读全文
摘要:LOWMEM,是相对于HIGHMEM而言,其实就是内核态直接映射的物理内存空间的大小,一般为896MB。 这里只是粗略地估计了一下,取1GB。 LOWMEM_PAGES代表了LOWMEM区域对应了多少内存页,1GB / 4KB = 256K,即需要256K个页表项来描述内核空间 1: /* Number of possible pages in the lowmem r...
阅读全文
摘要:CPU的标志寄存器 上图是Intel手册中对标志寄存器的图示,几个重要标志如下: TF (Trap Flag): 单步调试标志, 为1时, CPU每执行一条指令,都产生一个调试异常 IF (Interrupt Flag): 中断允许标志, 为0时,屏蔽“可屏蔽中断” IOPL (I/O Privilege Level): 输入输出特权级,只有当前程序的CPL数值小于或等于IOPL时,当前...
阅读全文
摘要:地址长度 在Linux下,unsigned long可以与地址的长度保持一致,即32位系统下unsigned long为32位,而64位系统下为64位长。 虚拟地址的分解 如图所示,通过XXX_SHIFT方式,移位得到范围。 1: /* PAGE_SHIFT determines the page size */ 2: #define PAGE_SHIFT 12 3: ...
阅读全文
摘要:1 编写代码pslist.c 1: #include 2: #include 3: #include 4: #include 5: #include 6: #include 7: #include 8: #include 9: #include 10: #include 11: #include 12: #include 13: 14: MODU...
阅读全文
摘要:ABI是定义二进制级别的,两个模块的接口 比如一个二进制模块想要调用另外一个二进制模块提供的功能,它需要知道怎样通过汇编语言(即机器指令)去调用,以及怎样传递相应的参数和返回值(通过寄存器还是栈内存,以及参数压栈的顺序等细节)。 API是源代码级别的两个模块的接口 是提供到语言层次的函数调用,已经是和具体语言相关的。
阅读全文
摘要:VMM重要的组件 TRPM (Trap Manager) PGM (Page Manager) REM (Recompiled Execution Manager) EM (Execution Manager) HWACCM (Hardware Acceleration Manager) SSM (Saved State Manager) 接口 Main是VMM对外的接口,所以Client进程都...
阅读全文
摘要:A set of extra instructions is added that can be used by a process in VMX rootmode. These instructions do things like allocating a memory page on which tostore a full copy of the CPU state, start, an...
阅读全文
摘要:三个特权级 IA-32体系提供了4个特权级别,正常情况下只用了2个, 操作系统运行在Ring 0,而应用程序运行在Ring 3。 Xen让自己运行在Ring 0, 而操作系统运行在Ring 1, 应用程序运行在Ring 3,这样操作系统变成没有那么Powerful了,不能执行特权指令了。 改变的方法,就是对操作系统代码进行Patch,将原来需要运行在特权级别的指令,换成相应的Hypercall,...
阅读全文
摘要:ISA(Instruction Set Architecture) 指令集体系结构,是硬件与软件层之间的接口。 本地系统虚拟机 本地系统虚拟机,就是Bare-Metal虚拟机,直接运行在硬件上,在它上面可以同时安装多个操作系统。 虚拟机的基本要求 运行在VMM上的OS,不能影响到其他的OS,即不能修改资源配置(Resource Configuration)。 敏感指令 Control Se...
阅读全文
摘要:1 影子页表 在Guest OS中本身就有页表的概念,用于将其中每个进程的虚拟地址(VA)转换成实际地址(RA),因为Guest OS本身不是运行在物理机器上,中间还有一层VMM,所以实际地址并不等于物理地址(PA)。 物理内存是由VMM进行管理的,它会把物理内存中的某一页分配给某个Guest中的某个进程使用,因此VMM维护一组影子页表,这组表格保存的是某个进程中VA到PA的转换关系。 2 缺...
阅读全文
摘要:IA-32 (x86)[edit] Main article: X86 virtualization The IA-32 instruction set of the Pentium processor contains 17 sensitive, unprivileged instructions.[11] They can be categorized in two groups: Sen...
阅读全文
摘要:1. Graphviz 通过dot语言来生成各种关系图, 教程参考:http://graphviz.org/Documentation.php 2. LaTex 用来排版文档,生成PDF文件。 3. pyExcelerator 通过Python脚本,生成xls文件。http://sourceforge.net/projects/pyexcelerator/ 4. iText 通过Java或者...
阅读全文

浙公网安备 33010602011771号