프로세스 관리
운영체제는 자원을 프로세스에 할당하고, 프로세스가 정보를 공유와 교환을 가능하게 하며, 각 프로세스 자원을 다른 프로세스로부터 보호 하고, 동기화를 통해 협력을 가능하게 한다.
이러한 요구를 중족하기 위해 운영체제는 각 프로세스를 위한 자료 구조를 관리한다.
이를 통해, 프로세스의 상태와 자원 소유권을 기술할 수 있으며, 운영 체제는 각 프로세스를 효율적으로 감시하고 제어할 수 있다.
즉, 운영체제가 수행하는 핵심 기능 중 하나로, 시스템에서 실행 중인 모든 프로세스를 효율적으로 생성하고, 실행하고, 종료하며, 자원을 분배하고, 상태를 관리하는 것을 말한다.
주요기능
기능 | 설명 |
프로세스 생성 및 종료 | 새로운 프로세스 생성 (fork, exec), 작업 완료 후 종료 (exit) |
스케줄링 | CPU를 어떤 프로세스에 할당할지 결정 (우선순위 기반, 라운드로빈 등) |
프로세스 상태 관리 | READY, RUNNING, BLOCKED 등 상태 추적 및 전이 관리 |
문맥 교환 (Context Switching) | 하나의 프로세스 상태를 저장하고 다른 프로세스를 불러오는 작업 |
동기화 및 통신 | 여러 프로세스 간의 협업과 충돌 방지를 위한 세마포어, 메시지 전달 등 |
자원 할당 및 회수 | CPU, 메모리, 파일 등 자원을 프로세스에 할당하고 종료 시 반환 |
프로세스 상태 전이
NEW → READY → RUNNING → BLOCKED → READY → RUNNING → TERMINATED
NEW | 생성 중 |
READY | 실행 대기 중 |
RUNNING | 실행 중 |
BLOCKED | 입출력 대기 중 |
TERMINATED | 종료됨 |
프로세스 작성
운영 체제는 다양한 상황에서 새로운 프로세스를 생성한다.
- 시스템 초기화
- 프로세스를 실행함으로써 프로세스 작성 시스템 호출 실행
- 새로운 프로세스를 만들어달라는 사용자의 요청
- 일괄 처리 시작
운영 체제가 시동될 때 일반적으로 몇 개의 프로세스가 만들어진다.
이 가운데 포그라운드 프로세스는 사용자와 서로 소통하며 사용자를 위해 일을 수행한다.
백그라운드 프로세스는 특정 사용자와 연계하지 않지만 일부 특정한 기능을 수행한다.
프로세스 끝내기
프로세스를 끝내는 이유
- 일괄 처리의 중단 명령 수행
- 사용자 로그 오프
- 프로세스의 서비스 끝내기 요청 실행
- 오류 및 실패 조건
- 정상적인 완료
- 메모리 사용 불가
- 바운드 위반
- 보호 오류 (ex. 읽기 전용 파일에 쓰기를 할 경우)
- 산술 오류 (ex. 0을 나눌 때)
- 시간 실행 초과
- 입출력 실패
- 유효하지 않은 명령
- 특별한 권한이 있는 명령
- 데이터 오용
- 운영 체제 중재
- 부모 프로세스 종료
- 부모 프로세스의 요청
프로세스 서술 및 제어
각 시스템 프로세스는 프로세스 제어 블록(PCB)으로 불리는 자료 구조를 표현하며
PCB는 여행자의 여권과 같은 역할을 수행한다.
PCB 기본 정보
항목 | 설명 |
프로세스 | 운영체제가 실행 중인 프로그램 인스턴스 |
위치 | 프로세스가 메모리 상에 존재하는 위치 |
이동 경로 | 프로세스가 시스템 자원 내에서 거쳐간 상태나 경로 |
수행 정도 | 작업이 완료된 정도나 남은 작업량 |
저장 위치 | 프로세스 관련 데이터가 저장되는 주소 또는 영역 |
자원 점유량 | 프로세스가 점유하고 있는 CPU 시간, 메모리, 파일, 입출력 장치 등 자원의 양 |
프로세스 동일성 | 고유 ID, 사용자 ID 등을 통해 프로세스를 고유하게 식별 가능. 서술자(Descriptor)와 포인터로 연결됨 |
프로세스 상황 | 현재 상태: READY, RUNNING, BLOCKED, SUSPEND, BLOCKED SUSPEND 중 하나 |
프로세스 상태 | 위 상황 외에도 레지스터 값, 프로그램 카운터, 스택 포인터, 입출력 상태 등 포괄적 정보 포함 |
측정 | 성능 측정 지표로 사용. 예: CPU 사용 시간, 입출력 사용량, 대기 시간 등 |
다중 프로그래밍
현대의 대부분의 운영 체제는 하나 이상의 프로그램을 동시에 메모리에 적재할 수 있다. 이를 통해 CPU의 유휴 시간을 줄이고 시스템 자원의 활용도를 극대화한다.
- 여러 사용자가 동일한 프로그램을 실행할 수 있으며, 각 사용자는 그 프로그램의 개별 복사본을 메모리에 점유한다.
재진입성
특정 프로그램은 메모리에 하나의 복사본만 존재하면서도 여러 사용자 또는 프로세스가 동시에 독립적으로 접근할 수 있도록 설계될 수 있다. 이런 프로그램을 "재진입 가능 프로그램"이라고 한다.
재진입성은 프로그램 코드가 공유될 수 있음을 의미하며, 공유 코드와 별도의 개별 데이터 영역을 활용하여 충돌 없이 동시 접근이 가능하다.
동시 실행
CPU는 한 순간에 하나의 명령어만 실행할 수 있다.
하지만 운영체제는 여러 프로그램이 일시적으로 유휴 상태일 때 다른 프로그램을 실행하도록 CPU를 전환 시킨다.
이 방식으로 여러 프로그램이 동시에 실행되는 것처럼 보이는 현상을 "동시 실행"이라 한다.
NAVER | |
한글 | 카카오톡 |
모든 차이 사용자에게 보여 동시에 실행되는 것처럼 보임
실제로는 NAVER만 실행 중이며 나머지 프로그램은 유휴 상태
〉 유휴 상태 : 프로세스나 시스템이 활동을 하지 않고 대기 중인 상태
즉, 한 대의 컴퓨터에서 여러 개의 프로그램을 메모리에 동시에 오려두고, CPU가 놀지 않도록 하나가 멈추면 다른 것을 실행시키는 방식을 다중 프로그램이라고 한다.
다중 프로그래밍 목적
CPU 사용을 최대화
프로그램 하나가 I/O (입추력)를 기다리는 동안 다른 프로그램을 실행시켜 CPU가 놀지 않게 만든다.
다중 프로그래밍 특징
동시 적재 ; 여러 프로그램이 메모리에 동시에 올라감
단일 실행 ; 한 순간에는 하나의 프로그램만 CPU를 사용
전환 기반 실행 ; 현재 실행 중인 프로그램이 I/O 작업 등으로 멈추면, 운영체제가 다른 프로그램으로 CPU를 전환
문맥 교환 필요 ; 전환 시, 현재 상태를 저장하고 다른 프로그램의 상태를 복원해야 함
멀티 태스킹과의 차이
다중 프로그래밍 | 멀티 태스킹 | |
정의 | 여러 프로그램을 메모리에 올려 CPU를 쉬지 않게 하는 방식 |
사용자가 여러 작업을 동시에 수행하는 것처럼 보이게 하는 방식 |
목적 | CPU 효율 높이기 위해 | 사용자 경험 향상 |
실행 주체 | 시스템 중심 - 운영체제가 CPU를 효율적으로 배분 | 사용자 중심 - 여러 작업을 동시에 처리하는 것처럼 보여줌 |
다중 프로그램 구조
프로세스 제어 블록 (PCB)
- 각 프로세스의 정보를 담은 데이터 구조
- 프로세스 ID, 상태, 레지스터, 메모리 위치, 열린 파일 등
스케줄러 (Scheduler)
- 어떤 프로세스에 CPU를 줄지 결정
- 대표 스케줄링 알고리즘
- FCFS
- Round Robin (RR)
- Priority Scheduling
문맥 교환 (Context Switch)
- 실행 중인 프로세스의 상태 저장 & 다른 프로세스 상태 복원
- CPU 자원을 효율적으로 전환하기 위한 핵심 매커니즘
동작 흐름 예시
- 메모리에 A, B, C 3개의 프로그램이 올라감
- A 실행 중 → 입출력(I/O) 요청 발생 → CPU 반납
- 스케줄러가 B 선택 → B 실행
- B 끝남 → C 실행
- A의 I/O 완료 → 다시 실행 대기 큐로 이동
- 스케줄러가 A 선택 → A 실행 재개
'개발 지식 > 기본지식' 카테고리의 다른 글
터미널 기본 명령어 / 실습 (0) | 2025.05.14 |
---|---|
스레드와 동시성 (0) | 2025.05.13 |
운영체제(OS)의 일반적인 작동 원리 (0) | 2025.05.02 |
터미널이란 (0) | 2025.05.02 |
호스팅이란 (0) | 2025.05.02 |