联动Oracle:设计思想、架构实现与AWR报告
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 本章小结

正确理解进程及其常用状态的切换原理,明白进程间的通信机制,对从宏观角度理解Oracle进程的组织方案和进程架构起到关键作用。我们在学习数据库时产生的大多数疑惑缘于我们对进程的理解不够深入,所以本章要为此打好基础。

文件和进程是UNIX系统模型中的两个重要概念。其中,文件子系统用于管理文件,包括分配文件空间、管理空闲空间、控制对文件的存取以及为用户检索数据等。进程通过一个特定的系统调用集合与文件子系统进行交互,比如通过系统调用open、close、read、write、stat(查询一个文件属性)、chown(改变文件所有者)及chmod(改变文件存取许可权)等。

UNIX系统进程控制子系统负责进程同步、进程间通信、内存管理及进程调度。当要执行一个文件而把该文件装入存储器时,文件子系统与进程控制子系统进行交互:进程子系统在执行可执行文件之前,需要把它们先读取到主存(即内存)中。

Oracle内核进程更多时候是在用户运行态模式下运行的,这个状态也称为用户态。SQL解析、记录排序、逻辑读、字段类型转换等操作一般会在用户态模式下运行。系统调用和中断这两个事件可以导致进程从用户运行态转换到内核运行态(也称为内核态模式)。

在Linux系统里,进程是一个结构体对象,在Oracle的内部,库缓存中的Cursor实际上是一个与进程类似的对象。进程是程序代码的载体,独立占用内存空间的数据结构、Cursor也是SQL代码的载体,是独立占用程序全局区空间的数据结构。

Oracle的SGA本质上是为了多进程共享并进行交互通信而创建的一个区域。共享内存系统仅需要在建立共享内存区域时进行系统调用。一旦建立共享内存,所有的访问都可以作为常规的内存访问,无须借助操作系统内核。

连接代表逻辑通道,而会话是在通道上传输SQL语句及其数据的子通道。建立连接不需要用户名和密码,但建立会话必须提供用户名和密码。当用户认证通过并形成会话时,Oracle会为每个会话分配一个会话编号(即SID)和序列号(即serial#)。