KR100613562B1 - 실시간 운영 시스템의 어플리케이션 개발 방법 - Google Patents

실시간 운영 시스템의 어플리케이션 개발 방법 Download PDF

Info

Publication number
KR100613562B1
KR100613562B1 KR1020040040668A KR20040040668A KR100613562B1 KR 100613562 B1 KR100613562 B1 KR 100613562B1 KR 1020040040668 A KR1020040040668 A KR 1020040040668A KR 20040040668 A KR20040040668 A KR 20040040668A KR 100613562 B1 KR100613562 B1 KR 100613562B1
Authority
KR
South Korea
Prior art keywords
operating system
real
application
function
time operating
Prior art date
Application number
KR1020040040668A
Other languages
English (en)
Other versions
KR20050115569A (ko
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 KR1020040040668A priority Critical patent/KR100613562B1/ko
Publication of KR20050115569A publication Critical patent/KR20050115569A/ko
Application granted granted Critical
Publication of KR100613562B1 publication Critical patent/KR100613562B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 실시간 운영체제 커널(Kernel)과 독립적으로 어플리케이션을 개발한다는 것으로, 이를 위하여 본 발명은, 멀티 쓰레드(Multi Thread) 방식을 사용하는 실시간 운영 시스템(Real Time Operating System)에서 어플리케이션 개발 시에 운영체제 커널의 제약을 받는 종래 방법과는 달리, 멀티 쓰레드 방식의 실시간 운영 시스템에서 실시간 운영 시스템의 운영체제 계층과 개발자 어플리케이션 계층 사이에 위치하는 커먼 OSAL(Common Operating System Adaptation Layer)에 운영체제 기능별 함수를 각 API(Application Program Interface) 함수별로 패키지화한 후에, 해당 어플리케이션 개발을 위한 관련 태스크 생성에 필요한 API 함수를 커먼 OSAL 라이브러리에서 추출하여 해당 태스크를 생성하고, 생성된 태스크에 따른 메뉴 화면을 OSD(On Screen Display)에 디스플레이 함으로써, 각각의 운영체제 커널의 제약 없이 어플리케이션을 개발할 수 있는 것이다.

Description

실시간 운영 시스템의 어플리케이션 개발 방법{METHOD FOR DEVELOPING APPLICATION IN REAL TIME OPERATING SYSTEM}
도 1은 본 발명에 따라 디지털 TV 개발 시에 멀티 쓰레드 방식의 실시간 운영 시스템에서 커먼 OSAL을 이용하여 개별적으로 어플리케이션을 개발하는데 적합한 소프트웨어 구조를 예시한 도면,
도 2는 본 발명에 따라 멀티 쓰레드 방식의 실시간 운영 시스템에서 커먼 OSAL을 이용하여 개별적으로 어플리케이션을 개발하는 과정을 도시한 플로우차트,
도 3은 본 발명에 따라 OS 20 운영체제에서 커먼 OSAL 라이브러리의 각 기능별 API 함수들을 예시한 도면.
<도면의 주요부분에 대한 부호의 설명>
102 : 하드웨어 계층 104 : 장치 드라이버 계층
106 : 실시간 운영 시스템 계층 108 : 커먼 OSAL
110 : 개발자 어플리케이션 계층 112 : 사용자 어플리케이션 계층
본 발명은 실시간 운영 시스템의 어플리케이션을 개발하는 방법에 관한 것으 로, 더욱 상세하게는 멀티 쓰레드 방식의 실시간 운영 시스템에서 각 운영체제별 커널의 제약 없이 어플리케이션을 개발하는데 적합한 실시간 운영 시스템의 어플리케이션 개발 방법에 관한 것이다.
잘 알려진 바와 같이, 실시간 운영 시스템(RTOS : Real Time Operating System)은 구조적인 측면에서 두 가지로 분류할 수 있는데, 하나는 멀티 쓰레드(Multi Thread) 모델이며, 다른 하나는 멀티 프로세스(Multi Process) 모델이다. 여기에서, 실시간 운영 시스템은 통상적으로 다중 프로그래밍 운영 체계를 의미하며, 우선 순위가 높은 전위(foreground)에서는 실시간 다중 프로그래밍을 하며, 우선 순위가 낮은 후위(background)에서는 일괄 처리를 하는데, 프로그램 입력과 프로그램 출력은 자동적으로 수행되며 동적인 주기억장치 할당 방식을 사용한다.
한편, 멀티 쓰레드 모델은 운영체제(OS : Operating System) 커널(Kernel)과 어플리케이션(Application)이 합쳐져서 서로의 구분이 없는 하나의 큰 프로그램이 되어 작동하는 구조로서, 공통의 작업 영역(Memory)을 자유롭게 액세스 할 수 있는데, 운영체제의 크기가 작고, 비교적 작은 크기의 시스템에서 구현이 쉽고 빠르다는 장점이 있지만, 커널과 어플리케이션이 하나의 프로그램으로 동작하기 때문에 사소한 버그(bug)가 시스템 전체를 파괴하는 단점이 있다. 여기에서, 멀티 쓰레드 모델은 비교적 작고, 복잡하지 않는 기능의 시스템 개발, 예를 들어 PDA, 셋탑, HD 등에 적용된다.
그리고, 멀티 프로세스 모델은 운영체제 커널이나 각 어플리케이션들이 모두 독립적인 프로그램으로 동작하도록 설계되어 있는데, 각 어플리케이션은 서로의 메모리가 보호되어 있기 때문에 모듈 단위의 어플리케이션 개발이나 모듈(기능)의 추가, 변경이 쉽고 안정된 시스템의 개발이 가능하기 때문에 대규모의 시스템 개발에 용이하지만, 실시간 운영 시스템의 크기가 멀티 쓰레드 모델에 비해 크기 때문에 작은 시스템의 개발에는 오히려 부담이 되는 단점이 있다. 여기에서, 멀티 프로세스 모델은 대규모의 복잡한 시스템, 예를 들어 군사 무기, 의료 기기 등에 적용된다.
따라서, 종래에는 소규모의 시스템 개발 시에 멀티 쓰레드 방식의 실시간 운영체제에서 어플리케이션을 개발하는데, 커널과 어플리케이션이 하나의 프로그램으로 동작하기 때문에 어플리케이션 프로그램 개발 시에 운영체제 커널의 제약을 받고, 사소한 버그가 시스템 전체를 파괴할 수 있는 문제를 발생시킬 수 있다.
따라서, 본 발명은 상기한 종래 기술의 문제점을 해결하기 위한 것으로, 멀티 쓰레드 방식의 실시간 운영 시스템에서 커먼 OSAL(Common Operating System Adaptation Layer)을 이용하여 각 운영체제 커널의 제약 없이 어플리케이션을 개발할 수 있는 실시간 운영 시스템의 어플리케이션 개발 방법을 제공하는데 그 목적이 있다.
상기 목적을 달성하기 위하여 본 발명은, 멀티 쓰레드 방식의 실시간 운영 시스템에서 어플리케이션 프로그램을 개발하는 방법으로서, 상기 실시간 운영 시스템 계층과 개발자 어플리케이션 계층 사이에 위치하는 커먼 OSAL(Common Operating System Adaptation Layer)에 운영체제의 기능별 함수를 각 API(Application Program Interface) 함수별로 패키지화하는 제 1 단계와, 해당 어플리케이션 개발을 위한 관련 태스크 생성에 필요한 API 함수를 상기 커먼 OSAL 라이브러리에서 추출하여 해당 태스크 함수를 생성하는 제 2 단계와, 상기 관련 태스크 생성 요구가 발생할 때마다, 상기 제 1, 제 2 단계를 반복 수행함으로써 상기 해당 어플리케이션을 완성하는 제 3 단계를 포함하는 실시간 운영 시스템의 어플리케이션 개발 방법을 제공한다.
본 발명의 상기 및 기타 목적과 여러 가지 장점은 이 기술분야에 숙련된 사람들에 의해 첨부된 도면을 참조하여 하기에 기술되는 본 발명의 바람직한 실시 예로부터 더욱 명확하게 될 것이다.
이하 첨부된 도면을 참조하여 본 발명의 바람직한 실시 예에 대하여 상세하게 설명한다.
본 발명은, 멀티 쓰레드(Multi Thread) 방식을 사용하는 실시간 운영 시스템(Real Time Operating System)에서 어플리케이션 개발 시에 운영체제 커널의 제약을 받는 종래 방법과는 달리, 커먼 OSAL을 이용하여 각 운영체제의 기능별 함수를 패키지화하여 설정한 후에, 해당 어플리케이션 개발 시에 관련된 태스크를 생성하기 위한 API 함수를 추출하고, 추출된 API 함수에 따라 어플리케이션 개발을 위한 태스크 함수를 생성하여 해당 기능의 정보를 OSD에 디스플레이 한다는 것으로, 이러한 기술적 수단을 통해 본 발명에서 목적으로 하는 바를 쉽게 달성할 수 있다.
도 1은 본 발명에 따라 디지털 TV 개발 시에 멀티 쓰레드 방식의 실시간 운영 시스템에서 커먼 OSAL을 이용하여 개별적으로 어플리케이션을 개발하는데 적합한 소프트웨어 구조를 예시한 도면으로서, 하드웨어 계층(102), 장치 드라이버 계층(104), 실시간 운영 시스템 계층(106), 커먼 OSAL(108), 개발자 어플리케이션 계층(110) 및 사용자 어플리케이션 계층(112)을 포함한다.
도 1을 참조하면, 하드웨어 계층(102)은, 디지털 TV 의 경우 디지털 TV를 구성하는 각각의 장치들의 계층을 의미하는데, 예를 들어 CPU(Central Processing Unit), 디코더(Decoder), 튜너(Tuner) 등을 포함한다.
그리고, 장치 드라이버 계층(104)은, 하드웨어 계층(102)과 운영체제(OS : Operating System) 및 응용 프로그램의 연결 고리가 되는 프로그램으로 하드웨어 구성 요소가 운영체제 아래서 제대로 작동하는데 필요한 프로그램들의 계층을 의미하는데, 예를 들어 그래픽 드라이버, 비디오 드라이버, 오디오 드라이버, 디스플레이 드라이버 등을 포함한다.
또한, 실시간 운영 시스템 계층(106)은, 시스템 내, 외부에서 이벤트가 발생했을 때, 이벤트 발생 시간과 그 이벤트 처리를 시작할 때까지의 지연 시간이 미리 제시된 시간을 넘지 않는 시스템의 계층을 의미하는데, 가장 중요한 부분은 스케쥴러(scheduler)로써 실시간 시스템의 여러 가지 기능들을 관리하는 태스크들에게 CPU 시간을 할당해주는 기능을 수행하고, 스케쥴링(scheduling), 메모리 관리(Memory Management), 입출력(I/O : Input/Output), 파일 시스템(File System), 워치독 타이머(Watchdog Timer) 등을 포함한다.
그리고, 커먼 OSAL(Operating System Adaptation Layer, 108)은, 기능별 API(Application Program Interface) 함수들을 패키지화하여 묶어 놓은 계층으로, 가전 기기에 설치되는 실시간 운영 시스템 계층(106)의 각 운영 체제, 예를 들어 Vxworks, Embaded Linux, OS 20 등의 커널(Kernel)들에 대해 주로 사용되는 명령어 함수들만을 패키지화하여 구성한 것으로, 운영 체제가 어느 하나로 변경(예를 들면, Vxworks에서 Embaded Linux로 변경)되더라도 각 운영체제의 커널별 명령어 함수들이 이미 OSAL에 패키지화되어 있기 때문에 변경된 어플리케이션의 개발을 바로 지원할 수 있고, 어플리케이션 오류에 의한 A/S(After Service) 시에는 운영 체제에 관계없이 OSAL에서 각각의 함수들을 이용하여 간단하고 손쉽게 처리할 수 있다. 여기에서, 주로 사용되는 명령어 함수들은 가전기기에 있어서 각 커널들에 있는 기능들 중에서 사용되는 일부(대략, 40%정도) 기능들의 명령어 함수를 의미한다.
한편, 개발자 어플리케이션 계층(110)은, 개발자의 필요에 의해 프로그래밍 되는 함수들의 집합들의 계층을 의미하는데, 예를 들어 그래픽 태스크(Graphic Task), 비디오 태스크(Video Task), 오디오 태스크(Audio Task), 클로우즈드 캡션(Closed Caption), 레이팅(Rating), 튜닝 태스크(Tuning Task) 등을 포함한다. 여기에서, 태스크는 하드 디스크 등 보조 기억 장치상의 데이터 기록과 저장을 관리하는 파일 관리, 응용 프로그램의 실행 순서와 우선 순위 등을 관리하는 일종의 함수를 의미한다.
그리고, 사용자 어플리케이션 계층(112)은, 사용자의 필요에 의해 프로그래 밍 되어 사용되는 응용 프로그램들의 계층을 의미하는데, 예를 들어 GUI-Menu(Graphic User Interface-Menu), EPG(Electronic Program Guide) 등을 포함한다. 여기에서, GUI-Menu는 사용자가 그래픽을 통해 컴퓨터와 정보를 교환하는 작업 환경을 의미하는데, GUI에서는 마우스 등의 입력 수단을 이용하여 화면의 메뉴 중에서 하나를 선택하여 작업을 지시한다. 그리고, EPG 정보는 방송 프로그램의 검색, 선택, 절환, 예약 등의 사용자 인터페이스를 위해 이용되는 것이다.
다음에, 상술한 바와 같은 구조를 갖는 소프트웨어 구조상에서 멀티 쓰레드 방식의 실시간 운영 시스템에 커먼 OSAL을 적용하여 운영체제 커널의 제약 없이 어플리케이션을 개발하는 과정에 대해 설명한다.
도 2는 본 발명에 따라 멀티 쓰레드 방식의 실시간 운영 시스템에서 커먼 OSAL을 이용하여 개별적으로 어플리케이션을 개발하는 과정을 도시한 플로우차트이다.
도 2를 참조하면, 디지털 TV 개발 시에 멀티 쓰레드 방식의 실시간 운영 시스템에서(단계202), 개발자는 디지털 TV의 기능들 중에서 개발 어플리케이션 관련 기능을 선정한다(단계204).
그리고, 개발자는 개발자 어플리케이션(110)의 관련 기능 태스크 함수를 생성하기 위하여 커먼 OSAL의 Semaphore API 함수와 Message Queue API 함수를 이용하여 커먼 OSAL 라이브러리에서 관련 기능에 대한 API 함수를 추출한다(단계206). 일 예로서, 도 3은 실시간 운영 시스템의 OS 20 운영체제에서 커먼 OSAL 라이브러리의 각 기능별 API 함수들을 예시한 도면이다.
여기에서, 실시간 운영 시스템의 각 태스크간 통신은 세마포어(Semaphore) API 함수와 메시지 큐(Message Queue) API 함수를 이용하여 이루어지는데, 세마포어(Semaphore)는 운영체계의 자원을 경쟁적으로 사용하는 다중 프로세스에서 행동을 조정하거나 또는 동기화 하는데, 운영체계 또는 커널의 한 지정된 저장장치 내 값으로서, 각 프로세스는 이를 확인하고 변경할 수 있고, 메모리 공간을 공유하거나, 또는 파일들을 공유 액세스하기 위해 사용되며, 세마포어들은 프로세스간 통신(IPC :Inter Process Communication)을 위한 기술 중 하나이다
다음에, 개발자는 추출된 관련 기능에 대한 API 함수에 따라 관련 기능의 태스크 함수를 작성한다(단계208). 예를 들면, 그래픽 관련 태스크 함수는 graph_task() 방식으로 프로그래밍 한다.
그리고, 작성된 태스크 함수에 따라 관련 기능에 대한 태스크 함수를 생성하고(단계210), 생성된 태스크 함수에 따라 관련 기능의 정보는 OSD(On Screen Display)에 디스플레이 된다(단계212). 여기에서, 개발자에 의한 태스크 생성 요구가 발생할 때마다 상술한 어플리케이션 개발 과정을 반복 수행하여 어플리케이션을 완성할 수 있음도 물론이다.
따라서, 멀티 쓰레드 방식의 실시간 운영 시스템에서 운영 체제 커널의 종류에 관계없이 커먼 OSAL 라이브러리에서 관련 API 함수를 추출하여 개발 어플리케이션 관련 기능에 대한 태스크 함수를 생성하고, OSD에 디스플레이 할 수 있다.
한편, 실시 예에서는 실시간 운영 시스템의 운영체제가 OS 20의 경우에 대하여 설명하였으나, 다른 운영체제, 예를 들어 Vxworks, Embaded Linux에서도 관련 기능에 대한 태스크 함수를 생성하고, 메뉴 화면으로 OSD에 디스플레이 할 수 있고, 운영체제를 어느 하나로 변경할 경우에도 운영체제 커널에 관계없이 어플리케이션을 개발할 수 있음도 물론이다.
이상 설명한 것과 같이 본 발명은, 멀티 쓰레드(Multi Thread) 방식을 사용하는 실시간 운영 시스템(Real Time Operating System)에서 어플리케이션 개발 시에 운영체제 커널의 제약을 받는 종래 방법과는 달리, 멀티 쓰레드 방식의 실시간 운영 시스템에서 실시간 운영 시스템의 운영체제 계층과 개발자 어플리케이션 계층 사이에 위치하는 커먼 OSAL(Common Operating System Adaptation Layer)에 운영체제 기능별 함수를 각 API(Application Program Interface) 함수별로 패키지화한 후에, 해당 어플리케이션 개발을 위한 관련 태스크 생성에 필요한 API 함수를 커먼 OSAL 라이브러리에서 추출하여 해당 태스크를 생성하고, 생성된 태스크에 따른 메뉴 화면을 OSD(On Screen Display)에 디스플레이 함으로써, 각각의 운영체제 커널의 제약 없이 어플리케이션을 개발할 수 있다.





Claims (3)

  1. 멀티 쓰레드 방식의 실시간 운영 시스템에서 어플리케이션 프로그램을 개발하는 방법으로서,
    상기 실시간 운영 시스템 계층과 개발자 어플리케이션 계층 사이에 위치하는 커먼 OSAL(Common Operating System Adaptation Layer)에 운영체제의 기능별 함수를 각 API(Application Program Interface) 함수별로 패키지화하는 제 1 단계와,
    해당 어플리케이션 개발을 위한 관련 태스크 생성에 필요한 API 함수를 상기 커먼 OSAL 라이브러리에서 추출하여 해당 태스크 함수를 생성하는 제 2 단계와,
    상기 관련 태스크 생성 요구가 발생할 때마다, 상기 제 1, 제 2 단계를 반복 수행함으로써 상기 해당 어플리케이션을 완성하는 제 3 단계
    를 포함하는 실시간 운영 시스템의 어플리케이션 개발 방법.
  2. 제 1 항에 있어서,
    상기 실시간 운영 시스템의 운영체제는, Vxworks, Embaded Linux, OS 20 중에서 어느 하나인 것을 특징으로 하는 실시간 운영 시스템의 어플리케이션 개발 방법.
  3. 제 2 항에 있어서,
    상기 커먼 OSAL은, 상기 실시간 운영 시스템의 각 운영체제 커널들에 대해 특정 명령어 함수만을 패키지화하는 것을 특징으로 하는 실시간 운영 시스템의 어플리케이션 개발 방법.
KR1020040040668A 2004-06-04 2004-06-04 실시간 운영 시스템의 어플리케이션 개발 방법 KR100613562B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020040040668A KR100613562B1 (ko) 2004-06-04 2004-06-04 실시간 운영 시스템의 어플리케이션 개발 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020040040668A KR100613562B1 (ko) 2004-06-04 2004-06-04 실시간 운영 시스템의 어플리케이션 개발 방법

Publications (2)

Publication Number Publication Date
KR20050115569A KR20050115569A (ko) 2005-12-08
KR100613562B1 true KR100613562B1 (ko) 2006-08-16

Family

ID=37289467

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040040668A KR100613562B1 (ko) 2004-06-04 2004-06-04 실시간 운영 시스템의 어플리케이션 개발 방법

Country Status (1)

Country Link
KR (1) KR100613562B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101090135B1 (ko) 2010-05-04 2011-12-07 주식회사 액티브디앤씨 어플리케이션 개발 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0610344A (ja) * 1992-06-24 1994-01-18 Hideaki Kishida 場所打ち杭の支持力の確認と増加方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0610344A (ja) * 1992-06-24 1994-01-18 Hideaki Kishida 場所打ち杭の支持力の確認と増加方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101090135B1 (ko) 2010-05-04 2011-12-07 주식회사 액티브디앤씨 어플리케이션 개발 방법

Also Published As

Publication number Publication date
KR20050115569A (ko) 2005-12-08

Similar Documents

Publication Publication Date Title
JP5934094B2 (ja) データ並列スレッドを有する処理論理の複数のプロセッサにわたるマッピング
US5903728A (en) Plug-in control including an independent plug-in process
US9582312B1 (en) Execution context trace for asynchronous tasks
JP2584361B2 (ja) 同期ジャーナリングシステム
US20120188263A1 (en) Method and system to dynamically bind and unbind applications on a general purpose graphics processing unit
EP1600857B1 (en) Thread rendezvous for read-only code in an object-oriented computing enviroment
TW201411488A (zh) 在作業系統中藉由多個程序對現場可程式設計閘陣列的使用的管理
Goransson Efficient android threading: Asynchronous processing techniques for android applications
US20170147398A1 (en) Estimating job start times on workload management systems
US20210326179A1 (en) Progress visualization of computational job
US20080229220A1 (en) Multithreading iconic programming system
US10496433B2 (en) Modification of context saving functions
US20120005460A1 (en) Instruction execution apparatus, instruction execution method, and instruction execution program
KR100613562B1 (ko) 실시간 운영 시스템의 어플리케이션 개발 방법
US9038077B1 (en) Data transfer protection in a multi-tasking modeling environment
CN108647087B (zh) 实现php内核可重入的方法、装置、服务器和存储介质
US8806180B2 (en) Task execution and context switching in a scheduler
US9135054B1 (en) Method and apparatus to migrate stacks for thread execution
US9672081B1 (en) Native service controller
Muyan‐Özçelik et al. Methods for multitasking among real‐time embedded compute tasks running on the GPU
JP7257407B2 (ja) 外部例外処理
EP4398101A1 (en) Task scheduling execution method, and generation method and apparatus for task scheduling execution instruction
Koenig et al. Using message-driven objects to mask latency in grid computing applications
FR2883083A1 (fr) Procede d&#39;execution d&#39;une application dans un conteneur virtuel formant une session d&#39;environnement virtualise
Singh Requirements for user interface programming languages

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: 20110801

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20120801

Year of fee payment: 7

LAPS Lapse due to unpaid annual fee