Programming/운영체제

프로그램과 프로세스, 스레드의 차이

서론

면접 질문으로 프로그램과 프로세스, 스레드의 차이에 대해 설명해달라는 질문을 받았다.

이에 대해 온전히 답변하지 못했기에 다시 공부하는 마음가짐으로 이 글을 적는다.

Q.  프로그램과 프로세스의 차이에 대해 말씀해주세요.

A. 프로세스는 실행 중인 프로그램을 말합니다. 하드디스크에 저장되어 있는 프로그램이 실행되면 메모리에 적재되어 CPU의 자원을 할당받아 프로세스가 됩니다. 프로그램은 수동적인 존재, 프로세스는 프로그램을 실행하는 능동적인 존재로 비유할 수 있습니다.

 

프로세스가 실행되면 PCB(Process Control Block, 프로세스 제어 블록)가 생성됩니다. PCB는 운영체제가 프로세스를 제어하기 위한 정보들의 저장소입니다. PCB에는 실행될 다음 명령어 주소를 저장하는 프로그램 카운터를 비롯해 여러 정보가 저장되어 있습니다.

Q.  프로세스와 스레드의 차이에 대해 말씀해주세요.

A. 프로세스는 운영체제의 자원을 할당받는 작업의 단위이고, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.

Q.  여러 프로세스(멀티프로세스)에서 할 수 있는 작업들을 굳이 한 프로세스 내에서 스레드를 나눠 실행하는 이유는 무엇인가요?

A. 멀티프로세스 방식에 비해 멀티 스레드는 비용이 저렴하기 때문입니다. 하나의 프로세스 내 스레드 간에는 Code/Date/Heap 영역을 공유하기 때문에 컨텍스트 스위칭 비용이 멀티프로세스에 비해 저렴합니다. 이에 더해, 프로세스를 생성하여 자원을 할당하는 시스템콜이 줄어드는 것으로 알고 있습니다.

Q.  그렇다면 멀티스레드의 단점은 무엇인가요?

A. 스레드 간에 자원을 공유하기 때문에 하나의 스레드에서 발생한 오류가 다른 스레드까지 전파될 수 있다는 위험이 존재합니다. 또한, 전역변수를 공유하기 때문에 동기화 문제가 발생하지 않도록 신경써야 합니다.