1. 用汇编语言编写部分核心代码的原因: ① 操作系统内核中的底层程序直接与硬件打交道,需要用到一些专用的指令,而这些指令在C语言中并无对应的语言成分: ② CPU中的一些特殊指令也没有对应的C语言成分,如关中断.开中断等等: ③ 内核中的某些函数在运行时会非常频繁的被调用,因此效率就显得很重要,用汇编语言写的程序效率通常要比高级语言编写的高: ④ 在某些特殊场合,一段程序的空间效率也会显得很重要: 2. linux 采用了AT&T的386汇编语言格式,而没有用Intel的,它们之间的差别主要有…
386 CPU中的页式存管的基本思路是:通过页面目录和页面表分两个层次实现从线性地址到物理地址的映射.这种映射模式在大多数情况下可以节省页面表所占用的空间.因为大多数进程不会用到整个虚存空间,在虚存空间中通常都留有很大的"空洞".采用两层的方式,只要一个目录项所对应的的那部分空间是个空洞,就可以把该目录项设置为空,从而剩下了与之对应的页面表.当地址的宽度是32时,两层映射机制比较有效也比较合理,但是,当地址的宽度大于32位时就不够有效了. 因此,linux 内核的映射机制设计成3层,在…
linux 内核的主体是以GNU的C语言编写的,GNU为此提供了编译工具gcc.GNU对C语言本身作了不少扩充. 1) gcc 从 C++ 语言中吸收了"inline"和"const".inline 函数的使用与#define 宏定义相似,但更有相对的独立性,也更安全,因为"inline"函数会进行参数的类型检查.使用inline 函数也有利于程序调试.如果编译时不加优化,则这些inline函数就是普通的.独立的函数,更便于调试.调试好了以后,再…
http://blog.sina.com.cn/s/blog_6b94d5680101vfqv.html Linux内核源代码情景分析---第五章 文件系统  5.1 概述 构成一个操作系统最重要的就是 进程管理 与 文件系统: 有些操作系统有进程管理而没有文件系统,有些操作系统有文件系统而没有进程管理(MSDOS):两者都没有那就不是操作系统了: 狭义的文件:指磁盘文件,进入指可以是有序地存储在任何介质中(包括内存)的一组信息. 广义的文件:(unix把外部设备也当成文件)凡是可以产生或消耗信…
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第4小节. 汇编语言是每位后端程序员都应该掌握的一门语言,因为学会了汇编语言,不管是对我们调试程序还是研究与理解计算机底层的一些运行原理都具有非常重要的作用,所以建议有兴趣的读者可以多花点时间把它学好. 与高级编程语言一样,汇编语言也是一门完整的计算机编程语言,它所涉及的知识内容也很多,好在我们的主要目标是通过对本小节的学习而有能力去读懂汇编代码,而不是要用汇编语言去写代码,所以本节并不会全面介绍汇编语言,而只会选取汇编语言的一个子集-…
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第3小节. 什么是栈 栈是一种“后进先出”的数据结构,它相当于一个容器,当需要往容器里面添加元素时只能放在最上面的一个元素之上,需要取出元素时也只能从最上面开始取,通常我们称添加元素为入栈(push),取出元素为出栈(pop). 不知道读者是否有快餐店吃饭的经历,快餐店一般都有一摞干净的盘子让顾客取用,这就好比一个栈,我们取盘子时通常都是拿走最上面一个(pop),当盘子被取走剩得不多时,服务员又会拿一些干净的盘子放在原有盘子的上面(pu…
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第1小节. 寄存器是CPU内部的存储单元,用于存放从内存读取而来的数据(包括指令)和CPU运算的中间结果,之所以要使用寄存器来临时存放数据而不是直接操作内存,一是因为CPU的工作原理决定了有些操作运算只能在CPU内部进行,二是因为CPU读写寄存器的速度比读写内存的速度快得多. 为了便于交流和使用汇编语言进行编程,CPU厂商为每个寄存器都取了一个名字,比如AMD64 CPU中的rax, rbx, rcx, rdx等等,这样程序员就可以很方…
上个月,在花了一年半时间之后,写了55篇文章,分析完成了Chromium在Android上的实现,以及Android基于Chromium实现的WebView.学到了很多东西,不过也挺累的,平均不到两个星期一篇文章.本来想休息一段时间后,再继续分析Chromium使用的JS引擎V8.不过某天晚上,躺在床上睡不着,鬼使神差想着去创建一个个人站点,用来连载<Android系统源代码情景分析>一书的内容.       事情是这样的,躺在床上睡不着,就去申请了一个域名,0xcc0xcd.com.域名申请…
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第2小节. 内存是计算机系统的存储设备,其主要作用是协助CPU在执行程序时存储数据和指令. 内存由大量内存单元组成,内存单元大小为1个字节(1字节包含8个二进制位), 每个内存单元都有一个编号,更专业的说法是每一个内存单元都有一个地址,我们在编写汇编代码或编译器把用高级语言所写的程序编译成汇编指令时,如果要读写内存,就必须在指令中指定内存地址,这样CPU才知道它要存取哪个或哪些内存单元. 大家都知道,高级语言中有变量的概念,变量又有全局…
Linux 线程实现机制分析 Linux 线程实现机制分析  Linux 线程模型的比较:LinuxThreads 和 NPTL http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是…