摘要: 首先请区别一下Linux内核的编译和内核模块的编译。顶层Makefile文件(在源代码根目录下的Makefile文件)负责产生内核映像vmlinuz和模块。顶层Makefile根据内核配置,递归编译内核代码下所有子目录里的文件,最终建立内核文件映像。每个子目录下有个Makefile文件,根据上级目录的makefile配置编译指定的代码文件。这些Makefile使用.config文件配置的数据构建各种文件列表,最终生成目标文件或者内嵌模块。编译配置好之后,进入Linux源文件所在的文件夹使用make bzImage命令完成内核编译,此时会生成vmlinuz文件make modules编译内核需要 阅读全文
posted @ 2010-12-23 20:42 高性能golang 阅读(6474) 评论(0) 推荐(1) 编辑
摘要: 简单来说,在复制一个对象时并不是真的在内存中把原来对象的数据复制一份到另外一个地址,而是在新对象的内存映射表中指向同原对象相同的位置,并且把那块内存的 Copy-On-Write 位设为 1。在对这个对象执行读操作的时候,内存数据没有变动,直接执行就可以。在写的时候,才真正将原始对象复制一份到新的地址,修改新对象的内存映射表到这个新的位置,然后往这里写。这个技术需要跟虚拟内存和分页同时使用,其好处是在复制对象的时候因为并不是真的复制,而只是建了一个“指针”,因而大大提高性能。但这并不是一直成立的,前提是在复制新对象之后,进行的写操作只是在一小部分的内存分页上,大部分分页不会用到或者只是读取。不 阅读全文
posted @ 2010-12-23 11:26 高性能golang 阅读(1557) 评论(0) 推荐(0) 编辑