CN113505101B - 一种基于vfs的内核文件系统 - Google Patents
一种基于vfs的内核文件系统 Download PDFInfo
- Publication number
- CN113505101B CN113505101B CN202110791754.3A CN202110791754A CN113505101B CN 113505101 B CN113505101 B CN 113505101B CN 202110791754 A CN202110791754 A CN 202110791754A CN 113505101 B CN113505101 B CN 113505101B
- Authority
- CN
- China
- Prior art keywords
- file
- page
- linked list
- pages
- partner
- 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.)
- Active
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/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
-
- 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/13—File access structures, e.g. distributed indices
-
- 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/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/162—Delete operations
-
- 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/172—Caching, prefetching or hoarding of files
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/188—Virtual file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种基于VFS的内核文件系统,包括初始化模块、伙伴系统、文件页管理模块以及文件系统,其中,所述初始化模块用于实现对保留内存的初始化以及高速缓存的分配;所述伙伴系统用于实现对内存页的管理以及文件页的分配/回收计算;所述文件页管理模块用于进程对文件操作时进行当前进程的文件页的修复,并控制文件页的分配、回收以及增添操作;所述文件系统用于向上实现虚拟内存层的函接口,向下通过文件页管理模块对保留内存进行操作,通过上述方式,用户系统不需要去关心底层设备的实现,直接使用系统调用就可以访问,操作底层设备,系统调用使得用户系统有着很高的可移植性,该程序就可以在不同的内核版本上运行。
Description
技术领域
本发明涉及存储技术领域,具体涉及一种基于VFS的内核文件系统。
背景技术
现如今,随着科学技术的高速发展,计算机的各部分硬件设备都在不断地迭代更新,这其中就包括计算机的硬件存储设备。在很长的一段时间内,磁盘都是作为主要的存储介质,但是在如今,有很多高速存储设备正在冲击着市场,比如目前市场上的SSD固态硬盘。而有些对计算要求比较高的系统,他们希望能够更快的获得数据,并对数据进行计算和存储,这样就使得我们需要在内存中处理大量的数据,而传统的基于磁盘的文件系统设计,在存储介质发生改变后,其实在底部的软件层有着大量的冗余。这样对于高速的存储介质而言,就非常有必要针对性的设计一个文件系统,来减少文件读写在软件层面上的开销。
发明内容
针对现有技术中的上述不足,本发明提供了一种基于VFS的内核文件系统。
为了达到上述发明目的,本发明采用的技术方案为:
一种基于VFS的内核文件系统,包括初始化模块、伙伴系统、文件页管理模块以及文件系统,其中,
所述初始化模块用于实现对保留内存的初始化以及高速缓存的分配;
所述伙伴系统用于实现对内存页的管理以及文件页的分配/回收计算;
所述文件页管理模块用于进程对文件操作时进行当前进程的文件页的修复,并控制文件页的分配、回收以及增添操作;
所述文件系统用于向上实现虚拟内存层的函接口,向下通过文件页管理模块对保留内存进行操作。
进一步的,当工作在装载状态时,所述初始化模块从内存的起始地址到结束地址建立文件也表,并为所述文件系统分配高速缓存并注册内核,同时为伙伴系统初始化系统链表,并将文件系统进行内核注册。
进一步的,所述伙伴系统中一个页面有且仅有与当前页面相邻的一个伙伴,其中每一个连续文件页结构均包括一个在指令下的编号num,其中:
当指令为0是,表示当前连续文件页结构为单页,其编号表示从内存起始地址开始的第num个页面;
当指令为k时,表示当前连续文件页结构从虚拟地址开始有2k个页面,此时以虚拟地址代表的单页编号num向右移动k为当前页的编号。
进一步的,所述系统链表为双向循环链表,其中每个节点均包含链表头结构,所述链表头结构为头尾指针,分别指向其前一个元素和后一个元素的链表头结构。
进一步的,当添加文件时,所述伙伴系统在指令为0的系统链表中进行分配,若该系统链表不为空,则所对应的页面空闲页面,将所添加的文件分配给当前页面并从当前链表中删除该页;
若指令为0的链表为空,则继续在具有更高指令的系统链表中查找,直至查找到非空系统链表;
在查找到的非空的系统链表后,将其对应的文件页分为两部分,将前半部分插入到比当前指令小一级的系统链表中,后半部分寻找若满足当前页面要求则分配至当前页面,否则继续划分并查找下一级系统链表对应的页面直至满足分配要求;
当删除文件时,在指令为0的系统链表中查找对应的伙伴页,若没有则直接插入当前链表,若有则将伙伴页从系统链表中删除并于当前也合并。
进一步的,所述文件页管理模块处于所述文件系统和伙伴系统之间,当文件被创建/删除时,由文件页管理模块出发文件页的分配/删除,文件页的大小与伙伴系统中页的大小相同。
进一步的,所述文件页管理模块为每个文件再内存中分配一个一级页表基地址以及当前已分配的页面数量,在执行文件分配页时,向所述伙伴系统请求对应数量的液面,并按顺序插入到当前的文件页表中。
进一步的,所述文件页管理模块通过如下方式定位文件页:
当无法完成页表替换时,通过用户进程具体给出的偏移量定位文件页;
当伙伴系统找到空余页面地址空间且空余页面地址空间的起始虚拟地址为4K对齐时,从起始虚拟地址开始替换文件页表中的顶层表项值,并将其替换为对应需要插入的文件的页,其中,当需要插入的文件的页包含n个页面时,需要替换n个页面;
当伙伴系统找到文件页的空余区段且该空余区段的起始虚拟地址是2M对齐时,从起始虚拟地址开始替换文件页表中的中间表项值,此时,当需要插入到文件的页包含n个页面时,需要替换的表项数为
(n+PAGE_SIZE-1)>>PAGE_SHIFT;
其中,PAGE_SIZE为页面大小,PAGE_SHIFT是对应的偏移;
当伙伴系统找到文件页的空余区段且该空余区段的起始虚拟地址为1G对齐时,从启示虚拟地址开始替换文件页表中的中间表象顶层指针。
进一步的,所述文件系统基于VFS内核,在创建文件时,VFS内核向文件管理系统发出请求并创建索引节点,接收来自父节点的索引指令以及当前文件的目录项以及其他标志位,其中,当所创建的文件为普通文件时,标志位将对应的标识置位S_IFREG,当创建的文件为目录时,标志位将对应的标识置位S_IFDIR;
当创建索引节点时,从初始化模块分配的高速缓存中分配空间,文件被初次创建时,文件页表的表头地址为空。
进一步的,当文件系统删除文件时,通过伙伴系统逐一删除与被删除文件相关的所有页并清除页面数据,同时删除对应的页表,最后分配的高速缓存中撤销索引信息。
本发明具有以下有益效果:
首先,使得我们的用户程序变得更加简便。用户系统不需要去关心底层设备的实现,直接使用系统调用就可以访问,操作底层设备。其次,系统调用使得用户系统有着很高的可移植性,因为只要内核提供的系统调用相同,该程序就可以在不同的内核版本上运行。
附图说明
图1为本发明基于VFS的内核文件系统结构示意图。
图2为本发明实施例系统链表结构示意图。
图3为本发明实施例文件页表结构示意图。
图4为本发明实施例文件页虚拟地址结构示意图。
具体实施方式
下面对本发明的具体实施方式进行描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。
一种基于VFS的内核文件系统,如图1所示,包括初始化模块、伙伴系统、文件页管理模块以及文件系统,其中,
所述初始化模块用于实现对保留内存的初始化以及高速缓存的分配;
所述伙伴系统用于实现对内存页的管理以及文件页的分配/回收计算;
所述文件页管理模块用于进程对文件操作时进行当前进程的文件页的修复,并控制文件页的分配、回收以及增添操作;
所述文件系统用于向上实现虚拟内存层的函接口,向下通过文件页管理模块对保留内存进行操作。
本实施例分别对每个系统模块进行阐述,
1、初始化模块:
在编译模块之前,我们要使用内核启动参数memmap来保留一段内存。保留的内存会被内核标记为reserved memory。这样内核也就不会为这段内存建立页表。对于我们的文件系统,这段内存就是我们的存储介质。由于我们是用模块的方式加载进内存,所以我们需要将保留内存的起始地址paddr_start和结束地址paddr_end硬编码到代码中。
当工作在装载状态时,所述初始化模块从内存的起始地址到结束地址建立文件也表,并为所述文件系统分配高速缓存并注册内核,同时为伙伴系统初始化系统链表,并将文件系统进行内核注册。
初始化模块工作在装载模块时(insmod),当我们文件系统的模块被装载后,
内核会调用模块中的init函数,在这个函数中,我们首先从内存起始地址paddr_start到内存结束地址paddr_end尝试建立页表,然后为sun_fs的一些独有的数据结构建立slab高速缓存,初始化伙伴系统链表等。最后将sun_fs注册进内核。此时,sun_fs已经就绪。
2、伙伴系统
所述伙伴系统中一个页面有且仅有与当前页面相邻的一个伙伴,其中每一个连续文件页结构均包括一个在指令下的编号num。
为了合理的管理RAM页面分配,sun_fs实现了自己的伙伴系统。同样是为了高效的分配页面,减少外部碎片的产生,sun_fs所实现伙伴系统的算法如下:
首先,sun_fs也是通过管理页面的方式来管理物理内存。这里主要在我们保留的内存上进行页面的分配和回收。
为了合理的描述内存页面,本实施例中自己定义了一个页结构,用来描述内存中若干个连续页面。
从上到下依次代表从当前虚拟地址vaddr开始,一共有连续2order个页面。Num代表当前页面在order下的编号。这个编号从0开始,主要用于判断其他页面与当前页结构是否构成伙伴关系。最后一项是内核中定义的链表结构list_head。
互为伙伴关系的页面
我们为每一个连续页面结构定义了一个参数num,来描述当前连续页结构在order下的编号。为了方便理解,这里举两个例子:
当order为0时,代表当前连续页结构仅有一个页面,也就是单页。此时,单页的编号其实很像内核的页框号,代表从paddr_start开始的第num个页面。
当order为k时,代表当前连续页结构从vaddr开始有2k个页面。此时,计算页的编号需要将页框号的低k位略去,若vaddr代表的单页编号为num,那么其在order为k下的编号为num>>k。其中>>代表计算中的右移符。
有了编号的定义,我们规定判定两个页面为伙伴的依据是:页面a与页面b的order相同,且满足
numa=numb⊕1
其中numa和numb表示a与b的编号,⊕表示异或运算。
这样在给定order下,一个页面有且仅有与它相邻的一个伙伴。
内核中的链表是一个双向循环链表,它定义了一个链表头结构,并要求链表中的每个节点(除了头节点)都包含这个链表头结构,链表头结构中有两个头尾指针,分别指向前一个元素和后一个元素的链表头结构。由于链表中的每个节点都包含了这样一个链表头元素,我们在遍历链表的时候,配合container_of这个宏,就能通过链表头list_head来拿到我们的链表元素,如图2所示。
为了表述方便,我们以文件申请4KB的页面为例。当某个文件请求一个大小为4KB的页面时,我们的伙伴系统会尝试在order为0的链表中进行分配。如果链表不为空,则说明我们此时有4KB的页面空闲,则将该页分配给文件,从当前链表中删去该页,并在文件页表中更新;若order为0的链表为空(比如初次分配一个文件页时),则尝试在更高的order链表中查找,直到查找到一个非空的链表为止,此时将该页取出,将其一分为二,前半部分页插入到比当前order小一级的链表中,并更新相关字段,后半部分继续检查,如果满足当前页面要求则分配,否则继续向下划分,直到满足要求为止。
当我们文件被删除时,我们此时要释放对应的文件页,此时文件页管理模块会向伙伴系统发来释放页面的请求。比如要释放的是大小为4KB的页面,此时我们会先创建一个对应的页描述结构sunfs_page,尝试在order为0的链表中查找与之对应的伙伴页。若没有查找到,则直接插入当前链表;若查找到了,则将伙伴页从链表中删除,与当前页合并。由于是伙伴关系,所以合并后页面的首地址可以通过公式(3-2)很轻易的得出:
vaddrnew = vaddra&vaddrb (3-2)
新页的首地址就等于两个伙伴页的地址相且。同时更新order,尝试在更高一级的链表中寻找伙伴。注意在最高级的页表中不执行伙伴页的合并。
我们的伙伴页结构sunfs_page从内核的slab高速缓存中分配,slab高速缓存在初始化阶段被创建。虽然我们使用了内核的内存,不过从后续章节中可以看出,我们的伙伴页结构对内存的利用很高效,仅占用很少一部分内存。
3、文件页管理模块
文件页管理模块处于所述文件系统和伙伴系统之间,当文件被创建/删除时,由文件页管理模块出发文件页的分配/删除,文件页的大小与伙伴系统中页的大小相同。
用页表的方式来组织文件有很多好处,第一个好处就是最大文件长度没有限制,可伸缩性非常大。在当前的内存大小下,我们采用2级页表的形式,每级页表大小4KB,每个表项8B,故每级页表偏移占虚拟地址的9位,文件页大小4KB,占虚拟地址的12位,总共可寻址9+9+12总共30位地址长度,最大文件为1GB,如图3所示。
本实施例使用文件的偏移量来组织文件页表。例如,当前文件的偏移为ppos,那么当前的一级页表偏移为ppos的20~29位,二级页表的偏移为12~19位,
ppos的最后12位表示页内偏移,如图4所示,对于每个文件,sun_fs会在内存中维护一个一级页表的基址,和当前已分配的页面数量。每个文件都包含自己独有的页表结构。
当需要为一个文件分配页时,我们向伙伴系统请求对应数量的页面,并按序插入当前的文件页表中。一个已经分配了x个页面的文件,可以容纳的最大数据量为4xKB。对于文件来说,它认为自己的地址空间是“平坦”的,不过在内存上,我们的伙伴系统为它分配的页面不一定连续。这一点与进程地址空间是相同的。
在sun_fs下,总共有以下几种定位文件页的方式:
(1)通过page walk,定位到文件页
此种方式也是通过软件的方式来定位,通过用户进程具体给出的offset来定位到文件页。此种方案为初次实现的方案,用于测试sun_fs整体结构的正确性,以及在无法完成页表替换时,访问文件的后备选项。
(2)通过page walk替换文件页
此种方式尝试在进程地址空间中寻找一块空余的区域,将它用于映射文件页,此种方案适用于我们能找到一块空余的进程地址空间,且地址空间的起始地址vaddr是4K对齐的(低12位)。此时我们可以从这个起始地址开始,替换进程页表中的PTE表项的值,将其替换为我们对应文件的页。此种做法中,当我们的文件包含n个页面时,总共需要替换n个页面。
(3)替换PTE
此种方式与上一种方式同样,尝试在进程中寻找映射文件页的一段空余区域。不过它要求我们能找到一块起始地址vaddr是按照2M对齐的。当前情况下,我们可以将文件页更加方便地映射到地址空间中,不过我们仍需要依次替换PMD表项。此种做法中,当我们的文件包含n个页面时,总共需要替换的表项数为:
(n+PAGE_SIZE-1)>>PAGE_SHIFT
公式(3-3)中,PAGE_SIZE为页面大小,在这里是4K,PAGE_SHIFT是对应的偏移,为12。
(4)替换PMD
同上,此种方法尝试寻找一段空余区域用于映射文件页,不过此种做法最优,而且要求最为苛刻。他要求文件进程地址空间是按照1GB对齐的,此种做法仅用替换掉顶层的PMD指针即可。可见,替换的页面数越少,对起始地址vaddr的要求就越苛刻。当我们尝试替换进程页面的时候,我们会从大向下考虑,优先考虑1GB的空余地址空间,在考虑2MB,最后考虑4KB,若是都无法满足,则直接采用page walk的形式对文件页进行操作。
4、文件系统
所述文件系统基于VFS内核,在创建文件时,VFS内核向文件管理系统发出请求并创建索引节点,接收来自父节点的索引指令以及当前文件的目录项以及其他标志位,其中,当所创建的文件为普通文件时,标志位将对应的标识置位S_IFREG,当创建的文件为目录时,标志位将对应的标识置位S_IFDIR;
当创建索引节点时,从初始化模块分配的高速缓存中分配空间,文件被初次创建时,文件页表的表头地址为空。
当文件系统删除文件时,通过伙伴系统逐一删除与被删除文件相关的所有页并清除页面数据,同时删除对应的页表,最后分配的高速缓存中撤销索引信息。
具体而言,本实施例将具体的inode索引节点结构与文件页表建立联系。在这里,定义了一个辅助结构sunfs_inode_info。
该结构包含以下字段:
struct sunfs_inode_info
{
struct inode vfs_inode;fpmd_t*fpmd;
unsigned int num_pages;
};
该结构的第一个字段是对应的VFS层中的inode结构;第二个字段是在sun_fs自定义的文件页表fpmd的表头地址,Fpmd_t是无符号64位整型;第三个字段是当前文件已经分配的页数。
在VFS中,当我们创建一个文件的时候,VFS会像文件系统提出要求,要求文件系统为其创建一个inode节点,调用函数是file_operations中的creat。Creat接受父文件节点的inode,以及当前文件节点的dentry和其他flag字段。当创建的文件是普通文件时,flag会置对应的标识S_IFREG,当创建文件是一个目录是,flag则会置S_IFDIR。
VFS提供了new_inode函数,以供具体的文件系统来创建inode结构。在new_inode中会检查具体文件系统的super_block是否定义了自己创建inode的方式alloc_inode,如果未定义,VFS会直接从VFS的inode cache中分配(其实是一个slab高速缓存),如果有定义,则调用文件系统的alloc_inode。
在sun_fs中,我们的alloc_inode函数主要为了初始化sunfs_inode_info结构。当我们创建一个inode时,我们会从预先分配的slab高速缓存中分配该结构。并对其各个部分进行初始化。当文件初次被创建时,文件长度为0,分配的页面也是0,最初的fpmd被置空。需要额外注意的是对其中的vfs_inode需要使用inode_init_once对其中的链表结构做详细的初始化,否则在删除节点的时候会把其中的某些链表识别成非空链表而错误访问,导致内核的panic。
VFS在删除一个文件的时候,实际上是减少这个文件对应inode的连接计数。
当其inode的硬链接计数为0时,VFS就会尝试删除这个文件。调用文件系统超级块的destroy_inode来删除文件数据。在sun_fs中,当destroy_inode被调用时,会通过伙伴系统,一一删除掉与文件相关的所有页,并清除页面数据,并且删除对应文件的页表。最后从slab高速缓存中撤销sunfs_inode_info结构。
本发明所构建的文件系统现了普通文件系统的大部分功能:创建文件,创建目录,删除文件或目录,文件的读取,写入,mmap等。由于文件系统的性能主要是以读取和写入的速度决定的。所以,我们在这里主要介绍我们读取和写入文件的方法。
1、文件的读取
Sun_fs为用户态程序提供了两种读取文件的方法,其一是使用read方法对文件进行读取,由文件API read触发系统调用sys_read进入内核,然后由VFS层来
调用文件系统具体的read函数。目前VFS给文件系统提供了两种read的实现方案,一种是read,另一种是read_iter。这两种方案接受的参数不同,不过原理大致相同,他需要文件系统把用户要求的数据从内核拷贝到用户态。由于实现上的方便,这里我们采用read的方式,我们由read参数中的file找到我们的inode_info,再利用container_of宏得到inode_info中的vfs_info结构,拿到文件页,最后通过ppos的所在位置对文件进行读取操作。此种方案是要进内核且直接进行数据拷贝的,同样需要经过内核的软件层。
我们提供的另外一种方法就让用户直接在用户态进行数据的拷贝。在描述我们的文件页一节时,我们介绍了sun_fs可以根据不同的情况来对文件页进行映射。在映射成功的情况下,我们可以直接利用用户态的地址来处理文件数据,没有进入内核态的开销,也没有page fault,是一种非常高效的方法。
2、文件的写入
VFS同样为文件系统提供了两种写文件函数方法,一种是write,一种是write_iter。在sun_fs中采用的是write。其与上文的read很相似,接受file结构和用户空间的buffer,在定位到文件页面后,直接使用内核的一些接口将数据从用户空间拷贝到内核空间。
文件的写入非常有可能会增加文件的页面数,我们要首先判断本次的写入是否需要重新分配页面,如果需要,先从文件页管理模块中预分配页面,更新文件页表和已分配的页面数,再尝试拷贝数据。
在使用文件系统时,经常会发生几个进程同时读写文件的情况,为了文件系统能够正常的运作,我们需要对这种情况进行同步处理。在sun_fs中,主要采用了两种方式来进行读写同步:读写信号量的模式与类RCU模式
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
Claims (4)
1.一种基于VFS的内核文件系统,其特征在于,包括初始化模块、伙伴系统、文件页管理模块以及文件系统,其中,
所述初始化模块用于实现对保留内存的初始化以及高速缓存的分配,其中,所述初始化模块从内存的起始地址到结束地址建立文件页表,并为所述文件系统分配高速缓存并注册内核,同时为伙伴系统初始化系统链表;
所述伙伴系统用于实现对内存页的管理以及文件页的分配/回收计算,其中所述伙伴系统中一个页面有且仅有与当前页面相邻的一个伙伴,其中每一个连续文件页结构均包括一个在指令下的编号num,其中:
当指令为0是,表示当前连续文件页结构为单页,其编号表示从内存起始地址开始的第num个页面;
当指令为k时,表示当前连续文件页结构从虚拟地址开始有2k个页面,此时以虚拟地址代表的单页编号num向右移动k为当前页的编号;
当添加文件时,所述伙伴系统在指令为0的系统链表中进行分配,若该系统链表不为空,则所对应的页面空闲页面,将所添加的文件分配给当前页面并从当前链表中删除该页;
若指令为0的链表为空,则继续在具有更高指令的系统链表中查找,直至查找到非空系统链表;
在查找到的非空的系统链表后,将其对应的文件页分为两部分,将前半部分插入到比当前指令小一级的系统链表中,后半部分寻找若满足当前页面要求则分配至当前页面,否则继续划分并查找下一级系统链表对应的页面直至满足分配要求;
当删除文件时,在指令为0的系统链表中查找对应的伙伴页,若没有则直接插入当前链表,若有则将伙伴页从系统链表中删除并与当前页合并;
所述文件页管理模块用于进程对文件操作时进行当前进程的文件页的修复,并控制文件页的分配、回收以及增添操作,所述文件页管理模块处于所述文件系统和伙伴系统之间,当文件被创建/删除时,由文件页管理模块触发文件页的分配/删除,文件页的大小与伙伴系统中页的大小相同;所述文件页管理模块为每个文件在内存中分配一个一级页表基地址以及当前已分配的页面数量,在执行文件分配页时,向所述伙伴系统请求对应数量的页面,并按顺序插入到当前的文件页表中;
所述文件系统用于向上实现虚拟内存层的函接口,向下通过文件页管理模块对保留内存进行操作,所述文件系统基于VFS内核,在创建文件时,VFS内核向文件管理系统发出请求并创建索引节点,接收来自父节点的索引指令、当前文件的目录项以及其他标志位,其中,当所创建的文件为普通文件时,标志位将对应的标识置位S_IFREG,当创建的文件为目录时,标志位将对应的标识置位S_IFDIR;
当创建索引节点时,从初始化模块分配的高速缓存中分配表头地址,文件被初次创建时,文件页表的表头地址为空。
2.根据权利要求1所述的一种基于VFS的内核文件系统,其特征在于,所述系统链表为双向循环链表,其中每个节点均包含链表头结构,所述链表头结构为头尾指针,分别指向其前一个节点和后一个节点的链表头结构。
3.根据权利要求1所述的一种基于VFS的内核文件系统,其特征在于,所述文件页管理模块通过如下方式定位文件页:
当无法完成页表替换时,通过用户进程具体给出的偏移量定位文件页;
当伙伴系统找到空余页面地址空间且空余页面地址空间的起始虚拟地址为4K对齐时,从起始虚拟地址开始替换文件页表中的顶层表项值,并将其替换为对应需要插入的文件的页,其中,当需要插入的文件的页包含n个页面时,需要替换n个页面;
当伙伴系统找到文件页的空余区段且该空余区段的起始虚拟地址是2M对齐时,从起始虚拟地址开始替换文件页表中的中间表项值,此时,当需要插入到文件的页包含n个页面时,需要替换的表项数为:
其中,PAGE_SIZE 为页面大小,PAGE_SHIFT 是对应的偏移;
当伙伴系统找到文件页的空余区段且该空余区段的起始虚拟地址为1G对齐时,从起始虚拟地址开始替换文件页表中的中间表象顶层指针。
4.根据权利要求1所述的一种基于VFS的内核文件系统,其特征在于,当文件系统删除文件时,通过伙伴系统逐一删除与被删除文件相关的所有页并清除页面数据,同时删除对应的页表,并在分配的高速缓存中撤销索引信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110791754.3A CN113505101B (zh) | 2021-07-13 | 2021-07-13 | 一种基于vfs的内核文件系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110791754.3A CN113505101B (zh) | 2021-07-13 | 2021-07-13 | 一种基于vfs的内核文件系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113505101A CN113505101A (zh) | 2021-10-15 |
CN113505101B true CN113505101B (zh) | 2023-07-07 |
Family
ID=78013164
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110791754.3A Active CN113505101B (zh) | 2021-07-13 | 2021-07-13 | 一种基于vfs的内核文件系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113505101B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1988473A1 (en) * | 2007-05-04 | 2008-11-05 | Helge Hofmeister | A server with a core using a virtual file system and a method for securely redirecting a persistent storage device operation to a middleware infrastructure |
CN105612499A (zh) * | 2013-10-29 | 2016-05-25 | 华中科技大学 | 混合高速缓存管理 |
CN107783812A (zh) * | 2016-08-24 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 虚拟机内存管理方法及装置 |
CN109804359A (zh) * | 2016-08-11 | 2019-05-24 | 图科塞拉公司 | 用于将数据回写到存储设备的系统和方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013200685A (ja) * | 2012-03-23 | 2013-10-03 | Toshiba Corp | メモリ管理方法および情報処理装置 |
JP2014206884A (ja) * | 2013-04-15 | 2014-10-30 | 株式会社フィックスターズ | 情報処理装置、情報処理方法、およびプログラム |
-
2021
- 2021-07-13 CN CN202110791754.3A patent/CN113505101B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1988473A1 (en) * | 2007-05-04 | 2008-11-05 | Helge Hofmeister | A server with a core using a virtual file system and a method for securely redirecting a persistent storage device operation to a middleware infrastructure |
CN105612499A (zh) * | 2013-10-29 | 2016-05-25 | 华中科技大学 | 混合高速缓存管理 |
CN109804359A (zh) * | 2016-08-11 | 2019-05-24 | 图科塞拉公司 | 用于将数据回写到存储设备的系统和方法 |
CN107783812A (zh) * | 2016-08-24 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 虚拟机内存管理方法及装置 |
Non-Patent Citations (2)
Title |
---|
PVM:persistent virtual memory for efficient capacity scaling and object storage;Sudarsun Kannan等;《Proceedings of the Eleventh European Conference on computer system》(第13期);1-16页 * |
多核实时操作系统关键技术研究;张轶;《中国博士学位论文全文数据库 信息科技辑》;I138-48 * |
Also Published As
Publication number | Publication date |
---|---|
CN113505101A (zh) | 2021-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10620862B2 (en) | Efficient recovery of deduplication data for high capacity systems | |
US6587915B1 (en) | Flash memory having data blocks, spare blocks, a map block and a header block and a method for controlling the same | |
US5822562A (en) | Method and apparatus for expansion, contraction, and reapportionment of structured external storage structures | |
KR100772863B1 (ko) | 요구 페이징 기법을 적용한 시스템에서 페이지 교체 수행시간을 단축시키는 방법 및 장치 | |
US8555023B2 (en) | Method and system for managing large write-once tables in shadow page databases | |
CN110062925A (zh) | 用于云集成的快照元数据布置 | |
CN101241472B (zh) | 映射管理方法及系统 | |
CN103838853B (zh) | 一种基于不同存储介质的混合文件系统 | |
WO2009033419A1 (fr) | Procédé de traitement de mise en antémémoire de données, système et dispositif de mise en antémémoire de données | |
CN109445702B (zh) | 一种块级数据去重存储系统 | |
CN109725842B (zh) | 加速随机写入布局以用于混合存储系统内的桶分配的系统和方法 | |
CN101488153A (zh) | 嵌入式Linux下大容量闪存文件系统的实现方法 | |
JP2015512604A (ja) | 暗号ハッシュ・データベース | |
CN105045850B (zh) | 云存储日志文件系统中垃圾数据回收方法 | |
CN105378687A (zh) | 访问文件的方法和相关设备 | |
WO2021208239A1 (zh) | 一种低延迟的文件系统地址空间管理方法、系统及介质 | |
US11392314B2 (en) | Sequentially writing metadata into a solid state disk by redirect-on-write | |
Bityutskiy | JFFS3 design issues | |
US8108356B2 (en) | Method for recovering data in a storage system | |
CA2758235A1 (en) | Device and method for storage, retrieval, relocation, insertion or removal of data in storage units | |
WO2024099448A1 (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN106528703A (zh) | 一种重复删除的模式切换方法及装置 | |
CN107133334B (zh) | 基于高带宽存储系统的数据同步方法 | |
CN113505101B (zh) | 一种基于vfs的内核文件系统 | |
CN111061652B (zh) | 一种基于mpi-io中间件的非易失内存管理方法与系统 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |