总览 #include <linux/module.h> int query_module(const char *name, int which,void *buf, size_t bufsize, size _t *ret); 描述 query_module请求和可加载模块有关的来自内核的信息.信息的细致的特性和格式依赖于 which参数,一些函数要求name参数来命名当前被加载的模块.一些允许参数name为null, 指明内核是正确的.: which的值 0 Always returns…
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-kernelmodules/ 为保持 Linux 内核的稳定与可持续发展,内核在发展过程中引进了可装载模块这一特性.内核可装载模块就是可在内核运行时加载到内核的一组代码.通常 , 我们会在两个版本不同的内核上装载同一模块失败,即使是在两个相邻的补丁级(Patch Level)版本上.这是因为内核在引入可装载模块的同时,对模块采取了版本信息校验.这是一个与模块代码无关,却与内核相连的机制.该校验机…
2.可优化语句的执行 可优化语句的共同特点是它们被查询编译器处理后都会生成査询计划树,这一类语句由执行器(Executor)处理.该模块对外提供了三个接口: ExecutorStart.ExecutorRun 和 ExecutorEnd,其输入是包含査询计划树的数据结构QueryDesc,输出则是相关执行信息或结果数据.如果希望执行某个计划树,仅需构造包含此计划树的QueryDesc,并依次调用ExecutorStart.ExecutorRun.ExecutorEnd 3个过程即能完成相应的处理…
上篇博客简要的介绍了下psql命令行客户端的前台代码.这一次,我们来看看后台的代码吧. 十分不好意思的是,上篇博客我们只说明了前台登陆的代码,没有介绍前台登陆过程中,后台是如何工作的.即:后台接到前台的连接请求后发生了什么?调用了哪些函数?启动了哪些进程? 那么,我们就先讲讲后台的工作流程吧. 1.postgresql后台工作流程 这里首先我们要知道postgresql是典型的"Server/Client"的模式.即服务器后台有一个主进程(postmaster),该进程根据客户端的连接…
一.内核模块的概念 Linux模块(module)是一些可以作为独立程序来编译的函数和数据类型的集合.内核模块给我们带来的便利是模块本身并不被编译进内核文件,可在内核运行期间动态的安装或卸载.因为如果将模块编译进内核的话,一是生产的内核文件过大,二是如果要添加或删除某个组件要重新编译整个内核. Linux模块可以通过静态或动态地加载到内核空间,静态加载是指在内核启动过程中加载:动态加载是指在内核运行的过程中随时加载.我采用的是动态加载的方法. 一个模块被加载到内核中时,它就成为内核代码的一部分,…
时光荏苒,岁月如梭.楼主已经很久没有更新了.之前说好的一周一更的没有做到.实在是事出有因,没能静下心来好好看代码.当然这不能作为我不更新的理由,时间挤挤还是有的,拖了这么久,该再写点东西了,不然人就怠懒了.不过这回,我准备写的精简些,一方面我想偷点懒省点时间,二来毕竟写太长大家也不一定爱看. 之前我说过的查询分析,查询重写和查询规划都是相当于是对查询的"编译".那么编译完了就应该按照既定的策略去执行它.本篇就来介绍查询执行模块的代码(Executor),欢迎拍砖. 这部分我主要从以下五…
接前文跟我一起读postgresql源码(九)--Executor(查询执行模块之--Scan节点(上)) ,本篇把剩下的七个Scan节点结束掉. T_SubqueryScanState, T_FunctionScanState, T_ValuesScanState, T_CteScanState, T_WorkTableScanState, T_ForeignScanState, T_CustomScanState, 8.SubqueryScan 节点 SubqueryScan节点的作用是以另…
Linux内核的五大模块 (转自)https://blog.csdn.net/huangjingbin/article/details/19396235 Linux内核的五大模块 1.进程调度模块 2.内存管理模块 3.文件系统模块 4.进程间通信模块 5.网络接口模块 进程调度模块用来负责控制进程对CPU 资源的使用.所采取的调度策略是各进程能够公平合理地访问CPU, 同时保证内核能及时地执行硬件操作. 内存管理模块用于确保所有进程能够安全地共享机器主内存区, 同时, 内存管理模块还支持虚拟内…
做内核驱动第一步都是学习如何添加模块,这是基础,有了这个基础,剩下就是写代码了. 由于2.4到2.6内核版本的更新,无论是系统调用还是模块添加机制都有了巨大的变化,本人也因此饱经挫折,最后在3.0.101版本的内核下成功.作为开源运动的支持者,自认为有必要把自己的经历分享出来,以供后来学习者分享与交流. 再次声明,本博客只分享我遇到了的问题,没有交流的不代表不难或者不会遇到问题,只是我没遇到,如果有阅读本博客的朋友遇到了问题,非常欢迎大家一起讨论,技术就是这么成长的! 关于添加模块,步骤上还是那…
上一篇我们介绍了查询规划模块的总体流程和预处理部分的源码.查询规划模块再执行完预处理之后,可以进入正式的查询规划处理流程了. 查询规划的主要工作由grouping_planner函数完成.在具体实现的时候,针对postgresql中独有的继承表,程序使用inheritance_planner函数来解决,该函数主要是先将继承表的继承关系变换为非继承表来处理,然后仍然调用的是grouping_planner函数来完成查询规划的工作. 因此,我们说查询规划的主要工作在于grouping_planner…