3-1.[os] 프로세스의 개요
프로세스:
- 하나의 작업 단위
- 마우스를 더블클릭하여 프로그램을 실행하면 그 프로그램은 프로세스가 된다.
프로그램: 저장장치에 저장되어있는 정적인 상태 - 레시피
프로세스: 실행을 위해 메모리에 올라온 동적인 상태 - 요리
일괄 작업 방식
- 한번에 하나의 작업만 처리
- 테이블이 하나 밖에 없음
- 손님이 식사를 마치고 나간 후에야 다음 손님 받을 수 있음
- 손님이 식사하는 동안 쉬는 시간이 생김
- 큐 : 먼저 들어온 주문서가 먼저 처리됨
시분할 방식의 요리
- 시간을 절약하기 위해 손님이 식사하는 동안 다른 손님의 요리를 만들어야한다
- CPU가 시간을 쪼개어 여러 프로세스에 적당히 배분해 동시에 실행하는 것처럼 느껴진다
- 주문 받은 코스 요리 중 단품 요리 하나를 만든 후 그 주문서를 주문 목록의 맨 뒤로 옮긴다. 다음 주문서를 가져다가 단품 요리를 만든다.
예상치 못한 상황처리
- 새우튀김을 해야하는데 새우가 아직 손질되지 않았다면?
- 대기 목록으로 보내고 다른 주문서를 가져와 요리한다
- 손질이 끝났다면?
- 바로 새우튀김을 시작하지 않고 주문 목록으로 이동해 순서를 기다리게 한다
- 손님이 급한 볼일 보느라 음식을 천천히 달라고 한다면?
- 언제 요청할지 모르므로 보류 목록으로 옮긴다
- 손님이 요청하면 주문 목록으로 보낸다
- 손님이 가버리면 주문서를 폐기한다
보류 목록: 언제 다시 시작될지 모르고 중간에 그만둘 수도 있는 곳
프로그램에서 프로세스로의 전환
- 프로세스 = 태스크
프로세스 제어 블록(Process Control Block, PCB):
- 작업 지시서
프로세스 구분자
- 메모리에는 여러 개의 프로세스가 존재함 각 프로세스를 구분하는 구분자 필요
메모리 관련 정보
- CPU는 실행하려는 프로세스가 메모리의 어디에 저장되어 있는지 알아야 작업 가능
- 프로세스의 메모리 위치 정보
- 메모리 보호를 위한 경계 레지스터와 한계 레지스터도 포함
각종 중간값
- 중간값: 중간까지 작업한 위치
- 다음에 작업해야할 코드의 위치가 담긴 레지스터인 프로그램 카운터가 저 장
프로세스= 프로그램+프로세스 제어 블록
프로그램= 프로세스- 프로세스 제어 블록
하나의 프로세스를 실행하려면 프로세스 구분자, 메모리 관련 정보, 프로그램 카 운터와 각종 레지스터 같은 중간값을 관리해야 하며, 이러한 정보를 보관하는 데이터 구조가 프로세스 제어 블록
프로세스가 종료되면 프로세스가 메모리에서 삭제되고 프로세스 제어블록도 폐기
프로세스의 4가지 상태
생성 상태(create status): 프로세스가 메모리에 올라와 실행 준비를 완료한 상태
- 프로세스를 관리하는 데 필요한 프로세스 제어 블록이 생성된다.
준비 상태(eady status): 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
- CPU가 하나인 컴퓨터에서는 한 번에 하나의 프로세스만 실행할 수 있기 때문에 자기 실행 순서가 될 때까지 준비 상태에서 기다림
실행 상태(running status, execute status): 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
- 실행 상태에 들어간 프로세스는 일정 시간 동안 CPU를 사용할 권리를 갖는다.
- 만약 다 못끝내면 프로세스는 준비 상태로 돌아와 다음 차례를 기다림.
- 준비 상태와 실행 상태를 왔다갔다 함
완료상태(terminate status) : 작업을 마치면 완료 상태
- 프로세스 제어 블록이 사라진 상태
CPU 스케줄러: 여러 프로세스 중 다음에 실행할 프로세스를 선정함
- 준비 상태의 맨 앞에서 기다리고 있는 프로세스 제어 블록을 CPU에 전달
타임 슬라이스 / 타임 퀀텀: 프로세스에 배당된 작업 시간
디스패치: 준비 -> 실행
타임아웃: 실행 -> 준비
프로세스의 5가지 상태
생성상태 -> 준비상태 -> 실행상태 -> 대기상태 -> 완료상태
생성 상태: 프로그램이 메모리에 올라오고 운영체제로부터 프로세스 제어 블록을 할당 받은 상태 준비 상태: 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태
실행 상태: 프로세스가 CPU를 할당받아 실행되는 상태
대기 상태: 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
완료 상태: 프로세스가 종료되는 상태
- 활성 상태: 생성, 준비, 실행, 대기,완료
- 휴식 상태: 프로세스가 작업을 일시적으로 쉬고 있는 상태
- 보류 상태: 프로세스가 메모리에서 잠시 쫓겨난 상태
- 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때
- 프로그램에 오류가 있어서 실행을 미루어야할 때
- 바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때
- 매우 긴 주기로 반복되는 프로세스라 메모리 밖으로 쫓아내도 큰 문제가 없을 때
- 입출력을기다리는프로세스의 입출력이 계속 지연될 때
스왑 영역:
- 보류 상태에 들어간 프로세스는 메모리 밖으로 쫓겨나 스왑 영역에 보관
- 메모리에서 쫓겨난 데이터가 임시로 보관되는 곳
- 보류 상태는 스왑 영역에 있는 상태이고 휴식 상태는 프로세스가 메모리에 있으나 멈춘 상태