728x90
[운영체제] 스레드와 프로세스
프로세스는 서로 완벽히 독립적인 공간을 가진다. 각자가 각자의 스택과 데이터 영역을 가지고, 보호받는다.
프로세스는 시작할 때 운영체제에서 PCB와 메모리 공간을 할당받고 초기화하는 과정이 필요하다. 다른 프로세스의 영역을 들여다볼 수 없기 때문에 프로세스끼리 통신하기 위해서 프로세스간 통신을 활용하거나 공유 메모리를 생성해 데이터를 주고받는 등의 번거로운 과정을 거쳐야만 한다.
은행 지점을 하나 새로 세우려면 부동산을 계약하고 내부 인테리어 공사를 진행하며, 은행 지점끼리 연락하기 위해서는 사람이 직접 가거나 전화를 해야 하는 상황을 생각해보면 된다.
반면 한 프로세스가 비정상적으로 종료해도 다른 프로세스에는 영향이 거의 없다. 은행 지점 하나가 화재 등으로 손상되어도 다른 지점에서 업무를 볼 수 있는 것과 비슷하다.
스레드는 스택은 따로따로이지만, 코드 영역과 데이터 영역은 하나를 공유한다. 데이터 영역에 속하는 변수를 통해서 쉽고 빠르고 편하게 통신할 수 있다. 같은 은행 지점에서는 옆 창구에 말만 하면 바로 알아들을 수 있는 것과 비슷하다. 단, 스레드 하나가 잘못된 연산이나 버그 등으로 비정상 종료한다면 같은 프로세스에 소속된 다른 스레드들까지 모두 강제로 종료된다.
리눅스 커널 2.2까지는 프로세스로 스레드를 에뮬레이트했기 때문에 정상 상황이라면 훨씬 가볍게 작동해야 할 멀티스레드 프로그램이 도리어 더 무거워지는 기현상이 있었다. 커널 2.4 이후로는 이런 문제가 없
'운영체제' 카테고리의 다른 글
[Linux] fork (0) | 2020.08.06 |
---|---|
[리눅스] 2020-07-14 도커 메모 (0) | 2020.07.14 |
[리눅스] 2020-07-13 강의메모01 (0) | 2020.07.13 |
[운영체제] 운영체제 구조 및 역할 (0) | 2020.06.30 |
[운영체제] OS역사 (0) | 2020.06.26 |