KR20000061658A - 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법 - Google Patents

스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법 Download PDF

Info

Publication number
KR20000061658A
KR20000061658A KR1019990010869A KR19990010869A KR20000061658A KR 20000061658 A KR20000061658 A KR 20000061658A KR 1019990010869 A KR1019990010869 A KR 1019990010869A KR 19990010869 A KR19990010869 A KR 19990010869A KR 20000061658 A KR20000061658 A KR 20000061658A
Authority
KR
South Korea
Prior art keywords
thread
signal
command
threads
statistical
Prior art date
Application number
KR1019990010869A
Other languages
English (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 KR1019990010869A priority Critical patent/KR20000061658A/ko
Publication of KR20000061658A publication Critical patent/KR20000061658A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Debugging And Monitoring (AREA)

Abstract

본 발명은 서비스 제어점(SCP)에 대한 요구 응답(On-Demand) 통계 명령 수행에 관해 개시한다. 본 방법은, 메인 스레드를 모든 신호에 대하여 블록킹 시키는 단계(s1)와, 메인 스레드를 블록킹 시킨 후 신호를 전담하는 스레드를 생성하여 외부로부터의 신호를 처리하는 단계(s2), 신호 처리를 한 후 운용자로부터 통계 명령을 수신하게 되면 수신한 통계 명령이 적합한지를 판단하는 단계(s3), 판단에 의해 통계 명령이 적합한 명령이라면 통계 명령을 수행할 수 있도록 스레드를 생성하여 인자를 생성한 스레드로 넘기는 단계(s4), 인자를 받은 해당 스레드에서는 신호 질의문을 사용하여 실제적인 질의를 하여 데이터를 가져오는 단계(s5), 데이터를 가져온 다음 운용자로부터 이미 수행중인 통계에 대한 취소 명령을 받았는지를 확인하는 단계(s6)(s7)(s8) 및 확인에 의해 정상적으로 통계 명령을 수행하면 수행 종료 신호를 사용하여 스레드를 종료하는 단계(s9)를 포함하여 이루어진다.

Description

스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법{INTEGRATION METHOD OF PARENT PROCESS AND CHILD PROCESS USING THREAD}
본 발명은 서비스 제어점(Service Control Point : SCP)에 대한 요구 응답(On-Demand) 통계 명령 수행에 관한 것으로서, 특히 기존의 프로세서 포크(fork) 구조로 되어 있던 것을 스레드(thread)를 이용하여 멀티 스레디드 방식으로 통계 명령을 처리하는 구조 변경에 관한, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법에 관한 것이다.
도 1은 종래의 프로세스 포크 구성도이다. 이에 도시한 바와 같이, 운용자로부터 통계 명령을 받으면, 통계 명령을 처리하는 통계 명령 처리 프로세스(10)와, 상기 통계 명령 처리 프로세스(10)와 포크 구조로 생성되어 연결되어 있는 각각의 자식(child) 프로세스(11)(12)(13)(14) 및 상기 아들 프로세스들(11)(12)(13)(14)과 포크 구조로 연결되어 질의를 주고받는 데이터베이스(20)로 구성된다. 이의 작용을 참조하여 설명하면 다음과 같다.
도 1에 도시한 바와 같이, 운용자가 통계 명령을 내리게 되면 통계 명령을 처리하는 통계 명령 처리 프로세스(10)가 운용자의 통계 명령을 수신하게 된다. 그리고, 수신에 의해 각각의 자식 프로세스(11)(12)(13)(14)를 포크 구조로 생성시킨다. 따라서, 데이터베이스(20) 엔진을 액세스하여 질의문을 수행하게 된다. 이런 동작에 의해 운용자가 내린 명령의 개수만큼이 생성이 된다, 그리고, 상기 자식 프로세스들(11)(12)(13)(14)은 각각 데이터베이스(20)와의 통신로인 커넥션을 생성하게 된다.
이와 같이 종래의 프로세스 포크 구성에 있어서는 사용자가 요구 응답 통계 명령을 내리면 서버 프로세스를 생성시키는 부모 프로세서인 PMS가 상기 PMS에 의해 생성된 자식 프로세서인 PMC를 포크 시켜 동작을 수행하므로서, 각각의 프로세스들이 포크되면서 시스템 자원(resource)을 차지하여 시스템의 과부하를 피하기 위해 포크될 수 있는 프로세스의 개수를 인위적으로 제한해야 하기 때문에 한정된 시스템 자원을 보다 효과적으로 사용할 수 없는 문제점이 있었다.
본 발명은 상기한 바와 같이 동작되는 종래 기술의 문제점을 해결하기 위하여 창안된 것으로서, 기존의 POSIX(Portable Operating System Interface eXchange) 프로세스 포크 구조를 멀티 스레디드 방식으로 개선하여 유한한 자원인 시스템 자원을 보다 효과적으로 사용하기 위한, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법을 제공하는 것을 목적으로 한다.
도 1 은 종래의 프로세스 포크 구성도.
도 2 는 본 발명에 의한 멀티 스레디드 구성도.
도 3 은 본 발명에 따른 스레드를 이용한 프로세스 통합 흐름도.
〈도면의 주요 부분에 대한 부호의 설명〉
10, 100 : 통계 명령 처리 프로세스 11, 12, 13, 14 : 자식 프로세스
20, 200 : 데이터베이스 110, 120, 130, 140 : 스레드
상기한 바와 같은 목적을 달성하기 위하여 창안된 본 발명에 따른 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법의 실시예는, 메인 스레드를 모든 신호에 대하여 블록킹 시키는 단계(s1), 상기 메인 스레드를 블록킹 시킨 후 신호를 전담하는 스레드를 생성하여, 상기 신호전담 스레드는 응답할 신호를 등록한 후 외부로부터의 신호가 상기 등록된 신호인 경우 상기 신호를 처리하는 단계(s2), 상기 신호 처리를 한 후 운용자로부터 통계 명령을 수신하게 되면 수신한 통계 명령이 적합한지를 판단하는 단계(s3), 상기 판단에 의해 통계 명령이 적합한 명령인 경우, 상기 메인 스레드는 통계 명령을 수행하는 스레드를 생성하고 인자를 생성한 스레드로 넘기는 단계(s4), 상기 인자를 받은 해당 스레드에서는 신호 질의문을 사용하여 실제적인 질의를 하고 데이터를 가져오는 단계(s5), 운용자로부터 이미 수행중인 통계에 대한 취소 명령을 받았는지를 확인하는 단계(s6), 상기 확인 결과, 취소 명령을 받지 않은 경우는 상기 통계명령을 수행한후 해당 스레드를 종료하며, 취소 명령을 받은 경우는 해당 스레드 ID 로 수행종료 신호를 보내는 단계(s7)(s8), 및 상기 수행종료 신호를 받은 스레드는 종료과정을 수행하는 단계(s9)를 포함하여 이루어진다.
본 발명의 실시예에 있어서, 상기 스레드를 생성하는 단계는 pthread_create() 를 사용하여 생성하고, 상기 블록킹 시키는 단계는 sigfillset() 을 사용하여 신호집합을 모든 신호가 포함될 수 있도록 초기화 한후 pthread_sigmask 를 사용하여 모든 신호들을 블록킹 시키며, 상기 신호전담 스레드에 의해 응답할 신호를 등록하는 단계는 sigaddset() 를 사용하여 등록한다.
또한, 본 실시예는, 운용자로부터 상기 취소 명령을 받은 경우 해당 스레드에 수행 종료 신호를 보내는 단계는 pthread_kill() 을 사용하여 SIGFPE 신호를 보내는 것을 포함하고, 상기 SIGFPE 신호를 받으면 pthread_exit 과정이 수행될 수 있도록 각 스레드에 신호 핸들러(signal handler)를 설치하는 단계를 포함하고, 운용자로부터 수신된 통계명령이 적합한 명령이 아니면 상태 메시지를 출력하고 작업을 종료하는 단계를 추가로 포함한다.
이하에서 본 발명의 바람직한 실시 예를 첨부한 도면에 의거 상세히 설명하면 다음과 같다.
현재 개발되고 있는 지능망 시스템은 서비스를 생성하는 SCE(Service Creation Environment)와, 지능망 서비스를 감지하여 서비스 계층으로 전달하는 서비스 교환 기능인 SSP(Service Switching Point), 지능망 서비스를 제어하는 SCP, SCP를 지원하는 관리 시스템인 서비스 관리 시스템(Service Management System : SMS), 그리고 SCP의 정보를 관리하는 로컬 관리장치(Local Manager : LM) 등으로 구성된다. 또한, 상기 LM 시스템은 SCP에 대한 통계 명령을 내리는 기능이 있다.
본 발명은 신호를 전담하는 프로세스인 스레드를 생성하는 부분과, 운용자의 통계 명령을 수행할 수 있는 스레드를 생성하는 부분, 운용자로부터 통계 취소 명령을 받는 경우에 해당 스레드를 삭제하는 부분 및 정상적인 통계 명령 수행 후에 종료하는 부분으로 구성된다.
도 2는 본 발명에 의한 멀티 스레디드 구성도이다. 이에 도시한 바와 같이, 운용자의 명령에 의해 통계 명령을 처리하는 통계 명령 처리 프로세서(100)와, 상기 통계 명령 처리 프로세스(100)로부터 명령받은 수만큼의 동일한 개수로 생성되는 스레드(110)(120)(130)(140), 상기 스레드들(110)(120)(130)(140)과 함께 질의를 주고받는 데이터베이스(200)로 구성된다. 이의 작용 및 효과를 도 3을 참조하여 상세히 설명하면 다음과 같다.
도 2에 도시한 바와 같이, 운용자가 통계 명령을 내리게 되면 내린 통계 명령 개수만큼의 스레드(110)(120)(130)(140)가 생성된다. 그러면, 상기 생성된 스레드들(110)(120)(130)(140)은 시스템 자원을 공유하며 더 적은 자원으로 동일한 동작을 수행하게 된다.
스레드(110)(120)(130)(140)는 시스템의 자원을 공유하며 동작하기 때문에 외부로부터 신호를 받으면 모든 스레드(110)(120)(130)(140)가 이에 대한 응답을 하게 된다. 따라서, 이를 방지하기 위하여 전체 프로세스인 통계 명령 처리 프로세스(100)를 모든 신호에 대해 블록킹(blocking)을 시킨 후, 신호만을 전담하여 처리하는 스레드(110)(120)(130)(140)를 생성해야 한다. 따라서, 신호집합을 모든 신호가 포함되게 초기화하기 위해 sigfillset을 사용한다. 그리고, 초기화가 되면 모든 신호를 블록킹하기 위해 pthread_sigmask를 사용한다. 모든 신호를 블록킹하게 되면 신호를 전담할 스레드(110)(120)(130)(140)를 만들기 위해 pthread_create를 사용한다. 스레드(110)(120)(130)(140)를 생성한 후에 응답할 신호를 등록하기 위해 sigaddset()를 사용하여 신호를 등록한 후 신호 대기 상태로 둔다. 이러한 과정에 의해 생성된 스레드(110)(120)(130)(140)는 외부로부터의 sigaddset으로 등록된 신호가 오면 지정된 동작을 수행하게 됨으로써 외부로부터의 신호를 전담하여 처리하게 된다.
그리고, 운용자로부터 통계 명령을 받는 경우에, 메인 스레드인 통계 명령 처리 프로세스(100)에서는 pthread_create()를 사용하여 통계 명령을 처리할 스레드(110)(120)(130)(140)를 생성하게 된다. 이렇게 생성된 스레드들(110)(120)(130) (140)은 어드레스 공간, 개방 파일 등을 공유하게 되며, 프로세스가 시스템 호를 통해 다른 프로세스와 통신하는데 반해, 스레드(110)(120)(130)(140)는 라이브러리 호를 사용하여 상호간에 통신을 하게 된다.
또한, 운용자로부터 이미 내렸던 통계 명령에 대한 취소 명령을 받았을 경우의 처리과정은 다음과 같다. 운용자의 취소 명령을 받은 저장장소인 PCB(Process Control Block) 프로세스는 내부적으로 관리하던 리스트에서 해당 스레드(110)(120)(130)(140)의 스레드 ID를 찾아낸다. 그리고, pthread_kill을 사용하여 해당 스레드 ID를 가진 스레드(110)(120)(130)(140)에게 0으로 나누기, 부동 소수점 초과 등과 같은 연산 예외 상황을 가리키는 SIGFPE 신호를 보내게 된다. 그러면, 통계 명령을 수행중인 스레드들(110)(120)(130)(140)이 상기 SIGFPE 신호에 대해 응답하기 위해서는 각각 특정 신호 핸들러(handler)를 미리 설치하게 된다. 그리고, 메인 스레드(100)로부터 생성된 스레드들(110)(120)(130)(140)은 메인 스레드(100)의 성격을 계승한다. 따라서, 상기에 언급한 모든 신호에 대해 블록킹 시켰을 때와 동일한 성격을 그대로 이어받는다. 따라서, 각 스레드들(110)(120) (130)(140)에는 SIGFPE 신호를 받을 경우 pthread_exit() 루틴을 처리하는 신호 핸들러를 미리 설치하게 된다.
마지막으로 정상적으로 통계 명령을 수행하고 종료하는 방법은, 어떤 프로세스에서 exit() 시스템 호를 사용하여 종료하려고 할 경우 수행중인 모든 스레드들(110)(120)(130)(140)은 종료한다. 따라서, 해당 스레드(110)(120)(130) (140)만을 종료하려고 하면 pthread_exit()를 사용하여 종료하게 된다.
상기에 언급한 방법의 전체적인 흐름을 도 3에 도시하였다. 도 3에 도시한 바와 같이, sigfillset()과 pthread_sigmask()를 사용하여 메인 스레드인 통계 명령 처리 프로세스(100)를 모든 신호에 대하여 블록킹 시키게 된다(s1).
그러면, 신호를 전담하는 스레드(110)(120)(130)(140)를 생성하여 외부로부터의 신호를 처리할 수 있도록 하게 된다(s2). 이때 신호들은 sigaddset()를 사용하여 미리 등록을 한다. 그리고 운용자로부터 통계 명령을 수신하게 되면 수신한 통계 명령이 적합한지를 판단하게 된다(s3).
상기 판단에 의해 통계 명령이 적합한 명령이라면 통계 명령을 수행할 수 있도록 pthread_create()를 사용하여 스레드(110)(120)(130)(140)를 생성하여 인자를 넘기게 된다(s4).
그러면, 해당 스레드(110)(120)(130)(140)에서는 신호 질의문을 사용하여 데이터베이스(200)와 실제적인 질의를 하여 데이터를 가져오게 된다(s5). 그리고, 운용자로부터 이미 수행중인 통계에 대한 취소 명령을 받았는지를 확인하여(s6), 취소되었으면 해당 스레드 ID를 구하여 pthread_kill()을 사용하여 SIGFPE 신호를 보내게 된다(s7).
반면에 취소되지 않고 정상적으로 통계 명령을 수행하였을 경우 pthread_exit()를 사용하여 스레드 (110)(120)(130)(140)를 종료하게 된다(s8). 또한, 상기 (s3)의 단계에서 판단한 통계 명령이 적합한 통계 명령이 아니면 부적합 상태메시지를 출력하게 된다(s9).
이상에서 상세히 설명한 바와 같이 본 발명은 종래의 각각의 프로세스들이 포크되면서 시스템 자원을 차지하여 발생하는 시스템의 과부하를 피하기 위하여 프로세스의 개수를 제한하는 번거로움을 사전에 방지하고 한정된 자원을 보다 효과적으로 사용할 수 있는 효과가 있다.

Claims (7)

  1. 메인 스레드를 모든 신호에 대하여 블록킹 시키는 단계;
    상기 메인 스레드를 블록킹 시킨 후 신호를 전담하는 스레드를 생성하는 단계;
    상기 신호전담 스레드는 응답할 신호를 등록한 후 외부로부터의 신호가 상기 등록된 신호인 경우 상기 신호를 처리하는 단계;
    상기 신호 처리를 한 후 운용자로부터 통계 명령을 수신하게 되면 수신한 통계 명령이 적합한지를 판단하는 단계;
    상기 판단에 의해 통계 명령이 적합한 명령인 경우, 상기 메인 스레드는 통계 명령을 수행하는 스레드를 생성하고 인자를 생성한 스레드로 넘기는 단계;
    상기 인자를 받은 해당 스레드에서는 신호 질의문을 사용하여 실제적인 질의를 하고 데이터를 가져오는 단계;
    운용자로부터 이미 수행중인 통계에 대한 취소 명령을 받았는지를 확인하는 단계;
    상기 확인 결과, 취소 명령을 받지 않은 경우는 상기 통계명령을 수행한후 해당 스레드를 종료하며, 취소 명령을 받은 경우는 해당 스레드 ID 로 수행종료 신호를 보내는 단계; 및
    상기 수행종료 신호를 받은 스레드는 종료과정을 수행하는 단계를 포함하여 이루어지는 것을 특징으로 하는, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법.
  2. 제 1 항에 있어서, 상기 스레드를 생성하는 단계는 pthread_create() 를 사용하여 생성하는, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법.
  3. 제 1 항 또는 제 2 항에 있어서, 상기 블록킹 시키는 단계는 sigfillset() 을 사용하여 신호집합을 모든 신호가 포함될 수 있도록 초기화 한후 pthread_sigmask 를 사용하여 모든 신호들을 블록킹 시키는, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법.
  4. 제 3 항에 있어서, 상기 신호전담 스레드에 의해 응답할 신호를 등록하는 단계는 sigaddset() 를 사용하여 등록하는, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법.
  5. 제 4 항에 있어서, 운용자로부터 상기 취소 명령을 받은 경우 해당 스레드에 수행 종료 신호를 보내는 단계는 pthread_kill() 을 사용하여 SIGFPE 신호를 보내는 것을 포함하는, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법.
  6. 제 5 항에 있어서, 상기 SIGFPE 신호를 받으면 pthread_exit 과정이 수행될 수 있도록 각 스레드에 신호 핸들러(signal handler)를 설치하는 단계를 포함하는, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법.
  7. 제 6 항에 있어서, 운용자로부터 수신된 통계명령이 적합한 명령이 아니면 상태 메시지를 출력하고 작업을 종료하는 단계를 추가로 포함하는, 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법.
KR1019990010869A 1999-03-30 1999-03-30 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법 KR20000061658A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1019990010869A KR20000061658A (ko) 1999-03-30 1999-03-30 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1019990010869A KR20000061658A (ko) 1999-03-30 1999-03-30 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법

Publications (1)

Publication Number Publication Date
KR20000061658A true KR20000061658A (ko) 2000-10-25

Family

ID=19578114

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019990010869A KR20000061658A (ko) 1999-03-30 1999-03-30 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법

Country Status (1)

Country Link
KR (1) KR20000061658A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020038186A (ko) * 2000-11-16 2002-05-23 조정남 차세대 이동통신망에서의 가입자 정보 중계 장치

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20020038186A (ko) * 2000-11-16 2002-05-23 조정남 차세대 이동통신망에서의 가입자 정보 중계 장치

Similar Documents

Publication Publication Date Title
US5475817A (en) Object oriented distributed computing system processing request to other object model with code mapping by object managers located by manager of object managers
US5822585A (en) System and method for cooperative processing using object-oriented framework
EP1027794B1 (en) Method and system for facilitating distributed software development in a distribution unaware manner
EP1027796B1 (en) Distributed web application server
EP0660234B1 (en) Method and system for executing code remotely
JP3072709B2 (ja) 要求伝達方法
EP1027795B1 (en) Method and apparatus for implementing an extensible authentication mechanism in a web application server
US5706516A (en) System for communicating messages among agent processes
JP4690437B2 (ja) ネットワークアプリケーションにおける通信方法、通信装置及びそのためのプログラム
US5896532A (en) Objects with run-time classes and methods of making them
JPH09223116A (ja) 複数ミドルウェアに渡る分散オブジェクトの位置透過性
JP2001522086A (ja) 宣言型パラダイムをサポートするステートレスなウェブ環境におけるトランザクションを実行するための方法および装置
US6732360B1 (en) System and method for providing connection between client and heterogeneous database management systems
JPH05204673A (ja) 名前付きパイプを用いるプロセス間通信の方法及びプロセス
US20050022208A1 (en) Corba gateway
RU2359316C2 (ru) Способ администрирования компонентов программного обеспечения, интегрированных в мобильную систему
CN110457132B (zh) 一种功能对象的创建方法、装置和终端设备
US6286025B1 (en) Method and system of process identification by user defined process variables
US6222916B1 (en) Method and apparatus for introducing and modifying telecommunications services
US6289394B1 (en) Agent management system capable of readily monitoring and controlling agent
US8032504B2 (en) Mechanism for enabling new task types to be added to a system for managing distributed nodes
US7962922B2 (en) Delivering callbacks into secure application areas
KR102124954B1 (ko) 이기종 데이터베이스 관리 시스템을 동시 지원하기 위한 IoT 플랫폼 시스템 및 그 동작 방법
US7418717B1 (en) Smart card framework
KR20000061658A (ko) 스레드를 이용한 부모 프로세스와 자식 프로세스의 통합 방법

Legal Events

Date Code Title Description
WITN Withdrawal due to no request for examination