KR100651722B1 - Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance - Google Patents

Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance Download PDF

Info

Publication number
KR100651722B1
KR100651722B1 KR1020040101094A KR20040101094A KR100651722B1 KR 100651722 B1 KR100651722 B1 KR 100651722B1 KR 1020040101094 A KR1020040101094 A KR 1020040101094A KR 20040101094 A KR20040101094 A KR 20040101094A KR 100651722 B1 KR100651722 B1 KR 100651722B1
Authority
KR
South Korea
Prior art keywords
task
kernel
linux kernel
real
interrupt
Prior art date
Application number
KR1020040101094A
Other languages
Korean (ko)
Other versions
KR20060062305A (en
Inventor
정영준
이형석
임용관
Original Assignee
한국전자통신연구원
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to KR1020040101094A priority Critical patent/KR100651722B1/en
Publication of KR20060062305A publication Critical patent/KR20060062305A/en
Application granted granted Critical
Publication of KR100651722B1 publication Critical patent/KR100651722B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0766Error or fault reporting or storing
    • G06F11/0772Means for error signaling, e.g. using interrupts, exception flags, dedicated error registers
    • GPHYSICS
    • G05CONTROLLING; REGULATING
    • G05BCONTROL OR REGULATING SYSTEMS IN GENERAL; FUNCTIONAL ELEMENTS OF SUCH SYSTEMS; MONITORING OR TESTING ARRANGEMENTS FOR SUCH SYSTEMS OR ELEMENTS
    • G05B2219/00Program-control systems
    • G05B2219/10Plc systems
    • G05B2219/15Plc structure of the system
    • G05B2219/15101Personal computer pc and plc, slot plc, same kernel

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

리눅스 커널의 구성 방법 및 실시간 성능 테스트 방법이 개시된다. 본 발명에 따른 리눅스 커널의 구성 방법은, 낮은 우선순위의 이전 태스크를 수행하는 단계; 높은 우선순위의 태스크에 대한 서비스를 요청하는 인터럽트가 발생하면 상기 리눅스 커널이 사용자 모드인지 또는 커널 모드인지를 판별하는 단계; 상기 리눅스 커널이 커널 모드이면, 높은 우선순위의 다른 태스크가 존재하는지 여부를 판단하는 단계; 및 상기 높은 우선순위의 다른 태스크가 존재하지 않으면 재스케줄링을 통해 상기 높은 우선순위의 태스크를 수행하는 단계;를 포함하는 것을 특징으로 한다. 본 발명에 따르면, 운용체계로서 리눅스를 채용한 정보가전응용제품의 실시간 응답 성능을 최적화할 수 있으며, 정보가전응용제품의 실시간 응답 성능을 보다 정확하게 테스트할 수 있다. A Linux kernel configuration method and a real-time performance test method are disclosed. A method of configuring a Linux kernel according to the present invention includes: performing a low priority transfer task; Determining whether the Linux kernel is in user mode or kernel mode when an interrupt requesting service for a high priority task occurs; If the Linux kernel is in kernel mode, determining whether another task of high priority exists; And performing the high priority task through rescheduling if another task of the high priority does not exist. According to the present invention, it is possible to optimize the real-time response performance of the information appliances application product employing Linux as the operating system, it is possible to more accurately test the real-time response performance of the information appliances application products.

Description

실시간 성능 지원을 위한 리눅스 커널의 구성 방법 및 실시간 성능 테스트 방법{Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance}Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance}

도 1a 및 1b는 선점형 커널과 비선점형 커널의 차이를 나타내기 위한 도면,1A and 1B are diagrams for showing a difference between a preemptive kernel and a non-preemptive kernel,

도 2는 본 발명의 일 실시예에 따른 리눅스 커널의 실시간 성능 지원을 위한 선점형 커널 방법의 흐름도,2 is a flowchart of a preemptive kernel method for real-time performance support of a Linux kernel according to an embodiment of the present invention;

도 3은 본 발명의 일 실시예에 따른 선점 포인트 삽입 방법을 설명하기 위한 참고도, 3 is a reference diagram for explaining a preemption point insertion method according to an embodiment of the present invention;

도 4a 및 4b는 본 발명의 일 실시예에 따른 인터럽트 처리 우선순위화 방법을 설명하기 위한 참고도,4A and 4B are reference diagrams for describing an interrupt processing prioritization method according to an embodiment of the present invention;

도 5는 본 발명의 일 실시예에 따른 우선순위 지원 동기화 방법을 설명하기 위한 참고도,5 is a reference diagram for explaining a priority support synchronization method according to an embodiment of the present invention;

도 6은 본 발명에 따른 실시간 응답 성능을 나타내는 태스크 선점 지연시간을 나타내는 도면이다. 6 is a diagram illustrating a task preemption delay time indicating real time response performance according to the present invention.

본 발명은 리눅스 커널에 관한 것으로, 보다 상세하게는 실시간 성능 지원을 위한 리눅스 커널의 구성 방법 및 실시간 성능 테스트 방법에 관한 것이다.The present invention relates to a Linux kernel, and more particularly, to a configuration method and a real-time performance test method of the Linux kernel for real-time performance support.

최근에 개발 중인 정보가전응용제품들을 보면, 이전의 제품들과 달리 컨버전스화되어 제품들끼리 서로 통신을 하고, 협력하는 작업 기능을 구비하고 있다. 홈 서버의 경우를 보면, 홈 서버에서 인터넷 쇼핑, 사용자 요구 비디오 스트리밍(VOD), 집 외부에서의 인터넷 접속으로 홈 서버를 통한 집 내부의 정보가전 제어 등의 많은 응용이 함께 구동되며, 실시간성을 요구하는 응용들이 점차 늘어나고 있는 추세이다. 또한, 이러한 실시간성의 요구와 더불어 이러한 정보가전응용 제품들의 가격을 낮출 수 있는데 기여할 수 있는 리눅스(Linux) 제품군들도 많은 성장세를 보이고 있다. 기존 MS나 전용 실시간 운영체제를 이용한 정보가전응용 제품의 출시는 기존 제품을 사용하여 안정성을 누릴 수는 있으나, 높은 비용으로 인한 부담이 존재한다. 고비용 문제를 해결할 수 있는 대안의 하나로서 리눅스를 이용하는 방법이 있다. In recent years, information electronics products under development are converged, unlike previous products, and have functions to communicate and cooperate with each other. In the case of a home server, many applications such as Internet shopping, user demanded video streaming (VOD), and internet access from outside the home are controlled by the home server. The demand for applications is increasing. In addition to these real-time demands, there is also a growing number of Linux products that can contribute to lowering the price of these information appliances. The release of information appliances application products using existing MS or dedicated real-time operating system can enjoy stability using existing products, but there is a burden due to high cost. One way to solve the high cost problem is to use Linux.

리눅스는 대형 기종에서나 작동하던 운영체계인 유닉스를 소형 PC에서도 작동할 수 있도록 만든 컴퓨터 기본 운영체계이다. 리눅스는 프로그램 소스코드가 무료로 공개돼 있어 프로그래머가 원하는 대로 특정기능을 추가할 수 있고, 더욱이 어느 플랫폼에도 포팅이 가능하다는 장점이 있다. Linux is the basic computer operating system that made Unix, the operating system that used to work on large models, to run on small PCs. Linux has the advantage that the program source code is freely available, so that programmers can add specific features as they wish, and even port them to any platform.

정보가전응용제품들의 운용체계로서 리눅스를 이용할 경우에는 오픈되어 있는 여러 솔루션을 사용함으로써 비용적인 강점을 갖는 반면, 태생적인 한계로 인해 실시간 성능에 문제점을 가지고 있다. 리눅스의 태생적 한계란 리눅스가 전형적인 유닉스 커널과 유사하게 모놀리틱(monolithic) 커널로 구성되어 사용자 모드에서 커널 모드로의 진입시에는 시스템 내의 이벤트에 즉각적인 반응을 할 수 없어서, 실시간 성능에 문제점이 존재한다는 것이다. When using Linux as the operating system of information appliances applications, it has a cost advantage by using various open solutions, but has a problem in real time performance due to the inherent limitations. The inherent limitation of Linux is that Linux is composed of a monolithic kernel similar to a typical Unix kernel, and there is a problem in real-time performance because it cannot immediately react to events in the system when entering kernel mode from user mode. Is that.

한편, 커널은 컴퓨터 운영체계의 가장 중요한 핵심으로서, 운영체계의 다른 모든 부분에 여러 가지 기본적인 서비스를 제공한다. 일반적으로, 커널에는 종료된 입출력 연산 등의 커널의 서비스를 경쟁적으로 요구하는 모든 요청들을 처리하는 인터럽트 처리기와 어떤 프로그램들이 어떤 순서로 커널의 처리시간을 공유할 것인지를 결정하는 스케줄러 및 스케줄이 끝나면 실제로 각 프로세스들에게 컴퓨터의 사용권을 부여하는 수퍼바이저 등이 포함되어 있다. 커널은 또한, 메모리나 저장장치 내에서 운영체계의 주소공간을 관리하고, 이들을 모든 주변장치들과 커널의 서비스들을 사용하는 다른 사용자들에게 고루 나누어주는 메모리 관리자를 가지고 있다. 커널의 서비스는 운영체계의 다른 부분이나 스템 호출이라고 알려진 일련의 프로그램 인터페이스들을 통해 요청된다. 커널을 유지하기 위한 코드는 지속적으로 사용되기 때문에, 보통 커널은 자주 사용되지 않는 운영체계의 나머지 부분에 의해 덮어씌워져 훼손되지 않도록, 보호된 메모리 영역에 적재된다. The kernel, on the other hand, is the most important core of a computer operating system and provides several basic services to all other parts of the operating system. In general, the kernel has an interrupt handler that handles all requests that competitively require kernel services, such as terminated I / O operations, and a scheduler that determines which programs will share the kernel's processing time and in what order. It includes a supervisor that gives each process a license to the computer. The kernel also has a memory manager that manages the operating system's address space in memory or storage and distributes it to all peripherals and other users of the kernel's services. Kernel services are requested through different parts of the operating system or through a set of program interfaces known as system calls. Because the code to maintain the kernel is used continuously, the kernel is usually loaded in a protected memory area so that it is not overwritten by the rest of the less frequently used operating system.

도 1a 및 1b는 선점형 커널(kernel)과 비선점형 커널의 차이를 나타내기 위한 도면이다. 도 1a는 비선점형 커널에 있어서 긴급한 태스크가 발생했을 경우의 구동 방법을 나타내고, 도 1b는 선점형 커널에 있어서 긴급한 태스크가 발생했을 경우의 구동 방법을 나타낸다. 여기서 비선점형 커널이 종래의 표준 리눅스이다.1A and 1B are diagrams illustrating the difference between a preemptive kernel and a non-preemptive kernel. FIG. 1A shows a driving method when an urgent task occurs in the non-preemptive kernel, and FIG. 1B shows a driving method when an urgent task occurs in the preemptive kernel. The non-preemptive kernel here is the traditional standard Linux.

선점형 커널과 비선점형 커널의 두 경우 모두 사용자 모드에서는 긴급한 태 스크가 발생했을 경우 구동되고 있던 태스크의 선점이 가능하다. 그러나, 구동되고 있던 태스크가 커널 서비스를 받기 위해 커널 모드로 진입하게 되면, 선점형 커널과 비선점형 커널의 구동 방법은 달라진다. In both the preemptive kernel and the non-preemptive kernel, user mode can preempt a running task when an urgent task occurs. However, when a running task enters kernel mode to receive kernel services, the preemptive kernel and the non-preemptive kernel run differently.

도 1a를 참조하면, 비선점형 커널에 있어서 긴급한 태스크가 발생했을 경우, 비선점형 커널은 높은 우선순위의 긴급한 태스크가 발생했음을 체크하고 커널 모드에서 구동되던 원래 태스크를 그대로 구동시킨 후 높은 우선순위의 긴급한 태스크를 수행한다. 도 1b를 참조하면, 선점형 커널은 높은 우선순위의 긴급한 태스크를 먼저 수행시키고 난 후 커널 모드에서 구동하고 있던 원래 태스크를 구동시킨다. 따라서 보다 실시간적 성능에 적합한 커널 구조라고 할 수 있다. 여기서 ISR은 높은 우선순위의 긴급한 태스크가 발생하였음을 알리는 신호이다.Referring to FIG. 1A, when an urgent task occurs in a non-preemptive kernel, the non-preemptive kernel checks that a high priority urgent task has occurred, runs the original task that was run in kernel mode, and then executes a high priority urgent task. Perform the task. 1B, the preemptive kernel first executes a high priority urgent task and then runs the original task that was running in kernel mode. Therefore, it can be said to be a kernel structure suitable for more real-time performance. The ISR is a signal indicating that a high priority urgent task has occurred.

위에서 살펴본 바와 같이, 비선점형 커널의 일종인 리눅스 커널은 실시간 성능에 문제점이 존재한다.As discussed above, the Linux kernel, a kind of non-preemptive kernel, has problems with real-time performance.

본 발명이 이루고자 하는 기술적 과제는 실시간 성능 지원을 위한 리눅스 커널의 구성 방법 및 그 방법을 실현시키기 위한 프로그램이 기록된 기록매체를 제공하는데 있다.SUMMARY OF THE INVENTION The present invention has been made in an effort to provide a method for configuring a Linux kernel for real-time performance support, and a recording medium on which a program for realizing the method is recorded.

본 발명이 이루고자 하는 다른 기술적 과제는, 리눅스 커널의 실시간 성능 테스트 방법을 제공하는데 있다.Another technical problem to be achieved by the present invention is to provide a real-time performance test method of the Linux kernel.

상기 과제를 이루기 위한 본 발명의 일 측면에 의한 실시간 성능 지원을 위 한 리눅스 커널의 구성 방법은,Linux kernel configuration method for real-time performance support according to an aspect of the present invention for achieving the above object,

낮은 우선순위의 이전 태스크를 수행하는 단계; 높은 우선순위의 태스크에 대한 서비스를 요청하는 인터럽트가 발생하면 상기 리눅스 커널이 사용자 모드인지 또는 커널 모드인지를 판별하는 단계; 상기 리눅스 커널이 커널 모드이면, 높은 우선순위의 다른 태스크가 존재하는지 여부를 판단하는 단계; 및 상기 높은 우선순위의 다른 태스크가 존재하지 않으면 재스케줄링을 통해 상기 높은 우선순위의 태스크를 수행하는 단계;를 포함하는 것을 특징으로 한다.Performing a low priority previous task; Determining whether the Linux kernel is in user mode or kernel mode when an interrupt requesting service for a high priority task occurs; If the Linux kernel is in kernel mode, determining whether another task of high priority exists; And performing the high priority task through rescheduling if another task of the high priority does not exist.

본 발명의 다른 측면에 의하면, 상기 실시간 성능 지원을 위한 리눅스 커널의 구성 방법은, 상기 리눅스 커널 내의 임계 지역에 선점 포인트를 두어, 높은 우선순위의 태스크가 상기 선점 포인트에 존재하면 상기 높은 우선순위의 태스크를 수행하는 단계를 더 포함한다.According to another aspect of the present invention, a method of configuring a Linux kernel for real-time performance support, by placing a preemption point in a critical region within the Linux kernel, if a high priority task exists in the preemption point of the high priority The method further includes performing a task.

본 발명의 또 다른 측면에 의하면, 상기 실시간 성능 지원을 위한 리눅스 커널의 구성 방법은, 상기 리눅스 커널은 인터럽트 처리시, 상반부 처리 단계와 하반부 처리 단계를 포함하고, 상기 상반부 처리 단계는 인터럽트 처리기를 스레드화하여 태스크의 우선순위에 따라 스케줄링하는 단계를 더 포함한다.According to another aspect of the present invention, a method of configuring a Linux kernel for real-time performance support, the Linux kernel includes an upper half processing step and a lower half processing step in the interrupt processing, the upper half processing step thread the interrupt handler And scheduling according to the priority of the task.

본 발명의 또 다른 측면에 의하면, 상기 실시간 성능 지원을 위한 리눅스 커널의 구성 방법은, 상기 하반부 처리 단계는, 하반부 처리 이벤트의 발생 시마다 우선순위에 따라 하반부 처리 스레드 큐에 존재하는 태스크들의 순서를 정렬하는 단계를 포함한다.According to another aspect of the present invention, the Linux kernel configuration method for the real-time performance support, wherein the lower half processing step, the order of the tasks present in the lower half processing thread queue according to the priority for each occurrence of the lower half processing event. It includes a step.

본 발명의 또 다른 측면에 의하면, 상기 실시간 성능 지원을 위한 리눅스 커 널의 구성 방법은, 상기 리눅스 커널의 동기화 인터페이스에 태스크 도달 이벤트가 발생할 때마다 우선순위에 따라 태스크들을 정렬하는 단계를 포함하는 것이 바람직하다.According to another aspect of the present invention, a method of configuring a Linux kernel for supporting the real-time performance, the method comprising the step of sorting the tasks according to the priority each time a task arrival event occurs in the synchronization interface of the Linux kernel desirable.

상기 다른 기술적 과제를 이루기 위한 본 발명의 일 측면에 의한 리눅스 커널의 실시간 성능 테스트 방법은,Real-time performance test method of the Linux kernel according to an aspect of the present invention for achieving the above another technical problem,

현재 태스크에 대한 서비스를 요청하는 인터럽트에 대한 인터럽트 핸들러 처리 시간인 인터럽트 처리 지연시간을 측정하는 단계; 상기 현재 태스크가 스케줄러까지 도달할 때까지의 지연시간인 스케줄러 도달 지연시간을 측정하는 단계; 상기 스케줄러가 상기 현재 태스크에 대한 스케줄링에 소요되는 시간인 스케줄러 처리 지연시간을 측정하는 단계; 및 상기 인터럽트 처리 지연시간, 상기 스케줄러 도달 지연시간 및 상기 스케줄러 처리 지연시간을 더하여 상기 리눅스 커널의 실시간 응답 성능을 나타내는 태스크 선점 지연시간을 결정하는 단계;를 포함하는 것을 특징으로 한다.Measuring an interrupt processing delay time, which is an interrupt handler processing time for an interrupt requesting a service for a current task; Measuring a scheduler arrival delay time, which is a delay time until the current task reaches a scheduler; Measuring, by the scheduler, a scheduler processing delay time which is a time required for scheduling of the current task; And determining the task preemption delay time representing the real-time response performance of the Linux kernel by adding the interrupt processing delay time, the scheduler arrival delay time, and the scheduler processing delay time.

이하, 첨부한 도면을 참조하면서 본 발명에 따른 실시예들을 상세하게 설명한다. 각 도면의 구성요소들에 참조부호를 부가함에 있어서, 동일한 구성요소들에 한해서는 비록 다른 도면상에 표시되더라도 동일한 부호로 표기한다. 또한, 아래 설명에서는 구체적인 회로의 구성소자 등과 같은 많은 특정사항들이 도시되어 있는데, 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐 이러한 특정사항들 없이도 본 발명이 실시될 수 있음은 이 기술분야에서 통상의 지식을 가진 자에게는 자명하다 할 것이다. 그리고, 본 발명을 설명함에 있어서, 관련된 공지 기능 또는 구성에 대한 구체적인 설명이 본 발명의 요지를 흐릴 수 있다고 판단되는 경우에는 그 상세한 설명을 생략한다.Hereinafter, exemplary embodiments of the present invention will be described in detail with reference to the accompanying drawings. In adding reference numerals to the components of each drawing, the same components are denoted by the same reference numerals even if they are shown on different drawings. In addition, in the following description there are shown a number of specific details, such as components of the specific circuit, which are provided to aid a more general understanding of the invention, it is to be understood that the present invention may be practiced without these specific details. It will be self-evident to those of ordinary knowledge. In describing the present invention, when it is determined that detailed descriptions of related known functions or configurations may obscure the gist of the present invention, the detailed description thereof will be omitted.

먼저, 본 발명에 따른 실시간 성능 지원을 위한 리눅스 커널의 구성 방법을 설명한다. 본 발명에서는 리눅스 커널의 실시간 성능 지원을 위해 선점형 커널 방법, 선점 포인트 삽입 기법, 인터럽트 처리 우선 순위화 방법 및 우선순위 지원 동기화 방법을 이용한다.First, a method of configuring a Linux kernel for real-time performance support according to the present invention will be described. In the present invention, a preemptive kernel method, a preemptive point insertion method, an interrupt processing prioritization method, and a priority support synchronization method are used for real-time performance support of the Linux kernel.

도 2는 본 발명의 일 실시예에 따른 리눅스 커널의 실시간 성능 지원을 위한 선점형 커널 방법의 흐름도이다. 먼저, 본 발명의 일 실시예에 따른 리눅스 커널에 낮은 우선순위의 태스크가 구동되고 있는 상태에서(S110), 높은 우선 순위의 태스크에 대한 서비스를 요청하는 인터럽트가 발생한다면(S120), 먼저 인터럽트 서비스 루틴을 수행한다. 2 is a flowchart of a preemptive kernel method for real-time performance support of a Linux kernel according to an embodiment of the present invention. First, in a state where a low priority task is running in the Linux kernel according to an embodiment of the present invention (S110), if an interrupt requesting service for a high priority task occurs (S120), first, interrupt service Run the routine.

그 인터럽트 서비스 루틴에서 다른 태스크를 깨우는 작업이 필요하다면 다른 태스크를 깨우면서 스케줄러에게 재스케줄링이 필요함을 나타내는 소정 변수 값을 설정한다. 그 후, 인터럽트 서비스 루틴이 끝나면, 리눅스 커널이 사용자 모드인지 커널 모드인지 체크한다(S130). 만약 사용자 모드라면 종래 선점형 커널에서도 언제든지 재스케줄링이 가능하므로 종래의 표준 리눅스와 동일한 처리 루틴을 수행한다(S140).If the interrupt service routine needs to wake up another task, it wakes up another task and sets a predetermined variable value indicating that the scheduler needs rescheduling. Then, when the interrupt service routine is finished, it is checked whether the Linux kernel is in user mode or kernel mode (S130). If the user mode can be rescheduled at any time in the conventional preemptive kernel, the same processing routine as in the conventional standard Linux is performed (S140).

그러나 커널 모드인 경우, 커널 내에서 재스케줄링이 가능한지 여부를 조사한다. 즉, 높은 우선순위의 다른 태스크가 존재하는지 여부를 확인한 후(S150), 높은 우선순위의 다른 태스크가 존재하지 않으면 제120 단계에서 발생한 높은 우선순 위의 태스크를 수행하기 위해 재스케줄링을 수행한다(S160). 그 후 우선순위의 태스크를 수행한다(S170). In kernel mode, however, it checks to see if rescheduling is possible within the kernel. That is, after checking whether another task of high priority exists (S150), if another task of high priority does not exist, rescheduling is performed to perform the high priority task generated in step 120 ( S160). Thereafter, the task of priority is performed (S170).

다음으로, 본 발명의 일 실시예에 따른 선점 포인트 삽입 방법을 설명한다. 도 3은 본 발명의 일 실시예에 따른 선점 포인트 삽입 방법을 설명하기 위한 참고도이다. 커널 내부에는 태스크들이 동시에 접근하려고 하는 공유 자원을 보호하기 위한 임계지역(critical section)이 존재한다. 이 임계지역은 보통 락이라고 하는 공유 자원 보호 인터페이스로 보호되어 있다. 일반적으로는 태스크가 임계지역 내부에 들어가 있다면 선점할 수 없도록 구현되어 있다. 그 이유는 여러 태스크들이 사용하는 공유 자원이기 때문에 커널 내부 데이터의 일관성을 유지하기 위해서이다. 그러나, 경우에 따라서는 이 임계지역 내부에 태스크가 진입하더라도 선점이 가능한 경우가 생길 수 있다. 이런 경우에는 임계지역 내부에 자발적인 선점 포인트를 두어 태스크가 미리 긴급한 태스크가 있는지 여부를 체크하여 만일 긴급한 태스크가 있다면 즉각적으로 CPU의 제어권을 넘겨서 태스크 선점 지연시간을 그만큼 줄일 수 있다.Next, a preemption point insertion method according to an embodiment of the present invention will be described. 3 is a reference diagram for explaining a preemptive point insertion method according to an embodiment of the present invention. Inside the kernel, there is a critical section to protect shared resources that tasks try to access simultaneously. This critical area is protected by a shared resource protection interface, commonly referred to as a lock. In general, if the task is inside the critical area, it is not implemented. The reason for this is to maintain consistency in the kernel data because it is a shared resource used by multiple tasks. However, in some cases, preemption is possible even if a task enters inside this critical area. In this case, a voluntary preemption point can be placed inside the critical area to check whether the task has an urgent task in advance, and if there is an urgent task, it can immediately transfer control of the CPU to reduce the task preemption delay.

다음으로, 본 발명의 일 실시예에 따른 인터럽트 처리 우선순위화 방법을 설명한다. 도 4a 및 4b는 본 발명의 일 실시예에 따른 인터럽트 처리 우선순위화 방법을 설명하기 위한 참고도이다. 리눅스의 인터럽트 처리 구조는 상반부와 하반부로 나뉘어져 있다. 상반부는 인터럽트가 발생될 경우 최소한의 작업만을 하고 가급적 짧은 시간 내에 제어권을 하반부로 넘겨서 응답성을 높인다. 그 후, 나머지 처리해야할 부분은 시스템의 남는 시간에 하반부 처리를 하게 된다. 그러나, 실시간 성능을 지원 관점에서 보면, 종래 리눅스의 인터럽트 처리의 상반부 처리 과정 및 하반부 처리 과정은 각각 문제점을 안고 있다. Next, an interrupt processing prioritization method according to an embodiment of the present invention will be described. 4A and 4B are reference diagrams for describing an interrupt processing prioritization method according to an embodiment of the present invention. Linux's interrupt handling structure is divided into upper and lower half. The upper half improves responsiveness by doing minimal work in the event of an interrupt and transferring control to the lower half in the shortest possible time. After that, the rest of the work is done in the bottom half of the system. However, from the standpoint of supporting real-time performance, the upper half processing process and the lower half processing process of the interrupt processing in Linux have problems.

먼저 상반부 처리부는 인터럽트가 발생했을 때 가장 먼저 처리되는 부분으로, 최대한 코드가 짧고 빨리 제어권을 다시 되돌려 줄 수 있도록 되어 있다. 그러나, 인터럽트를 처리하는 동안 발생하는 인터럽트 사이의 우선순위 개념이 없어서 더 높은 우선순위를 가지는 인터럽트에 대한 우선적 처리 구조에 문제가 생기고, 이는 선점 지연시간이 늘어남을 의미한다. 따라서, 본 발명에 있어서는 도 4a에 도시한 바와 같이 상반부 인터럽트 구조에서 인터럽트 처리기가 우선순위를 가질 수 있도록 인터럽트 처리기를 각각 스레드화하여 우선순위에 따라 스케줄링 될 수 있도록 한다. First, the upper half processing part is processed first when an interrupt occurs, so that the code can be returned as soon as possible and control is returned as soon as possible. However, there is no concept of priority between interrupts occurring during interrupt processing, which leads to problems in the priority handling structure for higher priority interrupts, which means increased preemption latency. Accordingly, in the present invention, as shown in FIG. 4A, the interrupt handlers may be threaded to be scheduled according to the priority so that the interrupt handlers have priority in the upper half interrupt structure.

다음으로, 하반부 처리 핸들러는 시스템이 남는 시간에 구동되는 것이지만, 종래 리눅스에서는 순차적 하반부 처리 스레드 큐에서 순차적으로 작업을 처리하기 때문에 긴급한 태스크에 우선적으로 CPU를 서비스해주는 실시간 성능을 저해할 수 있다. 따라서, 본 발명에 있어서는 도 4b에 도시한 바와 같이 순차적 하반부 처리 스레드 큐에 있는 작업의 순서를 하반부 처리 이벤트의 발생 시마다 우선순위 기반으로 정렬하여 우선순위별로 실행하도록 한다.Next, although the lower half processing handler is driven at the time when the system is left, the conventional Linux processes the tasks sequentially in the sequential lower half processing thread queue, which can hinder the real-time performance of preferentially servicing the CPU. Accordingly, in the present invention, as shown in FIG. 4B, the order of the jobs in the sequential lower half processing thread queue is executed based on the priority based on the priority of each occurrence of the lower half processing event.

다음으로, 본 발명의 일 실시예에 따른 우선순위 지원 동기화 방법을 설명한다. 도 5는 본 발명의 일 실시예에 따른 우선순위 지원 동기화 방법을 설명하기 위한 참고도이다. 동기화 방법은 시스템 내부에서 공유 자원의 일관성을 유지하기 위해 공유 자원을 락이라는 동기화 인터페이스로 보호하는 것을 말한다. 종래 리눅 스에서의 동기화 인터페이스는 공유 자원을 보호하는 동기화 인터페이스에 동시에 태스크들이 접근했을 경우에 우선순위에 따른 처리 구조를 가지고 있지 못하고, 경우에 따라서 수행되는 것이 다르게 된다. 이것은 보다 높은 우선순위를 가지는 태스크가 우선적으로 처리되어 실시간 성능을 높여야 함에도 불구하고 우선순위가 더 낮은 태스크가 수행될 수 있는 여지가 있어 실시간 성능을 저해하는 요소로 볼 수 있다. Next, a priority support synchronization method according to an embodiment of the present invention will be described. 5 is a reference diagram illustrating a priority support synchronization method according to an embodiment of the present invention. Synchronization means protecting shared resources with a synchronization interface called lock in order to maintain consistency of shared resources within the system. In the conventional Linux, the synchronization interface does not have a processing structure according to priority when tasks simultaneously access a synchronization interface protecting shared resources, and may be performed differently in some cases. This can be viewed as a factor that hinders real-time performance, although tasks with higher priorities must be prioritized to improve real-time performance.

따라서, 본 발명에 있어서는 도 5에 도시한 바와 같이 동기화 인터페이스(310)내의 공유 자원에 접근하려고 시도하는 T(A), T(B) 및 T(C)와 같은 태스크의 큐를 따로 유지하고, 동기화 인터페이스에 태스크 도달 이벤트가 발생할 때마다 우선순위 기반으로 태스크의 큐를 정렬한다. 우선순위에 따라 정렬된 태스크의 큐들(330)을 그 우선순위에 따라 순차적으로 실행함으로써 높은 우선순위를 가지는 태스크에 대한 실시간 성능을 높일 수 있다.Accordingly, in the present invention, as shown in FIG. 5, queues of tasks such as T (A), T (B), and T (C) attempting to access shared resources in the synchronization interface 310 are maintained separately. Whenever a task arrival event occurs in the synchronization interface, the queue of tasks is sorted based on priority. By sequentially executing the queues 330 of the tasks arranged according to the priority according to the priority, it is possible to increase the real-time performance for the task having a high priority.

이상, 본 발명에 따른 실시간 성능 지원을 위한 리눅스 커널의 구성 방법에 대해 설명하였다. 이하에서는 본 발명에 따른 리눅스 커널의 실시간 성능 테스트 방법에 대해 설명한다.In the above, the Linux kernel configuration method for real-time performance support according to the present invention has been described. Hereinafter will be described a real-time performance test method of the Linux kernel according to the present invention.

본 발명이 목표로 하고 있는 정보가전응용 제품의 실시간 성능 지원의 정도는 실시간성의 기준으로 삼을 수 있는 지표의 하나인 선점 지연시간의 99.999%를 보장하는 보장 시간의 제시이다. 종래의 리눅스 커널은 이 보장 시간이 수십 밀리 초까지 걸리는 경우가 있어서 정보가전응용제품에 탑재할 때 실시간 성능 측면에서 문제점을 보여줘 왔다. 응용 제품에 따라 다르나 일반적으로 99.999%의 보장 시간 이 수백 마이크로 초 내에 이루어져야 정보가전응용제품에 탑재하여 제대로 활용될 수 있다. The degree of real-time performance support of information appliances application products aimed at by the present invention is a guarantee time guaranteeing 99.999% of preemption delay time, which is one of the indicators that can be used as a criterion for real-time performance. Conventional Linux kernels can take up to several tens of milliseconds to provide real-time performance problems when loaded into information appliances. Depending on the application, a 99.999% guaranteed time is typically within a few hundred microseconds before it can be incorporated into an information appliance.

도 6은 본 발명에 따른 실시간 응답 성능을 나타내는 태스크 선점 지연시간을 나타내는 도면이다. 도 6을 참조하면, 태스크 선점 지연시간은 인터럽트 처리 지연시간, 스케줄러 도달 지연시간과 스케줄러 처리 지연시간을 모두 합한 것으로 실질적인 의미는 갑작스럽게 시스템에서 구동시켜야 할 긴급한 태스크가 발생되었을 경우에 구동되던 태스크의 CPU 자원을 선점하여 긴급한 태스크에게 서비스를 해 줄 때까지의 걸리는 시간이다. 인터럽트 도달 지연시간은 하드웨어적으로 인터럽트가 발생하여 임베디드 운영체제 커널까지의 도달 지연시간으로서 하드웨어적으로 조금씩 다르며 매우 작기 때문에 무시할 수 있다. 6 is a diagram illustrating a task preemption delay time indicating real time response performance according to the present invention. Referring to FIG. 6, the task preemption delay time is the sum of the interrupt processing delay time, the scheduler arrival delay time, and the scheduler processing delay time. The practical meaning of the task preemption delay is that of the task that was started when an urgent task to be run suddenly occurred in the system. It takes time to preempt CPU resources to service urgent tasks. Interrupt arrival delay is a delay that arrives to the embedded operating system kernel due to hardware interrupt, and can be ignored because it is slightly different in hardware and is very small.

인터럽트 처리 지연시간은 해당 인터럽트에 대한 인터럽트 핸들러 처리 시간으로서 각 인터럽트 마다 또는 인터럽트의 처리 방법에 따라 달라지는 시간이다. 그 다음으로 스케줄러 도달 지연시간은 인터럽트가 발생하여 인터럽트 핸들러의 처리 이후에 바로 태스크에게 서비스가 되는 것이 아니라 스케줄러를 거쳐 긴급한 태스크에게 CPU의 자원이 서비스되는데 이 때 스케줄러까지 도달할 때까지의 지연시간이다. 일반적으로 리눅스 커널에서 이 부분에 많은 시간이 소요된다. Interrupt processing delay time is the interrupt handler processing time for the corresponding interrupt, which is time for each interrupt or depending on the interrupt processing method. Next, the scheduler arrival delay is not the service that is immediately serviced by the task after the interrupt handler has been processed, but the CPU resource that is serviced by the urgent task through the scheduler. . In general, this part of the Linux kernel is time-consuming.

마지막으로 스케줄러 처리 지연시간은 스케줄러가 스케줄링을 하는 동안의 소요되는 시간을 의미한다.Finally, the scheduler processing delay time means the time taken while the scheduler schedules.

구체적인 태스크 선점 지연시간을 측정하는 방법은 임베디드 운영체제 커널에 높은 로드의 응용을 구동시킨 다음 인터럽트를 발생시켜서 read() 시스템 콜 사 이의 시간을 측정하는 것이다. 이것이 의미하는 바는 read() 시스템 콜로 인하여 태스크가 커널 내부로 진입하여 인터럽트가 발생되어 해당 태스크를 깨워서 수행시켜야 하는 상황을 인위적으로 구현하는 것으로 해당 태스크를 서비스하는 시간을 측정하는 것이라고 볼 수 있다. A specific method of measuring task preemption latency is to run a high-load application into the embedded operating system kernel and then generate an interrupt to measure the time between read () system calls. This means that the read () system call causes the task to enter the kernel, interrupt, and wake up the task artificially to measure the time it takes to service the task.

이상 설명한, 실시간 성능 지원을 위한 리눅스 커널의 구성 방법 및 실시간 성능 테스트 방법은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 유형의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는, ROM, RAM, CD-ROM, 자기 테이프, 플로피디스크, 광데이터 저장 장치 등이 있으며, 또한 캐리어 웨이브(예를 들어, 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드로 저장되고 실행될 수 있다.As described above, the Linux kernel configuration method and the real-time performance test method for real-time performance support can be implemented as computer-readable code on a computer-readable recording medium. Computer-readable recording media include any type of recording device that stores data that can be read by a computer system. Examples of computer-readable recording media include ROM, RAM, CD-ROM, magnetic tape, floppy disks, optical data storage devices, and the like, and may also be implemented in the form of a carrier wave (for example, transmission over the Internet). It includes being. The computer readable recording medium can also be distributed over network coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.

이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.So far I looked at the center of the preferred embodiment for the present invention. Those skilled in the art will appreciate that the present invention can be implemented in a modified form without departing from the essential features of the present invention. The scope of the present invention is shown in the claims rather than the foregoing description, and all differences within the scope will be construed as being included in the present invention.

이상에서 설명한 바와 같이 본 발명에 따르면, 운용체계로서 리눅스를 채용한 정보가전응용제품의 실시간 응답 성능을 최적화할 수 있으며, 정보가전응용제품의 실시간 응답 성능을 보다 정확하게 테스트할 수 있다.  As described above, according to the present invention, it is possible to optimize the real-time response performance of an information appliance application product employing Linux as an operating system, and to more accurately test the real-time response performance of an information appliance application product.

Claims (6)

실시간 응답 성능 지원을 위한 임베디드 리눅스 커널의 구성 방법에 있어서,낮은 우선 순위의 이전 태스크를 수행중에 상기 이전 태스크보다 높은 우선 순위의 태스크에 대한 서비스를 요청하는 인터럽트가 발생하는 단계;A method of configuring an embedded Linux kernel for supporting real-time response performance, the method comprising: generating an interrupt requesting a service for a task having a higher priority than the previous task while performing a previous task having a low priority; 상기 리눅스 커널이 사용자 모드인지 또는 커널 모드인지를 판별하는 단계;Determining whether the Linux kernel is user mode or kernel mode; 상기 리눅스 커널이 커널 모드인 경우는 커널 내 상기 높은 우선순위 태스크의 우선 처리를 위한 재스케줄링 가능 여부를 판단하는 단계; 및 Determining whether rescheduling is possible for priority processing of the high priority task in the kernel when the Linux kernel is in kernel mode; And 상기 재스케줄링이 가능한 경우, 상기 이전 태스크의 수행을 중단하고 상기 재스케줄링을 통하여 상기 높은 우선 순위의 태스크를 수행하는 단계;를 포함하는 것을 특징으로 하는 방법.If the rescheduling is possible, stopping the execution of the previous task and performing the high priority task through the rescheduling. 제1 항에 있어서,According to claim 1, 상기 리눅스 커널 내의 임계 지역에 선점 포인트를 두어, 높은 우선순위의 태스크가 상기 선점 포인트에 존재하면 상기 높은 우선순위의 태스크를 수행하는 단계를 더 포함하는 것을 특징으로 하는 방법.Placing a preemption point in a critical region within the Linux kernel to perform the high priority task if a high priority task exists at the preemption point. 제 1항에 있어서,상기 리눅스 커널은 인터럽트 처리시, 상반부 처리 단계와 하반부 처리 단계를 포함하고, The system of claim 1, wherein the Linux kernel includes an upper half processing step and a lower half processing step in interrupt processing. 상기 상반부 처리 단계는 인터럽트 처리기에 우선순위를 부여하고 상기 인터럽트 처리기를 스레드화하여 상기 부여된 우선순위에 따라 스케줄링 하는 단계를 포함하는 것을 특징으로 하는 방법.And said upper half processing step comprises prioritizing an interrupt handler and threading said interrupt handler to schedule according to said assigned priority. 제 3항에 있어서, 상기 후반부 처리 단계는,The method of claim 3, wherein the second half processing step 하반부 처리 이벤트의 발생시마다 상기 부여된 우선순위에 따라 하반부 스레드 큐에 존재하는 태스크들을 정렬하고 상기 부여된 우선순위에 따라 실행되도록 하는 것을 특징으로 하는 방법.Whenever a lower half processing event occurs, the tasks existing in the lower half thread queue are sorted according to the given priority and executed according to the given priority. 제1 항에 있어서,According to claim 1, 상기 리눅스 커널의 동기화 인터페이스에 태스크 도달 이벤트가 발생할 때마다 우선순위에 따라 태스크들을 정렬하는 단계를 포함하는 것을 특징으로 하는 방법.And sorting tasks according to priorities whenever a task arrival event occurs in the synchronization interface of the Linux kernel. 리눅스 커널의 실시간 응답 성능 테스트 방법에 있어서,In the real-time response performance test method of the Linux kernel, 현재 태스크에 대한 서비스를 요청하는 인터럽트에 대한 인터럽트 핸들러 처리 시간인 인터럽트 처리 지연시간을 측정하는 단계;Measuring an interrupt processing delay time, which is an interrupt handler processing time for an interrupt requesting a service for a current task; 상기 현재 태스크가 스케줄러까지 도달할 때까지의 지연시간인 스케줄러 도달 지연시간을 측정하는 단계;Measuring a scheduler arrival delay time, which is a delay time until the current task reaches a scheduler; 상기 스케줄러가 상기 현재 태스크에 대한 스케줄링에 소요되는 시간인 스케줄러 처리 지연시간을 측정하는 단계; 및Measuring, by the scheduler, a scheduler processing delay time which is a time required for scheduling of the current task; And 상기 인터럽트 처리 지연시간, 상기 스케줄러 도달 지연시간 및 상기 스케줄러 처리 지연시간을 더하여 상기 리눅스 커널의 실시간 응답 성능을 나타내는 태스크 선점 지연시간을 결정하는 단계;를 포함하는 것을 특징으로 하는 방법.Determining the task preemption delay that represents the Linux kernel's real-time response performance by adding the interrupt processing delay time, the scheduler arrival delay time, and the scheduler processing delay time.
KR1020040101094A 2004-12-03 2004-12-03 Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance KR100651722B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020040101094A KR100651722B1 (en) 2004-12-03 2004-12-03 Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020040101094A KR100651722B1 (en) 2004-12-03 2004-12-03 Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance

Publications (2)

Publication Number Publication Date
KR20060062305A KR20060062305A (en) 2006-06-12
KR100651722B1 true KR100651722B1 (en) 2006-12-01

Family

ID=37158488

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040101094A KR100651722B1 (en) 2004-12-03 2004-12-03 Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance

Country Status (1)

Country Link
KR (1) KR100651722B1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101794765B1 (en) 2016-08-03 2017-11-07 국방과학연구소 Thread scheduling method on multi data link processor

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101220053B1 (en) * 2006-09-29 2013-01-08 포항공과대학교 산학협력단 Method of dynamic scheduling to kernel thread for improving response time of real time task
KR100930009B1 (en) * 2008-06-04 2009-12-07 한국과학기술원 Method of interrupt processing
US8473662B2 (en) 2009-12-18 2013-06-25 Electronics And Telecommunications Research Institute Interrupt-handling-mode determining method of embedded operating system kernel
KR101331957B1 (en) * 2012-01-11 2013-11-21 엘아이지넥스원 주식회사 Method of configuring kernel for real-time thread proccsing of general purpose operating system
CN111290964A (en) * 2020-03-05 2020-06-16 浙江中控技术股份有限公司 Industrial linux system real-time testing method and device

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990057122A (en) * 1997-12-29 1999-07-15 홍성수 User Level Multithreading Method for Real-Time Systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19990057122A (en) * 1997-12-29 1999-07-15 홍성수 User Level Multithreading Method for Real-Time Systems

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101794765B1 (en) 2016-08-03 2017-11-07 국방과학연구소 Thread scheduling method on multi data link processor

Also Published As

Publication number Publication date
KR20060062305A (en) 2006-06-12

Similar Documents

Publication Publication Date Title
US10908954B2 (en) Quality of service classes
US9448864B2 (en) Method and apparatus for processing message between processors
US7962913B2 (en) Scheduling threads in a multiprocessor computer
US5469571A (en) Operating system architecture using multiple priority light weight kernel task based interrupt handling
TWI361383B (en) Interrupt control method, sequential criticality system, mobile ceullar phone, and interrupt handle method
US20050015768A1 (en) System and method for providing hardware-assisted task scheduling
JP2011192281A (en) Virtual machine monitor and scheduling method for the same
US10271326B2 (en) Scheduling function calls
US20050015764A1 (en) Method, system, and program for handling device interrupts in a multi-processor environment
WO1996035167A1 (en) System and method for providing cooperative interrupts in a preemptive task scheduling environment
CN115237556A (en) Scheduling method and device, chip, electronic equipment and storage medium
US20040098722A1 (en) System, method, and computer program product for operating-system task management
KR100651722B1 (en) Method of configuring Linux kernel for supporting real time performance and test method for supporting real time performance
CN114461365A (en) Process scheduling processing method, device, equipment and storage medium
CN114327894A (en) Resource allocation method, device, electronic equipment and storage medium
KR100848323B1 (en) Method for enhancing real time response in embedded OS kernel
US8117624B2 (en) Method and apparatus for performing real-time commands in a non real-time operating system environment
US9618988B2 (en) Method and apparatus for managing a thermal budget of at least a part of a processing system
Beckert et al. Exploiting sporadic servers to provide budget scheduling for ARINC653 based real-time virtualization environments
JP3349547B2 (en) Scheduling system
US7793295B2 (en) Setting bandwidth limiter and adjusting execution cycle of second device using one of the GBL classes selected based on priority of task from first device
Lee et al. Interrupt handler migration and direct interrupt scheduling for rapid scheduling of interrupt-driven tasks
Saraswat et al. Design and implementation of a process scheduler simulator and an improved process scheduling algorithm for multimedia operating systems
JPH0640315B2 (en) Central processing unit allocation control method
Li et al. A thread scheduling model for highly concurrent IoT platforms

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20121214

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20131024

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20141027

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20151028

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20171027

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20191028

Year of fee payment: 14