在POSIX兼容的平台上,SIGFPE是当一个进程执行了一个错误的算术操作时发送给它的信号。SIGFPE的符号常量在头文件signal.h中定义。因为在不同平台上,信号数字可能变化,因此常使用信号名称。
SIG是信号名的通用前缀。FPE是floating-point
exception(浮点异常)的首字母缩略字。产生SIGFPE信号时并非一定要涉及浮点算术,之所以不修改名字是因为这么做会破坏向下兼容性。
[1]
导致SIGFPE被发送给进程的原因有很多。一个常见的例子是由于一个意外输入导致的溢出,或者在程序构造中的错误。
SIGFPE可以被处理。也就是说,程序员可以指定他们在接收到信号时想要的动作,例如调用一个子程序,忽略事件等。
SIGCHLDSIGCHLD,在一个进程终止或者停止时,将SIGCHLD信号发送给其父进程,按系统默认将忽略此信号,如果父进程希望被告知其子系统的这种状态,则应捕捉此信号。
SIGCHLD属于unix以及类unix系统的一种信号
产生原因 siginfo_t代码值
1,子进程已终止 CLD_EXITED
2,子进程异常终止(无core) CLD_KILLED
3,子进程异常终止(有core) CLD_DUMPED
4,被跟踪子进程以陷入 CLD_TRAPPED
5,子进程已停止 CLD_STOPED
5,停止的子进程已经继续 CLD_CONTINUED
PG的存储管理 为什么说存储管理数据库非常基础和重要的技术数据库管理系统的任务本质上是向存储设备上写入或者从存储设备上读出数据,
因此对于一个DBMS来说, 存储的管理是一项非常基础和重要的技术.
在PG中, 有专门的模块负责管理存储设备(包括内存和外存), 我们称之为存储管理器.
存储管理器提供了一组统一的管理外存和内存资源的功能模块,
所有对外存和内存的操作都将交由存储管理器处理,
可以认为存储管理器是数据库管理系统与物理存取设备的接口.
与PG的其他模块相比, 存储管理器处在系统结构的底层,
它包含了操作物理存取设备的接口.
为了防止多个进程并发访问共享内存中数据时产生冲突,
PG提供了轻量级锁,用于支持对共享内存中同一数据的互斥访问.
PG使用共享内存实现了IPC(进程间通信)以及无效消息共享,用以支持进程间的相互相互通信.
提供内存上下文有什么用存储管理器提供内存上下文(MemoryContext)用于统一管理内存的分配和回收,
从而更加有效安全地对内存空间进行管理.
外在的管理包括表文件管理,空闲空间管理,虚拟文件描述符管理以及大数据存储管理等.
在PG中,
每个表都用一个文件(表文件)存储,表文件以表的OID命名.对于超出操作系统文件大小限制(比如FAT32限制为4G)的表文件,
PG会自动将其切分成多个文件来存储,并在原表文件名的尾部加上切分的顺序号来标识它们.
从PG8.4开始, 每个表除了表文件外还拥有两个附属文件:
可见性映射表文件(VM)和空闲空间映射表文件(FSM).
前者用于加快清理操作(VACUMM)的执行速度, 后者则用于表文件空闲空间的管理.
虚拟文件描述符机制为了避免超过操作系统对每个进程打开文件数的限制,存储管理器使用了虚拟文件描述符机制,使得后台进程可以打开”无限多个”文件.
PG如何支持大数据存储的PG提供了大对象机制和TOAST机制, 用以支持大数据存储.
前者主要用于大尺寸的文件, 后者主要用于变长字符串.
PG支持多种存储介质(如: 闪存,光盘)的扩展吗支持.
PG在存储管理选择器中封装了对具体存储器的操作接口,
以便扩展支持多种存储介质(比如对闪存,光盘的支持).
PG的存储管理器采用与操作系统类似的分页存储管理方式,即数据的在内存中是以页面块的形式存在.
每个表文件由什么组成的每个表文件由多个BLCKSZ(一个可配置的常量)字节大小的文件块组成,每个文件块又可以包含多个元组.
表文件以什么单位读入内存中的表文件是以文件块为单位读入内存中的,每一个文件块在内存中形成一个页面块.