1. CreateThread 함수와 _beginthreadex 함수의 차이점

- _beginthreadex 함수를 기반으로 쓰레드를 생성할 경우 쓰레드 별로 독립적인 메모리 공간을 할당 받는다. 그리고 이 메모리 공간은 ANSI 표준 함수를 호출하는 과정에서 사용한다. 이는 둘 이상의 쓰레드가 하나의 메모리 공간에 동시접근하는 문제점을 막기 위함이다.


2. 둘 이상의 쓰레드가 동시접근하는 메모리 공간의 문제점 (p388~ 참고)

- 실제로는 둘 이상의 쓰레드가 동시에 실행되지 않으므로, 메모리에 동시접근이라는 문제점은 발생하지 않는다고 생각할 수 있다. 

- 하지만 실행 중인 쓰레드의 변경은 프로그램 라인 단위가 아닌 함수가 호출되어 실행 중인 중간에도 컨택스트 스위칭이 일어 난다.


3. 쓰레드의 상태 변화

- Windows는 실행의 주체가 프로세스가 아닌 쓰레드이다. 따라서 상태를 지니는 실직적인 대상도 프로세스가 아닌 쓰레드이다. 쓰레드가 Ready, Blocked, Running 상태를 지니게 되며, 이들 상태간의 이동이 발생하는 시기는 프로세스의 상태 이동이 발생하는 이유와 동일하다.


4. 프로세스로부터의 쓰레드 분리

- 프로세스로부터 쓰레드를 분리한다는 것은 프로세스가 소유하는 쓰레드의 핸들을 반환함으로써 쓰레드의 Usage Count를 1로 두겠다는 뜻이다. 이는 쓰레드가 종료되는 시점에 쓰레드의 리소스를 반환하기 위함이다.

1. 프로세스와 쓰레드의 차이점

- 프로세스는 메모리를 공유하지 않지만, 프로세스 내에 존재하는 둘 이상의 쓰레드들은 스택을 제외한 나머지 메모리 공간을 공유한다.


2. 커널 영역 vs 유저 영역

- 메모리 공간은 커널 영역과 유저 영역으로 나뉜다. 커널 영역은 커널이 올라가 있으며, 커널의 실행을 위한 메모리 영역이고, 유저 영역은 운영체제 이외의 프로그램이 올라가 있으며, 이 프로그램들의 실행을 위한 메모리 영역이다.


3. 커널 모드 vs 유저 모드

- 커널 영역의 보호를 위해서 커널 모드와 유저 모드라는 것을 정의하고 있다. 일반적인 응용 프로그램이 실행될 때 시스템은 유저 모드 상태에 있다. 이 경우 제한된 영역의 메모리 접근만 허용한다. 커널 영역을 보호하기 위해서다. 그러나 커널 모드에서는 메모리 전 영역의 접근을 허용한다. 따라서 커널은 커널모드에서 동작한다.


4. 커널 레벨 쓰레드 vs 유저 레벨 쓰레드

- 쓰레드를 지원하는 운영체제의 기능을 통해서 생성된 쓰레드를 가리켜 커널 레벨 쓰레드라 하고, 라이브러리 형태의 제공되는 기능을 통해서 생성된 쓰레드를 가리켜 유저 레벨 쓰레드라 한다.


- 커널 레벨 쓰레드 장점 : 커널에서 직접 제공해 주기 때문에 안전성과 다양한 기능성이 제공된다.

- 커널 레벨 쓰레드 단점 : 유저 모드에서 커널 모드로의 전환이 빈번하게 발생해 성능의 저하로 이어진다.


- 유저 레벨 쓰레드 장점 : 유저모드 에서 커널 모드로의 전환이 필요 없기 때문에 성능이 좋다.

- 유저 레벨 쓰레드 단점 : 하나의 프로세스내에 3개의 프로세스가 있다고 가정하면, 하나의 프로세스가 시스템 함수를 호출했는데 커널에 의해서 블로킹 되었다. 이럴 경우 나머지 2개의 쓰레드도 실행되지 않는다. 운영체제는 프로세스의 존재만 알 뿐 쓰레드의 존재를 모르기 때문이다. 

1. 응답성 관점에서 RTOS와 일반 OS의 구분

- 응답성이 좋다는 것은 새로운 일의 실행을 지시했을 때 그일을 시작하기 까지 걸리는 시간이 아주 적음을 의미한다. 응답성이 좋으면 RTOS라고 한다. 그런데 일반적으로 응답성이 좋으면 좋을수록 둘 이상의 일을 동시에 처리하는 멀티 프로세스의 성격이 약하다.


2. 선점형 OS와 비선점형 OS의 특징

- 프로세스의 실행을 다른 프로세스로 넘기는 방식에 따라서 선점형 OS와 비선점형 OS가 나뉜다.

선점형 OS는 현재 실행중인 프로세스보다 높은 우선순위의 프로세스가 등장하면 그 순간 바로 실행 중인 프로세스를 변경해 버린다. 


- 그러나 비선점형 OS는 우선 순위가 높은 프로세스가 등장하더라도 현재 실행 중인 프로세스가 일을 넘기지 않으면 프로세스의 실행이 이동하지 않는다.


3. 스케줄러가 동작하는 3가지 시기

- 스케줄러가 동작해야 하는 이유는 현재 사용중인 CPU의 자원을 다른 프로세스들에게도 할당해줘야 하기 때문이다. 즉 아래의 3가지 시기에 CPU자원을 할당받을 프로세스의 교체가 일어난다.


- 매 타임 슬라이스 마다 

- 프로세스가 생성 및 소멸될 때마다

- 현재 실행 중인 프로세스가 블로킹 상태에 놓일 때마다

+ Recent posts