- 博客(15)
- 收藏
- 关注
原创 多进程与多线程(四)
1.1.2.1 共享内存所谓共享内存,就如同两个地下工作者,送情报的把写有字的小纸条放在大树下,取情报的拿走小纸条,这就实现了单方面联络通信;如果取情报的拿走小纸条的时候再附上一个小纸条写上“收到勿念”,在下次送情报的来时取走,就实现了所谓的“双工”通信;在计算机领域,只不过这个存放小纸条的大树长的模样和大树有些许的不同。我们通过Linux的相关函数来认识一下这个过程。
2011-10-31 08:33:59 909
原创 多进程与多线程(三)
1.1.2 进程间的通信方式多进程犹如多个人,需要互相交流协调配合。但是,在操作系统的看管下(安全等的需要),进程间是彼此间独立的。独立的个体相互通话,可以一个喊(广播),别人听(侦听);也可以由甲给乙挂个电话(共享文件、管道);或者发个短信什么的(信号);再者,写封信什么的给对方,都是可以的,具体采取什么方式,还得根据具体需要而定:如只是通知状态,短小的信号比较好;如不便打
2011-10-28 08:32:47 1464 1
原创 多进程与多线程(二)
1.1 理解进程书归正传,我们深入理解一下进程:首先,进程是是一个正在运行的程序的实例,此实例具有一个动态的概念,程序员书写的各种C代码、Java代码、各式脚本代码等,不具有动态的特性,所以充其量只能称为代码段,众多代码段积攒构成完整的语义整体才能被编译使用。未被操作系统调用前,其存在形式只能以静态这个词来描述。与“静”相对的,就是“动”,动静二字描述了生活中万事万物的基本状态,计算
2011-10-27 07:46:23 1628 1
原创 多进程与多线程(一)
进程,何为进程? 对于我们写程序的人来讲,代码写好后经编译程序编译(C代码需要链接)等过程,才能运行。这个阶段有时候很繁琐,尤其是编译大型程序集的时候,经常会花费很长时间,如果机器的物理性能好一些的话,编译速度还是可以忍受的。当我们看着自己写的静态代码组合成一个复杂的程序集合时,也许自己会由衷地心生得意:一会,我的程序就可以运行了…… 我的“程序”?注意,这里有个概念了,“程序
2011-10-26 16:47:36 1586 1
原创 深入理解缓冲区(十八)
4.3.3 从buf淘汰方式看改进---freelist在“4.1.4.5 Buf置换管理算法”中,我们描述了buf调度算法。PG首先是从freelist中取出空余的优先供缓存请求使用。如果freelist空,才去真正淘汰缓存块。所以,一个思路是:尽可能增加freelist中的成员,使得淘汰减少,是否物理IO也可以减少呢?先看PG对于freelist的操作方式:1.
2011-10-25 08:39:53 866
原创 深入理解缓冲区(十七)
4.3.2 从buf与IO看改进---异步IO 与IO相关的操作,如上图所示。其中,分为两种方式的读写:逻辑IO和物理IO。逻辑IO,是数据据访问层向缓存区读写数据的操作,请求数据,称为逻辑读;写入数据,称为逻辑写。物理IO,是数据缓冲区向外存读写数据的操作,请求数据,称为物理读;写入数据,称为物理写。物理层的读写,是通过smgr接口进行的。调用序列如下:
2011-10-24 08:40:37 693
原创 深入理解缓冲区(十六)
4.3 PostgreSQL数据缓存区改进对于数据库的数据缓存区,PG采取的是在一块连续的数据块对应的内存中,进行局部缓存块的淘汰。当这样的缓冲区被分配好后,则不可再发生动态调整。PG的分配内存的整体方式,是把所有需要内存的都统一求出大小,在系统初始启动过程中,一次从内存中申请出硕大的一块区域,然后在这个区域上,划分出不同的小区域,为不同的内存需求者使用。这样,严重制约了内存动态
2011-10-21 08:30:55 731
原创 深入理解缓冲区(十五)
4.2.3 双向缓存和单向缓存的比较 REDO缓存和REDO日志文件,前者是固定大小的区域,后者是一个线性的文件序列,如何使得固定区域和线性文件对应,是REDO缓存要解决的问题。这点,笔者在上一节进行了描述。 对于数据库的数据缓存,其缓存和外存的数据文件的对应关系,是少对多、一个对一个的关系;而日志缓存和日志文件的对应关系,是少对多、单个对线性序列的关系。要仔细体
2011-10-20 09:33:04 824
原创 深入理解缓冲区(十四)
4.2.2 日志缓存的管理方式日志缓存的管理,主要依赖于如下结构:typedef struct XLogCtlData{ /* Protected by WALInsertLock: */ XLogCtlInsert In
2011-10-19 08:40:24 1119
原创 深入理解缓冲区(十三)
4.2 PostgreSQL日志缓冲区管理前述介绍的buf,是一种双向的缓存,即“向外存发出读请求à读入数据到缓冲区”和“缓冲区中的数据被更新à写出到外存”。在PostgreSQL系统中,还存在一种单向缓存,是REDO日志的缓存,此种缓存,是系统启动时读日志文件
2011-10-18 08:37:23 1255
原创 深入理解缓冲区(十二)
4.1.6 并行计算对buf置换的影响并行计算对buf置换的影响,是指在多用户状态下,对buf中的缓存块同时读写时缓冲区的调度、处理、需要考虑的问题等等。 假设,A、B是三名仓库管理员,各管着100个仓库,每个仓库装入、取出哪个货主的货物,由管理员负责管
2011-10-17 08:25:16 809
原创 深入理解缓冲区(十一)
4.1.6 Buf置换管理算法Clock sweep算法总结如下:1. PG维护一个“freelist”,将空闲的块,置于其上,当有空闲块时,直接从空闲块中取;当有块不再使用,可以归入到空闲块中。2. 当空闲块已经用完,则
2011-10-11 08:49:52 1151
原创 深入理解缓冲区(十)
4.1.4.3 Buf的主体结构形式上是“char *”,本质上是内存开辟出的一块地址连续的区域。关键问题是:数据库如何使用这块区域(缓冲区调度算法)。4.1.4.4 Buf的置换调度策略管理相关数据结构第一个相关结构:Sh
2011-10-10 08:41:33 980
原创 深入理解缓冲区(九)
4.1.4.3 内外存地址是如何映射的1 缓存对应的内外存的映射关系:typedef struct buftag{ RelFileNode rnode; /* physical relation ident
2011-10-09 08:33:38 852
原创 深入理解缓冲区(八)
4.1.4.2 Buf的元信息结构Buf的元信息数据块的结构信息如下,描述了每一个缓存块的使用情况:typedef struct sbufdesc{ BufferTag tag; /* ID
2011-10-08 08:28:22 835
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人