04 2012 档案

摘要:重建索引 如果表中记录频繁地被删除或插入,尽管表中的记录总量保持不变,索引空间的使用量会不断增加。虽然记录从索引中被删除,但是该记录索引项的使用空间不能被重新使用。因此,如果表变化不定,索引空间量会不断增加,不论表中记录数量是否增加,这是因为索引中无效空间会增加。 要回收那些曾被删除记录使用的空间... 阅读全文
posted @ 2012-04-27 15:16 PoleStar 阅读(689) 评论(0) 推荐(0) 编辑
摘要:B树索引的访问当oracle进程需要访问数据文件里的数据块时,oracle会有两种类型的I/O操作方式:1) 随机访问,每次读取一个数据块(通过等待事件“db file sequential read”体现出来)。2) 顺序访问,每次读取多个数据块(通过等待事件“db file scattered ... 阅读全文
posted @ 2012-04-27 15:11 PoleStar 阅读(511) 评论(0) 推荐(0) 编辑
摘要:索引概述 索引与表一样,也属于段(segment)的一种。里面存放了用户的数据,跟表一样需要占用磁盘空间。只不过,在索引里的数据存放形式与表里的数据存放形式非常的不一样。在理解索引时,可以想象一本书,其中书的内容就相当于表里的数据,而书前面的目录就相当于该表的索引。同时,通常情况下,索引所占用... 阅读全文
posted @ 2012-04-27 11:57 PoleStar 阅读(636) 评论(0) 推荐(0) 编辑
摘要:Posix共享内存区涉及两个步骤:1、指定一个名字参数调用shm_open,以创建一个新的共享内存区对象或打开一个以存在的共享内存区对象。2、调用mmap把这个共享内存区映射到调用进程的地址空间。传递给shm_open的名字参数随后由希望共享该内存区的任何其他进程使用。相关函数: 1 shm_open()函数 2 功能: 打开或创建一个共享内存区 3 头文件: #include <sys/mman.h> 4 函数原形: int shm_open(const char *name,int oflag,mode_t mode); 5 返回值: 成功返回0,出错返回-1 6 ... 阅读全文
posted @ 2012-04-23 10:01 PoleStar 阅读(2186) 评论(0) 推荐(1) 编辑
摘要:共享内存区是最快的可用IPC形式。它允许多个不相关的进程去访问同一部分逻辑内存。如果需要在两个运行中的进程之间传输数据,共享内存将是一种效率极高的解决方案。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传输就不再涉及内核。这样就可以减少系统调用时间,提高程序效率 共享内存是由IPC为一个进程创建的一个特殊的地址范围,它将出现在进程的地址空间中。其他进程可以把同一段共享内存段“连接到”它们自己的地址空间里去。所有进程都可以访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会立刻被有访问同一段共享内存的其他进程看到。 要注意的是共享内存本身没有提供任何同步... 阅读全文
posted @ 2012-04-23 09:49 PoleStar 阅读(1095) 评论(0) 推荐(0) 编辑
摘要:信号灯用来实现同步——用于多线程,多进程之间同步共享资源(临界资源)。信号灯分两种,一种是有名信号灯,一种是基于内存的信号灯。有名信号灯,是根据外部名字标识,通常指代文件系统中的某个文件。而基于内存的信号灯,它主要是把信号灯放入内存的,基于内存的信号灯,同步多线程时,可以放到该多线程所属进程空间里;如果是同步多进程,那就需要把信号灯放入到共享内存中(方便多个进程访问)。 有名信号灯和基于内存的信号灯,具体区别体现在创建和销毁两个函数。有名信号灯使用sem_open和sem_close函数。基于内存的信号灯使用sem_init和sem_destroy函数。sem_init的参数可以控制是同... 阅读全文
posted @ 2012-04-18 16:32 PoleStar 阅读(1115) 评论(0) 推荐(0) 编辑
摘要:Posix消息队列的属性使用如下结构存放:struct mq_attr { long mq_flags; /*阻塞标志位,0为非阻塞(O_NONBLOCK)*/ long mq_maxmsg; /*队列所允许的最大消息条数*/ long mq_msgsize; /*每条消息的最大字节数*/ long mq_curmsgs; /*队列当前的消息条数*/ }; 队列可以在创建时由mq_open()函数的第四个参数指定mq_maxmsg,mq_msgsize。 如创建时没有指定则使用默认值,一旦创建,则不可再改变。队列可以在创建后由mq_setattr()函数设置... 阅读全文
posted @ 2012-04-16 09:29 PoleStar 阅读(1270) 评论(0) 推荐(0) 编辑
摘要:创建消息队列的程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <mqueue.h> //头文件 4 #include <sys/types.h> 5 #include <sys/stat.h> 6 #include <unistd.h> 7 #include <fcntl.h> 8 #include <errno.h> 9 10 #define MQ_NAME ("/tmp") 11 #define MQ_FLA 阅读全文
posted @ 2012-04-16 09:24 PoleStar 阅读(946) 评论(0) 推荐(0) 编辑
摘要:消息队列可以认为是一个链表。进程(线程)可以往里写消息,也可以从里面取出消息。一个进程可以往某个消息队列里写消息,然后终止,另一个进程随时可以从消息队列里取走这些消息。这里也说明了,消息队列具有随内核的持续性,也就是系统不重启,消息队列永久存在。创建(并打开)、关闭、删除一个消息队列 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <mqueue.h> //头文件 4 #include <sys/types.h> 5 #include <sys/stat.h> 6 #incl 阅读全文
posted @ 2012-04-16 09:13 PoleStar 阅读(1206) 评论(0) 推荐(0) 编辑
摘要:在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。 分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。 解决:1)在windows下转换:利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。2)也可在Linux中转换: 首先要确保文件有可执行权限 #sh& 阅读全文
posted @ 2012-04-11 17:15 PoleStar 阅读(151) 评论(0) 推荐(0) 编辑
摘要:互斥锁机制(Mutual exclusion,缩写为Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区域(critical section)达成。临界区域指的是一块对公共资源进行存取的代码,并非一种机制或是算法初始化:在Linux下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化:对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init.对于动态分配的互斥量, 在申请内存(malloc)之后 阅读全文
posted @ 2012-04-07 18:08 PoleStar 阅读(841) 评论(0) 推荐(1) 编辑