Linux内核多语言文件子系统的设计与实现.pdf
《Linux内核多语言文件子系统的设计与实现.pdf》由会员分享,可在线阅读,更多相关《Linux内核多语言文件子系统的设计与实现.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机科学2 0 0 5 V 0 1 3 2 N o-7L i n u x 内核多语言文件子系统的设计与实现芮建武谢谦吴健孙玉芳(中国科学院软件研究所开放系统与中文信息处理中心北京1 0 0 0 8 0)摘要操作系统的多语言支持是网络环境下计算机软件发展的必然结果。由于P O S I X 标准的国际化体系结构对多语言和分布式应用需求的支持有其局限性,导致遵循P o S I X 标准的L i n u x 文件予系统在支持多语言文本时可能造成数据丢失。本文从多语言角度考察了L i n u x 文件子系统,重新构造了一个能够支持U r r i c o d e 编码的逻辑文件系统E X T 2 U,改
2、进了文件予系统,同时提供7 基于U n i c o d e 编码的系统调用接口。通过新文件系统与系统调用接1:2,为操作系统多语言处理提供了更好的基础。关键词文件子系统,多语言化,U n i c o d e,E X T 2 UD e s i g na n dI m p l e m e n t a t i o no fL i n u xF i l eS y s t e mS u p p o r t i n gM u l t i l i n g u a l i s mR U IJ i a n-W uX I EQ i a nW UJ i a nS U NY u F a n g(O p e nS y
3、s t e m C h i n e s eI n f o r m a t i o nP r o c e s s i n gC e n t e r,I n s t i t u t eo fS o f t w a r e,C h i n e s eA c a d e m yo fS c i e n c e s,B e i j i n g1 0 0 0 8 0)A b s t r a c tM u l t i l i n g u a l i z a t i o no fm o d e r no p e r a t i n gs y s t e mi sn e c e s s i t a t e do
4、 nt h eI n t e r n e t S i n c ei n t e r n a t i o n a l i z a t i o na r c h i t e c t u r ec o m p l y i n gt OP O S I Xh a sl e s ss u p p o r tf o rm u h i l i n g u a la n dd i s t r i b u t e da p p l i c a t i o n s,L i n u xf i l es y s t e md i r i v e df r o mP O S I Xm a yl o s ed a t ai
5、 ns t o r i n gs o m em u h i l i n g u a lt e x t B a s e do nL i n u xf i l es y s t e m,an e wF i l eS y s t e mc a l l e dE X T 2 Ui sp r e s e n t e d,w h i c hs u p p o r t sm e t a d a t ae n c o d e db yU T F 一16 M e a n w h i l e,v i r t u a lf i l e s y s t e ms w i t c hi nL i n u xk e r
6、n e li si m p r o v e da n das e to fs y s t e mc a l l su s i n gad a t at y p es p e c i a lt oU T F 一16a r ep r o p o s e d b ym e a n so fE X T 2 Ua n dn e ws y s t e mc a l l s,t h ea b i l i t yt op r o c e s sm u l t i l i n g u a li n f o r m a t i o nc a nb ea c h i e v e de a s i e ri nL i
7、 n u x K e y w o r d sF i l es y s t e m,M u l t i l i n g u a l i z a t i o n,U r f i c o d e,E X T 2 U1 问题的提出1 1 多语言环境现代操作系统应为用户提供一个多语言环境。多语言环境要求:(1)为用户提供多语言用户界面,除用户可以选择自己使用的语言外。2)为开发人员提供多语言编程界面,使用应用程序具有输入与输出多种语言文本的支持。3)提供多语言信息的存储能力。其中,系统对多语言信息的存储是最基础的系统支持,由文件系统来实现。1 2 文件系统与编码方案通常所说的文件系统可能包含以下的方面:
8、(1)已格式化的存储介质,例如硬盘的一个已格式化分区;(2)存储在物理文件系统中的所有信息;(3)特定的文件组织格式,例如E X T 2、F A T 3 2 等文件系统格式,可以把它看作是逻辑文件系统;(4)操作系统中对物理文件系统中的信息进行管理和操作的模块。首先,不同的文件组织格式形成不同的逻辑文件系统,其实现是不相同的。其次,文件系统中存储的信息也与文件子系统的实现有关。我们把存储在物理文件系统上的信息分为两个类别:1)用户实际存放的信息;2)标识某一信息的信息,称为元信息。作为文件系统来说,最关键的是那些标识信息的信息。至于文件系统中文件的内容根据用户的需要存储,因此与文件系统结构本身
9、无特别的关联。元信息对文件系统的组织结构至关重要。例如,如果用户需要把某些信息存储到文件名为“L i n u x系统混合文本示例”的文件中,则文件系统将创建文件结构,把此文件结构的“名称”字段标记为“L i n u x 系统混合文本示例”。当用户需要再次访问此文件时,文件系统会根据路径找到“L i n u x 系统混合文本示例”文件的文件结构。查找过程中使用比较操作:把文件系统中的有关文件结构的“名称”字段信息与字符串“L i n u x 系统混合文本示例”进行比较,如果找到匹配的文件结构记录,则此文件结构所指定的信息就是所要找的内容。可以看出,在进行字符串比较时,文件系统中文件结构的数据与要
10、查找的字符串应该在编码上一致。计算机发展历程出现过许多的编码方案,相互之间未必兼容。这些编码方案包括:英文的A S C I I 编码,欧洲国家的I S O8 8 5 9 系列编码,中国使用基于G B2 3 1 2、G B K、G B1 8 0 3 0等标准的编码,还有H Z、B i 9 5 编码等。鉴于不同字符集编码之间的不兼容现象造成信息处理与共享的极大困难,国际标准化组织制定了I S O I E C1 0 6 4 6 标准口1 与U n i c o d e 联盟制定了U n i c o d e 标准 2 ,以统一的代码点结构收录了世界上大多数语言,二者相互对齐。这使得计算机软件实现多语言支
11、持有了更好的基础。可以看出,如果文件系统同时采用不同的编码方案,将造*)基金项目:国家8 6 3 计划软件重大专项民族语言版本L i n u x 操作系统及办公套件研发(项目编号:2 0 0 3 A A l Z 2 1 1 0)和中国科学院知识创新工程方向性项目基于L i n u x 的跨平台藏文信息处理系统(项目编号:K G C X 2 一S w 一5 0 4)联合资助。芮建武博士研究生。主要研究方向为操作系统与中文信息处理谢谦博士研究生主要研究方向为操作系统中与中文信息处理。吴健副研究员,主要研究方向为系统软件与中文信息处理孙玉芳研究员,博士生导师,主要研究方向为系统软件与中文信息处理。2
12、 3 4 万方数据成文件系统上信息的混乱。当我们使用编码方案A 来表示字符串“L i n u x 系统混合文本示例”时,系统正确地找到了此文件;当使用编码方案B 时,将无法找到此文件。文件系统本身提供的系统接口实际上隐含了这一事实:它使用编码方案A而不是编码方案B。因此,对文件系统来说需要约定:使用某种编码方案来表示文件系统内部的元信息。2目前L i n u x 文件子系统体系结构P O S I X 标准中把一个字符定义为“代表单个图形符号或控制代码的一个或多个字节的序列”,把一个字符串定义为“以值为零的字节(代表N U L L)结尾的一个连续字符序列或仅包含一个值为零的字节的空字符串”。同时
13、,基于P O S I X 标准的具可移植性的编程接口中使用指向字符的指针(c h a r*)作为参数来传递文件名和路径名等文件系统元信息。这样,实际上约定:在表示这些元信息的字符串编码中不应该存在包含值为零的字节,否则,信息将被从值为零的字节处截断。这种约定与广泛使用的I S O I E C2 0 2 2 标准 3 的编码体系一致。这种编码体系以A S C I I 编码为基础,扩充后支持世界上其他大多数语言。基于此编码体系的所有编码方案中,其代表的字符串编码的中间都不会包含值为零的字节。L i n u x操作系统完全遵循P O S I X 标准,在文件子系统提供的接口中,使用字符串类型(c h
14、 a r*)来传递有关文件系统元信息的参数。因此L i n u x 文件系统可支持那些与I S O I E C2 0 2 2 标准相兼容的字符编码方案。采用这样的编码方案有以下的缺点:(1)它们仅覆盖某些字符集,如G B2 3 1 2 等。(2)同时支持多语言时需要进行编码转换。编码之间的转换复杂且系统开销很大。克服这些缺点可使用U n i c o d e 标准所指定的编码形式,它可覆盖世界上所有语言并且通常无需编码转换。L i n u x 操作系统中本地环境(L o c a lE n v i r o n m e n t,简写为L o c a l e)属于国际化与本地化机制的基础部分。用户使用
15、计算机时,总是基于一个本地环境,所有的输入与默认的输出都由L o c a l e 环境所定义的编码字符集为基础,我们称基于L o c a l e定义的字符集所使用的编码为本地编码。然而,用户可能会改变应用程序所使用的本地环境。例如,用户在应用程序A 中使用本地环境为z h C N G B 2 3 1 2(简体中文,G B2 3 1 2 编码方案),他创建了一些文件或目录。用户也可能基于本地环境z h T W B i 9 5(繁体中文,B i 9 5 编码方案)使用应用程序B 进行了一些有关文件的操作。所有这些信息都会在文件系统中保存下来。其结果是:文件系统中既有G B2 3 1 2 编码,又有
16、B i 9 5 编码的信息。事实上,它可以存在任何与I S O I E C2 0 2 2标准一致的编码方案所指定的信息。在这样的情况下,文件系统中存储的信息呈现混乱现象,使用我们难以确认其中信息的具体内容。文件所有者可能会知道这一串数据采用什么编码,代表什么样的内容,但是,如果遗忘了其编码方案,也许就难以正确理解这些信息了。L i n u x 文件子系统分层结构使用了一个抽象层虚拟文件系统切换(V i r t u a lF i l e s y s t e mS w i t c h,V F S)【4 5 J。V F S 屏蔽了所有逻辑文件系统的特殊属性,提供了一个统一的系统接口。用户使用统一的系
17、统接口对文件子系统进行操作。L i n u x 文件子系统把文件分为普通文件、目录文件、符号链接文件、设备文件、管道和套接字(S o c k e t)等,V F S 对不同类型的文件根据其各自特性来实施相应的操作。当用户对文件进行操作时,文件子系统首先根据用户指定的文件位置,确定文件所属的逻辑文件系统;其次建立相应的V F S 对象,把逻辑文件系统对应的函数入口点加入到这些V F S 对象的操作集合中。这些函数入口点实际上对应了相应逻辑文件系统的接口及其驱动程序。这样,用户就可透明地实现对文件系统相应信息的存取。L i n u x 文件子系统支持V F A T、E X T 2 等多种逻辑文件系
18、统。通过对L i n u x 内核文件子系统源码进行分析,我们得出如图1(a)所示的L i n u x 文件子系统结构图。5 系统设计5 1 系统目标通过对L i n u x 内核口 进行分析后可以看出:L i n u x 内核文件子系统处理本地编码的文件系统元数据。这种策略导致文件子系统所存储的信息混乱。因此,支持多语言的文件子系统需要:(1)明确指定文件子系统元数据使用的编码方案,根据前面的分析,使用U n n i c o d e 编码才能无二义地表示用户信息;(2)提供基于相应编码方案的系统调用接口。U n i c o d e 标准 2 定义了如下的标准编码形式:U T F 一8,U T
19、 F 一1 6,u T F 一3 2。这些编码形式各有优缺点:(1)U T F 一8 编码形式。优点:(a)可实现对P O S I X 类应用程序编码接口的兼容;(b)动态扩充U n i c o d e 标准所支持的语言文字;(c)存储A S C I I 字符集的字符时U T F 一8 编码不需要额外的空间。缺点:(a)尽管P O S I X 类编程函数在语法上仍适用于U T F 一8 编码,然而语义上并不相同。这同样会造成信息存储的混乱,因此在某些应用中使用U T F 一8 编码来支持多语言会付出较大代价;(b)与操作系统其他部分兼容经常需要转换编码,影响系统效率;(c)与上层系统库(如G
20、l i b c、Q t、I C U 等)编码方案的不一致性将潜在性地影响系统可扩充性;(d)汉字字符增加5 0 的空间。(2)U T F 一1 6 编码形式。特点:(a)存储A S C I I 字符集的字符时增加了5 0 的空间,但是不增加存储汉字的空间;(b)它属于变长编码方案;(c)它与现存的类P O S I X 操作系统有一定程度的不兼容。(3)U T F 一3 2 编码形式。特点:(a)覆盖所有的I S O I E C1 0 6 4 6 的编码空间,在可扩充性方面没有任何障碍;(b)对每个字符使用4 个字节,导致耗费更多的内存与外存空间。根据P O S I X 可移植性标准,使用u T
21、 F 一16 编码会导致编码接口语法的不兼容问题。如果我们选择U T F 一8 编码,会导致语义不兼容问题。本文经过分析比较后认为:语义的不兼容问题会造成系统维护或可移植性方面的更大代价。因此,在全面考察了目前各种软件系统使用U n i c o d e 编码来支持多语言的现状及对各编码形式进行分析之后,我们选择U T F 一1 6 编码形式。3 2 改进的文件子系统体系结构通过改进现有的文件子系统,可得出支持多语言的文件子系统结构图,如图1(b)所示。图中细线双箭头表示两模块之间交换数据信息时使用本地编码;粗双箭头表示使用U n j c o d e 编码;虚线双箭头表示模块之间存在本地编码与U
22、 n i c o d e 编码之间的编码转换。从图1(b)可以看出,支持多语言的文件子系统包括以下部分:(1)逻辑文件系统E X T 2 U;(2)支持U n i c o d e 编码的虚拟文件系统及基于U n i c o d e 编码的系统调用接口;(3)系统完整性设计,包括对V F A T、E X T 2 及P R O C 逻辑文件系统的支持。2 3 5 万方数据(a)现有系统结构(b)改进后的系统结构图1L i n u x 文件子系统结构图5 5 逻辑文件系统E X T 2 U本文以E X T 2 文件系统为基础,建立一种新的逻辑文件系统E X T 2 U(S e c o n dE x
23、t e n d e dF i l eS y s t e mf o rU n i c o d e)。E X T 2 U 与E X T 2 有不同的操作语义。所谓操作语义表现在两个方面:(1)E X T 2 U 内部的元数据将以U n i c o d e 编码形式存储,而不使用本地编码;(2)E X T 2、E X T 2 U 与虚拟文件系统的接口不同。由于虚拟文件系统内部使用U n i c o d e 编码,因而它与E X T 2、E X T 2 U 之间的接口不一致,并且存在编码转换。除此之外,E X T 2 U 在存储结构上与E X T 2 完全相同。5 4 虚拟文件系统支持多语言的文件子系
24、统内部默认使用U n i c o d e 编码。作为逻辑文件系统的抽象层,虚拟文件系统也基于U n i c o d e编码。它主要实现:(1)提供各种逻辑文件系统的抽象,主要包括目录项结构(s t r u c td e n t r y)、i 结点(i n o d e)、文件结构(s t r u c tf i l e)等。其中用于表示文件系统元数据的数据结构应该使用支持U n i c o d e 编码的数据类型。(2)提供文件子系统的基于U n i c o d e 编码的系统调用(s y s t e mc a l l)。这些系统调用在接口上与原先的系统调用不同,对于文件系统的元数据也应该使用支持
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 内核 语言 文件 子系统 设计 实现
限制150内