혼자 공부하는 운영체제 02. 프로세스와 스레드 - swkim0128/PARA GitHub Wiki
포그라운드 프로세스는 사용자와 상호작용하는 프로세스로, 주로 사용자 인터페이스를 제공하거나 사용자 입력을 받는 역할을 합니다. 예를 들어, 웹 브라우저나 워드 프로세서 등이 포그라운드 프로세스의 예입니다.
백그라운드 프로세스는 사용자와 상호작용하지 않고, 주로 시스템 리소스를 이용하여 작업을 수행하는 프로세스입니다. 예를 들어, 파일 다운로드나 데이터베이스 서버 등이 백그라운드 프로세스의 예입니다.
프로세스 제어 블록(Process Control Block, PCB)은 운영체제가 각 프로세스를 관리하기 위해 유지하는 정보를 담고 있는 데이터 구조입니다. PCB에는 프로세스의 상태, 프로그램 카운터, 레지스터 값, 할당된 자원 등의 정보가 포함됩니다. 이러한 정보는 프로세스가 일시 중단되거나 다시 실행될 때 사용됩니다.
문맥 교환은 실행 중인 프로세스나 스레드를 일시 중단하고 다른 프로세스나 스레드를 실행하기 위해 현재 상태를 저장하고 복원하는 과정입니다. 이는 다중 프로세싱이나 다중 스레딩 환경에서 여러 작업을 동시에 수행하기 위해 필요한 기능입니다.
프로세스의 메모리 영역은 프로세스가 실행될 때 사용되는 메모리 공간을 나타냅니다. 일반적으로 프로세스의 메모리 영역은 다음과 같이 분할됩니다:
- 코드(Code) 영역: 프로세스의 실행 코드가 저장되는 영역입니다. 이 영역은 읽기 전용으로 설정되어 있으며, 프로그램의 명령어들이 위치합니다.
- 데이터(Data) 영역: 전역 변수, 정적 변수, 배열 등의 데이터가 저장되는 영역입니다. 이 영역은 읽기와 쓰기가 가능합니다.
- 힙(Heap) 영역: 동적으로 할당된 메모리가 저장되는 영역입니다. 이 영역은 프로그래머가 직접 관리할 수 있으며, 필요에 따라 메모리를 할당하고 해제할 수 있습니다.
- 스택(Stack) 영역: 함수 호출과 관련된 정보가 저장되는 영역입니다. 이 영역은 지역 변수와 함수 호출 스택 프레임이 저장되며, 함수가 호출될 때마다 스택에 새로운 프레임이 추가되고 함수가 반환될 때마다 해당 프레임이 제거됩니다.
프로세스의 메모리 영역은 프로세스의 실행에 필요한 데이터와 코드를 적절하게 관리하기 위해 사용됩니다.
프로세스는 다양한 상태를 가질 수 있습니다. 주요한 프로세스 상태는 다음과 같습니다:
- 생성(Created): 프로세스가 생성되었지만 아직 실행되기 전인 상태입니다.
- 준비(Ready): 프로세스가 실행될 준비가 되었지만 CPU 할당을 기다리는 상태입니다.
- 실행(Running): CPU를 할당받아 현재 실행 중인 상태입니다.
- 대기(Waiting): 프로세스가 어떤 이벤트나 자원을 기다리는 상태입니다. 예를 들어, 입출력 작업을 기다리는 경우가 대표적입니다.
- 일시 중단(Suspended): 프로세스의 실행이 일시 중단된 상태입니다. 일시 중단된 프로세스는 나중에 다시 실행될 수 있습니다.
- 종료(Terminated): 프로세스의 실행이 완전히 종료된 상태입니다.
프로세스는 이러한 상태 사이를 전이할 수 있으며, 운영체제의 스케줄링 알고리즘에 따라 상태 전이가 이루어집니다.
프로세스 계층 구조는 프로세스들 간의 부모-자식 관계를 나타내는 계층 구조입니다. 한 프로세스가 다른 프로세스의 부모일 경우, 해당 프로세스는 자식 프로세스라고 합니다. 이러한 계층 구조는 프로세스들 간의 상속 관계를 표현하고, 리소스 공유, 작업 분담, 계층적 우선순위 설정 등의 이점을 제공합니다.
프로세스 계층 구조는 운영체제에서 프로세스들을 효율적으로 관리하기 위해 사용됩니다.
프로세스 생성에는 다양한 기법이 있습니다. 주요한 프로세스 생성 기법은 다음과 같습니다:
- 포크(Fork): 부모 프로세스가 자식 프로세스를 생성하는 기법입니다. 자식 프로세스는 부모 프로세스의 복사본이 되며, 독립적으로 실행될 수 있습니다.
- 실행(Exec): 프로세스가 실행 파일을 불러와서 새로운 프로세스로 대체하는 기법입니다. 이를 통해 한 프로세스에서 다른 프로세스로 전환할 수 있습니다.
- 스레드(Thread): 하나의 프로세스 내에서 동시에 실행되는 여러 실행 흐름입니다. 스레드는 프로세스의 자원을 공유하면서 독립적으로 실행될 수 있습니다.
- 스폰(Spawn): 새로운 프로세스를 생성하는 기법입니다. 스폰 기법은 프로세스 간의 독립성을 유지하면서 다른 프로세스를 생성할 수 있습니다.
프로세스 생성 기법은 운영체제가 프로세스를 효율적으로 관리하고 작업을 분배하는 데 중요한 역할을 합니다.
프로세스는 운영체제에서 실행 중인 프로그램을 의미하며, 독립적으로 메모리를 할당받아 실행됩니다. 각 프로세스는 자신만의 주소 공간과 자원을 가지고 있으며, 독립된 실행 흐름을 가집니다.
스레드는 프로세스 내에서 실행되는 실행 흐름으로, 프로세스의 자원을 공유합니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 각 스레드는 동시에 실행될 수 있습니다. 스레드는 프로세스 내에서 코드, 데이터, 힙 영역을 공유하며, 스택 영역은 독립적으로 할당됩니다.
프로세스와 스레드는 동시에 실행될 수 있는 작업의 단위를 나타내며, 다중 프로세싱과 다중 스레딩을 통해 병렬 처리와 동시성을 실현할 수 있습니다.
멀티프로세스는 여러 개의 독립적인 프로세스가 동시에 실행되는 것을 의미합니다. 각 프로세스는 자신만의 주소 공간과 자원을 가지고 있으며, 독립된 실행 흐름을 갖습니다. 멀티프로세스를 사용하면 여러 작업을 병렬로 처리할 수 있으며, 각 프로세스는 서로 영향을 주지 않고 독립적으로 실행됩니다.
반면에 멀티스레드는 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 것을 의미합니다. 스레드는 프로세스의 자원을 공유하며, 코드, 데이터, 힙 영역을 공유하고 스택 영역은 독립적으로 할당됩니다. 멀티스레드를 사용하면 프로세스 간의 커뮤니케이션 비용이 감소하고 작업을 더 빠르게 처리할 수 있습니다. 그러나 스레드 간의 동기화와 관련된 문제를 처리해야 할 수도 있습니다.
멀티프로세스와 멀티스레드는 각각의 장단점을 가지고 있으며, 상황에 맞게 적절히 선택하여 사용해야 합니다.