프로세스 스케줄링
- CPU 자원을 효과적으로 사용하기 위한 소프트웨어의 계획
- 프로세스에게 문맥 교환을 통해 CPU를 할당하고 관리하는 기능
- 시스템 성능 향상을 위해 성능 지표를 고려하여 스케줄링 기법 선택
다중 프로그래밍
- 여러 개의 프로세스들을 동시에 운영하는 기법
- 시간 분할 기법
- 하나의 자원을 여러 프로세스들이 번갈아 사용하는 기법
- 대표적인 대상: 프로세서
- 프로세스 스케줄링
- 공간 분할 기법
- 하나의 자원을 분할하여 동시에 사용하는 기법
- 대표적인 대상: 주기억장치
OS에서 고려하게 되는 성능 지표
- 공평성
- 무기한 연기: 스케줄링 기법의 편향성에 의해 발생, 특정 프로세스가 계속해서 자원을 사용하지 못하고 무기한 대기
- 에이징 기법: 대기 시간이 경과할수록 대기하는 프로세스의 우선순위를 높여줌
- 작업 처리량
- 평균 응답 시간
- 대기시간
- 반환시간
- 자원 활용도
스케줄링 기법이 고려하는 항목
- 프로세스 우선순위
- 프로세스의 총 실행 시간
- 프로세스의 활용 목적
프로세스 스케줄링의 단계
장기 스케줄링
- 프로세스가 자원을 사용하는 시기를 결정하여 대기큐로 전달하는 작업으로 다소 느린 속도의 작업 계획
- 프로그램들이 주기억장치에 적재 시기를 결정하는 것과 같은 스케줄링
- FIFO(First-In-First-Out) 방식을 주로 사용
- 우선순위, 예측 수행 시간, 입출력 요구사항 등을 고려
- 시분할 시스템 등에서는 작업이 submit(제출)되는 즉시 커널에 등록
중기 스케줄링
- CPU가 여러 개일 때 CPU를 선택하는 기법
- 프로세스들에 대해 주기억장치 할당 순서 결정
- swap-in / swap-out
- OS의 기억장치 관리 기법에 의존적
단기 스케줄링
- process scheduling
- 준비 상태의 프로세스들에 대한 프로세서
- 할당(실행) 순서 결정
- 프로세스 스케줄러 또는 디스패처에 의해 수행됨
- 인터럽트가 발생하거나 실행중인 프로세스에 의해 system call이 발생하는 경우 수행됨
프로세스 스케줄링의 원칙
- 모든 프로세스들에게 공정하게 배정
- 단위 시간당 가능한 최대의 처리량
- 처리응답시간의 신속함
- 같은 종류 작업은 같은 비용
- 오버헤드 최소화
- 시스템 내 자원이 유휴시간 없도록 유지
- 프로세스의 무한 대기 상태가 없어야 함
- 프로세스의 상태를 파악하여 우선순위 부여
프로세스 제어블록(PCB)
- OS가 프로그램 실행 제어 및 관리에 필요한 정보
- 프로세스 생성 시 동시에 생성
- 상태변화(상태전이)에 대한 모든 정보
- 커널 공간 내에 존재
PCB의 내용
- 프로세스 고유 식별자
- 프로그램 카운터: 프로그램이 실행할 명령어의 주기억장치 위치
- 실행할 자원들
- 프로세스의 현 상태
- 우선순위
- 프로세스의 부모와 자식의 포인터
OS의 프로세스 작업
- 프로세스 생성
- 프로세스 제거
- 프로세스 지연(suspend)
- 프로세스 보류(block)
- 프로세스 재시작(resume)
- 프로세스 디스패치(dispatch)
- 프로세스 우선순위 할당 및 변경
프로세스 생성 시 작업
- 프로세스 고유식별자 부여
- PCB 생성
- 초기 우선 순위 부여
- 프로세스에 초기 필요 자원 할당
- 준비 리스트에 삽입
프로세스를 중단하고 재시작시키는 이유
- suspend / resume
- 시스템에 프로세스가 너무 많아 시스템의 부하를 줄이기 위함
- 일시적 부하를 줄인 후 다시 재시작
- 시스템의 기능에 이상 발생 시 정상 회복 후 재시작
- 중단된 프로세스 재시작 시 중단된 시점부터 재시작
- 중단된 프로세스는 다른 프로세스가 재시작 시켜줘야 함
- 서스펜드 된 준비 상태와 서스펜드 된 보류 상태
인터럽트 처리
- 인터럽트: 컴퓨터가 작업을 수행하는 중 내부 혹은 외부에서 예기치 않은 일
- SVC 인터럽트: 감시프로그램 호출
- 일반 사용자 프로그램이 생성
- 입출력 수행, 기억장치 할당, 오퍼레이터와의 대화 등에서 생성
- 운영체제 보호를 위해 생성
- 입출력(I/O)
- 입출력 하드웨어가 발생시킴
- CPU에게 채널이나 입출력기기의 상태변화를 알림
- 입출력에러, 입출력완료
- 입출력기기의 대기상태 시
- 외부 인터럽트
- 오퍼레이터가 인터럽트 키 입력 시
- 다중처리시스템에서 다른 CPU로부터 신호가 왔을 떄
- 재시작 인터럽트
- 재시작 버튼 클릭 시
- 다중처리시스템에서 다른 CPU로부터 재시작
- 명령신호 시
- 프로그램 검사 인터럽트
- 0으로 나누기
- 허용불가 명령 실행 시
- 오퍼레이션 코드를 잘못 사용 시
- 인터럽트 처리동작
- 운영체제가 제어권을 가짐
- 프로세스 상태를 PCB에 저장
- 인터럽트 분석 후 제어루틴으로 제어권을 줌
- 처리루틴의 작업 종료 후 이전 상태로 돌아감
인터럽트 처리 과정: 문맥교환
- 한 프로세스가 CPU를 다른 프로세스에게 할당 시 발생
- 프로세스 인터럽트 처리 루틴 프로세스 스케줄러
프로세스의 상태
Created State
- 작업(Job)을 커널에 등록
- PCB에 할당 및 프로세스 생성
- 커널: 가용 메모리 공간 체크 및 프로세스 상태 전이(Ready / Suspended Ready)
Ready State
- 프로세서 외에 다른 모든 자원을 할당 받은 상태
- Dispatch(or Schedule): Ready State > Running State
Running State
- 프로세서와 필요한 자원을 모두 할당 받은 상태
- Preemption
- Running > Ready
- 프로세서 스케줄링(시간 만료, 우선순위변경)
- Block/Sleep
- Running > Asleep
- I/O 등 자원 할당 요청
Blocked/Asleep State
- 프로세서 외에 다른 자원을 기다리는 상태
- 자원 할당은 System Call에 의해 이루어짐
- Wake-up: Asleep > Ready
Suspended State
- 메모리를 할당 받지 못한 상태로 메모리 상태를 swap device에 보관
- Swap Device: 프로그램 정보 저장을 위한 특별한 파일 시스템, 커널 또는 사용자에 의해 발생
- Swap-out(Suspended), Swap-in(Resume)
Terminated/Zombie State
- 프로세스 수행이 끝난 상태
- 모든 자원 반납 후, 커널 내에 일부 PCB 정보만 남아 있는 상태
- 이후 프로세스 관리를 위해 정보 수집