책 읽기/쉽게 배우는 운영체제

프로세스와 스레드에 대한 이해

65살까지 코딩 2024. 1. 16. 22:13
728x90
반응형

 

프로세스

프로세스는 프로그램이 실행시고 운영체제가 PCB를 부여해 준비상태에 즉 메모리에 올라간 것이다.

프로세스는 운영체제에 CPU 스케줄러에 의해 관리된다. 
CPU는 준비상태에 있다가 자신의 순서가 오면  CPU를 할당받게 되고 타임슬라이스 동안 혹은 입출력 인터럽트가 발생하기 전까지 열심히 작업한다. 

작업이 완료되면 PCB가 제거되고 메모리에서 제거된다. 

입출력이 발생하면 대기상태에 들어있다가 입출력 완료 인터럽트가 오면 다시 준비 상태로 간다.

작업이 끝나지 않으면 준비 상태로 돌아간다.

 

스레드

스레드는 위에서 프로세스가 CPU에서 동작하는 단위이다. 
즉 프로세스는 하나이상의 스레드를 갖고 있으며 CPU는 스레드를 실행시키는 것이다. 

스레드는 하나의 프로세스 내부에서 코드, 데이터, 힙 공간을 공유하며 각자만의 스택을 보유하며 이는 TCB에 저장된다. 

따라서 이전에 프로세스가 동작하던 시절에 비해 문맥교환 비용이 낮은 편이다. 

 

궁금한점

그래서 내가 궁금한 것은 

멀티코어 환경이라고 가정,

CPU 스케줄러는 프로세스를 관리한다. 

1. 그럼 스레드는 누가 실행하는지
2. 프로세스가 CPU를 할당 받으면 하나의 코어에서 코어가 스레드를 컨텍스트 스위칭 하면서 사용하는 것인지 아니면 여러개의 코어에서 스레드가 동시에 작동하는 것인지
3. 그럼 시분할은 코어 단위가 아니라 cpu 단위인지
4. 클록은 코어 단위인지 cpu 단위인지 
하나씩 해결해보자 

 

1. 스레드는 커널스레드에 의해서 실행된다.

1:N 방식
프로세스가 cpu를 할당 받을 때 하나의 커널 스레드가 생겨 모든 스레드를 이 하나의 커널 스레드가 실행하는 것이다. 
하나의 스레드가 입출력을 하면 모든 스레드가 blocking 된다. 

1:1 방식

프로세스가 cpu를 할당 받을때 스레드당 하나의 커널스레드가 생겨 사용자 스레드를 실행하는 것이다. 
각 커널스레드가 하나 씩 있기 때문에 컨텍스트 스위칭 비용이 비싸진다. 

N:M 방식 

사용자 스레드 n개에 대해 커널 스레드 m개 생성되어 효율적이고 유연하게 스레드를 실행하는 것이다. 
관계가 깊은 스레드는 1:N 방식을 이용하여 스위칭을 줄이고, 관계가 별로 없는 스레드는 하나씩 만들어서 사용


여기서 잠깐 순서를 보면 
1. 사용자 스레드가 CPU 스케줄러에 의해 프로세스에서 커널스레드를 요청함(시스템 호출)

2. 알맞은 방식에 따라 커널스레드와  사용자 스레드 간의 매핑

3. 커널 스레드가 cpu를 점유해 스레드 동작!

 

사용자 스레드는 각 스레드 라이브러리에 의해 관리된다.

 

2. 멀티코어 환경에서는 스레드가 여러개의 코어를 점유해서 사용한다

단일 코어 환경에서는 하나의 코어에서 스레드가 컨텍스트 스위칭을 해가면서 스레드를 사용해 컨텍스트 스위칭도 높을 것이다. 

멀티코어 환경에서는 최대한 같은 데이터를 사용하는 스레드들을 묶어 각각의 코어에 배분함으로서 컨텍스트 스위칭을 줄인다. 

코어사용 사진을 보면 비슷하게 그림들이 보일 것이다. 그림을 통해 유추해보면 프로세스는 여러 코어에 배분되어 작업된다.

 

3.각 코어는 하나의 타임슬라이스에 의해 하나의 프로세스만 처리한다.

각 코어는 독립적으로 실행되나 하나의 CPU내의 타임슬라이스를 통해 작동된다. 즉 하나의 CPU 스케줄러에 의해 작동되는 것이다.  

 

4.클록은 각 코어에서 클록틱을 생성해서 작업을 처리합니다. 


코어간의 통신과 안정성 등을 위해 클록 동기화를 한다고 합니다( 자세한건 ... 모르겠다.)

728x90
반응형