멀티스래딩 하에서의 스래드 상태(Running, Ready, Blocked) 전이
kernel mode(supervisor mode)
커널 모드란 시스템 수준 소프트웨어에서 코드를 통해 변경 가능한 하드웨어 중재(hardware-mediated) 플래그이다. 시스템 수준의 작업 또는 스래드는 running상태 동안 이 플래그를 갖고 있는 반면 사용자(user) 공간 응용은 그렇지 못하다. 이 플래그는 다양한 descriptor table을 위한 레지스터의 수정하거나 인터럽드를 불능케 하는 연산을 수행하는 등의 machine code 연산을 가능케 한다. operation을 (user와 kernel이란) 두 가지 모드로 나눈다는 본 아이디어는 '더 많은 제어는 더 많은 책임이 따른다'는 원칙에 입각한 것으로서, 커널 모드 하에서의 프로그램은 결코 문제가 생기지 않는 연산을 가정하는데, 본 mode에서의 문제 발생은 곧 컴퓨터 시스템 전체의 crash를 야기하기 때문이다.
다시 말해 커널 모드는 특권을 가진(privileged) 명령어를 포함한 모든 명령어를 실행할 수 있는 실행 모드로서, 다른 주소 공간과 메모리 관리 하드웨어 등에 액세스 가능하다. 보통 OS가 실행되는 모드이기도 하다.
monolithic 커널에서는 응용은 사용자 모드에서 동작하며 커널은 supervisor 모드에서 동작하지만,exokernel이나 microkernel에서는 반드시 본 동작을 따르지는 않는다. Linux와 Windows가 supervisor/user 모드를 사용하는 대표적 OS이다. 이들 OS에서의 사용자 모드 코드는 특화된 기능을 수행하기 위해 (supervisor 모드로 동작하는) 커널 공간으로 시스템 콜을 함으로써, OS 내부의 신뢰적인 코드(trusted code)가 필요한 작업을 수행한다.
또한, 대부분의 시스템에서 사용자 모드에서 커널 모드로의 스위칭은 1000 ~1500 사이클을 요하는 매우 비싼 동작이다. 이 중 100 사이클 정도만이 실제 스위칭에 필요한 동작이고 나머지는 커널 오버해드에 속한다. 한편 L3 마이크로커널에서는 이 오버헤드가 150 사이클 정도로 줄어든다.
user level threads(ULT)
- (스케줄링을 포함한) 모든 스래드 관리가 application에서 이루어진다.
- kernel level thread에 비해 스위치 오버헤드가 적다.
- kernel level 지원 메커니즘에 독립적이므로 OS에도 독립적으로 동작 가능하다.
- 대부분의 시스템 콜은 blocking 모드로 동작하므로, 한 thread가 시스템 콜을 했을 경우, (동일 프로세스 내의) 타 thread 또한 block된다.
- ULT 설계에서는 multithreaded application이 다중프로세서의 이점을 얻을 수 없는데, 이는 kernel이 한번에 하나의 프로세서에 프로세스를 할당하기 때문이다.
- 위 두 ULT의 단점은 기본적으로 multi-threaded에서 multi-processes 전략으로, 또한 (blocking 모드의 시스템 콜을 non-blocking 시스템 콜로 변환하는) jacketing을 사용함으로 극복 가능하다.
kernel level threads
- Windows, Linux, OS/2가 대표적인 예로서, 특별한 API를 통해 본 모드로 진입이 가능하다.
- 문맥 정보(context information)는 프로세스와 각 스래드를 위해 공통된 전체로 커널에 의해 관리된다.
- 스케줄링이 스래드 기반에서 이루어지므로 ULT의 단점이 해소되는데, 이는 커널이 각기 다른 프로세서에 스래드 전체를 스케줄링할 수 있기 때문이다. 또한 어떤 프로세스의 한 스래드가 block되더라도 해당 프로세스 내의 다른 스래드에 대해 스케줄링이 가능하다(동일 프로세스를 여러 프로세서에서 수행 가능하다는 이야기?).
- 동일 프로세스 내에서의 스래드 간 제어권 스위칭이 모드 스위칭을 요구하는 단점이 있다.
* 참고 : Windows의 process와 thread
- process는 object로 구현된다.
- 실행 프로세스는 하나 또는 그 이상의 스래드를 포함한다.
- 프로세스와 스래드 object 모두 내장된 동기화 기능을 갖는다.
kernel mode(supervisor mode)
커널 모드란 시스템 수준 소프트웨어에서 코드를 통해 변경 가능한 하드웨어 중재(hardware-mediated) 플래그이다. 시스템 수준의 작업 또는 스래드는 running상태 동안 이 플래그를 갖고 있는 반면 사용자(user) 공간 응용은 그렇지 못하다. 이 플래그는 다양한 descriptor table을 위한 레지스터의 수정하거나 인터럽드를 불능케 하는 연산을 수행하는 등의 machine code 연산을 가능케 한다. operation을 (user와 kernel이란) 두 가지 모드로 나눈다는 본 아이디어는 '더 많은 제어는 더 많은 책임이 따른다'는 원칙에 입각한 것으로서, 커널 모드 하에서의 프로그램은 결코 문제가 생기지 않는 연산을 가정하는데, 본 mode에서의 문제 발생은 곧 컴퓨터 시스템 전체의 crash를 야기하기 때문이다.
다시 말해 커널 모드는 특권을 가진(privileged) 명령어를 포함한 모든 명령어를 실행할 수 있는 실행 모드로서, 다른 주소 공간과 메모리 관리 하드웨어 등에 액세스 가능하다. 보통 OS가 실행되는 모드이기도 하다.
monolithic 커널에서는 응용은 사용자 모드에서 동작하며 커널은 supervisor 모드에서 동작하지만,exokernel이나 microkernel에서는 반드시 본 동작을 따르지는 않는다. Linux와 Windows가 supervisor/user 모드를 사용하는 대표적 OS이다. 이들 OS에서의 사용자 모드 코드는 특화된 기능을 수행하기 위해 (supervisor 모드로 동작하는) 커널 공간으로 시스템 콜을 함으로써, OS 내부의 신뢰적인 코드(trusted code)가 필요한 작업을 수행한다.
또한, 대부분의 시스템에서 사용자 모드에서 커널 모드로의 스위칭은 1000 ~1500 사이클을 요하는 매우 비싼 동작이다. 이 중 100 사이클 정도만이 실제 스위칭에 필요한 동작이고 나머지는 커널 오버해드에 속한다. 한편 L3 마이크로커널에서는 이 오버헤드가 150 사이클 정도로 줄어든다.
user level threads(ULT)
- kernel level thread에 비해 스위치 오버헤드가 적다.
- kernel level 지원 메커니즘에 독립적이므로 OS에도 독립적으로 동작 가능하다.
- 대부분의 시스템 콜은 blocking 모드로 동작하므로, 한 thread가 시스템 콜을 했을 경우, (동일 프로세스 내의) 타 thread 또한 block된다.
- ULT 설계에서는 multithreaded application이 다중프로세서의 이점을 얻을 수 없는데, 이는 kernel이 한번에 하나의 프로세서에 프로세스를 할당하기 때문이다.
- 위 두 ULT의 단점은 기본적으로 multi-threaded에서 multi-processes 전략으로, 또한 (blocking 모드의 시스템 콜을 non-blocking 시스템 콜로 변환하는) jacketing을 사용함으로 극복 가능하다.
- Windows, Linux, OS/2가 대표적인 예로서, 특별한 API를 통해 본 모드로 진입이 가능하다.
- 문맥 정보(context information)는 프로세스와 각 스래드를 위해 공통된 전체로 커널에 의해 관리된다.
- 스케줄링이 스래드 기반에서 이루어지므로 ULT의 단점이 해소되는데, 이는 커널이 각기 다른 프로세서에 스래드 전체를 스케줄링할 수 있기 때문이다. 또한 어떤 프로세스의 한 스래드가 block되더라도 해당 프로세스 내의 다른 스래드에 대해 스케줄링이 가능하다(동일 프로세스를 여러 프로세서에서 수행 가능하다는 이야기?).
- 동일 프로세스 내에서의 스래드 간 제어권 스위칭이 모드 스위칭을 요구하는 단점이 있다.
* 참고 : Windows의 process와 thread
- process는 object로 구현된다.
- 실행 프로세스는 하나 또는 그 이상의 스래드를 포함한다.
- 프로세스와 스래드 object 모두 내장된 동기화 기능을 갖는다.
reference:
Operating Systems: Internals and Design Principles, 5/E by William Stallings
Supervisor mode. Wikipedia
반응형
'as 소프트웨어엔지니어 > Computer Architecture' 카테고리의 다른 글
마이크로커널 : Microkernel (0) | 2007.12.11 |
---|---|
멀티스래딩, 다중 프로세서 : Multithreading, chip Multiprocessors (0) | 2007.12.08 |
캐시 일관성 : Cache Coherency (0) | 2007.12.08 |
병렬 컴퓨팅 : Parellel Computing (1) | 2007.12.08 |
제어 유닛 : control unit (0) | 2007.12.04 |
댓글을 달아 주세요