Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103715506
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-05-08 10:45:41

 




Linux的架构


为了正确安装、设定与管理Linux版本的Oracle,对于Linux作业系统的运作模式,以及如何架构与设定,必须有一定程度的了解。依照不同版本的作业系统,Linux系统有多种管理与设定的方式,在这里我们将说明Linux核心的运作及设定。往后才来学习如何使用特定的参数调校系统。

了解Linux的架构之后,操作系统将具备更佳的监控、设定与调校能力,除此之外,还可以了解Oracle如何与操作系统结合(与其它类型操作系统的相异之处)。此外,将在下一篇文章学到Oracle的结构与操作系统相联的部分。现在来介绍Linux的核心、I/O子系统、行程(Process)与执行绪(Thread),接着说明装置与档案系统,以及如何重新编译Linux的核心。

有别于过去硬件厂商提供的封闭式UNIX操作系统,Linux有多种发行版本,虽然网络上有免费的Linux原始码,可以下载网络上的原始码并且重新编译,但多数企业采用对Oracle支持度更高的Linux版本, 着linux愈来愈普及之后,许多厂商也开始发行商业化的Linux版本,如Red Hat 与SuSe,为了让企业用户可以更方便地使用Linux,因此软件包与支援渐成为被重视的议题。


两家最受欢迎的Linux发行厂商为Red Hat与SuSe。Red Hat创立于1993 年,并成为市场占有率最高的Linux发行商,SuSe创立于1992,最近被Novell收购,两家厂商均提供稳定及适合的Linux操作系统加强版,可以符合企业用户对于企业级应用程序的支援度。

Red Hat Enterprise Linux与SuSe Enterprise Server 为了协助企业使用作业系统,同时针对企业用户提供以下多项特性:

▇ 透过升级核心的过程无需重新编译整个作业系统,即可修正核心(kernel)的错误。

▇ 系统组态与核心经过良好的测试几验证。

▇ 持续更新版本。

如果使用的Linux发行版本是来自于世界知名的厂商支援,会获得许多好处。厂商中最具知名度的是Red Hat与SuSe,同时也是市场占有率最高,我们就是依据这两家厂商来介绍。


1.1操作系统概观

操作系统可以提供平台让使用者执行程序。操作系统负责维持大量不同类型与层级的程序,以及控制不同类型的功能。如同大部分的术语,早期作业系统的设计者也采用类似的叙述方式。此外,操作系统的最底层,即为众所皆知的核心(kernel),外层的部分则称为壳(shell),使用者可以透过shell与作业系统沟通,而kernel与shell的中间则是系统公用程序(Utilities)。

kernel负责操作系统所提供的服务,如行程管理、CPU排程、内存管理与系统呼叫,系统呼叫可以使Shell与kernel沟通并执行功能,如磁盘存取。

现在具有多种不同的核心类型,其中有部分是大家所熟知的,第一种称为集成式(Monolithic)核心( 如图1-1),共有三层架构。

第二种常使用的核心类称为微核心(Microkernel),微核心(如图1.2)比集成式核心架构有更多阶层。









1.1.1 集成式模型

集成式核心是最简单的核心类型,核心的每个部分存取相同的记忆体结构,並整合为单一完整的核心。长期以来有多种作业系统均使用集成式核心,如UNIX、Windows与DOS,有一部分人认为,现代化作业系统並非使用集成式来设计的,但是Linux则採用集成式核心,撷取其优点並屏除缺点。

集成式核心的优点在於执行之后,核心內的任意部分可使用全部记忆体,代表数据不需要通过作业系统的不同阶层,故可增加效能。集成式核心最常见的缺点,就是无论要加入其他装置驱动程式或扩充核心功能,都必须重新编译整个核心,这个问题对初学者而言可能很棘手。

不同於传统的集成式作业系统,Linux使用混合的集成式核心支援可载入式模组(Kernel Loadable Module),也就是所谓的KLM。 可载入式模组能够动态地载入,或者卸载核心的装置驱动程式与核心层;此外,可载入模组提供多项优点,仅在需要时使用记忆体。可载入模组应用於作业系统的多个部分,包含:


▇ 装置驱动程式
为了与特定硬件装置沟通及操作而设计的程序。

▇ 档案系统驱动程式
作业系统可透过档案系统驱动程序而使用多个子的档案系统,未使用的档案系统则不会载入核心。

▇ 系统呼叫
系统呼叫是使用者与核心之间的沟通管道,透过允许可载入系统呼叫,可以撰写自订的系统呼叫,並且加入核心。

▇ 网络驱动程序
可载入网路驱动程序可以支援新增及自订的网路协议。

▇ 可执行直译器
核心可依需求载入或卸载多种可执行直译器。

因为支援可载入模组,所以集成式核心可以提供微核心的功能,有几个指令可使用於KLM的显示、观察与管理。这些指今如下:






因为不需重新编译核心即可加入模组,所以可载入模组非常的好用与方便。

1.1.2 微核心

微核心架构中,只有极小部分的核心与硬体互相沟通,其外层则有多层的作业系统程式码可执行不同的功能。微核心的核心负责如执行绪管理与部分记忆体管理的內部程序沟通,但许多其他的OS服务(如I/O行程)都在核心外部执行。装置驱动程式也一樣,即使沒有加入核心仍然可以使用,装置驱动程式可以与其他OS的功能相互沟通,而不用透过核心。许多现代化作业系统使用微核心,包括Microsoft Windows Server的產品,如Windows NT、Windows 2000与Windows 2003,其他使用核心架构的作业系统包括AIX与Mach。


1.2 Linux概观

Linux作业系统属于混合的集成式核心,透过使用系统呼叫、公用程式及shell存取作业系统。Linux作业系统与大多数UNIX-like作业系统相同,除了核心之外,可视需求使用公用程序与shell。事实上,大多数Linux发行版本提供至少三种shell以共选择,最受欢迎的是sh(Borne shell) 、ksh(Korn shell)、以及bash(Born-Again shell)。

除此之外,Linux作业系统提供非常多樣化的公用程序,可协助数据管理、文字起理、运算及其他工作。与其他大多数Linux程式一樣,能夠以互动模式或批次模式来使用shell,建立shell或script,即可重复执行维护工作。若工作必须执行一次以上的话,建议透过shell script执行此工作,因为透过此方式能夠很有效率也执行大量工作,故可以节省撰写编译一个完整程序的时间。

在此将讨论Linux发行版本(包括开发环境)的部分、Linux公用程序、Linux架构及如何设定Linux。稍后我们将讨论Linux核心的设定、如何重新编译Linux核心以及开机的过程。


1.2.1 Linux目录结构

Linux作业系统使用树状的目錄结构,树状结构的顶层称为根(root)目录,根目录下有多个不同的分支,每一个分支再各自衍生更多分支,在最上层有多个核心目录,包括设定资讯、程序与公用程序、使用者数据与系统数据。主要目录分支如下。






这些都是Linux作业系统中非常重要的目录。但是不一定要同时存在档案系统內,可以在设定系统时,决定根目錄下是否有/home、/usr等目录,以及是否要将这些目录掛载於档案系统内。本章讨论档案系统相关的部分,将会在之后的章节做更详细的說明。


1.2.2 Linux公用程序与目录

Linux作业系统內含大量的公用程序,即使是具有丰富经验的UNIX与Linux高手们也不一定会使用所有的公用程序。Linux的公用程序与应用程序提供多种不同功能,可单独使用或配合其他应用程序一起执行,在这一节可以学习Linux公用程序的类型及功能。

Linux公用程序可以分为多种类型,分別可执行多种功能,这些功能可概略的分为管理类(系统)公用程序与使用者公用程序,通常可以在/sbin、/usr/sbin、bin与/usr/bin找到这些系统公用程序。在目录结构中,可以在公用程序的旁边看到其描述。

/sbin的公用程序

/sbin目錄中的公用程序,被保留给执行Linux所需的开机、核心功能公用程序,提供很多关於I/O子系统、文件系统与网络的功能支援,以下是简短的公用程序范例。


档案系统与I/O公用程序 以下公用程序使用于设定、查询与启始I/O字系统及档案系统,这些公用程序存放于/sbin目录里。以下仅收录部分作为范例。






网络公用程序 下列公用程序使用于设定、查询与起始网络,这些公用程序存放与/sbin目录路,同样的以下仅收录部分作为范例。







通用公用程序 下列作业系统执行时,其使用的公用程序存放与/sbin目录,以下仅收录部分作为范例。







在/sbin目錄中,存放着多个系统啟动时十分重要的服务,此目錄在开机过程中有非常重要的地位,同时也是根目录档案系统的其中一部分。在开机过程先执行此部分之后,接著才会掛载 /usr档案系统(若/usr为分开的档案系统)。


/usr/sbin的公用程序与常驻程序

/usr/sbin的公用程序虽然属於系统公用程序,但在系统初始过程中不是必备的,系统啟始后即可使用这些管理工具。/usr/sbin目录中有超过300个公用程序,以下收录部分工具作为范例。







除此之外,/usr/sbin目录中也包含许多可执行的常驻程序(Daemon),常驻程式是系统执行服务的程序,部分常驻程序全程在幕后执行,但有些常驻程序只有在需要时才会执行,常驻程序对系统作业非常重要。在/usr/sbin中,以下几个是很重要的常驻程序。







可以看到/usr/sbin目录内,包含许多系统及系统管理者使用的公用程序,对于系统叫操作而言,结合/usr/sbin目录与/sbin目录非常重要。

/bin的公用程序

/bin与/sbin目录中的公用程序相当类似,但/sbin目录中的公用程序多数为系统管理的用途;而/bin目录中的公用程序,除了可供系统管理使用也可以提供一般使用者执行,故与/sbin目录分开存放。没有将这些档案置于/usr/sbin的主要原因,因为系统管理者开机时,也许会使用其中部分的公用程序,为了在系统挂载 /usr目录前提供这些档案,故将其存放于/bin目录。以下列出部分/bin目录存放的功用程序,包括Linux的shell程序。







众所皆知。Linux与UNIX提供多样化的选择,可以依个人的爱好选择要使用的shell 程序。


/usr/bin的公用程序

/usr/bin目录之中,通常存放提供给终端使用者的公用程序。这些公用程序的功能包括游览目录、编辑档案、传送电子邮件以及执行其他工作。/usr/bin目录内有近1500个公用程序,可供系统管理者与终端使用者使用,这些公用程序包括许多开发环境公用程序,将在下一个部分说明,以下列出/usr/bin的档案范例。







由于此目录中有许多公用程序,所以在此我们仅列出其中一部分。使用Linux更得心应手之后,可依需求选用其中更合适的公用程序,将可以发现即使用不同的公用程序与应用程序,依然可在不同复杂性与功能性达成相同的工作目的。例如,可以使用任意一个前述的shell撰写shell程序,或者使用PERL建立复杂的程序,PERL是一种复杂的语言,可以轻易的呼叫其它应用程序,如 SQL*Plus。

1.2.3 开发环境

Linux开喳环境的功能具备相当的复杂性与完整性,大部分由GNU编译器与函式库所组成,也包括大量的系统工具与函式库,开发环境支持C++、C与组合语言程序,故偏重于C++与C。Linux原始码由C语言所撰写,而研发人可以直接编修与重新编译,所以C语言开发环境的稳定度对于Linux操作系统非常重要。


Linux开爱环境有GNU编译器组合、除错工具与相关的公用程序,其中包括:

■ GNU编译器组合(GNU compiler collection,gcc)
□ cpp,C前置处理器。
□ as,组合语言编译器。
□ ld,连结编辑器。

■ GNU除错工具(GNU Debugger,gdb)

■ binutils 是一组提供给研发人员的二进制代码公用程序:
□ ar,可以建立或修改储备档,或者从储备档中抽取档案出来。
□ nm - 检视对象文件的连结符号清单。
□ objcopy -复制与转换对象文件。
□ objdump - 显示二进制文件的内容。
□ ranlib - 建立文件的索引,并将索引存入文件中。
□ size – 显示对象文件的大小。
□ strings - 显示文件可刊印的字符串。
□ strip - 摒弃档案的符号。
□ readelf – 显示ELF格式档案的信息。


开发环境对于Linux系统非常重要,如同在UNIX系统中的地位。 Linux为可动态设定的系统,不需要重新连结核心;但是Oracle需要在安装与设定过程中重新连结核心。在安装Oracle时必须使用连结编译器。

Linux的开发环境类似于许多UNIX平台所提供的开发环境,实际上有许多UNIX平台也支援GNU编译器组合,但完全不同于Windows的开发环境,而Oracle的图型化开发环境如JDeveloper也与Linux所提供的相异。

现在开始讨论Linux开发环境的部分组件。


GCC,GNU编译器组合

GNU编译器组合包括C前置处理器、汇编语言编译器与连结编辑器,这些都是处理程序的必要组件。虽然使用gcc指令,但可以单独地个别呼叫GNU编译器组合的组件。

也许读者会好奇C与C+ +程序的相异之处。GNU编译器组合只有一种编译器,但可以编译C与C++程序;GNU编译器也可以编译对象导向C程序。gcc指令可以最佳化不同的处理器与系统,它被视为功能最强的编译器。事实上,有许多效能衡量标竿均采用GNU 编译器组合。

cpp是GNU前置处理器,可执行如宏展开(Macro Expasion)、条件编译指令(Conditional Compiler Directive)包括标头档 (Header File)与线路控制(Line Control),前置处理器为原始码建立可执行二进制文件的第一个步骤。

as是GNU汇编语言编译器,可将组合程序文件建立为对象文件,其所建立对象档的副档名为.o且为二进制对象文件。C语言原始文件产生对象文件之后,即与系统物件档产生连结。

ld是GNU连结编辑器,将物件文件与系统函式库产生连结之后,对象文件才可以建立二进制可执行文件或程序。因为ld可以连结对象文件并产生可执行档,所以不一定需要保留程序的原始档。Oracle内建一组对象文件为「可连结系统函式库」,因此可以产生Oracle的可执行档,通常不须直接存取Oracle原始码也可以建立组合语言程序,如此一来,便可替换部分Oracle的功能。例如:为了更改Oracle运作的基地址(Base Address),必须建立一个名为ksms.s的汇编语言档案,并且重新连结Oracle二进位档,此外,在执行过程中完全不需存取Oracle原始档。


GNU除错工具

GNU除错工具能够在程序建立过程使用特定除错信息。程序代码内可设定中断点并逐步执行程序代码,这个工具非常实用,不只可验证程序执行过程的变量内容,更可透过此工具找出程序中的问题,例如:变量过载或不恰当的释放记忆体。

当程序被终止时,除错工具也可以执行验证的工作,除错工具能够协助找出程序被终让的地方以便除错,此外,除错工具也能协助各种类型的系统开发工作。


Binutils

Binutils是Linux开发、部署与除错公用程序的组合,由多种GNU公用程序组合而成,内容包含下列应用程序:
■ ar(archiver) 建立、编辑与解压缩原始码归档器(Archive)的档案,原始码归档为对象文件的函式库,可以组织这些对象文件,虽然任意类型的当案均可为归档内容,在此仍然着重于函式库中的对象文件。

■ nm 主要列出对象文件内的符号(symbo1),能够有效率地找出对象文件的符号,是一种非常好用的除错工具。

■ objcopy 复制与转换对象文件,通常作为文件类型的转换,如bdf转为elf。



■ objdump 显示二进制文件的内容,对于注重对象文件内容及格式的开发人员非常重要,如同对于程序代码功能的重视程度。

■ ranlib 主要建立文件的索引,并将索引存入档案中,ranlib公用程序可以将对象函式库建立为符号索引,因此,可以透过符号在函式库中找出需要的对象符号。


■ size 显示对象文件部分及总计的大小,输出结果包含程序代码不同段落的各种大小,如文字与数据段落,当然也包括bss部分的大小。

■ strings 显示档案可列印的字符串,可协助找出特定对象文件的错误讯息。

■ strip 摒弃档案的符号,无论是容量或安全考量均可使用此功能。

■ readelf 显示ELF格式档案的信息,类似Objdump,但执行ELF档案。

虽然Binutils可能对一般使用者功用不大,但对于软件开发与除错工作却有很大的助益,尤其目前打算使用Oracle的使用者。


make公用程序

make公用程序可依照样板(Template)或makefile,来建立原始文件与对象文件的二进制文件。makefile可定义原始文件、对象文件与可执行文件的相依性,这些相关性及建立相依档案的方式,可作为建立二进制文件的依据。例如,以下关联性可设定于makefile中:

test relies on test.o
test is created by linking test.o with lib.a
test.o relies on test.c
test.o is created by running gcc test.c

以上仅为描述,不代表实际makefile与make公用程序的语法。

建立关痴性后只需执行make,若test.c在test.o之前建立则make能够辨识,而且不会重新编译test.c;若test.o与lib.a在tets之前建立,同样的也不会重新连结test。

组合使用make与makefile设定复杂的相关性,即使变更一个或多个档案,都可以不用重新编译或连结。make可分辨相关性,而且只会编译与连结必要的档案,这对于Linux核心非常重要,因为其中包含上百个程序,如果每一次变动就必须要全部重新编译与连结,将会耗费数小时来完成这些工作。

1.3Linux使用者接口

Linux提供多种不同的使用者接口,这些使用者接口包括本章已提到的shell命令提示字符接口,以及使用X窗口的图形化使用者接口。通常大多数的系统管理员只有在必要的时候才会执行图形化环境,因为记忆体与CPU资源需要分配给其它更重要的工作,需要图形化的工作例如:安装Oracle须使用GUI接口。

1.3.1 X窗口

1984年由MIT建立的雅典娜计划 (Proiect Athena),发展出可兼容于各种工作站的图形化使用者接口(Graphical User Interface,GUI)o。X窗口系统是一种图形化使用者接口,无论凭借本地端或远程的资源,在远程或本地端皆有很好的执行效果,此外,在Linux操作系统的第一个版本,X窗口即为其中的一个部分。

几乎所有向操作系统均支持X窗口系统,并且可以应用于多种不同的运算架构,X窗口为Linux的标准图形化协议,同时也支持Microsoft Windows。

X窗口架构可划分为两个组件:服务器(提供图形画面)与客户端(提供应用程序)。大部分情况下,这两个专有名词似乎是反向的,如果在服务器执行应用程序则工作站呈现图形画面,此时工作站为X客户端,而执行应用程序的服务器为客户端,对于习惯使用其它类型client/server应用程序的使用者,需要花一些时间适应X窗口的架构。

X窗口系统设计主要目的为「屏幕上的显示」并没有提供观感的功能,此为窗口管理员(Window Manager)的工作:窗口管理员(如Motif)主要设计目的为提供观感元件,如标题列、按钮、滚轴等。

1.3.2 GUI环境

Linux提供走多样化的选择而GUI环境也不例外。Linux提供多种不同的图形化环境,其中最常使用的是Gnome与KDE,虽然有许多他的选择但最受欢迎的就是这两种GUI环境,也许是因为Linux两大发行厂商搭配使用这两种环境,故可以随着个人的喜好来选择使用任何一种图形化环境。Oracle的GUI公用程序以Java撰写,并且直接使用X窗口,与窗口管理员无关。



概述

图形化使用者接口(Graphical User Interface,GUI)桌面是一种图形化环境,登入后可以使用Linu 系统,对于熟悉Microsoft Windows操作系统的使用者,这是一种相似的概念。GUI桌面提供系统工具与应用程序简易的操作方式,而不须面对艰涩枯燥的文字界面模式。GNOME与KDE是主要的桌面环境,提供一样的功能但有不同的外观,GNOME桌面环境在1997年来自于GNU Project,GNOME为GNU Network Project Model Environment的简写KDE则大约在1996年发表,为K Desktop Environment的简写。

无论是否执行GNOME或KDE的桌面环境,Oracle Java公用程序均可运作良好,为了执行这些公用程序必须使用支持Java的X窗口服务器。

图形化桌面环境很实用,但不是必要工具,OEM是否完全为网页接口也不是绝对性的因素,网页为基础的管理接口仅是众多选项的其中一个。

事实上,大多数Oracle Database服务器的系统使用者,几乎没有使用这个环境,因为无论是系统或数据库的管理者,几乎都透过网络及远程来管理OS与数据库。对于像是安装软件及使用工具,如Oracle Enterprise Manager、GNOME及KDE都非常方便。

熟悉使用这个工具之后,或许可以更轻松的处理部分工作,其它的工作可以很简单的透过文字接口处理,无论使用何种接口或工具都可依个人偏好选用。

GNOME

GNOME桌面程序为KDE工具的另一种免费选择,初期有部分版权问题,非技术背景使用者将GNOME视为一种免费开放的Linux操作系统使用方式。

GNOME桌面程序由多种不同的开发工具与API所建立,让开发人员可以强化GNOME环境也可以开发原始应用程序,虽然可以自制GNOME专用的应用程序,但这不是绝对必要的,X窗口与Java应用程序即可顺利运作。


KDE

KDE桌面环境(K Destop Environment,KDE)比GNOME更早发行,为CDE(Common Desktop Environment)之后的主流,主要由多家主要UNIX厂商所开发的商业化產品,虽然KDE与GNOME有许多相似之处,但KDE卻有许多版权的爭议,若想要开发KDE商业化的应用程序,就必须先购买KDE开发执照,再撰写应用程式。

KDE也是由多个开发工具及KDE环境专属应用程序组合而成,除了Linux之外,有多种作业系统支援GNOME与KDE 。


1.4 Linux网页伺服器公用程式

Linux初期以网页服务器最受欢迎,然后才被系统管理员视为絕佳的Oracle服务器。
Linux內含史上最強的网页服务器-Apache网页服务器。


1.4.1 Apache网页伺服器

Apache网页服务器是一种开放原始码的HTTP网页服务器,可以在多种平台执行,包括Linux、UNIX与Windows作业系统。Apache网页服务器除了可以在Linux作业系统取得之外,也可以在Oracle的Internet Application Server (IAS)与IBM的WebSphere Apache网页服务器以可调性著称,可搭配使用多种数据库產品,包括Oracle DB/2等,Apache网页服务器的效能相当於其他商业化网页服务器,直到2003年有62%的网页伺服器採用Apache HTTP服务器。

Apache HTTP服务器有多个模组,包括PERL模组、验证模组与代理服务器模组,许多公用程序提供分析Apache日誌档的功能。

Apache网页服务器与Linux作业系统,提供多种开发应用程序的方式,包括各种开发语言(如Java与PHP)。PHP为很常见的网页应用程式开发方式,其他包括资料库的内容。

1.4.2 Linux的CGI程序设计

为了让网页使用者存取Oracle资料库,必须使用CGI技术。Apache HTTP服务器支援多种CGI语言,其中包括mod_perl与PHP 。mod_perl是Apache网页服务器可选用的模组,內嵌PERL直译器,可避免每次呼叫PERL直译器所造成的重新啟动问题,HTTP服务器內建的模组则可避免负荷过载的问题。

PHP (PHP的全名为Hypertext Processor)目前最常被使用於Linux与Apache的CGI制作,PHP 是Oracle Internet Application Server建立网页应用程序的其中一个常用工具,存取Oracle所使用的PHP应用程序,我们将於稍后章节来详细地說明。

1.4.3 Linux开机过程

开机管理程序(Boot Loader)负责啟动Linux作业系统,Linux提供不同的开机管理程序,分別为Lilo与Grub。Grub是较新的开机管理程序,且大多採用此开机管理程序,这是最好开机管理程序,支援像是使用设定档的功能,开机流程如下:

第一阶段 - 主要的开机管窄程式

首先,硬体的BIOS会呼叫主要的开机管理程序,主要开机管理程式的程序码很小,仅负责带出第二个开机管理程序。BIOS负责从磁碟的特定区域中啟动程序码,在此为主要的开机管理程序,主要开机管理程式被啟动之后,将开始执行比较大的第二个开机管理程序。

第二阶段 - 第二个开机管掣程式

第二个开机管理程序,存放內容为作业系统的特定程序码,这些程序码放置於/boot磁区,GRUB开机管理程序将显示开机可选用的作业系统选单,在此可选择想使用的作业系统或 核心,如此一来,GRUB会继续进入到下一个步骤,就是载入OS。

第三阶段 - 载入OS

此阶段将载入OS,在部分安装过程中,会使用RAM磁碟载入驱动程序,RAM磁碟又称为initrd或初始化RAM磁碟,需要载入SCSI装置驱动程序,因此,只要建立新的Linux核心,就必须建立新的initrd映像档。
当OS被啟动之后,控制权被转移到/sbin/init程式,/sbin/init程式接着啟动服务与工具,/shin/init程序也会掛载OS一般作业所需的档案系统,此阶段完成后Linux系统即准备完成。


1.4.4 原始码

Linux的其中一个优点就是免费的从因特网取得原始码,也就是Linux发行版本,若选择安装核心原始「套件(Package)」则安装至/usr/src目錄,在此目錄下,可以看到依照Linux原始码版本命名的目錄夹,如/usr/src/Linux-2.4除了可以看別Linux核心原始码之外,也可以在此目录下找到装置驱动程序,Linux原始码安装完成后,不但能重编核心也能新增额外的装置驱动程序。

在许多情况下,因为rmp或安装套件会自动重建核心,所以不一定需要手动重建Linux核心。但是,在部分特殊情況下仍需要手动重建Linux核心,这种情况将在下一个部分讨论。

1.4.5 重建Linux核心

通常不需重建Linux核心;但也许会因为做了某些设定而必须重建核心,在此情況下就必须按照以下步骤建立自订的核心。

⒈ 确认是否已安装Linux原始码套件,或至下载,但是Enterprise Linux不须执行此步骤。

⒉ 执行make mrproper指令,这个指令可以清除资源树並移除不必要的多余档案,可以确保顺利建立核心。

⒊ 建立.config档案,可以到/usr/src/linux-2.4/configs目錄对.config档案进行了解。2.4.21-i686-hugemem.config为命名的档案,请找出最适合的核心设定模式,若系统配置一个以上的处理器,请选用以smp为名的核心设定档案,若系统有大於4GB的RAM,请选择以hugeem为名的档案。

⒋ 自定设定档案。可以透过编辑档案或使用make menuconfig指令执行Linux核心设定公用程序(如图1-3)此外,也可以使用make config、make xconfig或make oldconfig指令建立核心设定档案。







⒌ 建立自订核心之前,有三种方式编辑 .config档案:make config、make menuconfig与mak xconfig。

⒍ 设定档建立完成后,执行make dep可建立核心的相依性。

⒎ 执行make clean清除核心树(Kernel Tree)。

⒏ 执行make bzlmage可建立Linux核心,並可透过编辑makefile确认预设的核心是否被覆写。在Red Hat的版本中,通常在核心名称的最后以EXTRAVERSION起始的标签。

⒐ 执行make modules指令以建立Linux模组。

⒑ Linux模组建立完后,可透过make modules_install指令安装这些模组,这个步骤可将模组安装至适当的目錄,安装模组的目錄中,包括核心版本号码。例如:自订核心,目錄会类似于/lib/modules/2.4.21.4ELcustom/kernel/drivers。
⒒ 执行make install指令以安装Linux kernel。这个指令可执行多种功能,包括复制核心至开机磁区,建立新的initrd映像档,以及在开机程序档中新增一笔纪錄。
完成以上步骤之后,即可啟动核心。

1.5 行程与执行绪

Linux作业系统中,有多个程序同步地运作,在作业系统內这些「程序」也就是所谓的行程,每一个行程有各自的虛拟记忆体空间并各自独立运作,下一个将会介绍Oracle透过多个不同的行程执行不同的功能,执行绪意指单一行程內成串执行的指令,就像是一个应用程序中有多个同时进行的程序,因为採用了执行绪而非行程,所以Linux的架构有一些优势,核心也采用同樣的架构,而大多数的核心程序设计员強烈建议使用此相关程式。下一个部分将有更详细的說明。

1.5.1 什么是行程?

行程有相关的记忆体与CPU循环,因为行程是一个程序,负责执行功能并在处理器上执行。

行程由作业系统使用。Linux的工作排程器负责为使用者排程所有的行程,每一个行程执行数毫秒,並在其他程式载入前取得CPU使用权,此作业称为工作切換(Task Switch)或內容切換(Context Switch ),可确保所有执行中的程序式,都可以拥有部分的处理器时间。在核心內,行程由多个不同元件组成;程序码(“text”)、资料、堆栈变数、档案l/O资讯与讯号表,行程切換过程中,这些元件也随之复制入/出记忆体。

系统内,每千分之十秒执行一次內容切換作业,虽然仅是Linux作业系统中的一小部分,但其代价极高,为了最小化內容切换的代价,因此发展出Light Weitht Process或Thread。

1.5.2 Oracle使用的行程

Oracle的架构主要为使用多个行程,Oracle由多个行程分別执行不同的功能组合而成,此部分将于稍后详述,此外,透过多个不同行程执行於不同的CPU,Oracle可达成最佳的弹性化。

1.5.3 执行绪 是什么东西?

透过多个行程共享部分的共用资讯,执行绪可达到最小化的內容切換成本。若有多位使用者同时执行一个程序,即可将程序载入记忆体,而同一个程序的记忆体与堆栈变数,籍着多动堆栈指标,可同时提供不同的实体执行。如此一来,便可降低內容切換,因为变动的只有堆栈指标的部分。

这些执行绪作业仅发生于较大內容的行程,因此不同程式所执行的不同行程,仍需要各自执行內容切换,也称为使用者空间(User-Space)执行绪。

除了使用者空间执行绪之外,还有由作业系统执行的核心空间(Kernel-Space)执行绪,可提供核心使用执行绪,所以非常有效率。

1.6 装置

Linux作业系统由许多装置组合而成,装置可被视为一个传送输出/入路径的档案,部分档案代表硬件其他则是软件元件,无论档案为硬件或软件元件,基本上都是负责I/O导引的工作。

系统內有许多硬件装置,例如:软碟、硬碟及网络装置等。装置被划分为两个类別:字元装置(Character Device)与区块装置(Block Device)。

1.6.1 字元装置

字元装置(Character Device)负责序列的方式传送使用者行程的数据至装置,区块装置则偏向随机的处理数据,其部分字元装置的范例如下:

■ 磁带装置。

■ 软驱装置。

■ 终端机装置。

■ 列印装置。

■ 音效装置。

除此之外,程式也可以存取字元装置,通常使用区块装置,Oracle使用字元装置存取数据储存装置,但是Oracle的字元装置使用区块介面,稍后将会有更详细的說明。

1.6.2 区块装置

区块装置(Block Device)可缓冲I/O,而且可以处理特定的数据需求。区块装置可随机存取,字元装置则可接收任意大小的需求,此为区块装置只可以存取固定区块大小的需求,此为区块装置的原因。区块装置含:

■ 记忆体磁碟。

■ SCSI磁碟装置。

■ CD-ROM装置。


1.6.3 逻辑磁区管理员

Oracle数据库除了可以使用字元装置或档案系统,也可以使用LVM作为其储存装置。逻辑磁区管理员(Logical Volume Manager,LVM)是一种储存装置的管理软体,把来自於不同实体磁碟的磁区,结合成一个逻辑磁区,此种管理不但提供很好的效能,也能方便的使用。LVM的特性如下:

■ 聚合性的储存装置 将许多个別独立的磁碟装置,合併为单一逻辑磁碟装置。

■ 虛拟化的储存装置 即使是已经被使用的储存装置,仍可重新设定、新增与重新定义大小,並可以新增储存装置到使用中的磁区。

■ 快照(snapshot) LVM提供资料的快照功,因此可以更快速且更有效率的备份资料。

多年前Oracle即开始使用LVM作为储存装置,如今Linux LVM已经愈来愈普遍,并提供多种选择的类。


1.6.4 自动储存管理

自动储存管理(Automatic Storage Management,ASM)是Oracle对应LVM的功能,ASM是特别为Oracle发展的LVM,提供Oracle储存装置虚拟化阶层的功能,透过磁盘群组的形成,ASM简化Oracle的储存管理并可存放Oracle数据以及记录文件,因为使用ASM,所以可以自动存放档案群组的实体数据,以及自动的管理数据表空间( Tablespace)。ASM主要设计目的为简化与最佳化Oracle数据库,并且提供另一种使用的选择。

1.7 档案系统

Linux系统大多使用档案系统作为储存装置,档案系统在区块装置的上层,主要可供使用者存取磁盘装置,架构包含目录与档案,档案系统建立于磁盘装置的最上层,并配置快取记忆 体(Cache)可管理磁盘装置的存取。

档案系统具有抽象化的特性,例如:目录提供阶层式储存结构。目录是一种结构,可放置其它目录或档案,档案则可以存放资料。

档案系统的另一个特性为基于安全性考量,可以对目录或档案定义存取权限。
档案系统也具备其它特性,例如:集群系统内执行及日志数据的写入。至于其它特殊的档案系统及其特性将在下一个部分讨论。

1.7.1 ext3

Linux最常使用的档案系统即为ext3,这是一种以ext2为基础的日志式档案系统,若系统不正常的重新开机,则日志式档案系统可减少大量的系统变更写入时间,这种工作可能会耗费数小时处理数千兆位组的储存装置,在日志式档案中,一旦变更磁盘,则会及时写入称为「日志」的特殊档案。日志式档案系统与Oracle的重置日志档很类似,当发生电源失效或其它问题的时候,这时便可修复系统不一致的问题,日志式档案系统已行之有年,而且快速又稳定。

1.7.2 OCFS

OCFS极为Oracle集群档案系统(Oracle Cluster Filesystem),Oracle集群档案系统是一种Oracle的档案系统,可以让多个系统使用同一个档案系统,改善Oracle l0g应用程序实体集群(Real Application Clust RAC)系统存取共享储存装置的问题。

OCFS的优点为可以在集群系统中使用档案系统,并可简单的管理RAC系统内的数据文件。透过OCFSE即可与其它档案系统一样的建立数据文件,并设定自动的增加档案,而其它的档案也可以视需求加入。


1.7.3 RAW装置

Oracle也支援RAW装置,Oracle使用RAW装置代档案系统。Oracle RDBMS管理全部的储存装置,此外,Oracle大多使用RAW装置,主要原因为效能表现良好,因为不需处理档案系统,所以免除存取档案系统的程序代码便可减低CPU使用率。而管理Oracle的RAW装置却可能较为复杂困难。

在OCFS之前,通常需要使用RAW装置建置Oracle RAC数据库。

透过RAW装置,Oracle负责管理数据储存装置,而且因为Oracle RAC集群管理与集群系统的效能相当,所以可以解决系统的协同问题。RAW装置的管理有限制与困难性,在Oracle 10g的版本提供了几种RAC集群的选择:RAW装置、OCFS或ASM。

总结

本章介绍Linux操作系统。概述目录架构、可使用工具、以及如何设定部分的重要组件,为了更适当的管理Oracle数据库,必须熟悉所使用的OS,我这里并未涵盖完整的Linux管理指南,可以参考市面上许多相同主题的好书。

下一章要讨论Oracle的架构,可以开始了解如何将两者结合。并且在下一章学习Oracle数据库架构,以及如何在Linux上管理Oracle数据库。



请继续参阅第三篇......










出处:南方Linux
阅读(633) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~