아카이브

프로세스 vs 스레드 본문

운영체제

프로세스 vs 스레드

주멘이 2018. 5. 29. 18:34

<프로그램>

- 어떤 작업을 위해 실행할 수 있는 "파일"



<프로세스>

- 메모리에 올라와 CPU를 할당받고 프로그램이 실행되고 있는 상태 (실행된 프로그램)

- OS로부터 자원을 할당받는 "작업"의 단위

- OS로부터 프로세서를 할당받고, 운영에 필요한 주소 공간과 메모리 등의 자원을 할당받는다.

- 실행 중인 프로그램에 대한 Instance를 지칭



<스레드>

- 프로세스가 할당받은 자원을 이용하는 "실행"의 단위

- 한 프로세스 내에서 동작하는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내의 스레드끼리 공유하며 실행된다.

- 기본적으로 하나의 프로세스가 생성되면, 하나의 스레드(메인 스레드)가 같이 생성된다. 

- 스레드를 추가하면? 멀티 스레드

- 한 프로세스 내의 여러 스레드는 별도의 자원이 아닌 프로세스 내의 전역 변수를 통해 스레드간 통신을 한다. 

- 전역 변수로 접근하는 여러 스레드가 충돌을 일으킬 수 있다. 

- 동기화를 고려해야 함.



<멀티 프로세스 vs 멀티 스레드>

- 공통점 : 여러 흐름이 동시에 실행된다.

     - 차이점 : 

1) 멀티 프로세스 : 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지

    멀티 스레드 : 프로세스 내의 메모리를 공유

2) 스레드간의 전환 속도 > 프로세스간의 전환 속도



<왜 멀티 프로세스로 할 수 있는 작업을 굳이 하나의 프로세스에서 멀티 스레드로 할까?>

- 효율적인 시스템 작업을 위해서

- 멀티 프로세스 -> 멀티 스레드로 할 경우, 시스템 콜(프로세스를 생성하여 자원을 할당하는 것)이 줄어들어 -> 자원을 효율적으로 관리할 수 있다.

- 스레드간 통신이 비용적으로 저렴하다.

- 통신? 전역 변수를 이용 -> 충돌에 대비 -> 동기화 문제를 직접 해결해야 함.



'운영체제' 카테고리의 다른 글

데드락, 교착상태  (0) 2018.06.02
Cache 정리  (0) 2018.05.29
스케줄링 알고리즘  (0) 2018.05.29
동시성(Concurrency)과 병렬성(Parallelism)  (0) 2018.05.29
문맥 교환(Context Switch)  (0) 2018.05.29