摘要: Linux对内核态内存分配请求与用户态内存分配请求处理上分别对待Linux本身信任自己,因此Linux内核请求分配多少内存,就会马上分配相同数量的内存出来。但内核本身不相信应用程序,而且通常应用程序分配了一段内存,其实只是预定,并不是马上就去访问。由于应用程序的数目比较多,那么这部分只分配了但是没有... 阅读全文
posted @ 2014-01-02 16:55 Daniel King 阅读(2709) 评论(0) 推荐(0) 编辑
摘要: 缓存为什么会有冷热? 究其原因,是因为对于内存的访问,可能是CPU发起的,也可以是DMA设备发起的。 如果是CPU发起的,在CPU的硬件缓存中,就会保存相应的页内容。如果这个页本来没有存在于硬件缓存中,那么它的到来,势必会将原本为其他的页缓存的内容挤出硬件缓存。 但是,如果对于内存的访问是由DMA设备发起的,那么该页不会被CPU访问,就不需要在CPU的硬件缓存中进行缓存,也不会对已经缓存在硬件缓存... 阅读全文
posted @ 2014-01-02 16:35 Daniel King 阅读(1212) 评论(0) 推荐(0) 编辑
摘要: TLS(Thread Local Storage) 线程局部存储。 在Linux操作系统中,TLS保存成GDT中描述的一个段。 1: /* 2: * This creates a new process as a copy of the old one, 3: * but does not actually start it yet. 4: * 5: * It ... 阅读全文
posted @ 2014-01-02 15:11 Daniel King 阅读(4697) 评论(0) 推荐(0) 编辑
摘要: 参见文章:http://blog.chinaunix.net/uid-22695386-id-272098.html linux2.4之前的内核有进程最大数的限制,受限制的原因是,每一个进程都有自已的TSS和LDT,而TSS(任务描述符)和LDT(私有描述符)必须放在GDT中,GDT最大只能存放8192个描述符,除掉系统用掉的12描述符之外,最大进程数=(8192-12)/2, 总共4090个进... 阅读全文
posted @ 2014-01-02 14:33 Daniel King 阅读(4149) 评论(0) 推荐(0) 编辑
摘要: DPL: Descriptor Privilege Level 1) GDT/LDT表中的描述符 GDT/LDT表中的描述符,描述的是一段内存。 其中的DPL代表着GDT/LDT中的描述符描述的内存段的特权级别。 比如,当前正在执行的代码,它的特权级别就是当前的CS段选择子指向的段描述符中的DPL所决定的。 即DPL是描述一段内存的特权级别。 2) IDT表中的描述符 IDT表中的描述符,描述... 阅读全文
posted @ 2014-01-02 11:27 Daniel King 阅读(1956) 评论(0) 推荐(0) 编辑
摘要: Linux的内存管理,实际上是借助80x86的硬件分段和分页电路,将逻辑地址转化为物理地址的。 物理内存中,有一部分是一直(Permanently)映射给内核使用的,这部分主要用于保存内核的代码,以及内核中静态的数据结构体。之所以要一直将这些物理内存映射给内核,是因为这些内容(代码,静态数据结构)是在整个操作系统运行过程中都一直需要不断地引用的,如果是通过动态分配和翻译的方式来维护它们在物理内存中... 阅读全文
posted @ 2013-12-30 11:29 Daniel King 阅读(1001) 评论(0) 推荐(0) 编辑
摘要: 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... 阅读全文
posted @ 2013-12-27 17:58 Daniel King 阅读(600) 评论(0) 推荐(0) 编辑
摘要: 过程一波三折 参考 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... 阅读全文
posted @ 2013-12-27 13:54 Daniel King 阅读(985) 评论(0) 推荐(0) 编辑
摘要: 1: struct per_cpu_pageset __percpu *pageset;首先,分析一个函数,__free_pages,这个函数是Buddy System提供的API接口函数,用于翻译曾经分配的一组页(多少个页视order大小而定) 1: void __free_pages(struct page *page, unsigned int order) 2: { ... 阅读全文
posted @ 2013-12-26 17:58 Daniel King 阅读(833) 评论(0) 推荐(0) 编辑
摘要: 导出符号是什么? 符号,是软件链接过程的用到的术语。 我们编写自己的软件生成目标文件,但是通常情况下,只有自己的目标文件是不够的。 比如我们用c++编写的程序,必然要与C++的运行时库链接在一起才能工作,否则我们在代码中使用的fopen或者std::cout之类的符号要到哪里去找。 在链接的过程中,相当于是让目标文件之间镶嵌到一起,因此最重要的是找到精确的接入点,这就是符号。 符号是目标文件之... 阅读全文
posted @ 2013-12-26 15:33 Daniel King 阅读(2136) 评论(0) 推荐(0) 编辑
摘要: 什么是GDI? GDI, Graphics Device Interface GDI在以下位置已经被微软列为Legacy Graphics,不建议使用来开发应用程序(http://msdn.microsoft.com/zh-CN/library/windows/desktop/hh309470(v=vs.85).aspx)。 但是这里我们需要了解的是GDI的原理,比如为什么能够用它来做出透明的效果... 阅读全文
posted @ 2013-12-26 14:29 Daniel King 阅读(482) 评论(0) 推荐(0) 编辑
摘要: kmalloc分配物理上连续的空间,可以不是整页大小的。 vmalloc分配逻辑上连接的空间,可以不是物理上连接的。 阅读全文
posted @ 2013-12-24 17:26 Daniel King 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 1 Pages Page的概念来源为处理器Processor的部件MMU(Memory Management Unit),MMU通过设置好的页表(通过设置CR3寄存器,指向页目录所在的物理内存)对内存进行管理,管理操作包括: a) 建立线性内存地址与物理内存地址的对应关系,即pa()和va()函数; b) 管理哪些内存页驻存(Resident)于物理内存中,而哪些内存被交换到Swap文件中; c... 阅读全文
posted @ 2013-12-24 15:46 Daniel King 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 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... 阅读全文
posted @ 2013-12-23 17:06 Daniel King 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 1: template 2: ForwardIterator unique (ForwardIterator first, ForwardIterator last) 3: { 4: if (first==last) 5: return last; 6: 7: ForwardIterator result = first; 8: w... 阅读全文
posted @ 2013-12-23 15:27 Daniel King 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 1: template 2: OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, 3: InputIterator2 first2, InputIterator2 last2, 4: ... 阅读全文
posted @ 2013-12-23 15:22 Daniel King 阅读(543) 评论(0) 推荐(0) 编辑
摘要: LOWMEM,是相对于HIGHMEM而言,其实就是内核态直接映射的物理内存空间的大小,一般为896MB。 这里只是粗略地估计了一下,取1GB。 LOWMEM_PAGES代表了LOWMEM区域对应了多少内存页,1GB / 4KB = 256K,即需要256K个页表项来描述内核空间 1: /* Number of possible pages in the lowmem r... 阅读全文
posted @ 2013-12-21 11:21 Daniel King 阅读(991) 评论(0) 推荐(0) 编辑
摘要: CPU的标志寄存器 上图是Intel手册中对标志寄存器的图示,几个重要标志如下: TF (Trap Flag): 单步调试标志, 为1时, CPU每执行一条指令,都产生一个调试异常 IF (Interrupt Flag): 中断允许标志, 为0时,屏蔽“可屏蔽中断” IOPL (I/O Privilege Level): 输入输出特权级,只有当前程序的CPL数值小于或等于IOPL时,当前... 阅读全文
posted @ 2013-12-20 10:49 Daniel King 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 地址长度 在Linux下,unsigned long可以与地址的长度保持一致,即32位系统下unsigned long为32位,而64位系统下为64位长。 虚拟地址的分解 如图所示,通过XXX_SHIFT方式,移位得到范围。 1: /* PAGE_SHIFT determines the page size */ 2: #define PAGE_SHIFT 12 3: ... 阅读全文
posted @ 2013-12-19 17:45 Daniel King 阅读(2652) 评论(0) 推荐(1) 编辑
摘要: 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... 阅读全文
posted @ 2013-12-19 12:00 Daniel King 阅读(571) 评论(0) 推荐(0) 编辑
摘要: ABI是定义二进制级别的,两个模块的接口 比如一个二进制模块想要调用另外一个二进制模块提供的功能,它需要知道怎样通过汇编语言(即机器指令)去调用,以及怎样传递相应的参数和返回值(通过寄存器还是栈内存,以及参数压栈的顺序等细节)。 API是源代码级别的两个模块的接口 是提供到语言层次的函数调用,已经是和具体语言相关的。 阅读全文
posted @ 2013-12-19 10:10 Daniel King 阅读(1198) 评论(0) 推荐(0) 编辑
摘要: 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进程都... 阅读全文
posted @ 2013-12-18 10:29 Daniel King 阅读(1672) 评论(0) 推荐(0) 编辑
摘要: 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... 阅读全文
posted @ 2013-12-17 17:37 Daniel King 阅读(582) 评论(0) 推荐(0) 编辑
摘要: 三个特权级 IA-32体系提供了4个特权级别,正常情况下只用了2个, 操作系统运行在Ring 0,而应用程序运行在Ring 3。 Xen让自己运行在Ring 0, 而操作系统运行在Ring 1, 应用程序运行在Ring 3,这样操作系统变成没有那么Powerful了,不能执行特权指令了。 改变的方法,就是对操作系统代码进行Patch,将原来需要运行在特权级别的指令,换成相应的Hypercall,... 阅读全文
posted @ 2013-12-17 17:30 Daniel King 阅读(285) 评论(0) 推荐(0) 编辑
摘要: ISA(Instruction Set Architecture) 指令集体系结构,是硬件与软件层之间的接口。 本地系统虚拟机 本地系统虚拟机,就是Bare-Metal虚拟机,直接运行在硬件上,在它上面可以同时安装多个操作系统。 虚拟机的基本要求 运行在VMM上的OS,不能影响到其他的OS,即不能修改资源配置(Resource Configuration)。 敏感指令 Control Se... 阅读全文
posted @ 2013-12-17 17:14 Daniel King 阅读(523) 评论(0) 推荐(0) 编辑
摘要: 1 影子页表 在Guest OS中本身就有页表的概念,用于将其中每个进程的虚拟地址(VA)转换成实际地址(RA),因为Guest OS本身不是运行在物理机器上,中间还有一层VMM,所以实际地址并不等于物理地址(PA)。 物理内存是由VMM进行管理的,它会把物理内存中的某一页分配给某个Guest中的某个进程使用,因此VMM维护一组影子页表,这组表格保存的是某个进程中VA到PA的转换关系。 2 缺... 阅读全文
posted @ 2013-12-17 17:01 Daniel King 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 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... 阅读全文
posted @ 2013-12-17 16:50 Daniel King 阅读(1732) 评论(0) 推荐(0) 编辑
摘要: 1. Graphviz 通过dot语言来生成各种关系图, 教程参考:http://graphviz.org/Documentation.php 2. LaTex 用来排版文档,生成PDF文件。 3. pyExcelerator 通过Python脚本,生成xls文件。http://sourceforge.net/projects/pyexcelerator/ 4. iText 通过Java或者... 阅读全文
posted @ 2013-12-03 11:45 Daniel King 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 插入图像 参考:http://www.ctex.org/documents/latex/graphics/ 1: \includegraphics[width=20mm]{head.png}应用表格进行布局参考:http://en.wikibooks.org/wiki/LaTeX/Tables 1: \documentclass[a4paper, 11pt]{article} 2:... 阅读全文
posted @ 2013-11-13 15:41 Daniel King 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 参考MSDN内容:http://msdn.microsoft.com/zh-cn/library/ms747437(v=vs.110).aspx 概述 WPF使用Viewport3D元素,将三维场景显示在二维的平面上。 三维坐标系 由于WPF 3D归根结底是要用Open GL一类的底层三维函数库(可能是Direct X)来实现,因此关于三维场景下的术语和概念都是互通的。 可以参考http://du... 阅读全文
posted @ 2013-11-13 14:15 Daniel King 阅读(482) 评论(0) 推荐(0) 编辑
摘要: .NET简介 The .NET Framework (pronounced dot net) is a software framework developed by Microsoft that runs primarily on Microsoft Windows. It includes a large library and provides language interoperabil... 阅读全文
posted @ 2013-11-11 17:56 Daniel King 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 下载地址:http://miktex.org/portable 解压到一个目录 $(MikTex)下, 然后创建以下两个批处理程序: 1. run.bat, 用来运行.tex扩展名的文件 1: $(MikTex)\pdflatex %1 2: del %~n1.aux,%~n1.log2. install.bat,用来安装扩展包 1: $(MikTex)\mpm_mfc_admin... 阅读全文
posted @ 2013-11-11 14:50 Daniel King 阅读(524) 评论(0) 推荐(0) 编辑
摘要: 将VDI映像转换成Bochs支持的img映像 1: vboxmanage clonehd source.vdi destination.img --format RAW在bochsrc.txt中引用生成的img映像 阅读全文
posted @ 2013-11-11 10:26 Daniel King 阅读(380) 评论(0) 推荐(0) 编辑
摘要: LaTex的安装与使用 在Windows平台下,安装MikTex是比较好的选择,下载地址http://miktex.org/download。 下载完成后,将安装目录 1: C:\Program Files (x86)\MiKTeX 2.9\miktex\bin添加到PATH环境变量中,以后就可以的命令行中调用latex命令了: 1: pdflatex ... 阅读全文
posted @ 2013-11-10 17:10 Daniel King 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 读取VDI文件SSL和TLSWindows下使用vim的最佳方案:Sublimegdb用法VMware的Guest与Host进行通信的三种方式加密与解密漫谈保护模式processing学习学习利用COM组件VS2012如何事半功倍PDF文件格式Python查看和修改当前进程的环境变量 阅读全文
posted @ 2013-11-09 14:24 Daniel King 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 代码 1: class TPoint 2: { 3: public TPoint(int _x, int _y) { 4: super(); 5: this._x = _x; 6: this._y = _y; 7: } 8: ... 阅读全文
posted @ 2013-11-09 14:06 Daniel King 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 一、Volume和Cluster 卷(Volume)和簇(Cluster)是NTFS用来描述物理磁盘的单位。 卷之间是相对独立的,卷的概念其实就是分区(Partition)。 簇的引入是为了方便处理不同容量的卷,通常在格式化一个卷时,可以设定该卷的簇的大小的,默认值是根据卷的容量算出来的,容量越大,簇也划分得越大。 簇划分得很大,优点在于降低维护成本,缺点在于会造成一定的空间浪费。 二、... 阅读全文
posted @ 2013-11-09 14:02 Daniel King 阅读(562) 评论(0) 推荐(0) 编辑
摘要: 想法 利用随机数控制圆圈的大小、位置以及颜色,可以产生随机的美感。 让小球动起来,并且在屏幕边界处产生反弹效果。 代码 1: float circle_x = (float) 0.0; 2: float circle_y = (float) 0.0; 3: float circle_radius = (float) 0.0; 4: ... 阅读全文
posted @ 2013-11-09 12:28 Daniel King 阅读(1217) 评论(0) 推荐(0) 编辑
摘要: 李萨如曲线 有没有对示波器上变化曲线产生过兴趣,它叫做李萨如曲线: 数学上,利萨茹(Lissajous)曲线(又称利萨茹图形、李萨如图形或鲍迪奇(Bowditch)曲线)是两个沿着互相垂直方向的正弦振动的合成的轨迹 (参见http://zh.wikipedia.org/wiki/%E5%88%A9%E8%90%A8%E8%8C%B9%E6%9B%B2%E7%BA%BF) 代码 ... 阅读全文
posted @ 2013-11-09 12:19 Daniel King 阅读(2106) 评论(0) 推荐(0) 编辑
摘要: 代码 1: int radius = 2; 2: int[] accumys; 3: int times = 0; 4: 5: float scale = 1; 6: int origin = 400; 7: 8: float factor = 1; 9: ... 阅读全文
posted @ 2013-11-09 11:42 Daniel King 阅读(411) 评论(0) 推荐(0) 编辑