프로세스
컴퓨터 과학 및 운영 체제에서 중요한 개념 중 하나로, 실행 중인 프로그램 또는 작업을 나타냅니다. 프로세스는 컴퓨터 시스템에서 작업을 수행하는 단위로, 프로그램 코드, 메모리, CPU 시간, 파일 및 입출력 작업과 관련된 다양한 리소스를 포함합니다.
프로세스 특징
프로그램 코드 : 프로세스는 하나 이상의 스레드로 구성되며, 각 스레드는 프로그램의 명령어 집합을 실행합니다. 이 명령어 집합은 프로그램의 실행 흐름을 결정합니다.
메모리 공간 : 각 프로세스는 자체의 메모리 공간을 가지며, 이 메모리 공간은 프로세스가 실행 중에 사용하는 데이터 및 코드를 저장합니다. 다른 프로세스와는 분리되어 있어서 한 프로세스가 다른 프로세스의 메모리에 직업 접근할 수 없습니다.
자원 할당 : 프로세스는 CPU 시간, 메모리, 파일핸들, 네트워크 연결 등과 같은 시스템 자원을 필요로 합니다. 운영체제는 이러한 자원을 할당하고 관리하여 여러 프로세스가 동시에 실행될 수 있도록 합니다.
독립성 : 각 프로세스는 독립적으로 실행되며, 한 프로세스가 다른 프로세스에 영향을 미치지 않습니다. 하나의 프로세스가 오류로 인해 중단되더라도 다른 프로세스는 계속 실행됩니다.
스케줄링 : 여러 프로세스가 동시에 실행되기 때문에 운영 체제는 CPU 시간을 공정하게 분배하기 위한 스케줄링 알고리즘을 사용합니다. 이를 통해 다양한 프로세스가 공평하게 CPU 자원을 사용할 수 있습니다.
프로세스 제어 블록
운영 체제에서 프로세스를 관리하는 데 사용되는 중요한 데이터 구조입니다. PCB에는 각 프로세스에 대한 정보와 프로세스의 상태를 저장합니다. PCB는 프로세스 스케줄링, 멀티태스킹, 자원 할당 및 관리, 문맥 전환 등 다양한 운영 체제 작업에 필요한 정보를 제공합니다.
PCB 운영체제 내부에서 관리되며, 각 프로세스마다 하나의 PCB가 할당됩니다. PCB를 통해 운영 체제는 프로세스를 추적하고 제어할 수 있으며, 멀티태스킹 환경에서 여러 프로세스를 효과적으로 스케줄링하고 관리할 수 있습니다.
프로세스 상태 : 프로세스의 현재 상태를 나타내는 정보로, 실행, 준비, 대기, 종료 등의 상태가 포함됩니다.
프로그램 카운터 : 다음에 실행할 명령어의 주소를 가리키는 레지스터 값입니다. 프로세스를 중단하고 나중에 다시 시작할 때 사용됩니다.
레지스터 상태 : CPU 레지스터의 값들을 저장합니다. 이는 프로세스의 실행을 중단하고 다시 시작할 때 프로세스가 이전 상태로 복원되는 데 필요합니다.
스케줄링 정보 : 운영 체제가 프로세스를 스케줄링하기 위한 정보를 포함합니다. 우선순위, 실행 시간, CPU사용량, 대기 시간 등의 정보가 여기에 포함될 수 있습니다.
프로세스 식별자 : 각 프로세스에 고유한 식별자를 부여하여 프로세스를 식별합니다.
메모리 관리 정보 : 프로세스의 메모리 요구사항과 할당된 메모리 영역에 대한 정보가 여기에 포함됩니다.
자원 할당 정보 : 프로세스가 사용 중인 자원, 파일 핸들, 입출력 장치등의 정보를 포함합니다.
입출력 상태 : 프로세스가 대기 중인 입출력 작업에 대한 정보를 제공합니다.
프로세스의 메모리 영역
코드 영역
- 프로그램의 실행 코드가 저장되는 공간입니다.
- CPU가 실행하는 명령어 집합이 여기에 위치하며, 이 코드는 프로그램의 실행 흐름을 정의합니다.
- 코드 영역은 일반적으로 읽기 전용메모리로 지정되며, 실행 중에 수정할 수 없습니다.
데이터 영역
- 프로그램의 전역 변수 및 정적 변수가 저장되는 공간입니다.
- 초기화된 데이터와 초기화되지 않은 데이터를 포함합니다.
- 데이터 영역은 읽기 및 쓰기가 가능한 메모리 영역입니다.
힙 영역
- 동적으로 할당된 데이터와객체가 저장되는 공간입니다.
- 프로그램 실행 중에 동적으로 메모리를 할당하고 해제할 수 있습니다. 이를 통해 가변 크기의 데이터 구조를 관리할 수 있습니다.
- 힙은 사용자가 메모리를 직접 할당하고 해제해야 하므로 주의가 필요합니다.
스택 영역
- 함수 호출 및 지역 변수가 저장되는 공간입니다.
- 함수가 호출될 때 함수의 매개변수, 지역 변수 및 함수의 반환 주소를 저장합니다.
- 후입선출(LIFO) 구조로 동작하며, 함수가 호출될 때마다 스택 프레임이 생성되고 제거됩니다.
- 보통 고정 크기로 할당되며, 스택 오버플로우를 방지하기 위해 주의가 필요합니다.
프로세스 상태
- 생성 상태 : 프로세스를 생성 중인 상태를 생성 상태입니다. 운영 체제에 의해 생성되었지만 아직 실행을 시작하지 않은 초기 상태를 나타냅니다. 생성 상태는 프로세스 수명 주기에서의 초기 단계입니다.
- 준비 상태 : 프로세스가 CPU를 할당받을 준비가 된 상태입니다. 프로세스들을 CPU 시간을 기다리며, 스케줄링 알고리즘에 따라 어떤 프로세스가 다음에 실행될지 결정됩니다.
- 실행 상태 : CPU를 할당받아 실제로 코드를 실행 중인 상태입니다. 실행 중인 프로세스는 CPU를 점유하고 명령어를 실행하며, 실행 중에 인터럽트나 시스템 호출과 같은 이벤트가 발생할 수 있습니다.
- 대기 상태 : 프로세스가 어떤 이벤트를 기다리거나 외부 자원을 기다리고 있는 상태입니다. 프로세스는 특정 조건이 충족될 때까지 실행을 중단하고 대기합니다.
- 종료 상태 : 프로세스가 실행을 완료하거나 강제로 종료된 후의 상태입니다. 종료된 프로세스의 자원과 메모리는 반환되고 PCB 등의 자원도 정리됩니다.
스레드
컴퓨터 프로그래밍의 실행 단위 중 하나로, 프로세스 내에서 독립적으로 실행되는 부분입니다. 스레드는 프로세스 내에서 공유 자원에 대한 접근을 공유하며, 동일한 프로세스 내에서 여러 스레드가 병렬로 동작할 수 있습니다.
특징
- 독립성 : 슬드는 프로세스 내에서 실행되지만 독립적으로 제어됩니다. 따라서 각 스레드는 자체 프로그램 카운터와 레지스터 값을 가지고 있어, 서로 독립적으로 명령어를 실행할 수 있습니다.
- 공유자원 : 스레드는 동일한 프로세스 내에서 실행되므로, 프로세스 내의 자원에 대한 접근을 공유합니다. 이는 데이터 공유와 효율적인 통신을 가능하게 합니다.
- 경량 스레드와 커널 스레드 : 스레드 구현은 경량 스레드와 커널 스레드로 나눌 수 있습니다. 경량 스레드는 사용자 수준에서 관리되며 운영체제의 개입이 없는 반면, 커널 스레드는 운영 체제에서 직접 관리됩니다.
- 스레드 동기화 : 스레드 간에 공유 자원에 접근할 때 동기화 문제가 발생할 수 있으며, 이를 해결하기 위해 스레드 동기화 메커니즘이 사용됩니다. 이로써 스레드 간의 경쟁 조건과 데드락을 방지할 수 있습니다.
- 멀티코어 CPU 활용 : 멀티코어 시스템에서 스레드를 사용하면 여러 스레드가 병렬로 실행될 수 있어 프로그램의 성능을 향상시킬 수 있습니다.