一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于线程的用户配额方法、装置及存储介质与流程

2022-03-09 06:20:55 来源:中国专利 TAG:


1.本发明涉及线程处理技术领域,尤其是指一种基于线程的用户配额方法、装置及存储介质。


背景技术:

2.在分布式存储系统中,用户配额的使用及剩余情况均保存在元数据服务器端,用户通过内核态客户端写入数据时向元数据服务器发送请求申请配额。如果申请到配额,则可以完成本次写入;如果元数据服务器端的用户配额可用空间为零,则客户端无法完成本次写入。
3.元数据服务器端对于内核态客户端的请求处理不是严格的按顺序处理的,如果有可用空间,则进行数据落盘,当服务器端没有可用空间时,会立即应答客户端;当客户端进行并行写入时,就会导致用户配额没有用完时,写入失败的问题。例如,用户同时写入文件一和文件二,写入文件一时向元数据服务器请求可用空间,元数据服务器将剩余的可用空间都分配给文件一,然后进行数据落盘;而此时写文件二向元数据服务器请求可用空间时,由于没有可用空间,就会立即返回客户端没有可用空间,导致写入文件二失败,之后写入文件一的请求返回成功,文件一继续写入。综上,当内核态客户端并行操作文件时,就会造成用户配额仍有可用空间但是不能继续写入的问题,就会导致存储系统的可用容量小于实际可用容量。


技术实现要素:

4.为了解决上述技术问题,本发明提供了一种基于线程的用户配额方法、装置及存储介质,可以减少内核态客户端与元数据服务器的交互,可以提高文件写入的效率,可以提高存储系统的可用空间。
5.为实现上述目的,本技术提出第一技术方案:
6.一种基于线程的用户配额方法,包括以下步骤:
7.内核态客户端的当前写入线程执行文件写入操作时前首先判断内核态客户端是否已发送线程配额请求;
8.若内核态客户端已发送线程配额请求,则将当前写入线程加入等待队列,等待前一个写入线程写入文件结束后向元数据服务器发送线程配额请求;
9.若内核态客户端未发送线程配额请求,则向元数据服务器发送线程配额请求;
10.元数据服务器接收到线程配额请求后,执行线程配额操作,给用户分配存储空间。
11.在本发明的一个实施例中,所述判断内核态客户端是否已发送线程配额请求,通过配额标志来判断,具体包括:
12.所述配额标志包括申请状态和非申请状态,当所述配额标志处于申请状态时,表示已存在写入线程通过内核态客户端向元数据服务器发送线程配额请求;当所述配额标志处于非申请状态时,表示不存在写入线程通过内核态客户端向元数据服务器发送线程配额
请求。
13.在本发明的一个实施例中,所述内核态客户端向元数据服务器发送线程配额请求前,具体包括:
14.判断内核态客户端本地是否有可用空间,如果有可用空间,则内核态客户端的写入线程直接执行写入文件操作,无需通过内核态客户端向元数据服务器发送线程配额请求;如果没有可用空间,则判断配额标志是否处于申请状态。
15.在本发明的一个实施例中,若所述配额标志处于申请状态,则将当前的写入线程加入等待队列;若所述配额标志处于非申请状态,则内核态客户端向元数据服务器发送线程配额请求。
16.在本发明的一个实施例中,所述元数据服务器按照等待队列中的顺序规则对各写入线程进行配额,具体包括:
17.当前的写入线程通过内核态客户端发送线程配额请求时,将配额标志的状态设置为申请状态;
18.当前的写入线程执行写入文件操作完成且将配额标志的状态设置为非申请状态后,则允许下一个写入线程通过内核态客户端发送线程配额请求。
19.在本发明的一个实施例中,所述内核态客户端的写入线程执行写入文件操作后,具体包括:
20.将配额标志的状态设置为非申请状态;
21.唤醒等待队列中的写入线程。
22.在本发明的一个实施例中,所述顺序规则按照先来后到顺序排列。
23.为实现上述目的,本技术还提出第二技术方案:
24.一种基于线程的用户配额装置,所述装置包括:
25.配额请求判断模块,用于判断内核态客户端是否已发送线程配额请求;
26.队列配置模块,用于将需要等待的写入线程加入等待队列;
27.配额请求发送模块,用于内核态客户端向元数据服务器发送线程配额请求;
28.配额操作执行模块,用于对内核态客户端执行配额操作。
29.在本发明的一个实施例中,所述装置还包括:
30.状态配置模块,用于配置配额标志的状态;
31.线程唤醒模块,用于将等待队列中的写入线程置于唤醒状态;
32.规则排序模块,用于按照规则对写入线程进行顺序排列;
33.文件写入模块,用于执行写入线程的文件写入操作。
34.为实现上述目的,本技术提出第三技术方案:
35.一种计算机可读存储介质,所述计算机可读存储介质存储有程序,当所述程序被处理器执行时,使得所述处理器执行所述方法的步骤。
36.本发明的上述技术方案相比现有技术具有以下优点:
37.本发明所述的一种基于线程的用户配额方法、装置及存储介质,当写入线程进行写入操作且需要线程配额时,首先判断内核态客户端是否已发送线程配额请求;若内核态客户端已发送线程配额请求,则将当前写入线程加入等待队列,等待前一个写入线程写入文件结束后通过内核态客户端向元数据服务器发送线程配额请求;若内核态客户端未发送
线程配额请求,则向元数据服务器发送线程配额请求;元数据服务器接收到线程配额请求后,执行线程配额操作,给用户分配存储空间。若内核态客户端已发送线程配额请求,前一个写入线程申请到配额且写入文件完毕后,才允许加入等待队列的当前写入线程通过内核态客户端发送配线程额请求,并在得到元数据服务器的线程配额后进行文件写入操作,将数据落盘,减少了内核态客户端与元数据服务器的交互,提高了文件写入的效率,提高了存储系统的可用空间。
附图说明
38.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
39.图1是本发明的基于线程的用户配额方法的第一方法流程图;
40.图2是本发明的基于线程的用户配额方法的第二方法流程图;
41.图3是本发明的基于线程的用户配额装置的装置结构图。
具体实施方式
42.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
43.实施例一:
44.参照图1所示,图1为本发明的基于线程的用户配额方法的第一方法流程图。
45.本实施例的基于线程的用户配额方法,包括以下步骤:
46.内核态客户端的当前写入线程执行文件写入操作前首先判断内核态客户端是否已发送线程配额请求;
47.若内核态客户端已发送线程配额请求,则将当前写入线程加入等待队列,等待前一个写入线程写入文件结束后向元数据服务器发送线程配额请求;
48.若内核态客户端未发送线程配额请求,则向元数据服务器发送线程配额请求;
49.元数据服务器接收到线程配额请求后,执行线程配额操作,给用户分配存储空间。
50.当内核态客户端的写入线程执行写入文件操作前,且内核态客户端本地没有可用空间时,内核态客户端需要向元数据服务器发送线程配额请求,以使元数据服务器给用户进行线程配额操作,完成写入线程的数据落盘动作。如果内核态客户端已经发送了线程配额请求,表示前面已有写入线程正在执行文件写入操作,那么当前写入线程需要等待前面的线程执行文件写入操作完毕后发送线程配额的请求,此时则需要将当前写入线程加入等待队列进行等待;如果内核态客户端未发送线程配额请求,则表示前一个写入线程已经执行写入文件操作完毕,或者是当前写入线程是第一个申请线程配额的写入线程,则内核态客户端向元数据服务器发送线程配额请求。元数据在接收到内核态客户端的线程配额请求后,执行线程配额操作,给用户分配可用的存储空间,以便于用户通过内核态客户端进行写
入线程的文件写入操作,将数据落盘。
51.在其中一个实施方式中,判断内核态客户端是否已发送线程配额请求,通过配额标志来判断,具体包括:
52.配额标志包括申请状态和非申请状态,当配额标志处于申请状态时,表示已存在写入线程通过内核态客户端向元数据服务器发送线程配额请求;当配额标志处于非申请状态时,表示不存在写入线程通过内核态客户端向元数据服务器发送线程配额请求。
53.为了能够让多个写入线程按照规则顺序通过内核态客户端进行线程配额申请,利用配额标志的状态来判断上一个写入线程是否写入文件完成,以便于进行下一个写入线程的文件写入操作。在当前的写入线程通过内核态客户端执行线程配额申请时,会将配额标志设置为申请状态,此时下一个写入线程在配额标志为申请状态的时候便不会通过内核态客户端向元数据服务器发出线程配额申请;在当前的写入线程进行写入文件操作完毕后,会将配额标志置于非申请状态,此时下一个线程在配额标志为非申请状态的时候便会通过内核态客户端向元数据服务器发送线程配额请求,以此实现线程配额申请的依次执行,避免写入线程的并行操作。
54.在其中一个实施方式中,内核态客户端向元数据服务器发送线程配额请求前,具体包括:
55.判断内核态客户端本地是否有可用存储空间,如果有可用存储空间,则内核态客户端的写入线程直接执行写入文件操作,无需通过内核态客户端向元数据服务器发送线程配额请求;如果没有可用存储空间,则判断配额标志是否处于申请状态。
56.一般的,内核态客户端的写入线程在执行写入文件操作时,要首先判断内核态客户端本地是否有可用存储空间,如果内核态客户端本地有可用存储空间,则不需要通过内核态客户端向元数据服务器发送配申请,直接进行写入线程的文件写入操作即可;如果内核态客户端本地没有可用存储空间,才需要通过内核态客户端向元数据服务器发送线程配额申请。
57.在其中一个实施方式中,若配额标志处于申请状态,则将当前的写入线程加入等待队列;若配额标志处于非申请状态,则内核态客户端向元数据服务器发送线程配额请求。
58.若内核客户端本地没有可用存储空间,则需要向元数据服务器发送线程配额申请。在内核态客户端的当前写入线程通过内核态客户端向元数据服务器发送线程配额请求前先判断配额标志是否处于申请状态,如果配额标志不是处于申请状态,即配额标志处于非申请状态,则表示上一个写入线程已经执行文件写入操作完毕并将配额标志置于非申请状态,或者当前写入线程是第一个执行写入文件操作的写入线程,当前写入线程通过内核态客户端直接发送配额申请即可;如果配额标志处于申请状态,则表示上一个线程已经通过内核态客户端发出配额请求,则将当前的写入线程加入等待队列,等待配额标志置于非申请状态时通过内核态客户端发送线程配额请求。
59.在其中一个实施方式中,元数据服务器按照等待队列中的顺序规则对各写入线程进行配额,具体包括:
60.当前的写入线程通过内核态客户端发送线程配额请求时,将配额标志的状态设置为申请状态;
61.为了内核态客户端的多个写入线程不会产生并行操作,当前的写入线程在执行配
额操作时,将配额标志的状态设置为申请状态,以避免下一个写入线程与当前线程同时通过内核态客户端向元数据服务器发送配额请求。
62.当前的写入线程执行写入文件操作完成且将配额标志的状态设置为非申请状态后,允许下一个写入线程通过内核态客户端发送配额请求。
63.当前的写入线程在执行线程配额操作的时候,会将配额标志的状态设置为申请状态,当前的写入线程申请到线程配额并进行文件写入操作完毕后,会将配额标志的状态设置为非申请状态,当下一个写入线程接收到配额标志的状态为非申请状态的信号后,才会允许下一个写入线程通过内核态客户端发送线程配额请求,这样便避免了多个线程并行进行线程配额请求的情况。
64.在其中一个实施方式中,内核态客户端的写入线程执行写入文件操作后,具体包括:
65.将配额标志的状态设置为非申请状态;
66.当前的写入线程在执行文件写入操作后,为了方便下一个写入线程能够通过内核态客户端发送线程配额请求,要给下一个写入线程一个可以通过内核态客户端发送线程配额请求的信号,那就是将配额标志的状态作为可以发送线程配额请求的信号,因此要在当前的写入线程执行文件写入操作后将配额标志的状态设置为非申请状态,当下一个写入线程接收到配额标志为非申请状态的信号后便会通过内核态客户端向元数据服务器发送线程配额请求。
67.唤醒等待队列中的写入线程。
68.当前的写入线程在执行完毕文件写入操作,且将配额标志的状态设置为非申请状态时,要唤醒等待队列中的写入线程。为了不占用cpu更多的资源,让cpu的效率达到最高,要将加入等待队列的写入线程置于睡眠状态,这样睡眠状态的写入线程便不会占用cpu的资源,能够最大的提高cpu的工作效率,因此当每次将配额标志的状态设置为非申请状态时,意味着有一个写入线程的写入文件操作已经执行完毕,因此要唤醒等待队列中的写入线程,方便等待队列中的写入线程准备通过内核态客户端发送线程配额请求。优选的,可以设置前两个写入线程一直处于唤醒状态,后面的写入线程处于睡眠状态。也就是说,当一个写入线程执行写入文件操作完毕且将配额标志的状态置于非申请状态时,将等待队列中的前两个线程唤醒,后面的一直处于睡眠状态,以保证等待队列中的写入线程能够及时的通过内核态客户端发送线程配额请求,其中,不进入等待队列的写入线程一直处于唤醒状态。
69.在其中一个实施方式中,顺序规则按照先来后到顺序排列。
70.等待队列中的写入线程要按照一定的顺序进行排序,要不然如果一直执行文件写入操作,就有可能存在某个写入线程一直没有机会通过内核态客户端发送线程配额请求,因此要将等待队列的写入线程通过顺序规则进行排序,即按照先来后到的顺序进行排列。
71.实施例二:
72.参照图2所示,图2为本发明的基于线程的用户配额方法的第二方法流程图。
73.本实施例的基于线程的用户配额方法,包括以下步骤:
74.s10,上级向内核态客户端下发文件写入操作的指令;
75.当内核态客户端接收到其上级下发的文件写入操作的指令时,内核态客户端开始执行文件写入的操作;当内核态客户端的上级接收到文件写入操作停止的指令时;内核态
客户端停止执行文件写入的操作。
76.s20,判断内核态客户端本地是否有可用存储空间,如果有可用存储空间,则直接执行步骤s60;如果没有可用存储空间,则执行步骤s30。
77.当内核态客户端接收到其上级下发的文件写入操作的指令时,内核态客户端开始执行文件写入的操作,此时要首先判断内核态客户端本地是否有可用存储空间,如果内核态客户端本地有可用存储空间,则不需要通过内核态客户端向元数据服务器发送线程配额申请,直接进行写入线程的文件写入操作即可;如果内核态客户端本地没有可用存储空间,则执行步骤s30。
78.s30,判断配额标志的状态是否处于申请状态,若配额标志处于申请状态,则当前的写入线程加入等待队列,返回步骤s20;若配额标志处于非申请状态,则执行步骤s40;
79.在内核态客户端本地没有可用空间时,要进一步判断配额标志的状态是否处于申请状态,如果配额标志处于申请状态,表示上一个写入线程已经通过内核态客户端向元数据服务器发送线程配额请求,则将当前的写入线程加入等待队列,并返回步骤s20,那么当前的写入线程一直处于判断配额标志是否处于申请状态的过程中,一旦当前的写入线程接收到配额标志处于非申请状态的信号,则当前的写入线程便可以通过内核态客户端向元数据服务器发送线程配额请求;如果配额标志处于非申请状态,则执行步骤s40。
80.s40,内核态客户端向元数据服务器发送线程配额请求,并将配额标志的状态设置为申请状态;
81.在当前的写入线程接收到配额标志处于非申请状态的消息时,当前的写入线程通过内核态客户端向元数据服务器发送线程配额请求,并将配额标志设置为申请状态,此时下一个写入线程在配额标志为申请状态的时候便不会通过内核态客户端向元数据服务器发出线程配额申请。
82.s50,元数据服务器执行配额操作;
83.元数据服务器在接收到内核态客户端的线程配额请求后,执行线程配额操作,给用户分配可用的存储空间,以便于用户通过内核态客户端进行写入线程的文件写入操作。
84.s60,内核态客户端的写入线程执行写入文件操作;
85.在内核态客户端得到元数据服务器的线程配额后,内核态客户端的写入线程执行写入文件操作。
86.s70,将配额标志设置为非申请状态,并唤醒等待队列中的写入线程,返回步骤s20。
87.当内核态客户端的写入线程执行写入文件操作后,将配额标志设置为非申请状态,以避免下一个写入线程与当前线程同时通过内核态客户端向元数据服务器发送配额请求。为了不占用cpu更多的资源,让cpu的效率达到最高,要将加入等待队列的写入线程置于睡眠状态,这样处于睡眠状态的写入线程便不会占用cpu的资源,能够最大的提高cpu的工作效率,因此当每次将配额标志的状态设置为非申请状态时,意味着有一个写入线程的写入文件操作已经执行完毕,因此要唤醒等待队列中的写入线程,方便等待队列中的写入线程准备通过内核态客户端发送配额请求。
88.实施例三:
89.参照图3所示,图3为本发明的基于线程的用户配额装置的装置结构图。
90.本发明的基于线程的用户配额装置,包括:
91.配额请求判断模块,用于判断内核态客户端是否已发送线程配额请求;
92.当前写入线程通过内核态客户端发送线程配额请求时,首先要通过配额请求判断模块判断是否已存在写入线程通过内核态客户端发送了线程配额请求。如果已存在写入线程通过内核态客户端发送了线程配额请求,则将当前写入线程加入等待队列;如果不存在写入线程通过内核态客户端发送了线程配额请求,则当前写入线程可以发送线程配额请求。
93.队列配置模块,用于将需要等待的写入线程加入等待队列;
94.在存在多个线程同时通过内核态客户端向元数据服务器发送配额请求时,通过队列配置模块将正在执行写入文件操作的写入线程后面的所有写入线程加入等待队列,在内核态客户端本地没有可用存储空间的情况下,加入等待队列的写入线程依次通过内核态客户端进行线程配额请求。
95.配额请求发送模块,用于内核态客户端向元数据服务器发送配额请求;
96.当内核态客户端的写入线程执行写入文件操作,且内核态客户端本地没有可用存储空间时,内核态客户端需要通过配额请求发送模块向元数据服务器发送线程配额请求,以使元数据服务器给用户进行配额操作,完成写入线程的数据落盘动作。
97.配额操作执行模块,用于对用户执行配额操作;
98.当多个写入线程进行写入操作且需要配额时,元数据服务器对多个线程按照规则进行排序,优先给排在前列的写入线程进行配额,当排在前列的写入线程申请到配额且写入文件完毕后,才允许排在后面的写入线程发送配额请求并得到元数据服务器的配额后进行文件写入操作,将数据落盘。因此,元数据服务器在顺序规则的限制下通过配额操作执行模块依次对各线程进行配额操作。
99.在其中一个实施方式中,装置还包括:
100.状态配置模块,用于配置配额标志的状态;
101.若配额标志处于申请状态,则将当前线程加入等待队列;若配额标志处于非申请状态,则内核态客户端向元数据服务器发送线程配额请求,因此通过状态配置模块来配置配额标志的状态。
102.线程唤醒模块,用于将等待队列中的写入线程置于唤醒状态;
103.为了不占用cpu更多的资源,让cpu的效率达到最高,要将加入等待队列的写入线程置于睡眠状态,这样睡眠状态的写入线程便不会占用cpu的资源,能够最大的提高cpu的工作效率,因此当每次将配额标志的状态设置为非申请状态时,意味着有一个写入线程的写入文件操作已经执行完毕,因此要通过线程唤醒模块唤醒等待队列中的写入线程,方便等待队列中的写入线程准备通过内核态客户端发送配额请求。
104.规则排序模块,用于按照规则对写入线程进行顺序排列。
105.等待队列中的写入线程要按照一定的顺序进行排序,要不然如果一直执行文件写入操作,就有可能存在某个写入线程一直没有机会通过内核态客户端发送配额请求,因此要通过规则排序模块将等待队列的线程通过顺序规则进行排序,即按照先来后到的顺序进行排列。
106.文件写入模块,用于执行写入线程的文件写入操作。
107.当写入线程得到元数据服务器的配额后,写入线程通过文件写入模块执行文件写入操作,完成数据落盘。
108.实施例四:
109.本实施例提供一种计算机可读存储介质,计算机可读存储介质存储有程序,当程序被处理器执行时,使得处理器执行上述实施例中的基于线程的用户配额方法的步骤。
110.本领域内的技术人员应明白,本发明实施例中的实施例可提供为方法、系统、或计算机程序产品。因此,本发明实施例中可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例中可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
111.本发明实施例中是参照根据本发明实施例中实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
112.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
113.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
114.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其它等效实施例,而本发明的范围由所附的权利要求范围决定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献