自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

那海蓝蓝的博客

生活点滴,微风拂去

  • 博客(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 865

原创 深入理解缓冲区(十七)

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 823

原创 深入理解缓冲区(十四)

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 807

原创 深入理解缓冲区(十一)

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 851

原创 深入理解缓冲区(八)

4.1.4.2           Buf的元信息结构Buf的元信息数据块的结构信息如下,描述了每一个缓存块的使用情况:typedef struct sbufdesc{       BufferTag      tag;                /* ID

2011-10-08 08:28:22 833

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除