프로세스 (Process)
프로그램은 실행중이지 않은 정적인 상태의 코드 파일이다.
운영체제는 프로그램을 실행 시키고 메모리에 올리는데 이를 프로세스라고 한다. 즉, 프로세스는 메모리에서 실행중인 프로그램의 작업이다.
프로세스는 프로그램이 메모리에 올라갈 때 독립된 메모리 영역을 할당(Code, Data, Heap, Stack) 받고 PCB라는 프로세스를 정보를 담는 블록을 받는다.
메모리
- Code : 프로그램의 명령을 구성하는 코드 자체 메모리 영역
- Data : static과 같은 정적 변수, 전역 변수, 배열 등을 갖는 영역
- Heap : new 키워드 같은 동적으로 할당 되는 메모리 영역
- Stack : 지역 변수, 파라미터, 리턴 값을 관리하는 메모리 영역
스레드 (Thread)
스레드는 프로세스의 실행 단위이다. 하나의 프로세스에는 최소 하나의 스레드가 존재한다.
스레드는 프로세스 메모리 영역 중 Code, Data, Heap 영역을 공유한다.
메모리 영역을 공유함에도 작업은 독립적으로 수행되어야 한다.
따라서, 함수 호출의 파라미터,리턴 값을 관리하는 stack영역을 스레드가 독립적으로 갖게함으로 써 독립적인 작업 수행을 하도록 해준다.
멀티 태스킹 (feat. Context Swtich)
갑자기 멀티태스킹이 등장했다. 우리는 동시에 다양한 애플리케이션을 사용할 때 멀티 태스킹이라고 흔히 말한다.
하지만, CPU는 하나의 프로세스만 실행시킬 수 있다. 그 뜻은 한 번에 하나의 애플리케이션만 동작 시킬 수 있다는 것이다.
그렇다면 멀티 태스킹은 동시에 일어나는 것이 아닌가?
그렇다. 동시에 일어나는 것이 아니다.
운영체제는 다양한 애플리케이션을 동작 시키기 위해 짧은 시간동안 여러개의 실행중인 프로세스를 교체하면서 작업 한다. 이렇게 프로세스를 교체하는 작업을 Context Switching이라고 한다.
멀티 프로세스 VS 멀티 스레드
멀티 프로세스와 멀티 스레드는 모두 한 애플리케이션에 대한 처리 방식을 의미한다.
멀티 프로세스
한 애플리케이션에서 실행중인 프로세스를 fork를 통해 자신과 동일한 자식 프로세스들로 복제한다.
이 때, 복제된 프로세스는 부모 프로세스와 별개로 독립적인 메모리 영역을 갖는다.
따라서, 한 애플리케이션에 다양한 작업이 요청 되었을 때 동시에 여러 작업을 처리하는 것이 가능하다.
하지만 멀티 프로세스는 프로세스 마다 독립적인 메모리를 사용하기 때문에 메모리 공간을 낭비하고, Context Switch시 메모리 전체를 전환 시켜야하기 때문에 비용적인 측면에서 단점이 발생한다.
- 멀티 프로세스는 독립적이기 때문에 프로세스간 통신을 위해선 IPC를 통해 통신해야한다.
- Context Switch시에 메모리 영역 전체를 전환 시켜야 하기 때문에 비용적인 측면에서 단점이 발생한다.
- 독립적인 작업이기 때문에 동기화 작업에 있어서는 장점을 갖는다.
멀티 스레드
프로세스가 하나의 스레드를 사용하는 것이 아닌 여러 개의 스레드를 사용해 한 애플리케이션 작업을 처리하는 것을 멀티 스레드라고 한다.
한 애플리케이션에서 복제된 여러 개의 프로세스는 독립적인 메모리를 사용하기 때문에 메모리 공간을 낭비한다는 단점이 있다.
하지만 멀티 스레드는 여러개의 스레드가 프로세스의 Stack을 제외한 메모리 영역을 공유하기 때문에 Stack 메모리만 Context Switch 시에 전환시키면 된다.
- 스레드는 공유자원을 사용하기 때문에 통신비용이 절감된다.
- 공유된 자원을 이용하기 때문에 메모리의 공간낭비가 멀티 프로세스에 비해 덜하고, Context Switch시 Stack 영역만 처리하기 때문에 비용이적다.
- 공유 자원을 이용한 작업이기 때문에 동기화 작업이 필요하다.
- 하나의 스레드가 오류가 발생하면 공유 자원을 이용하기 때문에 연관된 스레드가 모두 강제 종료된다.
📄 References
프로세스와 스레드의 차이 : https://velog.io/@raejoonee/프로세스와-스레드의-차이
[10분 테코톡] 🌷 코다의 Process vs Thread : https://www.youtube.com/watch?v=1grtWKqTn50&t=646s
'Computer Science > OS' 카테고리의 다른 글
뮤텍스(Mutex), 세마포어(Semaphore) (0) | 2022.07.03 |
---|---|
프로세스 동기화 (Process Synchonization) (0) | 2022.07.03 |
동기와 비동기, 블로킹과 논블로킹 (0) | 2022.06.12 |