,因为登陆到一个新界面以后,需要再次和数据库进行连接,以便输出数据库中一个表的内容。但没次做连接都很慢
,不知道用什么办法解决。
缓冲池由多个缓冲区组成。
而一个缓冲区由两部分组成:一部分是用来标识该缓冲器和用于管理的缓冲首部,另一部分是用于存放数据的缓冲体。这两部分有一一对应的映射关系。对缓冲池的管理是通过对每一个缓冲器的缓冲首部进行 *** 作实现的。
缓冲首部包括设备号、设备上的数据块号(块设备时)、互斥标识位以及缓冲队列连接指针和缓冲器号等。
系统把各缓冲区按其使用状况连成三种队列:
(1) 空白缓冲队列em,其队首指针为F(em),队尾指针为L(em);
(2) 装满输入数据的输入缓冲队列in,其队首指针为F(in),队尾指针为L(in);
(3) 装满输出数据的输出缓冲队列out,其队首指针为F(out),队尾指针为L(out)。
另外,在缓冲池中还具有四种工作缓冲区:
(1) 用于收容输入数据的工作缓冲区(hin);
(2) 用于提取输入数据的工作缓冲区(sin);
(3) 用于收容输出数据的工作缓冲区(hout);
(4) 用于提取输出数据的工作缓冲区(sout)。 可见,缓冲区工作在收容输入、提取输入、收容输出和提取输出四种工作方式如下:
对缓冲池的管理由如下几个 *** 作组成:
(1)从三种缓冲区队列中按一定的选取规则取出一个缓冲区的过程take_buf(type)
(2)把缓冲区按一定的选取规则插入相应的缓冲区队列的过程add_buf(type,number);
(3)供进程申请缓冲区用的过程get_buf(type,number)
(4)供进程将缓冲区放入相应缓冲区队列的过程put_buf(type,work_buf)。
其中,参数type表示缓冲队列类型,number为缓冲区号,而work_buf则表示工作缓冲区类型。 使用这几个 *** 作,缓冲池的工作过程可描述如下:
首先,输入进程调用get_uf(em,number)过程从空白缓冲区队列中取出一个缓冲号为number的空白缓冲区,将其作为收容输入缓冲区hin,当hin中装满了由输入设备输入的数据之后,系统调用过程put_buf(in,hin)将该缓冲区插入输入缓冲区队列in中。
另外,当进程需要输出数据数据时,输出进程经过缓冲管理程序调用过程get_buf(em,number)从空白缓冲区队列中取出一个空白缓冲区number作为收容输出缓冲区hout,待hout中装满输出数据之后,系统再调用过程Put_buf(out,hout)将该缓冲区插入输出缓冲区队列out.
对缓冲区的输入数据和输出数据的提取也是由过程get_buf和put_buf实现的。get_buf(out,number)从输出缓冲队列中取出装满输出数据的缓冲区number,将其作为sout。当sout中数据输出完毕时,系统调用过程put_buf(em,sout)将该缓冲区插入空白缓冲队列。而get_buf(in,number)则从输入缓冲队列中取出一个装满输入数据的缓冲区number作为输入缓冲区sin,当CPU从中提取完所需数据之后,系统调用过程put_buf(em,sin)将该缓冲区释放和插入空白缓冲队列em中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)