반응형
개요
컴퓨터가 실행할 수 있는 프로그램의 인스턴스를 말하며, 이는 운영체제의 핵심 개념 중 하나이다.
운영체제는 여러 가지 프로세스를 관리하고, 그들 간의 자원 경쟁을 조정하며, 시스템 자원을 효율적으로 사용하도록 한다.
1. 프로세스의 구조
프로세스는 프로그램의 인스턴스로, 실행 중에 여러 구성 요소로 나눌 수 있다.
- 코드 섹션: 실행할 프로그램 코드가 저장된 메모리 공간
- 데이터 섹션: 전역 변수 및 정적 변수가 저장되는 영역
- 힙: 프로그램 실행 중 동적으로 할당되는 메모리 공간 예를 들어, malloc이나 new와 같은 메모리 할당 함수를 통해 할당된 메모리가 여기에 포함된다.
- 스택: 함수 호출과 관련된 정보(지역 변수, 매개 변수, 리턴 주소 등)가 저장되는 메모리 영역, 스택은 함수 호출 시마다 증가하고, 함수가 종료되면 감소하는 형태로 관리된다.
2. 프로세스 제어 블록 (PCB)
운영체제가 각 프로세스를 관리하기 위해 사용하는 데이터 구조, 프로세스에 대한 모든 중요한 정보가 PCB에 저장된다.
- 프로세스 식별자: 각 프로세스를 고유하게 식별하기 위한 ID
- 프로세스 상태: 현재 프로세스의 상태, 새로 생성됨, 준비됨, 실행 중, 대기 중, 종료됨 등이 있다.
- 프로세스 우선순위: 스케줄러가 어느 프로세스를 먼저 실행할지 결정하는 데 사용
- 프로세스 카운터: 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
- CPU 레지스터 상태: 프로세스가 CPU에서 실행될 때 사용하는 레지스터 값이 저장된다.
- 메모리 관리 정보: 프로세스의 주소 공간 정보를 포함하며, 주로 페이지 테이블이나 세그먼트 테이블을 포함한다.
- 입출력 상태 정보: 프로세스와 관련된 입출력 장치 정보와 열린 파일 목록 등을 포함
3. 프로세스의 상태
프로세스는 실행 중 여러 상태를 거친다.
- New (생성): 프로세스가 막 생성된 상태로, 아직 실행을 준비 중
- Ready (준비): 프로세스가 CPU에 의해 실행될 준비가 된 상태
- Running (실행): 프로세스가 CPU를 할당받아 실제로 실행되고 있는 상태
- Waiting (대기): 프로세스가 특정 이벤트(예: I/O 작업 완료)를 기다리고 있는 상태
- Terminated (종료): 프로세스가 모든 작업을 완료하고 종료된 상태
4. 프로세스 스케줄링
운영체제는 여러 프로세스를 효율적으로 실행하기 위해 스케줄링을 수행한다.
스케줄링 알고리즘은 프로세스의 실행 순서를 결정한다.
- FCFS(First-Come, First-Served): 가장 먼저 도착한 프로세스를 먼저 실행하는 알고리즘
- SJF(Shortest Job First): 실행 시간이 가장 짧은 프로세스를 먼저 실행
- Round Robin (RR): 각 프로세스가 동일한 시간 단위(time slice) 동안 CPU를 할당받아 실행되며, 시간이 지나면 다음 프로세스로 전환
- Priority Scheduling: 우선순위가 높은 프로세스를 먼저 실행하는 알고리즘
- Multilevel Queue Scheduling: 프로세스들을 여러 개의 큐로 나누고, 각 큐에 서로 다른 스케줄링 알고리즘을 적용
5. 프로세스 간의 통신
여러 프로세스가 협력하여 작업을 수행해야 할 때, 이들은 데이터를 주고받기 위해 통신할 수 있다.
- 메시지 패싱: 프로세스 간에 메시지를 전달하여 데이터를 주고받는다.
- 공유 메모리: 프로세스들이 메모리 공간을 공유하여 데이터를 주고받는다.
- 파이프: 두 프로세스 간에 단방향 데이터 스트림을 형성하여 데이터를 전달하는 방법
- 소켓: 네트워크를 통해 프로세스 간의 통신을 가능하게 한다.
6. 프로세스와 스레드의 차이
프로세스는 독립적인 실행 단위로서 자체 메모리 공간을 가지지만, 스레드는 동일한 프로세스 내에서 실행되는 가벼운 실행 단위
- 프로세스: 각 프로세스는 자신만의 메모리 공간(코드, 데이터, 힙, 스택)을 가진다. 프로세스 간의 통신은 비교적 어렵고 느림
- 스레드: 동일한 프로세스 내에서 여러 스레드는 메모리(코드, 데이터, 힙)를 공유하지만, 각 스레드는 자체적인 스택과 레지스터 상태를 가진다. 스레드 간의 통신은 상대적으로 빠르고 효율적
7. 프로세스 생성과 종료
- 프로세스 생성: fork()와 같은 시스템 호출을 통해 새로운 프로세스를 생성할 수 있다. 새로 생성된 프로세스는 부모 프로세스의 복사본이지만, 자신만의 프로세스 ID를 갖는다.
- 프로세스 종료: 프로세스는 작업을 완료하거나 오류가 발생했을 때 종료된다. exit() 시스템 호출을 통해 종료되며, 운영체제는 프로세스의 모든 자원을 회수하고 PCB를 제거한다.
8. 컨텍스트 스위칭
컨텍스트 스위칭은 CPU가 한 프로세스에서 다른 프로세스로 전환될 때 발생한다.
이 과정에서 현재 실행 중인 프로세스의 상태(레지스터, 프로세스 카운터 등)가 PCB에 저장되고, 새로 실행될 프로세스의 상태가 PCB에서 복구된다.
컨텍스트 스위칭은 다중 프로세스 환경에서 필수적이지만, 오버헤드가 발생하기 때문에 효율적으로 관리해야 한다.
9. 멀티태스킹과 멀티프로세싱
- 멀티태스킹: 여러 프로세스를 빠르게 전환하여 동시에 실행되는 것처럼 보이게 하는 운영체제의 기능
- 멀티프로세싱: 두 개 이상의 CPU(코어)가 동시에 여러 프로세스를 병렬로 실행하는 것을 의미
728x90
반응형
'컴퓨터 과학(CS)' 카테고리의 다른 글
네트워크 대역폭 (3) | 2024.09.30 |
---|---|
메모리 관리 페이징 (0) | 2024.09.12 |
멀티 쓰레딩 (Multi-threading) (0) | 2024.08.28 |
메모리 (0) | 2024.08.16 |
운영체제(OS) (0) | 2024.08.16 |