티스토리 뷰

CS/OS

프로세스와 스레드의 차이

이지홍 2022. 3. 29. 22:32
반응형

1)프로세스 
프로세스는 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다고 언급했었다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 떄문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다. 

 

 

이와 다르게 스레드는 메모리를 서로 공유할 수 있다. 이에 대해 더 자세히 설명하자면, 프로세스가 할당받은 메모리 영역 내에서 stack 형식으로 할당된메모리 영역은 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙, 메모리는 서로 읽고 쓸 수 있게 된다. 

(스레드들이 프로세스의 Code/Data/Heap 메모리 영역을 공유하는 모습 (이미지 출처: Heee's Development Blog))

여기서 프로세스와 스레드의 중요한 차이를 하나 더 알 수 있다. 만약 한 프로세스를 실행하다가 오류를 발생해서 프로세스가 강제로 종료된다면, 다른 프로세스에게 어떤 영향이 있을까? 공유하고 있는 파일을 손상시키는 경우가 아니라면 아무런 영향을 주지 않는다. 

그런데 스레드의 경우는 다르다. 스레드는 Code/Data/Heap메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제 종료된다. 

위에서 말했듯이 스레드를 코드(프로세스) 내에서의 함수(스레드)에 빗대어 표현해보면 훨씬 이해하기가 쉽다. 

그렇다면 왜 이런 방식으로 메모리를 공유할까?

스레드는 "흐름의 단위"라고 이해하면 되는데, 정확히는 CPU 입장에서의 최소 작업 단위가 된다. CPU는 작업을 처리할 때 스레드를 최소 단위로 삼고 작업을 한다. 반면 운영체제는 이렿게 작은 단위까지 직접 작업하지 않기 때문에운영 

반응형

'CS > OS' 카테고리의 다른 글

프로세스와 스레드의 차이  (0) 2022.03.29
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함