KR20170103153A - 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치 - Google Patents

멀티코어 운영체제를 위한 스핀락 방법 및 그 장치 Download PDF

Info

Publication number
KR20170103153A
KR20170103153A KR1020160025542A KR20160025542A KR20170103153A KR 20170103153 A KR20170103153 A KR 20170103153A KR 1020160025542 A KR1020160025542 A KR 1020160025542A KR 20160025542 A KR20160025542 A KR 20160025542A KR 20170103153 A KR20170103153 A KR 20170103153A
Authority
KR
South Korea
Prior art keywords
lock
spin lock
spin
variable
deleted
Prior art date
Application number
KR1020160025542A
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 KR1020160025542A priority Critical patent/KR20170103153A/ko
Publication of KR20170103153A publication Critical patent/KR20170103153A/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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명은 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치에 관한 것으로, 보다 상세하게 본 발명은 멀티코어에 의해 병렬적으로 객체를 처리할 때, 임의의 코어에 의해 객체가 삭제되는 경우에도 안정적으로 스핀락을 수행할 수 있도록 하는 스핀락 방법 및 그 장치에 관한 것이다.
이에 따른 본 발명은, 멀티코어 운영체제를 위한 스핀락 장치의 스핀락 방법으로, 스핀락하고자 하는 객체의 유효성을 검사하는 단계, 상기 객체의 유효성 검사에 의해 상기 객체가 유효한 것으로 판단되면, 상기 객체의 스핀락을 시도하는 단계 및 상기 객체에 대한 상기 스핀락이 성공하면, 상기 객체에 관한 처리를 수행하기 위한 적어도 하나의 동작이 정의된 임계 영역을 수행하는 단계를 포함하는 것을 특징으로 하는 스핀락 방법 및 그 장치에 관한 것이다.

Description

멀티코어 운영체제를 위한 스핀락 방법 및 그 장치{Spinlock method for multi-core operating system and apparatus thereof}
본 발명은 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치에 관한 것으로, 보다 상세하게 본 발명은 멀티코어에 의해 병렬적으로 객체를 처리할 때, 임의의 코어에 의해 객체가 삭제되는 경우에도 안정적으로 스핀락을 수행할 수 있도록 하는 스핀락 방법 및 그 장치에 관한 것이다.
멀티코어 운영체제에서 가장 기본적인 동기화 방법은 스핀락이다. 도 1을 참조하면, 멀티코어 운영체제의 각 코어(CPU, 제어부)들은 운영체제에 존재하는 스레드(thread), 세마포어(semaphore), 메시지 큐(message queue), 타이머와 같은 객체(object)들을 처리하기 위하여 임계 영역을 수행할 때, 스핀락을 사용한다.
일반적인 스핀락에 있어서, 잠금 변수가 대단위(coarse-grained)로 정의되고, 그에 따라 대단위로 스핀락이 적용되면, 특정 객체에 대하여만 스핀락하고자 하는 경우에도 모든 객체가 스핀락되므로, 코어 간 병렬성이 떨어지고 멀티코어 운영체제의 성능이 저하된다. 그에 따라, 최근에는 잠금 변수를 객체 내에 소단위(fine-grained)로 정의하여, 객체 별로 스핀락이 가능하도록 한다.
잠금 변수를 객체별로 정의하는 경우, 병렬 처리 성능이 향상되기는 하지만, 객체에 대한 스핀락을 먼저 획득한 코어에 의해 객체가 삭제되는 경우 객체 내에 정의된 잠금 변수도 삭제되고, 다음으로 스핀락 획득을 시도하던 다른 코어가 잠금 변수를 획득할 수 없어 예외 처리 상항(exception)이 발생하는 문제가 있다.
본 발명은 상기한 문제점을 해결하기 위한 것으로, 멀티코어 운영체제에서 임의의 코어에 의해 객체가 삭제되는 경우에도 안정적으로 스핀락을 수행하여 병렬 성능을 높일 수 있는 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치를 제공한다.
상술한 과제를 해결하기 위한 본 발명에 따른 멀티코어 운영체제를 위한 스핀락 장치의 스핀락 방법은, 스핀락하고자 하는 객체의 유효성을 검사하는 단계, 상기 객체의 유효성 검사에 의해 상기 객체가 유효한 것으로 판단되면, 상기 객체의 스핀락을 시도하는 단계 및 상기 객체에 대한 상기 스핀락이 성공하면, 상기 객체에 관한 처리를 수행하기 위한 적어도 하나의 동작이 정의된 임계 영역을 수행하는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 객체의 유효성 검사에 의해 상기 객체가 무효한 것으로 판단되면, 상기 객체의 무효를 통보하는 단계 및 상기 객체의 스핀락 동작을 종료하는 단계를 더 포함하는 것을 특징으로 한다.
또한, 상기 스핀락을 시도하는 단계는, 상기 객체 내에 정의된 잠금 변수를 획득하는 단계 및 상기 잠금 변수의 값을 기초로, 상기 스핀락이 성공하였는지, 실패하였는지 또는 상기 객체가 이미 삭제되었는지 여부를 판단하는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 잠금 변수의 값에 따라 상기 객체에 대한 상기 스핀락이 실패한 것으로 판단되면, 상기 스핀락이 성공할 때까지 상기 객체의 스핀락의 시도를 반복적으로 수행하는 단계를 더 포함하는 것을 특징으로 한다.
또한, 상기 잠금 변수의 값에 따라 상기 객체가 이미 삭제된 것으로 판단되면, 상기 객체의 무효를 통보하는 단계 및 상기 객체의 스핀락 동작을 종료하는 단계를 더 포함하는 것을 특징으로 한다.
또한, 상기 잠금 변수의 값을 기초로, 상기 스핀락이 성공하였는지, 실패하였는지 또는 상기 객체가 이미 삭제되었는지 여부를 판단하는 단계는, 상기 잠금 변수의 값이 0이면, 상기 스핀락이 성공한 것으로, 상기 잠금 변수의 값이 1이면, 상기 스핀락이 실패한 것으로, 상기 잠금 변수의 값이 2이면, 상기 객체가 이미 삭제된 것으로 판단하는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 스핀락이 성공하고, 상기 객체를 삭제하는 경우, 상기 객체를 무효화하는 단계, 상기 객체의 무효화가 완료된 후, 상기 객체에 대한 스핀락을 해제하는 단계 및 상기 객체를 삭제하는 단계를 더 포함하는 것을 특징으로 한다.
또한, 상기 스핀락을 해제하는 단계는, 상기 객체가 삭제되었음을 지시하는 값으로 상기 객체에 대한 잠금 변수를 설정하는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 스핀락을 해제하는 단계는, 상기 스핀락이 삭제되지 않은 경우, 상기 객체에 대한 잠금 변수를 0으로 설정하고, 상기 스핀락이 삭제된 경우, 상기 객체에 대한 잠금 변수를 2로 설정하는 특수 잠금 해제 함수를 실행하는 단계를 포함하는 것을 특징으로 한다.
또한, 상기 임계 영역을 수행하는 단계 이전에, 상기 객체의 유효성을 재검사하는 단계를 더 포함하는 것을 특징으로 한다.
또한, 상술한 과제를 해결하기 위한 본 발명에 따른 멀티코어 운영체제로 동작하는 스핀락 장치는, 적어도 하나의 객체를 저장하는 저장부 및 복수의 코어 중 어느 하나에 의해 스핀락 동작이 수행되는 경우, 스핀락하고자 하는 객체가 이미 삭제되었는지 여부를 확인하기 위하여 상기 객체의 유효성을 검사하고, 상기 객체의 유효성 검사에 의해 상기 객체가 유효한 것으로 판단되면, 상기 객체의 스핀락을 시도하고, 상기 객체에 대한 상기 스핀락이 성공하면, 상기 객체에 관한 처리를 수행하기 위한 적어도 하나의 동작이 정의된 임계 영역을 수행하도록 제어하는 제어부를 포함하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 객체의 유효성 검사에 의해 상기 객체가 무효한 것으로 판단되면, 상기 객체의 무효를 통보하고, 상기 임의의 코어에 대한 상기 스핀락 동작을 종료하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 객체 내에 정의된 잠금 변수를 획득하고, 상기 잠금 변수의 값을 기초로, 상기 스핀락이 성공하였는지, 실패하였는지 또는 상기 객체가 이미 삭제되었는지 여부를 판단하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 잠금 변수의 값에 따라 상기 객체에 대한 상기 스핀락이 실패한 것으로 판단되면, 상기 스핀락이 성공할 때까지 상기 객체의 스핀락의 시도를 반복적으로 수행하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 잠금 변수의 값에 따라 상기 객체가 이미 삭제된 것으로 판단되면, 상기 객체의 무효를 통보하고, 상기 임의의 코어에 대한 상기 스핀락 동작을 종료하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 잠금 변수의 값이 0이면, 상기 스핀락이 성공한 것으로, 상기 잠금 변수의 값이 1이면, 상기 스핀락이 실패한 것으로, 상기 잠금 변수의 값이 2이면, 상기 객체가 이미 삭제된 것으로 판단하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 스핀락이 성공하고, 상기 객체를 삭제하는 경우, 상기 객체를 무효화하고, 상기 객체의 무효화가 완료된 후, 상기 객체에 대한 스핀락을 해제하고, 상기 객체를 삭제하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 객체가 삭제되었음을 지시하는 값으로 상기 객체에 대한 잠금 변수를 설정하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 스핀락이 삭제되지 않은 경우, 상기 객체에 대한 잠금 변수를 0으로 설정하고, 상기 스핀락이 삭제된 경우, 상기 객체에 대한 잠금 변수를 2로 설정하는 특수 잠금 해제 함수를 실행하도록 제어하는 것을 특징으로 한다.
또한, 상기 제어부는, 상기 임계 영역을 수행하기 이전에, 상기 객체의 유효성을 재검사하도록 제어하는 것을 특징으로 한다.
본 발명에 따른 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치는, 객체가 삭제되는 경우에도 멀티코어 간 안전하게 스핀락을 수행할 수 있도록 한다.
또한, 본 발명에 따른 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치는, 소단위로 스핀락을 수행하여 멀티코어 운영체제의 병렬성을 증가시키고 전체적인 시스템 성능을 향상시킨다.
도 1은 멀티코어 운영체제의 스핀락을 이용한 동기화를 설명하기 위한 도면이다.
도 2는 일반적인 스핀락을 설명하기 위한 도면이다.
도 3은 소단위 스핀락에서 객체가 삭제되는 경우의 문제점을 설명하기 위한 도면이다.
도 4는 본 발명에 따른 스핀락 방법을 설명하기 위한 도면이다.
도 5는 본 발명에 따른 스핀락 방법을 코드로 구현한 일 예를 나타낸 도면이다.
도 6은 본 발명에 따른 스핀락 방법을 스핀락 함수로써 x86 운영체제에서 구현한 일 예를 나타낸 도면이다.
도 7은 본 발명에 따른 스핀락 장치의 구조를 나타낸 블록도이다.
본 명세서의 실시 예를 설명함에 있어 관련된 공지 구성 또는 기능에 대한 구체적인 설명이 본 명세서의 요지를 흐릴 수 있다고 판단되는 경우, 그 상세한 설명은 생략될 수 있다.
본 명세서에서 사용되는 "포함한다," "포함할 수 있다." 등의 표현은 개시된 해당 기능, 동작, 구성요소 등의 존재를 가리키며, 추가적인 하나 이상의 기능, 동작, 구성요소 등을 제한하지 않는다. 또한, 본 명세서에서, "포함하다." 또는 "가지다." 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.  
본 명세서에서 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.
이하, 첨부된 도면을 참조하여 본 발명을 설명한다.
도 2는 일반적인 스핀락을 설명하기 위한 도면이다.
도 2를 참조하면, thread 객체에 대한 스핀락 획득을 위해 코어는 spinlock() 함수를 이용하여 잠금 변수 threadLock을 획득한다(201). threadLock이 1이면, 다른 코어가 이미 thread 객체에 대한 스핀락을 획득하고 있는 것으로, 코어는 임계 영역(202)에 진입할 수 없고 루프 동작을 수행하며 스핀락 획득을 재시도한다. threadLock이 0이면, thread 객체가 다른 코어에 의해 스핀락되지 않은 상태인 것이므로, 코어는 thread 객체에 대한 스핀락을 획득할 수 있다. 코어의 스핀락 획득 성공에 따라 threadLock은 1로 변경되어 해당 코어는 객체의 독점성을 획득하게 되고, 임계 영역(202)에 진입하여 thread 객체의 var 변수를 x로 변경하는 동작을 수행할 수 있다. 임계 영역(202)의 수행을 종료하면, 코어는 spinUnlock() 함수를 이용하여 threadLock을 0으로 변경하고 스핀락을 해제한다(203).
상술한 일반적인 스핀락에 있어서, 도 2에 도시된 바와 같이 잠금 변수가 대단위(coarse-grained)로 정의되고, 그에 따라 대단위로 스핀락이 적용되면, 특정 객체에 대하여만 스핀락하고자 하는 경우에도 모든 객체가 스핀락되므로, 코어 간 병렬성이 떨어지고 멀티코어 운영체제의 성능이 저하된다. 그에 따라, 최근에는 도 3에 도시된 바와 같이 잠금 변수를 객체 내에 소단위(fine-grained)로 정의하여, 객체 별로 스핀락이 가능하도록 한다. 도 3에는 thread 객체 내에 잠금 변수 lock을 정의하고, thread 객체만 스핀락하도록 한 예가 도시되어 있다.
도 3에 도시된 바와 같이 잠금 변수를 객체별로 정의하는 경우, 병렬 처리 성능이 향상되기는 하지만, 객체에 대한 스핀락을 먼저 획득한 코어 1에 의해 객체가 삭제(301)되는 경우 객체 내에 정의된 잠금 변수도 삭제되고, 다음으로 스핀락 획득을 시도(302)하던 코어 0에서 잠금 변수를 획득할 수 없어 예외 처리 상항(exception)이 발생하는 문제가 있다.
그에 따라 본 발명에서는 멀티코어 운영체제에서 임의의 코어에 의해 객체가 삭제되는 경우에도 안정적으로 스핀락을 수행하여 병렬 성능을 높일 수 있는 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치를 제공한다.
도 4는 본 발명에 따른 스핀락 방법을 설명하기 위한 도면이다.
본 발명에 따른 스핀락 장치는 스핀락 획득을 시도하기 전에 객체가 삭제되지 않았는지 여부, 즉 객체의 유효성 검사를 먼저 수행하여, 삭제된 객체에 대한 스핀락을 시도하지 않도록 한다.
또한, 본 발명에 따른 스핀락 장치는 객체를 삭제하는 경우에, 객체가 삭제되었음을 지시하는 값, 예를 들어 2로 잠금 변수를 설정할 수 있다. 해당 객체에 대한 스핀락을 획득하고자 하는 다른 스핀락 장치는, 스핀락 시도 과정에서 획득된 잠금 변수가 2인 경우 객체가 이미 삭제되었음을 감지하고 스핀락을 종료할 수 있다.
이하 본 발명에 따른 스핀락 방법을 보다 구체적으로 설명한다.
도 4를 참조하면, 코어는 먼저 스핀락을 수행할 객체의 유효성 검사를 수행한다(401). 객체의 유효성 검사는 해당 객체가 다른 코어에 의하여 이미 삭제되었는지 여부를 판단하기 위한 것으로, 객체의 유효성 검사 함수에 의해 수행될 수 있다. 객체의 유효성 검사 함수는, 예를 들어, validCheck(object)로 정의될 수 있으며, 객체가 메모리(저장부)에 삭제되어 무효한 경우 false 값을 반환하고, 객체가 유효한 경우 true를 반환한다.
객체가 삭제된 경우에 객체의 유효성 검사에서 false값이 반환되도록 하기 위해, 본 발명의 다양한 실시 예에서, 코어는 객체를 삭제할 때 먼저 객체를 무효화한다. 이에 대한 상세한 내용은 후술한다.
객체가 유효하지 않은 것으로 판단되면, 코어는 해당 객체가 다른 코어에 의해 이미 삭제된 것으로 판단하고, 객체의 무효를 통보한 후(402) 스핀락을 종료한다.
한편, 객체가 유효한 것으로 판단되면, 코어는 객체에 대한 스핀락을 시도한다(403). 스핀락 시도는 잠금 변수 획득하는 과정을 포함한다. 본 발명의 다양한 실시 예에서 잠금 변수는 객체별로 정의되며, 코어는 스핀락을 시도할 객체에 대하여 정의된 잠금 변수를 획득할 수 있다.
스핀락 시도는 잠금 함수를 실행함으로써 수행될 수 있다. 잠금 함수는 잠금 변수가 갖는 값에 의해 잠금 가능 여부가 결정하도록 정의된다. 잠금 함수의 실행에 의해 획득된 잠금 변수가 스핀락 실패에 대응하는 값인지, 또는 스핀락 성공에 대응하는 값인지 여부에 따라 코어는 스핀락에 실패하거나 스핀락을 획득할 수 있다. 본 발명의 다양한 실시 예에서, 잠금 함수의 실행에 의해 획득된 잠금 변수는 해당 객체의 삭제에 대응하는 값일 수 있으며, 이 경우 코어는 스핀락을 종료할 수 있다.
본 발명의 다양한 실시 예에서, 잠금 함수는 잠금 변수 값에 의해 잠금을 시도하도록 정의되되, 잠금 변수 값이 0인 경우 객체에 대한 스핀락이 가능한 상태, 잠금 변수 값이 1인 경우 스핀락이 불가능한 상태, 잠금 변수 값이 2인 경우 객체가 이미 삭제된 상태로 정의될 수 있다. 잠금 변수가 0, 1 또는 2를 갖고 이를 기반으로 잠금 여부를 결정하는 잠금 함수는 특수 잠금 함수로 명명될 수 있으며, 잠금 변수가 lock으로 정의될 때, 특수 잠금 함수는 spinLockExtra(lock)로 정의될 수 있다.
한편, 종래 기술에 따른 잠금 함수는 잠금 변수가 0일 경우 객체에 대한 스핀락이 가능한 상태로, 잠금 변수가 1인 경우 스핀락이 불가능한 상태로 정의된다. 잠금 변수가 0 또는 1로만 정의되는 잠금 함수는 일반 잠금 함수로 명명될 수 있으며, spinLock(lock)으로 정의될 수 있다. 다양한 실시 예에서, 코어는 특수 잠금 함수와 일반 잠금 함수를 선택적으로 이용할 수 있다.
스핀락에 실패한 경우(405), 예를 들어, 획득된 잠금 변수가 1인 경우, 코어는 해당 객체가 다른 코어에 의해 이미 스핀락되어 자신이 스핀락에 실패한 것으로 판단하고, 해당 객체의 스핀락이 가능해질 때까지 스핀락 시도를 반복하여 수행한다.
객체가 이미 삭제된 경우(406), 예를 들어, 획득된 잠금 변수가 2인 경우, 코어는 객체의 무효를 통보하고(402) 스핀락을 종료한다. 객체가 삭제된 경우에 잠금 함수에 의해 리턴되는 잠금 변수가 이를 지시하는 값, 예를 들어 2의 값을 갖도록 하기 위해, 본 발명의 다양한 실시 예에서, 코어는 객체를 삭제하는 경우에 잠금 변수를 2로 설정할 수 있다. 이에 대한 상세한 내용은 후술한다.
한편, 스핀락에 성공한 경우(404), 예를 들어, 획득된 잠금 변수가 0인 경우, 코어는 해당 객체에 대한 임계 영역을 수행할 수 있게 된다. 이때, 해당 객체의 스핀락이 성공함에 따라, 잠금 함수를 통해 객체에 대한 잠금 변수는 스핀락이 불가능한 상태를 지시하는 값, 예를 들어 1로 설정된다. 잠금 변수가 1로 설정되면, 해당 객체에 대한 스핀락을 시도하는 다른 코어들이 스핀락을 성공할 수 없게 되므로, 코어는 해당 객체를 독점할 수 있다.
본 발명의 다양한 실시 예에서, 임계 영역을 수행하기 이전에 코어는 객체의 유효성 검사를 한 번 더 수행할 수 있다(407). 이는 임계 영역 수행 전 스핀락 상태가 안정적으로 유지될 수 있도록 하기 위한 것으로, 구현하기에 따라 유효성 검사의 재수행은 반드시 수행되지 않을 수 있다.
객체의 유효성 검사 재수행 결과 객체가 유효하지 않은 것으로 판단되면, 코어는 해당 객체가 다른 코어에 의해 삭제된 것으로 판단하고, 객체의 무효를 통보한 후(402) 스핀락을 종료한다.
객체의 유효성 검사 재수행 결과 객체가 유효한 것으로 판단되면, 코어는 임계 영역을 수행한다(408). 임계 영역은 잠금 함수와 잠금 해제 함수로 둘러싸인 코드 영역으로 여러 코어가 동시에 수행(진입)할 수 없으며, 스핀락에 의해 하나의 코어만 수행(진입)할 수 있도록 허용된 영역이다. 임계 영역(critical section)은 코어가 스핀락한 객체에 관한 처리를 수행하기 위한 동작이 정의된 영역, 즉 실행 코드가 작성된 영역일 수 있다. 코어는 임계 영역의 수행에 의해, 객체에 관련된 변수 등을 수정할 수 있다.
일 실시 예에서, 임계 영역의 수행을 종료한 후, 또는 임계 영역의 수행 중, 코어는 스핀락을 획득한 객체를 삭제할 수 있다. 이 경우, 동일한 객체에 대한 스핀락을 시도하던 다른 코어에서 예외 처리 문제가 발생하지 않도록 하기 위해, 코어는 본 발명에 따른 동작을 수행할 수 있다. 이하에서는 스핀락을 획득한 코어가 객체를 삭제하는 경우의 본 발명에 따른 동작을 구체적으로 설명한다.
객체를 삭제하지 않는 경우(409), 코어는 객체에 대한 스핀락을 해제(스핀언락 수행)하고(410) 스핀락을 종료한다.
스핀락 해제는 잠금 해제 함수를 실행함으로써 수행될 수 있다. 본 발명의 다양한 실시 예에서, 잠금 해제 함수는 일반 잠금 해제 함수 spinUnlock(lock) 또는 본 발명에 따른 특수 잠금 해제 함수 spinUnlockExtra(lock)일 수 있다. 특수 잠금 해제 함수는 본 발명의 실시 예에 따라, 객체가 삭제되는 경우에 이를 지시할 수 있는 값, 예를 들어 2로 잠금 변수를 설정하도록 정의된 함수일 수 있다. 일반 잠금 해제 함수는 객체가 삭제되는 경우를 고려하지 않고, 잠금 변수를 스핀락이 가능함을 지시하는 값, 예를 들어 0으로 설정하도록 정의된 함수일 수 있다.
일 실시 예에서, 객체를 삭제하지 않는 경우에 코어는 특수 잠금 해제 함수와 일반 잠금 해제 함수를 쌍으로 수행할 수 있다. 다른 실시 예에서, 객체를 삭제하지 않는 경우에도 코어는 특수 잠금 해제 함수를 통해 스핀락을 해제할 수 있다. 또 다른 실시 예에서, 특수 잠금 해제 함수와 일반 잠금 해제 함수를 선택적으로 사용하는 경우, 코어는 일반 잠금 해제 함수를 통해 스핀락을 해제할 수 있다.
해당 객체의 스핀락이 해제됨에 따라, 잠금 해제 함수를 통해 객체에 대한 잠금 변수는 스핀락이 가능한 상태를 지시하는 값, 예를 들어 0으로 설정된다. 잠금 변수가 0으로 설정되며, 해당 객체에 대한 스핀락을 시도하는 다른 코어들이 스핀락을 성공할 수 있게 된다.
한편, 객체를 삭제하는 경우(409), 코어는 먼저 객체를 무효화한다(411). 객체의 무효화는 해당 객체가 삭제되어 무효하다는 것을 나타내기 위해 수행되는 것으로, 객체의 무효화 함수에 의해 수행될 수 있다. 객체의 무효화 함수는, 예를 들어, invalidate(object)로 정의될 수 있다.
객체를 무효화한 이후에, 코어는 객체에 대한 스핀락을 해제한다(412). 스핀락 해제는 잠금 해제 함수를 실행함으로써 수행될 수 있다. 본 발명의 다양한 실시 예에서, 스핀락 해제는 잠금 해제 함수에 의해, 객체가 삭제되었음을 지시하는 값, 예를 들어 2로 잠금 변수를 설정하는 동작을 포함한다. 이를 위한 본 발명에 따른 잠금 해제 함수는 특수 잠금 해제 함수로 명명될 수 있으며, spinUnlockExtra(lock)로 정의될 수 있다.
상술한 잠금 해제 함수에 의해 스핀락을 해제한 이후에, 코어는 객체를 삭제한다(413). 객체의 삭제는 객체 삭제 함수의 실행에 의해 수행될 수 있으며, 객체 삭제 함수는 delete(object)로 정의될 수 있다.
상술한 본 발명의 실시 예에 따라, 객체를 삭제하는 경우에 객체의 무효화 및 객체 삭제를 지시하는 값으로 잠금 변수를 설정하는 스핀락 해제를 수행하면, 스핀락 수행을 위해 객체의 유효성 검사 및 스핀락 시도를 수행하는 다른 코어들은 객체가 무효화되었음을 확인하거나, 잠금 변수를 통해 객체가 삭제되었음을 인지함으로써 안정적으로 스핀락을 종료할 수 있게 된다.
도 5는 본 발명에 따른 스핀락 방법을 코드로 구현한 일 예를 나타낸 도면이다.
도 5를 참조하면, 본 발명에 따른 스핀락 방법에서, 코어는 객체의 유효성 검사를 통해 객체가 유효한 경우에(501) 스핀락을 시도한다(502). 스핀락이 성공하면, 코어는 유효성 검사를 재수행할 수 있고, 객체가 유효한 경우에(503) 임계 영역을 수행할 수 있다(504).
도 5의 좌측을 참조하면, 임계 영역 수행 이후, 객체를 삭제할 필요가 있으면, 코어는 먼저 객체 무효화를 수행하고(505), 객체 삭제를 지시하는 값으로 잠금 변수를 설정하는 스핀락 해제를 수행한 이후에(506) 객체를 삭제한다(507). 일 실시 예에서, 스핀락 해제는 도 5의 좌측에 도시된 바와 같이 특수 잠금 해제 함수를 통해 수행될 수 있다.
도 5의 우측을 참조하면, 임계 영역 수행 이후, 객체를 삭제할 필요가 없으면, 코어는 즉시 스핀락 해제를 수행할 수 있다(508). 일 실시 예에서, 스핀락 해제는 일반 잠금 해제 함수를 통해 수행될 수 있다. 다른 실시 예에서, 객체가 삭제되지 않는 경우에도, 도 5의 좌측에 도시된 바와 같이 특수 잠금 해제 함수를 통해 스핀락 해제가 수행될 수 있음은 자명할 것이다.
객체의 유효성 검사에 의해 객체가 유효하지 않은 것으로 판단되거나, 스핀락 시도(502) 시에 잠금 변수에 의해 객체가 삭제된 것으로 판단되면, 코어는 객체 무효 통보 후 스핀락을 종료한다(509).
도 6은 본 발명에 따른 스핀락 방법을 스핀락 함수로써 x86 운영체제에서 구현한 일 예를 나타낸 도면이다. 도 6의 실시 예에서 컴파일러는 gcc를 사용하였으며, STP_ARG1(%esp)는 스핀락 함수의 첫 번째 인자값을 의미한다.
도 7은 본 발명에 따른 스핀락 장치의 구조를 나타낸 블록도이다.
도 7을 참조하면, 본 발명에 따른 스핀락 장치(700)는 제어부(710) 및 저장부(720)를 포함하여 구성될 수 있다.
제어부(710)는 복수의 코어가 동작하는 하나의 프로세서로써, 복수의 코어에 의해 스핀락 장치(700)의 저장부(720)에 저장된 객체들을 처리하고, 그에 따라 스핀락 장치(700)의 동작을 제어한다.
제어부(710)에 의하여 구동되는 복수의 코어는 본 발명의 실시 예에 따른 스핀락 방법을 통해 저장부(720)에 저장된 객체들을 처리한다. 구체적으로, 복수의 코어는 스핀락 획득을 시도하기 전에 객체가 삭제되지 않았는지 여부, 즉 객체의 유효성 검사를 먼저 수행한다. 또한, 복수의 코어는 객체를 삭제하는 경우에, 객체가 삭제되었음을 지시하는 값, 예를 들어 2로 잠금 변수를 설정할 수 있다.
기타 제어부(710)의 구체적인 동작은 상술한 바와 같다.
본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 그리고 본 명세서와 도면에 개시된 실시 예들은 본 발명의 내용을 쉽게 설명하고, 이해를 돕기 위해 특정 예를 제시한 것일 뿐이며, 본 발명의 범위를 한정하고자 하는 것은 아니다. 따라서 본 발명의 범위는 여기에 개시된 실시 예들 이외에도 본 발명의 기술적 사상을 바탕으로 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.
700: 스핀락 장치
710: 제어부
720: 저장부

Claims (20)

  1. 멀티코어 운영체제를 위한 스핀락 장치의 스핀락 방법으로,
    스핀락하고자 하는 객체가 이미 삭제되었는지 여부를 확인하기 위하여 상기 객체의 유효성을 검사하는 단계;
    상기 객체의 유효성 검사에 의해 상기 객체가 유효한 것으로 판단되면, 상기 객체의 스핀락을 시도하는 단계; 및
    상기 객체에 대한 상기 스핀락이 성공하면, 상기 객체에 관한 처리를 수행하기 위한 적어도 하나의 동작이 정의된 임계 영역을 수행하는 단계를 포함하는 것을 특징으로 하는 스핀락 방법.
  2. 제1항에 있어서,
    상기 객체의 유효성 검사에 의해 상기 객체가 무효한 것으로 판단되면, 상기 객체의 무효를 통보하는 단계; 및
    상기 객체의 스핀락 동작을 종료하는 단계를 더 포함하는 것을 특징으로 하는 스핀락 방법.
  3. 제1항에 있어서, 상기 스핀락을 시도하는 단계는,
    상기 객체 내에 정의된 잠금 변수를 획득하는 단계; 및
    상기 잠금 변수의 값을 기초로, 상기 스핀락이 성공하였는지, 실패하였는지 또는 상기 객체가 이미 삭제되었는지 여부를 판단하는 단계를 포함하는 것을 특징으로 하는 스핀락 방법.
  4. 제3항에 있어서,
    상기 잠금 변수의 값에 따라 상기 객체에 대한 상기 스핀락이 실패한 것으로 판단되면, 상기 스핀락이 성공할 때까지 상기 객체의 스핀락의 시도를 반복적으로 수행하는 단계를 더 포함하는 것을 특징으로 하는 스핀락 방법.
  5. 제3항에 있어서,
    상기 잠금 변수의 값에 따라 상기 객체가 이미 삭제된 것으로 판단되면, 상기 객체의 무효를 통보하는 단계; 및
    상기 객체의 스핀락 동작을 종료하는 단계를 더 포함하는 것을 특징으로 하는 스핀락 방법.
  6. 제3항에 있어서, 상기 잠금 변수의 값을 기초로, 상기 스핀락이 성공하였는지, 실패하였는지 또는 상기 객체가 이미 삭제되었는지 여부를 판단하는 단계는,
    상기 잠금 변수의 값이 0이면, 상기 스핀락이 성공한 것으로, 상기 잠금 변수의 값이 1이면, 상기 스핀락이 실패한 것으로, 상기 잠금 변수의 값이 2이면, 상기 객체가 이미 삭제된 것으로 판단하는 단계를 포함하는 것을 특징으로 하는 스핀락 방법.
  7. 제1항에 있어서,
    상기 스핀락이 성공하고, 상기 객체를 삭제하는 경우, 상기 객체를 무효화하는 단계;
    상기 객체의 무효화가 완료된 후, 상기 객체에 대한 스핀락을 해제하는 단계; 및
    상기 객체를 삭제하는 단계를 더 포함하는 것을 특징으로 하는 스핀락 방법.
  8. 제7항에 있어서, 상기 스핀락을 해제하는 단계는,
    상기 객체가 삭제되었음을 지시하는 값으로 상기 객체에 대한 잠금 변수를 설정하는 단계를 포함하는 것을 특징으로 하는 스핀락 방법.
  9. 제7항에 있어서, 상기 스핀락을 해제하는 단계는,
    상기 스핀락이 삭제되지 않은 경우, 상기 객체에 대한 잠금 변수를 0으로 설정하고, 상기 스핀락이 삭제된 경우, 상기 객체에 대한 잠금 변수를 2로 설정하는 특수 잠금 해제 함수를 실행하는 단계를 포함하는 것을 특징으로 하는 스핀락 방법.
  10. 제1항에 있어서, 상기 임계 영역을 수행하는 단계 이전에,
    상기 객체의 유효성을 재검사하는 단계를 더 포함하는 것을 특징으로 하는 스핀락 방법.
  11. 멀티코어 운영체제로 동작하는 스핀락 장치로,
    적어도 하나의 객체를 저장하는 저장부; 및
    복수의 코어 중 임의의 코어에 의해 스핀락 동작이 수행되는 경우, 스핀락하고자 하는 객체가 이미 삭제되었는지 여부를 확인하기 위하여 상기 객체의 유효성을 검사하고, 상기 객체의 유효성 검사에 의해 상기 객체가 유효한 것으로 판단되면, 상기 객체의 스핀락을 시도하고, 상기 객체에 대한 상기 스핀락이 성공하면, 상기 객체에 관한 처리를 수행하기 위한 적어도 하나의 동작이 정의된 임계 영역을 수행하도록 제어하는 제어부를 포함하는 것을 특징으로 하는 스핀락 장치.
  12. 제11항에 있어서, 상기 제어부는,
    상기 객체의 유효성 검사에 의해 상기 객체가 무효한 것으로 판단되면, 상기 객체의 무효를 통보하고, 상기 임의의 코어에 대한 상기 스핀락 동작을 종료하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  13. 제11항에 있어서, 상기 제어부는,
    상기 객체 내에 정의된 잠금 변수를 획득하고, 상기 잠금 변수의 값을 기초로, 상기 스핀락이 성공하였는지, 실패하였는지 또는 상기 객체가 이미 삭제되었는지 여부를 판단하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  14. 제13항에 있어서, 상기 제어부는,
    상기 잠금 변수의 값에 따라 상기 객체에 대한 상기 스핀락이 실패한 것으로 판단되면, 상기 스핀락이 성공할 때까지 상기 객체의 스핀락의 시도를 반복적으로 수행하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  15. 제13항에 있어서, 상기 제어부는,
    상기 잠금 변수의 값에 따라 상기 객체가 이미 삭제된 것으로 판단되면, 상기 객체의 무효를 통보하고, 상기 임의의 코어에 대한 상기 스핀락 동작을 종료하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  16. 제13항에 있어서, 상기 제어부는,
    상기 잠금 변수의 값이 0이면, 상기 스핀락이 성공한 것으로, 상기 잠금 변수의 값이 1이면, 상기 스핀락이 실패한 것으로, 상기 잠금 변수의 값이 2이면, 상기 객체가 이미 삭제된 것으로 판단하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  17. 제11항에 있어서, 상기 제어부는,
    상기 스핀락이 성공하고, 상기 객체를 삭제하는 경우, 상기 객체를 무효화하고, 상기 객체의 무효화가 완료된 후, 상기 객체에 대한 스핀락을 해제하고, 상기 객체를 삭제하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  18. 제17항에 있어서, 상기 제어부는,
    상기 객체가 삭제되었음을 지시하는 값으로 상기 객체에 대한 잠금 변수를 설정하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  19. 제17항에 있어서, 상기 제어부는,
    상기 스핀락이 삭제되지 않은 경우, 상기 객체에 대한 잠금 변수를 0으로 설정하고, 상기 스핀락이 삭제된 경우, 상기 객체에 대한 잠금 변수를 2로 설정하는 특수 잠금 해제 함수를 실행하도록 제어하는 것을 특징으로 하는 스핀락 장치.
  20. 제11항에 있어서, 상기 제어부는,
    상기 임계 영역을 수행하기 이전에, 상기 객체의 유효성을 재검사하도록 제어하는 것을 특징으로 하는 스핀락 장치.
KR1020160025542A 2016-03-03 2016-03-03 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치 KR20170103153A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020160025542A KR20170103153A (ko) 2016-03-03 2016-03-03 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160025542A KR20170103153A (ko) 2016-03-03 2016-03-03 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치

Publications (1)

Publication Number Publication Date
KR20170103153A true KR20170103153A (ko) 2017-09-13

Family

ID=59968062

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160025542A KR20170103153A (ko) 2016-03-03 2016-03-03 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치

Country Status (1)

Country Link
KR (1) KR20170103153A (ko)

Similar Documents

Publication Publication Date Title
US20170123862A1 (en) Concurrent Execution of Critical Sections by Eliding Ownership of Locks
JP6304845B2 (ja) 装置、方法、システム、プログラム、およびコンピュータ可読記憶媒体
TWI695319B (zh) 用於執行複數個執行緒之資料處理設備中之共享資源
KR101970390B1 (ko) 2진 변환 기반 프로세서들에 의한 록 생략
US11594252B2 (en) Reader bias based locking technique enabling high read concurrency for read-mostly workloads
KR101620536B1 (ko) 액티브 록 정보 유지 및 검색
CN106068497B (zh) 事务存储器支持
CN105824709B (zh) 一种临界区访问方法及装置
US8108865B2 (en) Process replication method and system
JP2006185232A (ja) 複数のプログラムの実行方法、プログラム変換方法及びこれを用いたコンパイラプログラム
KR20170103153A (ko) 멀티코어 운영체제를 위한 스핀락 방법 및 그 장치
CN107305507B (zh) 死锁控制方法和装置
US9507817B2 (en) Method for synchronizing access to shared resources of a computing system and detecting and eliminating deadlocks using lock files
US20120054394A1 (en) Fast Biased Locks
JP5890194B2 (ja) 情報処理装置、及び、情報処理方法
KR101429684B1 (ko) 리소스 처리 방법 및 장치
CN117648201A (zh) 进程管理方法、装置、电子设备及存储介质
Moir et al. Adaptive Integration of Hardware and Software Lock Elision Techniques
Konczak et al. Ensuring Irrevocability in Wait-free Transactional Memory
JPH03233665A (ja) プロセッサ間通信のエラー検出機構