프로세스와 스레드 개념잡기

프로세스와 스레드

1
2
3
4
프로세스 : 전체 메모리 내에세 실행되는 프로그램 단위
스레드 : 프로세스 안에서 실행되는 여러 흐름 단위

-> 프로세스는 최소 1개의 스레드를 가진다.

process

1
2
3
4
5
6
code : 코드 자체를 구성하는 메모리 영역
data : 흔히 사용하는 변수, 배열 등이 저장된다.
heap : 배열 동적 할당과 같은 값이 저장된다.
stack : 지역변수, 매개변수, 리턴 값 과 같은 임시 메모리 값이 저장된다.

따라서 스레드 Stack 만 따로 할당 받게 되어 지역변수와 같은건 독립적으로 사용 가능하며, 나머지 영역은 모두 공유하게 된다.

멀티 프로세스와 멀티 스레드

1
2
3
4
5
6
7
멀티 프로세스 : 하나의 컴퓨터에 여러 CPU 를 장착하여 여러 프로세스들을 병렬 처리 하는 것

장점 : 안정성 (OS가 맡아서 프로세스별 메모리 관리를 하므로 메모리 침범 걱정이 없다
)
단점 : 각각 독립된 메모리 영역을 가지고 있어서 작업량이 많을 수록 문맥교환(Context Switching)과 같은 오버헤드가 발생해서 성능 저하가 될 수 있다

※ Context Switching : 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함
1
2
3
4
5
6
7
멀티 스레드 : 하나의 프로세스에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것 (스레드들은 프로세스내의 메모리를 공유한다)

장점 : 독립적인 프로세스에 비해 해당 일을 병렬처리를 함으로써 시간 단축, 자원 공유를 통한 불필요한 자원 손실 감소

단점 : 공유 메모리이기 때문에 같은 데이터를 읽고 쓰는 과정이 동기화 되지 않으면 프로그램상 큰 문제가 발생

-> 이러한 동기화 기법은 다양한 방법이 있으며 필요에 따른 적합한 성능이 방법마다 다르다.

운영체제과목의 필수 개념인 동기화에 대한 방식은 해당 링크 를 참조해보자