정보처리기사/프로그래밍 언어 활용
운영체제 3
RangA
2023. 5. 31. 10:51
02. 프로세스 관리
01. 프로세스(Process)
1) 프로세스
- 프로세스의 개념
- 디스크에 존재하는 프로그램 파일이 주기억 장치에 적재되어 CPU에 의해서 실행 과정에 있는 상태
- 프로세스의 정의
- CPU에 의해서 현재 실행되고 있는 프로그램
- PCB의 존재로서 명시되는 것
- PCB : 운영체제 내에서 한 프로세스의 존재를 정의하는 것으로, 여러 개의 프로세스를 수행하는 다중 프로그래밍 환경하에서 각 프로세스를 구분하기 위한 프로세서 제어 블록
- 프로세서(CPU)가 할당되는 개체로서 디스패치가 가능한 단위
- 디스패치 : 준비 상태에서 대기하고 있는 프로세스 중 하나가 CPU를 할당 받아 실행 상태로 변하는 시점
- 지정된 결과를 얻기 위한 일련의 계통적 동작
- 목적 또는 결과에 따라 발생되는 사건들의 과정
- 비동기적 행위를 일으키는 주체
- 프로시저과 활동 중인 것
- 실행 중인 프로시저의 제어 궤적
- 궤적 : 프로세스가 한 시점만을 의미하는 것이 아닌, 이미 실행했거나 실행할 범위까지도 포함한다는 것
- CPU가 할당되는 실체
2) 프로세스 상태 전이도
- 프로세스 주요 상태
- 준비(Ready) 상태 : 준비 상태에 있는 여러 프로세스 중 프로세스를 선택하여 CPU에 할당하는 시점
- 실행(Run) 상태 : 프로세스가 CPU를 차지하고 있음
- 보류(Block, 대기) 상태 : 처리 속도가 느린 I/O 작업 중인 상태
- 상태 전이
- 디스패치(Dispatch) : 준비 상태에서 대기하고 있는 프로세스 중 하나가 CPU를 할당 받아 실행 상태로 변하는 시점
- Time run out(할당 시간 종료) : 자신에 할당된 시간만큼 CPU를 사용하고 준비 상태로 변하는 시점
- I/O 요구 : 프로세스가 CPU를 사용 중에 I/O 행위가 필요하여 보류 상태로 이동하는 시점
- Wake up : I/O 작업이 완료되어 준비 상태로 이동하는 시점
- Suspend : 보류 상태에서 운영체제에 의해 일시적으로 벗어나는 상태
- Resume : Suspended에서 프로세스 활성화 상태로 다시 복귀하는 것
- 장치 및 기술
- 스풀(Spool)
- 입출력 장치와의 속도 차를 극복하기 위한 장치로 대부분 하드디스크가 중재함
- 스풀은 영역, 스풀링은 행위 자체, 스풀러(Spooler)는 프로그램
- 버퍼링(Buffering)
- CPU와 입출력 장치와의 속도 차를 줄이기 위해 메모리가 중재함
- 채널(Channel)
- 입출력만을 담당하는 소형 CPU로 간단한 명령 구조와 레지스터를 가지고 있으며 입출력 장치와 통신하기 위한 간단한 장치로 구성되어 있음
- 스풀(Spool)
- 프로세스의 자원 이용 순서
- 요청 : 프로세스는 특정 자원을 사용하기 전에 운영체제에 지원을 요청함
- 사용 : 프로세스가 요청한 자원을 운영체제가 할당하면 자원을 사용함
- 해제 : 프로세스는 사용한 자원은 다른 프로세스를 위해서 자원 사용을 해제함
3) 인터럽트 처리(Interrupt Processing)
1. 인터럽트 처리
- 프로세스가 수행 중에 다른 프로세스를 수행하기 위하여 현재 수행 중인 프로세스를 중단하거나 외부 입력 장치에 의해 프로세스가 중단되는 상태
- 사용자에 의해서 새로운 프로그램이 실행될 때, 현재 실행 중인 프로세스의 상태를 잠시 중단하고, 새로운 프로그램을 실행시키는 과정으로, 잠시 중단한 프로세스의 상태는 다시 실행을 시작하기 위해 중단되었던 시점의 정보를 잠시 저장함
- 인터럽트는 입출력 연산, 하드웨어 실패, 프로그램 오류 등에 의해서 발생함
- 인터럽트가 발생한 경우, 진행 중인 프로그램의 재개(Resume)에 필요한 레지스터 문맥(Register Context)을 저장함
2. 인터럽트 처리를 위한 작업 순서
- 인터럽트가 발생하면 운영체제가 제어권을 받음
- 운영체제는 인터럽트가 걸린 현재의 프로세스 상태를 저장함
- 운영체제는 인터럽트의 발생 원인을 찾아 저장되어있는 루틴으로 제어권을 넘겨줌
- 인터럽트 처리 루틴이 인터럽트를 처리함
- 인터럽트가 걸렸던 이전 프로세스의 상태로 복구됨
- 인터럽트가 걸렸던 시점 이후부터 프로세스가 실행됨
3. 인터럽트의 종류
- SVC(SuperVisor Call) 인터럽트
- 프로세스 관리 호출, 기억 장치 할당 루틴 호출, 입출력 수행 루틴 호출 시에 발생하는 인터럽트로 사용자가 새로운 프로그램을 실행할 때 발생함
- 새로운 프로그램을 실행하는 것은 사용자와 운영체제가 정보 교환을 하므로 오퍼레이터와의 대화 시에 발생하는 인터럽트라고도 함
- 입출력(I/O) 인터럽트
- 하드웨어적 인터럽트로 프린트나 디스크 저장 시에 입출력 채널 확인, 준비, 할당, 완료 시에 발생함
- 외부(Extern) 인터럽트
- 여러 개의 프로세스가 운영되는 다중 프로그래밍 기법에서 임의의 프로세스는 CPU를 사용하기 위한 일정한 시간 간격이 있는데, 이를 시간 할당량이라고 함
- 임의의 프로세스는 운영체제에 의해서 시간 할당량이 확인되며, 운영체제가 관리하는 인터럽트 시계(타이머)에 의해서 해당 프로세스가 종료되는데, 이때 발생하는 인터럽트가 외부 인터럽트
- 재시작(Restart) 인터럽트
- 사용자가 Ctrl + Alt + Del 키를 입력하거나 Reset 버튼을 이용하여 시스템을 재부팅하는 경우에 발생함
- 프로그램 검사(Program Check) 인터럽트
- 실행 중인 프로그램에서 오버플로우, 언더플로우, 분모가 0인 나눗셈을 처리하는 경우 발생함
- 기계 검사(Machine Check) 인터럽트
- 컴퓨터 시스템의 고장으로 발생함
4. 인터럽트의 특징
- 컴퓨터 시스템에 비상사태가 발생할 때 그 처리를 위해서 인터럽트가 필요함
- 프로그램의 착오는 하드웨어의 기능에 의해 정해진 인터럽트 처리 루틴에 따라 복구되어야 함
- 인터럽트가 발생되면 CPU는 현재 실행 중인 명령을 마친 후 CPU의 상태를 보관함
- 상태를 보관 : 인터럽트가 발생하면 현재 작업 중이던 상태를 저장해야 나중에 복귀했을 때 이어서 처리할 수 있음
- 연산 오류가 발생할 경우에 인터럽트가 발생함
- 메모리 보호 구역에 접근을 시도하는 경우에 인터럽트가 발생함
- 입출력이 완료되었을 때 인터럽트가 발생함
- 인터럽트 요구를 처리하는 서비스 프로그램의 시작 주소는 다음 수행할 명령어의 번지를 기억하고 있는 레지스터인 프로그램 계수기(PC)에 기억시킴
5. 인터럽트 동기
- 동기 인터럽트(Synchronous Interrupt)
- 명령어 실행 중 CPU에 의해 처리되는 인터럽트로 하나의 명령어가 종료된 후 인터럽트가 발생함
- 프로세스가 실행 중에 0으로 나누기를 할 때 발생하는 인터럽트, 프로세스 내 명령어 실행 때문에 발생하는 인터럽트, 프로세스 내 명령어가 보호 메모리 영역을 참조할 때 발생하는 인터럽트 등을 말함
- 비동기 인터럽트(Asynchronous Interrupt)
- 다른 하드웨어 장치가 CPU 클럭 시그널과 상관없이 생성하는 인터럽트
- 키보드 혹은 마우스를 사용할 때 발생하는 것과 같은 인터럽트를 말함
6. 트랩(Trap)
- 프로세스가 특정 시스템 기능을 사용하려고 할 때 그 기능을 운영체제에 요청하는 방법
- 인터럽트 중에 소프트웨어적 인터럽트를 트랩이라고 할 수 있음
- 인터럽트나 트랩이 발생하면 프로그램 카운터(PC)를 정해진 특정 번지로 변경하여 정해진 처리 루틴을 수행하게 함
4) PCB(Process Control Block)
1. PCB 정의
- PCB는 운영체제 내에서 한 프로세스의 존재를 정의함
- 여러 개의 프로세스를 수행하는 다중 프로그래밍 환경 하에서 각 프로세스를 구분하기 위한 프로세스 제어 블록
- PCB 테이블은 프로세스들의 현재 상태를 기록한 정보 테이블이며 각 프로세스의 주기억 장치에 적재된 기억 장치 위치 혹은 포인터와 식별자 등이 PCB 항목에 기록됨
2. PCB 항목
- 프로세스 식별자
- 프로세스 현재 상태
- 프로그램 카운터(계수기)
- 프로세스 우선순위
- 프로세스가 적재된 기억 장치 부분을 가리키는 포인터
- 프로세스에 할당된 자원을 가리키는 포인터
- 중앙 처리 장치 레지스터 정보
- CPU의 각종 레지스터 상태를 가리키는 포인터
- 계정 정보(시간 할당량)
- 기억 장치 관리 정보
- 입출력 정보
- 부모 프로세스를 가리키는 포인터
- 자식 프로세스를 가리키는 포인터
3. 프로세스 생성 과정
- 새로운 프로세스를 위한 프로세스 식별자를 할당함
- 새로운 프로세스를 위한 주소 공간과 프로세스 제어 블록(PCB)을 할당함
- 새로운 프로세스의 프로세스 제어 블록을 초기화함
- 새로운 프로세스를 스케줄링 큐의 준비 또는 준비/보류 리스트에 연결함
5) 문맥 교환(Context Switching)
- 문맥 교환의 정의
- 다중 프로그래밍 시스템에서 운영체제에 의하여 CPU가 할당되는 프로세스를 변경하기 위하여 현재 CPU를 사용하여 실행되고 있는 프로세스의 상태 정보를 저장하고, 앞으로 실행될 프로세스의 상태 정보를 설정한 다음에 CPU를 할당하여 실행하도록 하는 작업
- 인터럽트가 발생한 경우, 진행 중인 프로그램의 재개에 필요한 레지스터 문맥을 저장함
- 시간 할당량 크기에 따른 문맥 교환수, 인터럽트 횟수, 오버헤드
- 여러 개의 프로세스가 CPU를 차지하는 시간 길이를 시간 할당량이라고 함
- 시간 할당량이 적으면 적을수록 여러 개의 프로세스가 동시에 수행되는 느낌이 들 수 있지만 그에 따른 문맥 교환수, 인터럽트 횟수, 오버헤드는 증가함
시간 할당량 | 문맥 교환수 | 인터럽트 횟수 | 오버헤드 |
---|---|---|---|
작음 | 증가함 | 증가함 | 증가함 |
큼 | 감소함 | 감소함 | 감소함 |