프로세스와 스레드의 차이
Table of contents
답변
프로세스는 운영체제로부터 시스템 자원을 할당받아 메모리에서 실행되는 작업 단위입니다.
스레드는 프로세스가 작업을 처리하는 실행 단위 입니다. 즉, 프로세스는 최소 1개 이상의 스레드를 갖습니다.
멀티 프로세스와 멀티 스레드의 특징과 장단점은?
멀티 프로세스는 프로세스를 여러개 사용해서 병렬적으로 작업을 처리하는 것입니다.
멀티 프로세스는 프로세스마다 독립된 메모리 영역을 갖기 때문에 한 프로세스의 문제가 다른 프로세스에 영향을 주지 않는다는 특징이 있습니다.
단, 프로세스간 통신이 비효율적이고 메모리를 많이 차지합니다.
멀티 스레드는 프로세스의 작업을 여러개의 스레드로 처리하는 것입니다.
멀티 스레드는 스레드간 프로세스의 코드, 데이터, 힙 메모리를 공유하기 때문에 효율적으로 통신할 수 있고
스레드 별로 갖고 있는 레지스터와 스택 영역만 교체하기 때문에 프로세스 간 문맥교환보다 빠르게 처리할 수 있습니다.
단, 한 스레드의 문제가 다른 스레드에 영향을 줄 수 있고 공유자원을 동기화 해야한다는 단점이 있습니다.
프로그램과 프로세스
- 프로그램 : 저장장치에 저장되어 있는 정적인 상태
- 프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
프로그램에서 프로세스로의 전환
프로세스는 💡 메모리에 올라와 실행되고 있는 프로그램이며 하나의 작업 단위이다.
프로그램을 실행하기 위해서, 운영체제는 프로그램을 메모리의 적당한 위치로 가져온다.
그와 동시에 프로세스를 처리하기 위한 도구인 PCB(Process Control Block) 를 생성한다.
PCB에는 프로세스 구분자, 프로세스의 메모리 상 위치 등 프로세스를 처리하기 위한 정보가 있다.
프로세스가 종료될 때, PCB도 함께 제거된다.
프로세스의 5 가지 상태
1. 생성 상태
프로세스가 메모리에 올라와 실행 준비를 완료한 상태, 프로세스를 처리하기 위한 PCB를 생성한다.
2. 준비 상태
생성된 프로세스가 CPU를 얻을 때 까지 기다리는 상태, CPU가 하나라면 한 번에 하나의 프로세스만 실행할 수 있기 때문에 실행 순서가 될 때까지 기다려야 한다.
CPU 스케줄러가 dispatch(PID)를 실행하면 준비 상태에서 실행 상태로 바뀌어 작업이 이루어진다.
3. 실행 상태
준비 상태에 있던 프로세스 중 하나가 작업을 수행하는 상태로 일정 시간 동안 CPU를 사용할 권리를 갖는다.
주어진 시간을 다 사용했다면, 준비 상태로 돌아와 다음 차례를 기다린다.
시간을 다 사용하면 timeout(PID)가 실행된다. 프로세서 제어 블록을 실행 상태에서 준비 상태로 옮긴다.
실행 상태에 있는 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block(PID)를 실행한다.
4. 대기 상태
입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태이다.
CPU가 입출력까지 관여하면 효율이 떨어지기 때문에 입출력 관리자를 통해서 입출력 작업을 요청하면,
입출력 관리자는 입출력이 완료되었을 때 인터럽트라는 신호를 CPU에게 보내 완료됐음을 알린다.
입출력이 완료되면, 인터럽트가 발생하고 wakeup(PID)로 해당 프로세스 제어 블록이 준비 상태로 이동하게 된다.
5. 완료 상태
실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 완료 상태로 돌아간다.
문맥 교환
문맥 교환은 CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업을 말한다.
실행 상태에서 빠져나가는 PCB를 정리하고 실행 상태로 들어오는 PCB를 세팅하는 과정이다.
프로세스의 구조
프로세스는 코드 영역, 데이터 영역, 스택 영역으로 구성된다.
코드 영역 : 프로그램의 본문이 기술된 곳으로 읽기 전용으로 처리된다.
데이터 영역 : 데이터 영역은 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳이다. 이곳의 내용은 읽기와 쓰기가 가능하다.
스택 영역 : 스택 영역은 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳이다.
스레드란?
스레드는 💡 프로세스가 할당받은 자원을 이용하는 실행 단위이다.
즉, 하나의 프로세스에는 여러개의 스레드가 존재한다.
멀티 프로세스와 멀티 스레드
멀티 프로세스
멀티 프로세스는 단어 그대로, 여러개의 프로세스를 사용해 작업을 병렬처리하는 것이다.
💡 멀티 프로세스는 서로 독립적인 메모리 공간을 갖기 때문에, 문제가 생겨도 서로에게 영향을 주지 않는다.
다만, 🚨 서로의 메모리 영역에 직접 접근할 수 없어 정보를 주고 받아야 하는 경우 IPC 통신을 사용해야하는데 비효율적이고 복잡하다.
그리고 CPU의 자원을 사용하는 프로세스를 교체하는 문맥 교환 과정이 빈번하게 일어나기 때문에 성능 저하가 발생할 수 있다.
멀티 스레드
프로세스가 작업을 처리하는데 사용하는 작업 단위를 스레드라고 하고, 이러한 스레드가 여러 개 있다는 의미이다.
여러 개의 스레드가 동시에 작업을 처리할 수 있기 때문에 단일 스레드보다 효율적으로 작업을 처리할 수 있다.
그리고 💡 프로세스 내의 Code, Data, Heap 메모리를 공유하기 때문에
변화가 이루어지는 레지스터, 스택 등의 영역만 추가하면 되므로 자원을 효율적으로 사용할 수 있다.
레지스터에는 해당 스레드가 작업을 어디까지 진행했는지 나타낸다. 프로세스가 실행상태에 있다가 다시 준비상태로 갈 수 있기 때문에 기억할 필요가 있다.
스레드 간 효율적으로 통신할 수 있고 문맥 교환이 프로세스간 문맥 교환보다 빨라 작업 처리 시간을 단축시킬 수 있다.
다만, 🚨 한 스레드에서 발생한 문제가 다른 스레드에 영향을 줄 수 있고 공유 자원의 동기화 작업 때문에 병목 현상이나 데드락이 발생할 수 있다.
📌 인터넷 익스플로러의 탭 기능은 멀티 스레드이고 크롬의 탭 기능은 멀티 프로세스이다.
크롬 탭은 멀티 프로세스이기 때문에, 탭 마다 메모리를 할당받아 메모리를 많이 점유할 수 있지만 하나의 탭에 문제가 생겨 다른 탭도 종료가 되는 상황을 방지할 수 있다.
익스플로러의 경우 싱글 프로세스에 멀티 스레드 방식으 하나의 탭에 문제가 생기면 다른 탭에도 영향을 준다.