[운영체제/OS] 2-1. 프로세스(Processses)
1. 프로세스의 개념
💡 프로세스의 정의와 구성 요소는 OS 관련 기술 면접에서 매우 자주 등장하는 핵심 질문입니다.
1.1 프로세스란?
- 정의: 실행 중인 프로그램의 인스턴스
- 구성 요소:
- 이미지(Images)
- 코드(Code): 기계어 명령어
- 데이터(Data): 변수들
- 스택(Stack): 함수 호출 상태
- 힙(Heap): 동적 메모리
- 프로세스 문맥(Process Context)
- 이미지(Images)
1.2 프로세스 문맥(Context)
- 프로그램 문맥
- 데이터 레지스터
- 프로그램 카운터
- 스택 포인터
- 커널 문맥
- pid, gid, sid
- 환경 변수
- VM 구조(페이징 테이블)
- 열린 파일들
- 시그널 핸들러
2. 프로세스 메모리 구조
2.1 메모리 세그먼트
💡 프로세스의 메모리 구조는 메모리 관리와 관련된 면접 질문에서 필수적인 내용입니다.
- Code Segment
- 실행 코드가 저장
- 일반적으로 읽기 전용
- Data Segment
- Initialized data segment
- Uninitialized data segment (BSS)
- 커널이 프로그램 시작 전 0으로 초기화
- Stack
- 자동 변수
- 임시 변수
- 리턴 주소
- 호출자의 환경(registers)
- Heap
- 동적으로 할당된 메모리
2.2 메모리 레이아웃 예제
long array[100];
long bufsize = 100;
int main(void) {
int i;
char* buf;
i = 10;
buf = f1(i);
return(0);
}
char* f1(int n) {
printf("%d\n", i);
return malloc(bufsize);
}
3. 프로세스 제어 구조
3.1 프로세스 제어 블록 (PCB)
💡 PCB는 프로세스 관리의 핵심 자료구조로, OS 면접에서 자주 다루어지는 주제입니다.
- 정의: 프로세스와 관련된 정보를 저장하는 커널의 핵심 자료구조
- 특징: 모든 프로세스마다 하나씩 존재
- 구성 요소:
- 이미지 정보
- 프로세스 문맥
- 프로그램 문맥
- 커널 문맥
4. OS의 데이터 구조
4.1 시스템 테이블
- 메모리 데이터 구조
- 프로세스별 메모리 할당 정보
- 가상 메모리 관리 정보
- 공유 메모리 영역의 보호 속성
- 파일 데이터 구조
- 파일 존재 여부
- 보조 기억장치상의 위치
- 현재 상태
- 속성 정보
- I/O 데이터 구조
- I/O 장치 가용성
- I/O 작업 상태
- 메모리 전송 위치
- 프로세스 데이터 구조 (PCB)
- 프로세스 위치
- 프로세스 관리 속성
- 프로세스 ID
- 프로세스 상태
- 메모리 위치 등
5. 프로세스 상태
5.1 5단계 프로세스 상태 모델
💡 프로세스 상태와 상태 전이는 OS 동작 이해의 기본이 되는 매우 중요한 개념입니다.
- 생성 (new)
- 프로세스가 생성되는 중
- 준비 (ready)
- 프로세서 할당을 기다리는 상태
- 실행 (running)
- 명령어들이 실행되는 상태
-
대기 (blocked/waiting)
- I/O 완료 등의 이벤트를 기다리는 상태
-
종료 (exit/terminated)
- 실행이 완료된 상태
6. 프로세스 스케줄링
💡 참고: 자세한 내용은 Lecture 5에서 다룰 예정입니다.
6.1 스케줄링 종류
- 장기 스케줄링 (Job Scheduling)
- 시스템에 진입할 프로세스 선택
- 다중 프로그래밍 정도 조절
- 호출 빈도 낮음 (초, 분 단위)
- 단기 스케줄링 (CPU Scheduling)
- 실행할 프로세스 선택
- CPU 할당
- 매우 빈번히 호출 (밀리초 단위)
- 중기 스케줄링 (Medium Term Scheduling)
7. 프로세스 전환
7.1 프로세스 전환의 개념
💡 프로세스 전환의 개념과 모드 전환과의 차이점은 면접에서 자주 다루어지는 주제입니다.
- 정의: 실행 중인 프로세스가 interrupted 되고 운영체제가 다른 프로세스를 실행 상태로 전환하는 과정
- 이중 모드 동작:
- 현대 운영체제는 하드웨어 보호를 위해 이중 실행 모드 사용
- 사용자 모드: 제한된 권한으로 일반 프로그램 실행
- 커널 모드: 모든 하드웨어 자원과 명령어에 대한 완전한 접근 권한
7.2 모드 전환과 프로세스 전환
- 모드 전환 발생 조건
- External Interrupt
- 타이머 인터럽트 (시간 할당량 만료)
- I/O 인터럽트 (이벤트 발생)
- Internal Trap(exception)
- 페이지 폴트
- 잘못된 연산 등
- System Call
- I/O 작업
- fork 등 프로세스 생성
- External Interrupt
- 모드 전환 처리
- 현재 프로세서 상태 저장 (레지스터, 플래그 등)
- 적절한 처리 루틴의 주소로 프로그램 카운터 설정
- 커널 모드로 전환하여 특권 명령어 실행 가능
- 프로세스 전환 과정
- 프로그램 문맥 저장
- 현재 프로세스 상태 변경 (실행→준비/대기/종료)
- PCB를 적절한 큐로 이동
- 스케줄러를 통한 새로운 프로세스 선택
- 선택된 프로세스의 상태를 실행으로 변경
- 메모리 관리 구조 갱신
- 새 프로세스의 프로그램 문맥 복원
7.3 전환 특성
- 모드 전환만 발생하는 경우
- 인터럽트/예외/시스템 콜 처리 후 동일 프로세스 재개
- 상대적으로 적은 오버헤드
- 프로세스 전환이 동반되는 경우
- 현재 프로세스가 다른 상태로 이동할 때 발생
- 상당한 추가 작업 필요
- 시스템 성능에 큰 영향
7.4 전환 오버헤드
- 전환 중에는 유용한 작업 수행 불가
- 운영체제가 복잡할수록 전환 작업량 증가
- 효율적인 전환을 위한 하드웨어 지원
- 예: Sun UltraSPARC의 다중 레지스터 세트
참고 자료
- A. Silberschatz의 운영체제 개론
- Operating System Concepts (10th Edition)
댓글남기기