[운영체제(OS)] 프로세스(Process)
- -
1. Process
프로세스(Process)는 '현재 실행 중인 프로그램'을 의미한다, 좀 더 컴퓨터공학에 맞게 전문적으로 얘기하자면 디스크에 있는 프로그램이 메모리에 로드가 되면 프로세스가 된다. 하나의 프로그램이 여러 개의 프로세스가 될 수 있고, 프로세스는 스택(Stack), 힙(Heap), 데이터(Data), 코드(Code)로 나눌 수 있다.
프로세스 문맥(Process Context)은 컴퓨터 시스템에서 실행 중인 프로세스의 상태를 나타내는 정보 모음이다. 이 문맥은 프로세스의 특정 시점에서의 상태를 포함하며, 프로세스를 중단하고 나중에 다시 실행할 때 해당 프로세스의 상태를 복원하는 데 사용된다. 아래에서 주요한 프로세스 문맥의 구성 요소를 살펴보자.
1. 하드웨어 문맥(Hardware Context)
• 프로그램 카운터(Program Counter)는 다음에 실행할 명령어의 주소를 가리키는 레지스터이다. 이를 통해 운영체제는 프로세스가 어디까지 실행되었는지 파악할 수 있다.
• 레지스터(Register)는 CPU 내부의 일시적인 데이터 저장 공간으로, 연산 중간 결과, 함수 호출 정보 및 기타 중요한 데이터를 저장한다. 레지스터는 프로세스 문맥의 일부로 복원되어야 한다.
2. 주소 공간(Address Space)
• 프로세스의 주소 공간은 해당 프로세스가 실행 중인 프로그램 및 데이터의 메모리 배치를 나타낸다. 이는 코드, 데이터, 스택, 힙 등의 섹션으로 구성된다. 프로세스 문맥을 복원할 때, 주소 공간의 내용도 해당 상태로 복원되어야 한다.
3. PCB(Process Control Block)
• PCB는 운영체제 커널 내에서 프로세스와 관련된 정보를 유지하는 자료구조이다. PCB에는 프로세스의 상태, 프로세스 ID, 우선순위, 계정 정보 등과 같은 중요한 정보가 포함된다. PCB는 프로세스 문맥을 관리하고 스케줄링을 위한 정보를 제공하는 데 사용된다.
4. 프로세스 커널 스택(Process Kernel Stack)
• 프로세스 커널 스택은 프로세스가 커널 모드(커널 내부에서 실행 중인 모드)에서 동작할 때 사용되는 스택이다. 커널 스택에는 함수 호출 및 커널 내부 작업에 필요한 데이터가 저장된다. 프로세스 문맥 전환 시 커널 스택도 관련 정보와 함께 복원되어야 한다.
프로세스 문맥은 멀티태스킹 운영체제에서 여러 프로세스 간의 전환 및 관리에 필수적이다. 각각의 프로세스가 자체 문맥을 가지고 있으므로, 운영체제는 이러한 문맥을 유지 및 관리하여 프로세스 간의 원활한 전환 및 복원을 수행할 수 있다. 이를 통해 여러 프로세스가 동시에 실행될 수 있고, 프로세스 간의 상호작용을 지원하는 등의 기능을 제공한다.
2. Process State
1. New(생성 상태)
프로세스가 처음 생성되었지만 아직 실행되지 않은 상태이다. 프로세스가 생성되면 초기화되고 필요한 자원 및 정보가 할당된다.
2. Ready(준비 상태)
프로세스가 CPU에 할당되기를 기다리는 상태이다. 프로세스가 실행 준비가 되었으며, CPU가 아직 할당되지 않은 상태이다. 대기 중인 프로세스 중에서 우선순위, 스케줄링 알고리즘 등에 따라 CPU 할당을 기다린다.
3. Running(대기 상태)
CPU가 할당된 프로세스가 현재 명령을 수행 중인 상태이다. 프로세스는 CPU를 점유하고 코드를 실행하며, 시간 할당량(Time Slice)에 따라 실행된다.
4. Waiting(대기 상태)
프로세스가 어떤 이벤트가 발생하기를 기다리는 상태이다. 예를 들어, 입출력(I/O) 작업의 완료, 외부 신호, 사용자 입력 등을 기다리는 동안 CPU를 할당받지 못하고 대기한다. 해당 이벤트가 발생하면 Ready 상태로 전환될 수 있다.
5. Terminated(종료 상태)
프로세스가 실행을 마치고 더 이상 실행되지 않는 상태를 나타낸다. 이 상태에서 프로세스는 실행을 종료하고 자원을 반환했으며, 시스템 내에서 더 이상 활성 상태가 아니다. 종료된 프로세스는 종료 상태에 남아 있을 수도 있고, 자원을 해제하고 제거될 수도 있다.
프로세스의 이러한 다양한 상태는 운영체제의 스케줄러에 의해 관리되며, 프로세스 간의 전환과 자원 관리에 중요한 역할을 한다. 각 상태에서의 프로세스 동작은 시스템의 동작 및 운영을 조절하는 데 중요한 역할을 한다.
3. Process Control Block
PCB(Process Control Block)는 운영체제가 각 프로세스를 관리하기 위해 사용하는 자료구조로, 각 프로세스에 대한 정보를 담고 있다. PCB는 프로세스의 생애주기 동안 정보를 저장하고 관리하여 운영체제가 프로세스를 효율적으로 스케줄링하고 제어할 수 있게 한다.
1. 운영체제가 관리상 사용하는 정보
• Process State(프로세스 상태)
현재 프로세스의 상태를 나타내는 정보이다. 상태는 New, Ready, Running, Waiting, Terminated 등과 같은 상태로 정의된다.
• Process ID(프로세스 식별자)
각 프로세스는 고유한 식별자를 가진다. 이 식별자는 프로세스를 구분하기 위해 사용된다.
• Scheduling Information(스케줄링 정보)
스케줄링 알고리즘에 필요한 정보를 포함한다. 예를 들어, 프로세스의 중요도, 우선순위, 스케줄링 큐 포인터 등의 정보가 여기에 포함된다.
• Priority(우선순위)
프로세스의 스케줄링 우선순위를 나타내는 정보이다.
2. CPU 수행 관련 하드웨어 값
• Program Counter(프로그램 카운터)
현재 실행 중인 명령어의 주소를 가리키는 레지스터이다. 다음에 실행할 명령어의 위치를 지정한다.
• Register(레지스터)
CPU 레지스터 값 중에서 프로세스가 인터럽트 또는 문맥 전환 이후에도 사용해야 하는 값들을 저장한다.
3. 메모리 관련
• Code, Data, Stack의 위치 정보
프로세스의 주소 공간 내에서 코드, 데이터, 스택 섹션의 위치 정보를 나타낸다.
• Base/Limit 레지스터 값
메모리 보호를 위해 사용되며, 프로세스가 접근할 수 있는 메모리 영역을 제한하는 정보를 포함한다.
4. 파일 관련
• Open File Descriptors(열린 파일 디스크립터)
현재 프로세스에서 열린 파일의 목록을 관리하고 파일 입출력 작업에 사용된다.
PCB는 프로세스가 생성되면 프로세스가 종료될 때 파괴된다. PCB에 저장된 정보를 통해 운영체제는 프로세스를 관리하고 스케줄링을 수행하며, 이를 통해 다중 프로세스 환경에서 작업을 조율한다.
4. Context Switch
Context Switch는 다른 프로세스로 CPU 제어를 전환하는 과정을 가리킨다. 이 과정은 인터럽트, 예약된 스케줄러에 의한 스케줄링, 시스템 콜 등의 이벤트로 인해 발생할 수 있다. Context Switch는 다음과 같은 주요 단계로 이루어진다.
1. 현재 프로세스 상태 저장
• 현재 CPU에서 실행 중인 프로세스의 상태는 해당 프로세스의 PCB(Process Control Block)에 저장된다. 이 상태 정보에는 프로그램 카운터(Program Counter), 레지스터 상태, CPU 상태 등이 포함된다.
2. 인터럽트 또는 스케줄러 동작
• Context Switch는 주로 인터럽트에 의해 트리거 된다. 예를 들어, 타이머 인터럽트가 발생하여 현재 프로세스의 실행 시간이 만료되었을 때, 운영체제는 Context Switch를 시작한다. 또는 운영체제의 스케줄러가 실행 중인 프로세스를 중단하고 다음 프로세스로 전환하는 데 사용될 수도 있다.
3. 새로운 프로세스 상태 로드
• 인터럽트 또는 스케줄러에 의해 선택된 새로운 프로세스의 PCB에서 상태 정보가 읽혀와 CPU에 로드된다. 이로써 CPU는 새로운 프로세스의 명령어를 실행하게 된다.
4. CPU 제어 전환
CPU의 제어권이 새로운 프로세스로 전환된다. 이제 CPU는 새로운 프로세스의 명령어를 수행하며, 이전 프로세스는 중단되었다.
위의 예시의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 저장해야 하지만, context switch의 overhead가 더 크기 때문에 아래의 경우가 overhead가 더 크다.
Context Switch는 프로세스 간의 공정한 시간 분배와 멀티태스킹을 가능하게 하는 핵심 메커니즘 중 하나이다. 프로세스가 실행 중에 인터럽트가 발생하거나 운영체제의 스케줄러에 의해 프로세스 전환이 필요할 때마다 Context Switch가 발생하며, CPU의 상태 정보를 PCB에 저장하고 새로운 프로세스의 정보를 불러와 CPU를 전환한다. 이를 통해 여러 프로세스가 동시에 실행될 수 있고, 프로세스 간에 공정한 자원 공유가 가능해진다.
5. Process Scheduling
1. 멀티프로그래밍(Multi Programming)
• 목적
CPU를 최대한 활용하기 위해 여러 프로세스를 동시에 메모리에 유지하고 실행하는 것이다. 이는 CPU가 한 프로세스의 작업이 완료될 때까지 대기하지 않고 다른 프로세스로 전환하여 시스템의 활용도를 높이는 데 중요하다.
• 동작
여러 프로세스를 메모리에 올려두고, CPU 스케줄러가 이들 중 하나를 실행하고, 프로세스가 대기 상태에 들어가면 다른 프로세스로 전환하여 작업을 진행한다.
2. 시분할 시스템(Time Sharing System 또는 시간 공유 시스템)
• 목적
사용자에게 빠른 응답 시간을 제공하고, 다중 사용자 환경에서 각 사용자가 자신의 프로그램을 동시에 실행하고 상호작용할 수 있도록 하는 것이다.
• 동작
CPU 시간을 작은 시간 간격으로 여러 프로세스 사이에 분할하여 할당한다. 이를 통해 사용자는 동시에 여러 작업을 수행하는 것처럼 느낄 수 있다.
3. 프로세스 스케줄링(Process Scheduling)
• 목적
CPU를 효율적으로 활용하고, 다양한 프로세스 간에 공정한 자원 공유를 제공하기 위해 프로세스 실행 순서를 정하는 것이다.
• 동작
프로세스 스케줄러가 여러 프로세스 중 하나를 선택하여 CPU에 할당한다. 이 선택은 우선순위, 스케줄링 알고리즘 등을 기반으로 한다.
4. 큐(Queue) 개념
• Job Queue(작업 큐)
하드 디스크에 있는 프로그램이 메모리에 로딩되고 실행되기를 기다리는 큐이다. 메모리에 올라와야만 실행 가능한 상태의 프로세스가 여기에 대기한다.
• Ready Queue(장치 큐)
현재 메모리에 있으면서 CPU를 할당받기를 기다리는 프로세스의 집합이다. 실행 가능한 프로세스가 대기하는 곳이다.
• Device Queue(장치 큐)
I/O 장치를 사용하기 위해 대기하는 프로세스의 집합이다. 이 큐에 있는 프로세스는 I/O 작업이 완료될 때까지 대기한다.
스케줄러의 종류는 아래와 같이 크게 3가지로 구분된다.
1. Long-Term Scheduler(장기 스케줄러 or Job Scheduler)
• 역할
메모리와 다른 시스템 자원을 관리하며, 어떤 프로세스가 메모리로 올라와서 실행되어야 할지를 결정한다.
• 주요 업무
- Ready Queue로 보낼 프로세스를 선택하는 작업
- Degree of Multi programming(메모리에 몇 개의 프로세스가 동시에 존재하는지)를 조절하는 역할
• 특징
Long-Term Scheduler는 자주 발생하지 않으며, 큰 시간 간격으로 작동한다. 일반적으로 메모리 공간을 관리하며, 새로운 프로세스를 메모리에 할당한다. Time-Sharing 시스템에서는 보통 Long-Term Scheduler가 존재하지 않고 새로운 프로세스는 바로 Ready Queue로 이동한다.
2. Short-Term Scheduler(단기 스케줄러 or CPU Scheduler)
• 역할
어떤 프로세스가 다음에 CPU를 할당받을지 선택하고, CPU를 할당한다.
• 주요 업무
- Ready Queue에 있는 프로세스 중에서 다음에 실행될 프로세스를 선택
- 선택된 프로세스에 CPU를 할당하여 실행
• 특징
Short-Term Scheduler는 자주 발생하며, 매우 빠르게 동작해야 한다. 이 스케줄러의 결정에 따라 프로세스들이 CPU를 공유하며 실행된다.
3. Medium-Term Scheduler(중기 스케줄러 or Swapper)
• 역할
프로세스의 메모리 상태를 관리하고, 메모리에서 프로세스를 제거하거나 다시 메모리에 적재하는 역할을 한다.
• 주요 업무
- 프로세스를 메모리에서 디스크로 쫓아내거나 디스크에서 메모리로 다시 불러오는 Swapping 작업을 수행한다.
- Degree of Multi programming을 제어하며, 메모리를 효율적으로 관리한다.
• 특징
Medium-Term Scheduler는 상대적으로 덜 빈번하게 동작한다. 프로세스의 메모리 상태를 변경하여, 일시적으로 프로세스를 중지(Suspended)시킬 수 있다. Suspended 상태의 프로세스는 외부적인 개입이 필요한 상태이며, 다시 활성화되어야 실행을 재개할 수 있다. 이것은 일시적으로 메모리를 확보하기 위한 목적으로 사용된다.
스케줄러의 다양한 종류와 역할은 운영체제가 다중 프로세스 관리를 효과적으로 수행하고, 리소스를 효율적으로 활용하기 위해 필요하다. 이러한 스케줄러들이 협력하여 다중 프로그래밍과 시분할 시스템을 지원하며, 사용자 및 시스템의 요구사항을 충족시킨다.
6. Process Management
프로세스 생성(Process Creation)
프로세스 생성은 부모 프로세스가 새로운 자식 프로세스를 생성하는 과정을 나타낸다. 이로 인해 프로세스 간에 계층적인 구조, 즉 프로세스 트리가 형성된다. 프로세스 생성은 운영체제의 중요한 부분 중 하나로, 새로운 프로세스를 생성하고 관리하여 멀티프로그래밍 환경을 제공한다.
프로세스 생성과 관련하여 다음과 같은 특성과 모델이 있다.
1. 자원 공유(Resource Sharing Option)
• 부모와 자식이 모든 자원을 공유하는 모델
이 모델에서는 자식 프로세스가 부모 프로세스의 모든 자원을 공유한다. 이는 부모와 자식 간에 높은 상호 의존성을 가질 수 있다.
• 부모와 자식이 자원의 일부를 공유하는 모델
부모와 자식이 일부 자원을 공유하면서 일부 자원은 독립적으로 사용하는 모델이다. 이 모델은 자식 프로세스가 부모의 일부 자원을 상속하고 나머지 자원을 독립적으로 할당받을 수 있다.
• 전혀 공유하지 않는 모델
부모와 자식 간에 자원을 공유하지 않는 모델이다. 자식 프로세스는 모든 자원을 독립적으로 할당받는다.
2. 수행(Execution)
• 부모와 자식이 공존하며 동시에 수행되는 모델
부모와 자식 프로세스가 동시에 실행된다. 이 모델에서는 부모와 자식 프로세스가 서로 독립적으로 실행되며, 어떤 작업이 먼저 완료될지는 예측할 수 없다.
• 자식이 종료될 때까지 부모가 기다리는 모델
부모 프로세스가 자식 프로세스의 실행을 시작하고, 자식이 종료될 때까지 부모는 대기한다. 이 모델은 부모가 자식의 작업 완료를 확인하거나 결과를 수집해야 할 때 사용된다.
3. 주소 공간(Address Space)
• 자식이 부모의 공간을 복제하는 모델
자식 프로세스는 부모 프로세스의 주소 공간을 복제하여 시작한다. 이는 자식이 부모의 모든 코드, 데이터, 스택 등을 상속하게 된다.
• 자식이 해당 공간에 새로운 프로그램을 올리는 모델
자식 프로세스는 부모와 독립적은 주소 공간을 생성하고, 새로운 프로그램을 해당 공간에 로드한다. 이 모델은 자식이 완전히 독립적인 환경에서 실행될 때 사용된다.
프로세스 생성과 관련된 다양한 모델과 특성은 운영체제 설계자에게 어떻게 프로세스를 관리하고 자원을 할당할지에 대한 중요한 결정 사항이다. 이러한 모델과 특성을 조합하여 운영체제는 프로세스 간의 상호작용과 자원 관리를 조절하며 시스템의 안정성과 효율성을 유지한다.
7. Cooperating Process
프로세스 동작 방식에 따라 독립적 프로세스(Independent Process)와 협력 프로세스(Cooperating Process)로 나뉜다. 이러한 프로세스 유형은 프로그램들이 어떻게 상호작용하고 정보를 공유하며 작업을 수행하는지에 대한 중요한 차이점을 나타낸다.
1. 독립적인 프로세스(Independent Process)
• 개별 주소 공간(Individual Address Space)
독립적 프로세스는 각자의 독립적인 주소 공간을 가지고 작동한다. 이는 각 프로세스가 자체적으로 코드, 데이터, 스택, 힙 등의 메모리 공간을 가지며, 다른 프로세스의 주소 공간에 직접 접근할 수 없음을 의미한다.
• 독립적 실행(Isolated Execution)
각 독립적 프로세스는 원칙적으로 다른 프로세스의 실행에 영향을 미치지 않는다. 하나의 프로세스가 실패하더라도 다른 프로세스는 영향을 받지 않으며, 안정성이 높다.
• 정보 공유의 어려움
독립적 프로세스는 주소 공간을 분리하므로 직접적인 정보 공유가 어렵다. 프로세스 간 통신을 위해 추가적인 메커니즘이 필요하다.
2. 협력 프로세스(Cooperating Process)
• 공유 주소 공간(Shared Address Space)
협력 프로세스는 하나의 주소 공간을 공유하며 작동한다. 이는 프로세스 간에 메모리 영역을 공유할 수 있음을 의미하며, 다른 프로세스의 메모리에 직접 접근할 수 있다.
• 상호작용(Interactions)
협력 프로세스는 프로세스 간의 상호작용을 통해 작업을 수행한다. 이를 위해 프로세스 협력 메커니즘(IPC, Interprocess Communication)을 사용하여 정보를 교환하고 작업을 조정한다.
• 협력의 이점
협력 프로세스는 정보 공유, 계산 속도 향상, 편리한 작업 분배 등의 이점을 제공한다. 여러 프로세스가 협력하여 복잡한 작업을 수행할 수 있으며, 시스템의 성능과 효율성을 향상할 수 있다.
협력 프로세스는 프로세스 간의 상호작용이 필요한 경우에 사용된다. 이를 통해 다양한 프로세스가 서로 협력하여 복잡한 작업을 수행하고 정보를 공유할 수 있으며, 이로써 시스템의 기능과 성능을 향상할 수 있다.
프로세스 협력 메커니즘(IPC, Interprocess Communication)은 프로세스 간에 정보를 공유하고 상호작용하는 방법을 정의하는 기술이다. IPC는 크게 두 가지 모델로 나눌 수 있다. 공유 메모리(Shared Memory) 모델과 메시지 파싱(Messaging Passing) 모델이다.
1. 공유 메모리(Shared Memory) 모델
• 원리
공유 메모리 모델은 여러 프로세스가 하나의 메모리 영역을 공유하고 이를 통해 데이터를 교환하는 방식이다. 이 메모리 영역은 모든 관련된 프로세스에 의해 접근 가능하며, 프로세스는 해당 공유 메모리에 데이터를 쓰거나 읽을 수 있다.
• 특징
- 공유 메모리 모델은 데이터를 직접 주고받으므로 데이터 전달의 오버헤드가 낮다.
- 프로세스 간의 효율적인 데이터 공유가 가능하며, 공유 메모리를 통해 동시에 작업할 수 있다.
• 단점
- 공유 메모리 모델에서는 데이터의 일관성과 동기화를 관리하기 위한 추가적인 메커니즘이 필요하다.
- 공유 메모리 사용 시 데이터 무결성과 보안을 유지하는 것이 어려울 수 있다.
2. 메시지 패싱(Message Passing) 모델
• 원리
메시지메시지 패싱 모델은 프로세스 간에 데이터를 주고받는 데 메시지를 사용하는 방식이다. 각 프로세스는 메시지를 생성하고 이를 다른 프로세스로 전송하며, 수신자 프로세스는 메시지를 수신하여 처리한다.
• 특징
- 메시지 패싱 모델은 데이터 교환을 메시지를 추상화하므로 프로세스 간의 강력한 격리를 제공한다
• 단점
- 메시지 패싱은 데이터를 전송하는 과정에서 추가적인 오버헤드를 발생시킬 수 있다.
- 메시지메시지 큐와 같은 데이터 구조를 사용하여 메시지를 관리해야 하므로 구현이 복잡할 수 있다.
메시지 패싱(Message Passing) 모델은 기본적으로 Send와 Receive 작업을 통해 메시지를 교환해야 하고 크게 두 가지 방법으로 나눌 수 있다.
1. Direct Messaging(직접 메시지 전달)
• 원리
직접 메시지 전달 방식은 메시지를 발신자에서 수신자로 직접 전달하는 방식이다. 발신자는 메시지를 명시적으로 수신자에게 보낸다.
• 특징
- 발신자는 명시적으로 메시지를 특정 수신자에게 보내므로 메시지를 전달할 대상을 알고 있어야 한다.
- 수신자는 메시지를 기다리고 수신할 때까지 대기한다. 메시지를 수신하면 바로 처리한다.
• 장점
-직접 메시지 전달은 단순하며, 메시지의 발신자와 수신자가 명확하게 정의될 때 효과적이다.
- 빠른 응답 시간을 가질 수 있다.
• 단점
- 메시지 수신자를 명시적으로 지정해야 하므로, 동적으로 변하는 수신자 목록을 다루기 어렵다.
- 수신자가 메시지를 수신할 때까지 발신자는 대기해야 하므로 대기 시간을 발생할 수 있다.
2. Indirect Messaging(간접 메시지 전달)
• 원리
간접 메시지 전달 방식은 메시지를 중간 매개체를 통해 전달하는 방식이다. 메시지를 보내는 프로세스는 중간 매개체에 메시지를 보내고, 수신자는 중간 매개체에서 메시지를 수신한다.
• 특징
- 중간 매개체는 메시지를 받은 후 메시지를 저장하고, 수신자는 메시지를 요청할 때까지 저장된 메시지를 보관한다.
- 발신자는 수신자를 명시적으로 알 필요가 없으며, 중간 매개체를 통해 메시지를 전달한다.
• 장점
- 중간 매개체를 사용하므로 동적으로 변하는 수신자 목록을 다루기 쉽다.
- 발신자와 수신자 간의 결합도를 낮출 수 있다.
• 단점
- 중간 매개체를 통해 메시지를 전달하기 때문에 추가적인 오버헤드가 발생할 수 있으며, 메시지 전달이 약간 더 느릴 수 있다.
두 모델은 각각의 장단점을 가지고 있으며, 사용 사례에 따라 어떤 모델을 선택할지 결정된다. 공유 메모리는 데이터 공유와 고성능이 필요한 경우 유용하며, 메시지 패싱은 격리와 안정성이 중요한 경우에 적합하다. 종종 두 가지 모델을 혼합하여 복잡한 IPC 요구 사항을 해결하기도 한다.
소중한 공감 감사합니다