프로그램
- 저장장치에 저장되어 있는 정적인 상태
프로세스
- 실행을 위해 메모리에 올라온 동적인 상태
프로세스와 프로그램이 관계
- 프로그램이 프로세스가 된다는 것은 운영체제로부터 프로세스 제어 블록는 얻는다는 뜻
- 프로세스가 종료된다는 것은 해당 프로세스 제어 블록이 폐기된다는 뜻
더보기
프로세스 = 프로그램 + 프로세스 제어 블록
프로그램 = 프로세스 - 프로세스 제어 블
프로세스 제어 블록 (PCB)
- 프로세스를 실행하는 데 필요한 정보를 보관하는 자료 구조
- 프로세스는 고유의 프로세스 제어 블록을 가짐 ( 프로그램 + 프로세스 제어 블록 = 프로세스)
- 프로세스 생성 시 만들어져서 프로세스가 실행을 완료하면 폐기 ( 프로세스 - 프로세스 제어 블록 = 프로그램 )
문맥 교환
- CPU를 차지하던 프로세스가 나가고 새로운 프로세스를 받아들이는 작업
- 실행 상태에서 나가는 프로세스 제어 블록에는 지금까지의 작업 내용을 저장하고, 반대로 실행 상태로 들어오는 프로세스 제어 블록의 내용으로 CPU가 다시 세팅
프로세스의 네 가지 상태
- 생성 상태 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태
- 준비 상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
- 실행 상태 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
- 완료 상태 : 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 진입하는 상태
- 디스패치 : 준비 상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 CPU 스케줄러의 작업
- 타임아웃 : 프로세스가 자신에게 주어진 하나의 타임 슬라이스 동안 작업을 끝내지 못하면 다시 준비 상태로 돌아감
프로세스의 다섯 가지 상태
생성 상태
- 프로그램이 메모리에 올라오고 운영체제로부터 PCB를 할당받은 상태
준비 상태
- 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태
- PCB는 준비 큐에서 기다리며 CPU 스케줄러에 의해 관리
- CPU 스케줄러는 준비 상태에서 큐를 몇 개 운영할지, 큐에 있는 어떤 프로세스의 프로세스 제어 블록을 실행 상태로 보낼지 결정
- CPU 스케줄러가 어떤 프로세스 제어 블록을 선택하는 작업은 dispatch(PID) 명령으로 처리
- CPU 스케줄러가 dispatch(PID)를 실행하면 해당 프로세스가 준비 상태에서 실행 상태로 바뀌어 작업이 이루어짐
실행 상태
- 프로세스가 CPU를 할당 받아 실행되는 상태
- 자신에게 주어진 시간, 타임 슬라이스 동안만 작업 가능
- 시간을 다 사용하면 timeout(PID)가 실행되어 준비 상태로 옮겨짐
- 실행 상태 동안 작업이 완료되면 exit(PID)가 실행되며 종료
- 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block(PID)를 실행
- block(PID)는 입출력이 완료될 때까지 작업을 진행할 수 없기 때문에 해당 프로세스를 대기 상태로 옮기고 CPU 스케줄러는 새로운 프로세스를 실행 상태로 가져
대기 상태
- 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
- 대기 상태의 프로세스는 입출력장치별로 마련된 큐에서 기다리다가 완료되면 인터럽트가 발생하고, 대기 상태에 있는 여러 프로세스 중 해당 인터럽트로 깨어날 프로세스를 찾는데 이것이 wakeup(PID)
- wakeup(PID)로 해당 프로세스 제어 블록이 준비 상태로 이동
완료 상태
- 프로세스가 종료되는 상태
- 코드와 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록을 폐기
- 정상적인 종료는 간단히 exit()로 처리
- 오류나 비정상적으로 종료되는 강제 종료를 만나면 디버깅하기 위해 종료 직전의 메모리 상태를 저장 장치로 옮기는데 이를 코어 덤프(core dump)라고
상태 | 설명 | 직업 |
생성 상태 | 프로그램을 메모리에 가져와 실행 준비가 완료된 상태 | 메모리 할당, 프로세스 제어 블록 생성 |
준비 상태 | 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태 | dispatch(PID) : 준비 -> 실행 |
실행 상태 | 프로세스가 타임 슬라이스를 얻어 CPU를 사용하는 상태 (문맥 교환이 일어남) | timeout(PID) : 실행 -> 준비 exit(PID) : 실행 -> 완료 block(PID) : 실행 -> 대기 |
대기 상태 | 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태. | wakeup(PID) : 대기 -> 준비 |
완료 상태 | 프로세스가 종료된 상태, 사용하던 모든 데이터가 정리되며 정상 종료 exit와 비정상 정료 abort를 포함 | 메모리 삭제, 프로세스 제어 블록 삭 |
쉽게 배우는 운영체제 | 조성호 - 교보문고 (kyobobook.co.kr)
'Operating system' 카테고리의 다른 글
스레드 (thread) (0) | 2023.04.23 |
---|---|
프로세스의 구조 , 복사 (fork), 전환(exec) (0) | 2023.04.23 |
인터럽트 (0) | 2023.04.22 |
캐시 (1) | 2023.04.22 |
메모리 (Memory) (0) | 2023.04.20 |