탕구리's 블로그

프로세스와 스레드 - 탕구리의 운영체제 정리 본문

Conception/Operating System

프로세스와 스레드 - 탕구리의 운영체제 정리

탕구리당 2019. 7. 26. 22:28
반응형

 

오늘의 주제

 

동하! 안녕하세욘-! 면접 때 받았던 질문을 하나하나 곱씹어보며 답변이 부족했던 부분에 대해서 차근차근 정리하고 있습니다.

 

일반적으로 "프로세스와 스레드의 차이점"에 대한 질문을 많이 받는 거 같던데 저는 "프로세스와 스레드를 구분한 이유"에 대해서 질문을 받았습니다. 잘못들은 줄 알았어요. 한 번도 들어본 적이 없기에.. 근데 그냥 프로세스와 스레드의 차이점을 차근차근 설명했으면 어느 정도 제 질문에 대한 답변도 됐을 거 같다는 생각이 들어요. 두 부분에 대해서는 이런이런 차이점이 있고, 맞는 용도에 따라 사용하면 될 것 같습니다.라는 식의 답변 말이죠? 말이 너무 길어졌네요. 이제 프로세스와 스레드가 무엇인지 본격적으로 알아봅시다.

 

 

 

프로세스(process) 란?

 

프로세스란 ? "OS가 프로그램에게 자원을 할당하는 단위"입니다. 또한 프로그램을 실행할 수 있는 단위이기도 하죠.

 

즉, 프로그램이 CPU를 사용할 수 있는 상태가 됩니다.  각 프로세스는 운영체제에 의해서 메모리를 할당 받습니다. 프로세스의 메모리 공간에는 Code, Data, Heap, Stack이 메모리를 분할해서 가지게 됩니다. 이렇게 메모리를 할당받은 프로세스들은 CPU 스케쥴링에 의해 CPU를 차지할 시간을 기다리게 됩니다. 

 

프로세스에게 할당 된 메모리 공간은 독립된 공간이며 서로의 자원에 대해서 공유할 수 없습니다. 프로세스 간 자원을 공유하기 위해서는 IPC(inter process communication) 메커니즘을 이용해야 하며 자세한 내용은 여기를 참고해 주세요!

 

> 멀티 프로세스 환경

 

멀티 프로세스는 하나의 어플리케이션을 여러 개의 프로세스로 구성하여 작업을 수행하는 방식을 말합니다. 여러 개의 프로세스라 하더라도 독립적인 공간에서 수행하기 때문에 하나의 프로세스에 문제가 발생하더라도 다른 프로세스에 영향을 미치지 않습니다. 다만, 시스템 메모리에는 제한적이기 때문에 여러 개의 프로세스가 메모리에 적재될 경우 스케쥴러에 의해 지속적인 문맥 교환(Context Switching)이 발생합니다. 빈번한 문맥 교환은 시스템의 오버헤드를 발생시키기 때문에 시스템의 전체적인 효율을 떨어트립니다.

 

 

 

스레드(Thread) 란?

 

스레드란 하나의 프로세스 안에서 프로세스가 가진 자원을 공유하여 작업을 수행하는 단위 입니다. 하나의 프로세스 안에는 반드시 하나의 스레드가 존재합니다. 자바를 예를 들면 메인 스레드가 있습니다.

 

스레드는 프로세스의 메모리 영역 내에서 스택 공간을 나누어 갖습니다. 여러개의 스레드가 하나의 자원을 동시에 이용하기 때문에 멀티 스레드 환경의 경우 자원에 대한 동기화 문제를 갖습니다.  

 

 

> 멀티스레드 환경

 

멀티 프로세스와 마찬가지로 하나의 프로세스 안에서 여러개의 스레드가 동작하는 방식을 말합니다. 위에서 말한 것처럼 멀티스레드 환경에서는 다수의 스레드가 하나의 자원을 공유하기 때문에 자원의 공유(동기화)에 대한 문제가 발생할 수 있습니다. 그렇지만 멀티스레드를 이용하는 이유는 무엇일까요? 멀티 스레드 환경에서도 문맥 교환은 똑같이 일어납니다. 하지만 스레드상에 할당된 메모리 영역은 stack 밖에 없기 때문에 프로세스의 문맥 교환에 상대적으로 적은 양의 오버헤드가 발생합니다. 또한, 자원에 대한 공유가 편리해 지기 때문에 시스템 자원을 좀 더 효율적으로 이용할 수 있습니다.

 

 

 

프로세스와 스레드를 나눈 이유?

 

개념에 대한 내용을 확인하였으니 질문의 원점으로 돌아와서 프로세스와 스레드를 나눈 이유가 무엇인가에 대해서 생각해 보았습니다. 개인적으로 두개의 개념은 본질적으로 하는 역할이 다르다고 생각합니다. 프로세스는 CPU를 수행할 수 있는 단위이며, 스레드는 프로세스의 작업을 수행하는 단위이기 때문에 두 개념의 레이어 자체가 다르다고 생각합니다. 질문자의 의도가 굉장히 궁금하지만 이제는 알 수 없기 때문에.. 속상하네요. 

반응형
Comments