Linux中page cache 和 buffer的关系

在遥远的年代,Linux中只有buffer作为块设备缓存,之后的某个版本将块设备缓存全面的转用page cache这种机制来实现,而目前的内核中的buffer只是块设备上面薄薄的一层,用来减少当pagecache 中的脏页回刷时的回刷量,即只需要回刷修改过的部分而不用回刷整个页面。

动态修改程序代码段(一)

简介

从本篇文章开始,将陆续讲解一些关于动态修改进程的代码的话题。其中牵扯到

  • 如何定位要修改的代码地址

我们以函数为单位进行代码的修改

  • 如何准备要修改之后的代码数据
  • 修改代码段的方式

等等一系列问题。本篇文章我们先只考虑如何进程进行代码的的自修改,此时要修改的代码地址就是函数指针所指向的地址,因此不用额外叙述。我们先来讨论一下为什么要动态修改进程的代码段。

继续阅读“动态修改程序代码段(一)”

Hello Kernel Module

Linux的宏内核架构使得内核的体积越来越大,为了解决这个问题,内核使用了一种模块机制。模块作为内核的可以被动态装入与卸出的组成部分,可以在需要时动态的链接到运行中的内核中,而在不需要时又从内核中卸出。因此模块的使用大大减少了Linux内核的体积。

正因为内核模块在运行时是动态链接到当前运行的内核中的,因此模块是内核的一部分,而不是一个独立的程序,模块开发在一定意义上来说就是内核开发。

本文不就Linux内核模块的实现机制做介绍,而只是给出内核模块的完整模型描述,然后以一个具体的helloworkd模块来使读者实际感受内核模块的编写,编译和运行。

继续阅读“Hello Kernel Module”