반응형
**프로세스(Process)**는 실행 중인 프로그램을 의미합니다. 프로그램은 디스크에 저장된 코드인 반면, 프로세스는 실행을 위해 메모리에서 로드되고 실행되는 동적인 상태를 가집니다. 프로세스는 운영 체제에서 자원을 할당받아 실행되고, 프로그램 코드, 데이터, 시스템 자원 등을 포함한 여러 요소들로 구성됩니다.
1. 프로세스의 구성 요소
- 프로그램 코드: 실행 중인 코드 자체로, 명령어들이 포함됩니다.
- 프로세스 상태: 프로세스가 현재 어떤 상태에 있는지 (실행 중, 대기 중, 종료 등).
- 레지스터(Register): CPU 내부의 레지스터 값을 포함하여, 현재 실행 상태를 나타내는 값들이 저장됩니다.
- 프로그램 카운터(Program Counter): 현재 실행 중인 명령어의 메모리 주소를 나타냅니다.
- 힙(Heap): 동적으로 할당된 메모리 영역입니다.
- 스택(Stack): 함수 호출 및 로컬 변수 저장을 위한 메모리 영역입니다.
- 파일 디스크립터(File Descriptors): 열린 파일이나 소켓에 대한 정보를 포함합니다.
- 메모리 맵(Memory Map): 프로세스의 메모리 사용 상태를 나타내며, 코드, 데이터, 힙, 스택 등이 어떻게 배치되는지를 나타냅니다.
2. 프로세스의 상태
프로세스는 여러 가지 상태를 가질 수 있습니다. 이 상태들은 운영 체제가 프로세스를 어떻게 관리하는지에 대한 정보를 제공합니다.
- 새로운 상태(New): 프로세스가 생성 중인 상태입니다.
- 실행 대기 상태(Ready): 프로세스가 실행될 준비가 완료된 상태입니다. CPU가 할당되기를 기다리고 있습니다.
- 실행 중(Running): 프로세스가 CPU를 할당받아 실행되고 있는 상태입니다.
- 대기 상태(Waiting): 프로세스가 특정 이벤트나 자원의 가용을 기다리고 있는 상태입니다. 예를 들어, 입출력 작업이 완료되기를 기다릴 때 발생합니다.
- 종료 상태(Terminated): 프로세스가 실행을 마치고 종료된 상태입니다.
3. 프로세스 생성
프로세스는 운영 체제에서 다음과 같은 방법으로 생성됩니다:
- 시스템 호출(System Call): 프로세스는 운영 체제에서 제공하는 시스템 호출을 통해 생성됩니다. 예를 들어, fork()와 같은 호출을 통해 새로운 프로세스를 생성할 수 있습니다.
- 프로세스 제어 블록(Process Control Block, PCB): 프로세스 생성 시, 운영 체제는 PCB라는 자료 구조를 생성하여 프로세스에 대한 정보를 관리합니다. PCB에는 프로세스의 상태, 프로그램 카운터, 레지스터 값, 메모리 정보, 우선순위 등의 정보가 포함됩니다.
4. 프로세스 간의 상호작용
- 프로세스 간 통신(IPC, Inter-Process Communication): 서로 다른 프로세스가 데이터를 주고받을 수 있도록 하는 메커니즘입니다. 프로세스 간 통신 방법에는 파이프(Pipes), 메시지 큐(Message Queues), 공유 메모리(Shared Memory), 소켓(Socket) 등이 있습니다.
- 동기화(Synchronization): 다수의 프로세스가 자원에 동시에 접근할 때 발생할 수 있는 충돌을 방지하기 위한 기법입니다. 예를 들어, **뮤텍스(Mutex)**와 **세마포어(Semaphore)**가 동기화에 사용됩니다.
5. 멀티 프로세싱과 멀티태스킹
- 멀티 프로세싱(Multi-Processing): 여러 개의 프로세스가 독립적으로 실행되는 방식입니다. 여러 CPU가 있을 경우, 각 CPU가 서로 다른 프로세스를 동시에 실행할 수 있습니다.
- 멀티태스킹(Multi-Tasking): 하나의 CPU에서 여러 프로세스가 시간 분할(time-sharing) 방식으로 번갈아 가며 실행되는 방식입니다. 운영 체제는 CPU 시간을 나누어 각 프로세스에게 일정 시간 동안 CPU를 할당하고, 그 후에는 다른 프로세스로 전환합니다.
6. 프로세스와 스레드(Thread)의 차이
- 프로세스(Process): 메모리 공간을 독립적으로 가지며, 자신만의 코드, 데이터, 파일 디스크립터 등을 가집니다. 프로세스 간에는 서로 격리된 메모리 공간을 가지고 있기 때문에 직접적인 데이터 공유가 불가능합니다.
- 스레드(Thread): 프로세스 내에서 실행되는 가장 작은 단위입니다. 같은 프로세스 내의 스레드는 메모리 공간을 공유하므로, 빠른 통신이 가능하지만, 자원 경쟁 문제를 처리하기 위해 동기화가 필요합니다.
7. 프로세스 관리
- 스케줄러(Scheduler): 운영 체제는 스케줄러를 사용하여 어떤 프로세스가 CPU를 사용할지 결정합니다. 여러 프로세스가 실행 대기 상태에 있을 때, 스케줄러는 각 프로세스에게 CPU를 공정하게 할당하려고 합니다.
- 컨텍스트 스위칭(Context Switching): 실행 중인 프로세스에서 다른 프로세스로 CPU를 전환하는 작업입니다. 이때, 현재 프로세스의 상태(레지스터, 프로그램 카운터 등)를 저장하고, 새로운 프로세스의 상태를 로드합니다.
8. 프로세스의 종료
프로세스는 실행을 마친 후 종료됩니다. 종료된 프로세스는 시스템에서 자원을 해제하고, 종료 상태에 도달합니다. 프로세스 종료 후에는 운영 체제에서 해당 프로세스의 PCB를 제거하고, 해당 프로세스가 사용하던 메모리와 자원을 반환합니다.
9. 프로세스의 예시
- 웹 서버: 사용자의 요청을 처리하는 여러 프로세스를 생성하여 웹 서비스를 제공합니다.
- 파일 시스템: 파일을 읽고 쓰는 작업을 처리하는 프로세스가 존재합니다.
- 게임: 게임의 각 기능을 담당하는 여러 프로세스가 실행됩니다.
10. 결론
프로세스는 운영 체제에서 실행되는 프로그램의 인스턴스로, 프로세스 관리, 자원 할당, 실행 상태 모니터링 등의 중요한 역할을 합니다. 효율적인 프로세스 관리와 스케줄링은 시스템 성능을 최적화하는 데 중요한 요소입니다.
728x90
'개발공부 > CS' 카테고리의 다른 글
[운영체제] 컨텍스트 스위칭이란? (0) | 2025.02.16 |
---|---|
[운영체제] 스레드란? (0) | 2025.02.16 |
[운영체제] 바이트 오더링(Byte Ordering)? (0) | 2025.02.16 |
[자료구조] 트리(Tree)란? (0) | 2025.02.16 |
[자료구조] Linked List란? (0) | 2025.02.16 |