운영체제란?
사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어입니다.
이러한 운영체제는 CPU, 입출력 장치, 프로세스 등 컴퓨터 시스템 자원을 관리하여 컴퓨터 시스템이 제대로 작동하도록
해줍니다.
프로세스란?
컴퓨터에서 실행되는 프로그램을 프로세스라고 합니다. 프로그램은 명령어 리스트를 가진 파일이고, 이것이 보조기억장치에서 주 기억장치인 RAM에 실릴 때 프로세스로 작동되게 됩니다. 프로세스는 보통 하나 이상의 스레드로 구성되어 있습니다.
프로세스는 각각 독립된 메모리 영역을 할당받습니다. 메모리 영역은 크게 4가지로 구분될 수 있는데 종류는 다음과 같습니다.
1. 코드 영역
2. 데이터 영역
3. 힙 영역
4. 스택 영역
각각의 프로세스는 독립된 메모리 영역들을 할당받아 사용하게 됩니다.
또한 프로세스는 별도의 주소 공간에 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없습니다.
만약 접근하고 싶다면, 프로세스 간의 통신인 IPC를 활용해야 합니다.
스레드란?
스레드는 CPU사용의 기본 단위라고 할 수 있습니다. 스레드는 스레드ID, 프로그램 카운터, 레지스터 세트, 스택으로 구성됩니다.
스레드는 프로세스 내에서 Stack만 따로 할당받고 나머지 3가지 영역(코드, 데이터, 힙)은 공유합니다.
프로세스와 스레드의 차이는?
1. 프로세스는 운영체제로 부터 자원을 할당받는 작업의 단위입니다. 이에 반면 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위입니다.
2. 프로세스와 프로세스 간의 통신은 IPC가 추가적으로 필요하지만, 스레드 간에 통신은 자유롭습니다.
3. 각 프로세스는 Code, Data, Heap, Stack 영역을 가자 보유하지만 스레드는 Stack영역만 각자 보유하고
나머지 영역은 공유하여 사용합니다.
4. 프로세스는 context switching(문맥교환) 에 많은 비용이 들어가지만 스레드는 적은 비용이 들어갑니다.
멀티 프로세스와 멀티 스레드의 차이
- 멀티 프로세스
멀티 프로세스는 하나의 응용프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것을 의미합니다.
프로세스는 각각 독립된 메모리 영역을 사용하기 때문에 하나에 문제가 생겨도 다른 프로세스에 영향이 확산되지 않습니다.
하지만 멀티 스레드 보다 많은 메모리 공간과 CPU시간을 차지하게 됩니다. 작업량이 많을 수록 오버헤드가 발생할 수 있고 Context Switching(문맥 교환) 으로 인한 성능 저하가 우려 될 수 있습니다. 캐시에 있는 모든 데이터를 리셋하고 다시 캐시 정보를 가져와야 하기 때문입니다.
또한 프로세스간의 통신에는 IPC 꼭 활용해야 합니다.
- 멀티 스레드
멀티 쓰레드는 하나의 응용프로그램을 여러 개의 스레드로 구성하여 각 스레드가 하나의 작업을 처리하도록 하는 것을 의미합니다.
멀티 스레드는 Stack 영역을 제외한 모든 메모리를 공유하므로 통신 부담이 적습니다. 또한 Context Switching 비용이 적습니다. 각각이 고유하게 소유하는 해당 Stack 영역만 처리하면 되기 때문입니다.
여러개의 프로세스를 생성하지 않아도 되므로, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어듭니다. 이에 따라 자원을 효율적으로 관리 할 수 있게 됩니다.
단점으로는 하나의 스레드에 문제가 생기면 전체적인 프로세스에 영향을 끼칩니다. 또한 Stack을 제외한 메모리 영역을 공유함으로 인해서 동기화 문제가 발생하게 됩니다. 동기화 문제란 하나의 자원에 여러개의 쓰레드가 동시에 사용하게 되어 생기는 문제를 뜻합니다.
이상으로 프로세스와 스레드에 대해 살펴봤습니다.
글 읽어주셔서 감사합니다!
'CS > 운영체제' 카테고리의 다른 글
가상 메모리란? (4) | 2023.05.07 |
---|---|
연속 메모리 할당의 문제점은? (0) | 2023.05.03 |
교착 상태 (0) | 2023.04.07 |
프로세스 동기화란 (0) | 2023.03.15 |
PCB와 Context Switching이란? (0) | 2023.03.01 |