프로그램과 프로세스
프로그램 vs 프로세스
- 프로그램
- 저장장치에 저장되어 있는 정적인 상태
- 어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적은 것
- 프로세스
- 실행을 위해 메모리에 올라온 동적인 상태
- 프로그램으로 작성된 작업 절차를 실제로 실행에 옮기는 것
→ 누군가 작성한 프로그램이 실행되면 프로세스가 된다.
❓프로그램에서 프로세스로의 전환
- 운영체제는 프로그램을 메모리의 적당한 위치로 가져온다.
- 그와 동시에 작업 지시서인 프로세스 제어 블록(Process Control Block) 만든다.
- 이 프로세스 제어 블록에는 프로세스를 처리하는 데 필요한 다양한 정보가 들어있다.
✅ 즉, 프로그램이 프로세스로 전환되었다는 것은 운영체제로부터 프로세스 제어 블록을 받았다는 의미
➕ 프로세스 제어 블록에 담겨 있는 정보
- 프로세스 구분자 : 프로세스 구분을 위함
- 메모리 관련 정보 : 실행하려는 프로세스가 메모리의 어디에 저장되어 있는지에 대한 위치 정보
- 각종 중간값
프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태
✅ 준비 상태
그 전에, 생성 상태부터 확인
➕ 생성 상태 : 프로그램이 메모리에 올라오고 운영체제로부터 프로세스 제어 블록을 할당받은 상태
→ 이렇게 생성된 프로세스가 바로 실행되는 것이 아니라 준비 상태에서 자기 순서를 기다림
준비 상태
- 실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태
-
프로세스 제어 블록은 준비 큐에서 기다리다가 CPU 스케줄러의 dispatch(PID) 명령에 의해 실행 상태로 바뀌어 작업 진행됨
❓ PID? : 프로세스 구분자
프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태
✅ 대기 상태
기존 생성, 준비, 실행, 완료의 4가지 상태만으로도 작업 진행에 무리가 없었으나 오늘날 운영체제의 효율성을 고려하여 추가된 상태
-
실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
→ CPU 스케줄러는 준비 상태에 있는 프로세스 중 하나를 가져다 실행 상태로 만듬
- wait status
- 대기 상태의 프로세스는 입출력장치별로 마련된 큐에서 대기
- 입출력이 완료되면 인터럽트 발생, 대기 상태에 있는 여러 프로세스 중 wakeup(PID)를 통해 해당 인터럽트로 깨어날 프로세스를 찾음
- 찾게 되면 해당 프로세스의 프로세스 제어 블록이 준비 상태로 이동
‼️즉, 어떤 프로세스가 대기 → 준비 상태로 이동하는 것은 인터럽트 때문이다.
🚨 만약, 대기 상태가 없다면…
- 프로세스가 입출력을 요구하면 CPU가 직접 데이터를 가져오지 않고 입출력 관리자에게 명령함
- 이 상태에서 요청한 작업이 끝날 때까지 다음 작업 수행 불가
- CPU도 아무 작업을 하지 않고 기다리게 되는 비효율성
CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업
✅ 디스패치(dispatch)
준비 상태에 있는 여러 프로세스 중 다음에 실행할 프로세스를 선정하는 일은 CPU 스케줄러가 담당한다.
CPU 스케줄러는 준비 상태의 있는 맨 앞에 있는 프로세스 제어 블록을 CPU에 전달한다.
이 때, 준비 상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 작업을 디스패치라 한다.
‼️즉, 어떤 프로세스가 대기 → 준비 상태로 이동하는 것은 인터럽트 때문이다.는
유닉스에서 Ctrl + Z
키를 눌러 프로세스가 중단되면 프로세스의 상태
✅ 휴식 상태
- 활성 상태 : 생성, 준비, 실행, 대기, 완료
- 휴식, 보류 대기 상태, 보류 준비 상태
휴식 상태
- 프로세스가 작업을 일시적으로 쉬고 있는 형태
- 종료된 것이 아니라 실행을 잠시 멈춘 상태
- 사용하던 데이터가 메모리에 그대로 존재하고, 프로세스 제어 블록도 유지된다.
- 멈춘 지점에서부터 재시작할 수 있다.
fg
,bg
를 입력하면 다시 시작
➕ Ctrl + C
를 누르면 프로세스 종료
Leave a comment