CN115185906A - 一种针对NandFlash的轻量级文件管理方法及系统 - Google Patents
一种针对NandFlash的轻量级文件管理方法及系统 Download PDFInfo
- Publication number
- CN115185906A CN115185906A CN202210692952.9A CN202210692952A CN115185906A CN 115185906 A CN115185906 A CN 115185906A CN 202210692952 A CN202210692952 A CN 202210692952A CN 115185906 A CN115185906 A CN 115185906A
- Authority
- CN
- China
- Prior art keywords
- block
- page address
- actual physical
- virtual
- bad
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1727—Details of free space management performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/109—Address translation for multiple virtual address spaces, e.g. segmentation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
一种针对NandFlash的轻量级文件管理方法及系统,是指根据空间飞行器对NandFlash的使用需求设计的一种轻量级文件管理系统。生成方法步骤为:(1)建立存储在NandFlash中的坏块表、对应表,给上层应用软件提供一个可以连续访问的虚拟存储空间,并对上层应用软件屏蔽坏块信息;(2)实现虚拟地址到实际地址的映射,实现快速在对应表中找到坏块对应的替换块的块号;(3)提供对页数据备份存储和累加和校验功能,可选择本专利提供的备份存储功能,以保证数据的可靠性;(4)提供采用虚拟地址或文件名称两种方式对数据进行访问的功能,在进行按文件名称写入操作时,系统会先查询文件名称与虚拟页地址对应表。
Description
技术领域
本发明涉及一种针对NandFlash的轻量级文件管理系统,本方法通过对NandFlash坏块信息的提取和存储,设计了一种从虚拟地址到实际地址的映射算法,提供对页数据备份存储和累加和校验功能,可以采用虚拟地址或文件名称两种方式对数据进行访问,实现了一种通用嵌入式软件针对NandFlash的轻量级文件管理系统。
背景技术
随着航天电子技术的发展,航天飞行器的功能和原理变得日益复杂,需要性能更好的存储器。近年来,由于NAND Flash具有访问速度快、体积小、防震抗摔、非易失性,以及安全可靠等特征,使得其成为嵌入式系统的首选存储介质,尤其是在航天领域。由于现有的磁盘存储技术不能直接运行在NAND Flash设备上,需要在NAND Flash存储系统中引入了文件管理系统实现对NAND Flash的管理。由于航天器产品对访问时间和缓存空间的限制,地面电子产品的文件系统很难直接用于航天器产品,因此需要一种适用于航天器产品的针对NAND Flash的轻量级文件管理系统。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供一种针对NandFlash的轻量级文件管理方法及系统,通过实际应用,能有效满足系统要求,解决NAND Flash存储器使用方面存在的困难。
本发明的技术解决方案是:一种针对NandFlash的轻量级文件管理方法,包括:
将NandFlash每片的第0块作为保留块,每片的第1块到第n块之间的块作为替换块区域;其余块作为虚拟存储空间对应的实际物理空间;
将NandFlash的出厂坏块信息读出并存储在坏块表中,在坏块和替换块之间建立映射关系,形成块对应表;
将初始化标志、坏块表和块对应表存储在所述保留块中;
建立虚拟存储空间中虚拟页地址与实际物理空间中实际物理页地址之间的映射关系;
上层应用软件实际访问过程中,连续访问虚拟存储空间,根据虚拟页地址确定实际物理页地址,再确定实际物理页地址对应的块号,根据块号结合坏块表及块对应表,找到坏块对应的替换块的块号,进而得到替换块对应的实际物理页地址,进而为上层应用软件提供一个连续访问的虚拟存储空间。
优选的,所述坏块表采用在一个比特位对应存储一个块是否为坏块的信息,默认值为1,表示好块;如果该块为坏块,则将该比特位设置为0。
优选的,n由Nand Flash的坏块率确定,n的取值下限是满足出厂坏块比率的最坏情况;n的取值上限,应当在满足上层应用软件所需的足够的Nand Flash虚拟空间大小的条件下,考虑航天器的在轨工作年限要求,配置足够大的数值,即足够数量的可用于替换的块。
优选的,从虚拟页地址到默认实际物理页地址的计算公式为:
cs=viPage/((BN-B_START)*PN);
clPage=viPage+((cs+1)*B_START*PN);
其中:viPage-输入的虚拟页地址;cs-默认实际物理页地址所在的片号;B_START-每片中应用软件可用块的开始块号;clPage-默认实际物理页地址;NAND Flash中每个基片有BN个块,每块有PN个页。
优选的,所述块对应表定义为一个无符号的16位数组空间;数组元素大小为全部块数,下标为块号,当数组下标对应块为坏块时,元素的值为用于替换的块的块号;当数组下标对应块不为坏块时,元素的值为一个常量。
优选的,对数据进行写操作时,将数据分别存储在不同的块中,且存储三份;当一份数据所在的块在使用过程中称为坏块时,在读访问时通过三取二的方式获得正确的数据。
优选的,在每页的末尾预留4字节空间作为页数据的字累加和校验位;在对实际物理页地址进行写访问时,会在校验位中写入页数据的字累加和的反码;在对实际物理页地址进行读操作时,只有当页地址内所有数据包括校验位按字进行累加和为0xFFFFFFFF时,才认为数据的有效并正确的。
一种针对NandFlash的轻量级文件管理方法,包括:
将NandFlash每片的第0块作为保留块,每片的第1块到第n块之间的块作为替换块区域;其余块作为虚拟存储空间对应的实际物理空间;
将NandFlash的出厂坏块信息读出并存储在坏块表中,在坏块和替换块之间建立映射关系,形成块对应表;
将初始化标志、坏块表和块对应表存储在所述保留块中;
建立文件名称与虚拟页地址对应表;
建立虚拟存储空间中虚拟页地址与实际物理空间中实际物理页地址之间的映射关系;
上层应用软件实际访问过程中,如果是写访问,首先查询文件名称与虚拟页地址对应表,若文件名称不存在,则自动为该文件名称分配一个虚拟页地址进行对应;根据该虚拟页地址确定实际物理页地址,再确定实际物理页地址对应的块号,根据块号结合坏块表及块对应表,找到坏块对应的替换块的块号,进而得到替换块对应的实际物理页地址并向其写入文件内容;
写访问中,若文件名称存在,则对文件名对应的虚拟页地址指向的实际物理页地址所在的页空间进行写入操作,新写入的内容会替代原来文件的内容;
如果上层应用软件要进行读访问,首先查询文件名称与虚拟页地址对应表,若文件名称不存在,则返回访问失败;若文件名称存在,则对文件名对应的虚拟页地址指向的实际物理页地址所在的页空间进行读操作。
优选的,文件名称与虚拟页地址对应表保存在NandFlash保留块中,掉电后重新上电,文件名称与虚拟页地址对应表信息可恢复。
一种针对NandFlash的轻量级文件管理系统,包括存储器、处理器;
所述存储器中存储一个或多个计算机软件;
所述处理器运行上述计算机软件,使之实现所述的轻量级文件管理方法。
本发明与现有技术相比的有益效果是:
(1)本方法是一种轻量级的文件管理系统,占用内存空间小;
(2)本方法采用的虚拟地址到实际地址的映射算法执行时间短,结构清晰,逻辑清楚,具有很高的可靠性。
(3)本方法通用性强,适应对象广泛,目前嵌入式系统中均可使用该方法,市场竞争力强。
附图说明
图1为建立坏块表的流程图;
图2为从虚拟页地址到实际页地址的计算流程。
具体实施方式
下面结合附图对本发明的具体实施方式进行进一步的详细描述。
NAND Flash存在坏块,使用时要避免;NAND Flash的读写方式是以页为单位,擦除是以块为单位,访问与常用的RAM和ROM存储器不同,较为复杂。航天飞行器的功能和原理变得日益复杂,上层应用软件需要文件系统的支持,但是现有的文件系统不适合空间受限,时间要求高的航天器嵌入式系统,本发明通过实际应用,能有效满足系统要求,解决NANDFlash存储器使用方面存在的困难
本发明提出一种针对NandFlash的轻量级文件管理方法,该方法通过定义坏块表、对应表等结构,设计了坏块替换策略和虚拟页地址到实际物理页地址的转换算法,实现上层软件采用虚拟地址或文件名称方式对NAND Flash的访问,完全对上层应用软件屏蔽坏块。
本发明支持在NandFlash内部对数据进行备份存储和累加和校验,以保证数据的可靠性。该算法是一种高效的轻量级文件管理系统,占用SRAM空间较少,能满足航天器系统对时间和空间性能的要求。
(1)建立存储在NandFlash中的坏块表、对应表
由于NAND Flash有出厂坏块,所以在对NAND Flash进行擦除前要先将出厂坏块信息读出并保存,避免出厂坏块信息丢失。为了提高对出厂坏块信息的存储效率,本算法采用在一个比特位对应存储一个块是否为坏块的信息,默认值为1,表示好块。如果该块为坏块,则将该比特位设置为0。当需要查询某一块是否为坏块,只需要对块号做简单的位移映射操作,就可以访问到坏块信息。建立坏块表的流程如下图2所示。为了给上层应用软件提供一个可以连续访问的虚拟存储空间,并对上层应用软件屏蔽坏块信息。本文设计了一个虚拟页地址映射算法。假设NAND Flash存储器包括CN个基片,每个基片有BN个块,每块有PN个页。该算法将每片的第0块作为保留块,用于存储初始化标志、坏块表和块对应表。一般来说,NAND Flash生产厂商会保证第0块绝对不是坏块。
为了实现对坏块的替换,该算法将每片的第1块到第n块之间的块作为替换块区域(n由Nand Flash的坏块率确定),用于作为应用软件访问块中坏块的替换块。因此,替换块区域的总块数为(n*CN)。除保留块和替换块区域之外的块,都可以作为虚拟存储空间对应的实际物理空间,用于应用软件的访问,存储数据和代码信息。因此,可用的数据块数为((BN-n)*CN),其有效使用率的计算公式为((BN-n)/BN),记为Fapp。
Nand Flash的生产厂家会在产品说明书中明确说明出厂坏块比率的上限(一般小于5%),因此n的取值下限是满足出厂坏块比率的最坏情况;由于Nand Flash在使用过程中也可能产生新的坏块,新的坏块的产生速度与Nand Flash工作的空间环境状况、产品质量、访问频度等多种因素相关,所以在设置n的取值上限时,应当在满足上层应用软件所需的足够的Nand Flash虚拟空间大小的条件下,考虑航天器的在轨工作年限要求,配置足够大的数值,即足够数量的可用于替换的块,以保证Nand Flash管理系统能应对突发的恶劣空间情况所造成的坏块激增,提高航天器的使用寿命。
(2)实现虚拟地址到实际地址的映射
上层软件对NAND Flash的访问只有页读和页写两种。该算法提供给上层软件的接口如下:
unsigned int
SYS_NandFlash_Page_Operation(
unsigned int viPageAddr,
unsigned int ramAddr,
unsigned int mode,
unsigned int byteLength)
在读写NAND Flash时,上层软件使用连续的虚拟页地址viPageAddr,范围是[0~((BN-n)*CN*PN)],ramAddr是SRAM地址,mode是操作标志(0为读,1为写),byteLength是读写的字节长度,默认为页大小。
从虚拟页地址到默认实际物理页地址的计算公式为:
cs=viPage/((BN-B_START)*PN);
clPage=viPage+((cs+1)*B_START*PN);
其中:viPage-输入的虚拟页地址;cs-默认页地址所在的片号;B_START-每片中应用软件可用块的开始块号;clPage-默认实际页地址。
为了快速在对应表中找到坏块对应的替换块的块号,该算法将对应表定义为一个无符号的16位数组空间。数组元素大小为全部块数,下标为块号,元素的值为用于替换的块的块号(数组下标对应块为坏块)或是一个常量(数组下标对应块不为坏块)。由于保留块位于每片的首块,而出厂规范保证每片的首块一定不是坏块,所以将保留块的首页用于存储标志,之后的页依次用于存储坏块表和对应表。其定义如下:
//坏块表,bit:1好块,0坏块
unsigned int
SYS_NF_BadBlockTable[(BN*CN)/32];
//对应表,对应的替换块号,默认0xffff
unsigned short SYS_NF_BlockMap[BN*CN];
在对应表中,应用软件使用块中,坏块块号下标的数据是好块的块号,其他为0xffff;替换块使用块中,好块用于替换后,其块号下标的数据为0,其他为0xffff。
下图2是从虚拟页地址到实际页地址的计算流程。
(3)提供对页数据备份存储和累加和校验功能
如果相对于应用需要的存储空间,NAND Flash的存储空间较大,可达到3倍以上,可选择本申请提供的备份存储功能,以保证数据的可靠性。在对数据进行写操作时,系统会将数据分别存储在不同的块中,存储三份(每份数据对应一个存储基地址)。当一份数据所在的块在使用过程中成为坏块时,在读访问时可以通过三取二的方式获得正确的数据。
本算法在每页的末尾提出4字节空间作为页数据的字累加和校验位。在对页地址进行写访问时,会在校验位中写入页数据的字累加和的反码。这样,在对页地址进行读操作时,只有当页地址内所有数据(包括校验位)按字进行累加和为0xFFFFFFFF时,才认为数据的有效并正确的。
提供采用虚拟地址或文件名称两种方式对数据进行访问的功能
提供虚拟页地址或文件名称两种方式对存储器进行访问。虚拟页地址的访问方式如前面所述,为SYS_NandFlash_Page_Operation()。
另一种文件名称访问方式提供的接口为:
unsigned int
SYS_NandFlash_File_Operation(
unsigned int*viFile,
unsigned int ramAddr,
unsigned int mode,
unsigned int byteLength)
在进行按文件名称写入操作时,系统会先查询文件名称与虚拟页地址对应表。如果文件名称不存在,内部会自动为文件名称字符串viFile,分配一个虚拟页地址进行对应,调用SYS_NandFlash_Page_Operation()函数,将文件内容写入分配的虚拟页地址对应的空间。如果文件名存在,则系统会对文件名对应的虚拟地址指向的实际地址所在的页空间进行写入操作,新写入的内容会替代原来文件的内容。
文件名称与虚拟页地址对应表也保存在NandFlash的保留块中,根据用户需求配置的,即允许裁剪;当系统掉电后,重新上电,文件名称与虚拟页地址对应表信息可恢复。
如果上层应用软件要进行读访问,本管理方法的处理步骤,首先也是查询文件名称与虚拟页地址对应表,若文件名称不存在,则返回访问失败(失败原因编码含义为“文件名称不存在”);若文件名称存在,则对文件名对应的虚拟页地址指向的实际物理页地址所在的页空间进行读操作。
本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。
Claims (10)
1.一种针对NandFlash的轻量级文件管理方法,其特征在于包括:
将NandFlash每片的第0块作为保留块,每片的第1块到第n块之间的块作为替换块区域;其余块作为虚拟存储空间对应的实际物理空间;
将NandFlash的出厂坏块信息读出并存储在坏块表中,在坏块和替换块之间建立映射关系,形成块对应表;
将初始化标志、坏块表和块对应表存储在所述保留块中;
建立虚拟存储空间中虚拟页地址与实际物理空间中实际物理页地址之间的映射关系;
上层应用软件实际访问过程中,连续访问虚拟存储空间,根据虚拟页地址确定实际物理页地址,再确定实际物理页地址对应的块号,根据块号结合坏块表及块对应表,找到坏块对应的替换块的块号,进而得到替换块对应的实际物理页地址,进而为上层应用软件提供一个连续访问的虚拟存储空间。
2.根据权利要求1所述的方法,其特征在于:所述坏块表采用在一个比特位对应存储一个块是否为坏块的信息,默认值为1,表示好块;如果该块为坏块,则将该比特位设置为0。
3.根据权利要求1所述的方法,其特征在于:n由Nand Flash的坏块率确定,n的取值下限是满足出厂坏块比率的最坏情况;n的取值上限,应当在满足上层应用软件所需的足够的Nand Flash虚拟空间大小的条件下,考虑航天器的在轨工作年限要求,配置足够大的数值,即足够数量的可用于替换的块。
4.根据权利要求1所述的方法,其特征在于:从虚拟页地址到默认实际物理页地址的计算公式为:
cs=viPage/((BN-B_START)*PN);
clPage=viPage+((cs+1)*B_START*PN);
其中:viPage-输入的虚拟页地址;cs-默认实际物理页地址所在的片号;B_START-每片中应用软件可用块的开始块号;clPage-默认实际物理页地址;NAND Flash中每个基片有BN个块,每块有PN个页。
5.根据权利要求1所述的方法,其特征在于:所述块对应表定义为一个无符号的16位数组空间;数组元素大小为全部块数,下标为块号,当数组下标对应块为坏块时,元素的值为用于替换的块的块号;当数组下标对应块不为坏块时,元素的值为一个常量。
6.根据权利要求1所述的方法,其特征在于:对数据进行写操作时,将数据分别存储在不同的块中,且存储三份;当一份数据所在的块在使用过程中称为坏块时,在读访问时通过三取二的方式获得正确的数据。
7.根据权利要求1所述的方法,其特征在于:在每页的末尾预留4字节空间作为页数据的字累加和校验位;在对实际物理页地址进行写访问时,会在校验位中写入页数据的字累加和的反码;在对实际物理页地址进行读操作时,只有当页地址内所有数据包括校验位按字进行累加和为0xFFFFFFFF时,才认为数据的有效并正确的。
8.一种针对NandFlash的轻量级文件管理方法,其特征在于包括:
将NandFlash每片的第0块作为保留块,每片的第1块到第n块之间的块作为替换块区域;其余块作为虚拟存储空间对应的实际物理空间;
将NandFlash的出厂坏块信息读出并存储在坏块表中,在坏块和替换块之间建立映射关系,形成块对应表;
将初始化标志、坏块表和块对应表存储在所述保留块中;
建立文件名称与虚拟页地址对应表;
建立虚拟存储空间中虚拟页地址与实际物理空间中实际物理页地址之间的映射关系;
上层应用软件实际访问过程中,如果是写访问,首先查询文件名称与虚拟页地址对应表,若文件名称不存在,则自动为该文件名称分配一个虚拟页地址进行对应;根据该虚拟页地址确定实际物理页地址,再确定实际物理页地址对应的块号,根据块号结合坏块表及块对应表,找到坏块对应的替换块的块号,进而得到替换块对应的实际物理页地址并向其写入文件内容;
写访问中,若文件名称存在,则对文件名对应的虚拟页地址指向的实际物理页地址所在的页空间进行写入操作,新写入的内容会替代原来文件的内容;
如果上层应用软件要进行读访问,首先查询文件名称与虚拟页地址对应表,若文件名称不存在,则返回访问失败;若文件名称存在,则对文件名对应的虚拟页地址指向的实际物理页地址所在的页空间进行读操作。
9.根据权利要求8所述的方法,其特征在于:文件名称与虚拟页地址对应表保存在NandFlash保留块中,掉电后重新上电,文件名称与虚拟页地址对应表信息可恢复。
10.一种针对NandFlash的轻量级文件管理系统,其特征在于包括存储器、处理器;
所述存储器中存储一个或多个计算机软件;
所述处理器运行上述计算机软件,使之实现权利要求1-9之一所述的轻量级文件管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210692952.9A CN115185906A (zh) | 2022-06-17 | 2022-06-17 | 一种针对NandFlash的轻量级文件管理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210692952.9A CN115185906A (zh) | 2022-06-17 | 2022-06-17 | 一种针对NandFlash的轻量级文件管理方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115185906A true CN115185906A (zh) | 2022-10-14 |
Family
ID=83513422
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210692952.9A Pending CN115185906A (zh) | 2022-06-17 | 2022-06-17 | 一种针对NandFlash的轻量级文件管理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115185906A (zh) |
-
2022
- 2022-06-17 CN CN202210692952.9A patent/CN115185906A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11467955B2 (en) | Memory system and method for controlling nonvolatile memory | |
JP5489434B2 (ja) | フラッシュメモリ搭載ストレージ装置 | |
JP5089385B2 (ja) | フラッシュファイル・システム内での仮想アドレスから物理アドレスへの変換 | |
US7594062B2 (en) | Method for changing data of a data block in a flash memory having a mapping area, a data area and an alternative area | |
JP3708047B2 (ja) | フラッシュメモリの管理方法 | |
US8312204B2 (en) | System and method for wear leveling in a data storage device | |
US7426623B2 (en) | System and method for configuring flash memory partitions as super-units | |
US8612666B2 (en) | Method and system for managing a NAND flash memory by paging segments of a logical to physical address map to a non-volatile memory | |
CN102576332B (zh) | 用于电力中断管理的方法和包含电力中断管理的存储器系统 | |
US20100287217A1 (en) | Host control of background garbage collection in a data storage device | |
US20100205363A1 (en) | Memory device and wear leveling method thereof | |
JP2006216036A (ja) | フラッシュメモリを含んだデータ貯蔵装置及びそれのマージ方法 | |
JPH09282111A (ja) | 半導体メモリ装置及びその制御方法 | |
TWI463313B (zh) | 記憶體管理方法、記憶體控制器與記憶體儲存裝置 | |
CN113419975B (zh) | 存储器的控制系统及地址映射方法和地址映射装置 | |
CN109101437A (zh) | 一种数据存储方法与终端 | |
KR101077901B1 (ko) | 로그 블록 단위 매핑 기법을 이용한 플래시 메모리 관리 장치 및 방법 | |
TWI715408B (zh) | 快閃記憶體控制器、記憶體裝置以及存取快閃記憶體模組之方法 | |
CN115185906A (zh) | 一种针对NandFlash的轻量级文件管理方法及系统 | |
CN115878033A (zh) | 一种固态硬盘及其映射表管理方法 | |
US11416151B2 (en) | Data storage device with hierarchical mapping information management, and non-volatile memory control method | |
CN115525605A (zh) | 一种文件系统的传输系统、方法 | |
TWI747191B (zh) | 資料儲存裝置與資料處理方法 | |
CN109002265B (zh) | 一种数据处理的方法以及相关装置 | |
JP2004355187A (ja) | 仮想メモリ・システム、仮想メモリのアドレス管理方法、並びにアドレス変換テーブル生成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |