///////
Search
1️⃣

연습문제 1 ~ 5

1. 프로그램이 프로세스가 되려면 운영체제로부터 무엇을 받아야 하는가?

프로그램 vs 프로세스
1.
프로그램
a.
저장장치에 저장되어 있는 정적인 상태
b.
어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적은 것
2.
프로세스
a.
실행을 위해 메모리에 올라온 동적인 상태
b.
프로그램으로 작성된 작업 절차를 실제로 실행에 옮기는 것
→ 누군가 작성한 프로그램이 실행되면 프로세스가 된다.
프로그램에서 프로세스로의 전환
1.
운영체제는 프로그램을 메모리의 적당한 위치로 가져온다.
2.
그와 동시에 작업 지시서인 프로세스 제어 블록(Process Control Block) 만든다.
3.
이 프로세스 제어 블록에는 프로세스를 처리하는 데 필요한 다양한 정보가 들어있다.
즉, 프로그램이 프로세스로 전환되었다는 것은 운영체제로부터 프로세스 제어 블록을 받았다는 의미
프로세스 제어 블록에 담겨 있는 정보
1.
프로세스 구분자 : 프로세스 구분을 위함
2.
메모리 관련 정보 : 실행하려는 프로세스가 메모리의 어디에 저장되어 있는지에 대한 위치 정보
3.
각종 중간값

2. 프로세스의 상태 중 CPU를 할당받기 위해 기다리는 상태는 무엇인가?

준비 상태
그 전에, 생성 상태부터 확인
생성 상태 : 프로그램이 메모리에 올라오고 운영체제로부터 프로세스 제어 블록을 할당받은 상태
→ 이렇게 생성된 프로세스가 바로 실행되는 것이 아니라 준비 상태에서 자기 순서를 기다림
준비 상태
실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태
프로세스 제어 블록은 준비 큐에서 기다리다가 CPU 스케줄러의 dispatch(PID) 명령에 의해 실행 상태로 바뀌어 작업 진행됨
PID? : 프로세스 구분자

3. 프로세스의 상태 중 입출력 작업을 하기 위해 이동하는 상태는 무엇인가?

대기 상태
기존 생성, 준비, 실행, 완료의 4가지 상태만으로도 작업 진행에 무리가 없었으나 오늘날 운영체제의 효율성을 고려하여 추가된 상태
실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
→ CPU 스케줄러는 준비 상태에 있는 프로세스 중 하나를 가져다 실행 상태로 만듬
wait status
대기 상태의 프로세스는 입출력장치별로 마련된 큐에서 대기
입출력이 완료되면 인터럽트 발생, 대기 상태에 있는 여러 프로세스 중 wakeup(PID)를 통해 해당 인터럽트로 깨어날 프로세스를 찾음
찾게 되면 해당 프로세스의 프로세스 제어 블록이 준비 상태로 이동
즉, 어떤 프로세스가 대기 → 준비 상태로 이동하는 것은 인터럽트 때문이다.
만약, 대기 상태가 없다면…
프로세스가 입출력을 요구하면 CPU가 직접 데이터를 가져오지 않고 입출력 관리자에게 명령함
이 상태에서 요청한 작업이 끝날 때까지 다음 작업 수행 불가
CPU도 아무 작업을 하지 않고 기다리게 되는 비효율성

4. CPU 스케줄러가 준비 상태에 있는 프로세스 중 하나를 골라 CPU를 할당하는 작업을 무엇이라고 하는가?

디스패치(dispatch)
준비 상태에 있는 여러 프로세스 중 다음에 실행할 프로세스를 선정하는 일은 CPU 스케줄러가 담당한다.
CPU 스케줄러준비 상태의 있는 맨 앞에 있는 프로세스 제어 블록을 CPU에 전달한다.
이 때, 준비 상태의 프로세스 중 하나를 골라 실행 상태로 바꾸는 작업을 디스패치라 한다.
즉, 어떤 프로세스가 대기 → 준비 상태로 이동하는 것은 인터럽트 때문이다.는

5. 유닉스에서 Ctrl + Z 키를 눌러 프로세스가 중단되면 프로세스는 어떤 상태로 바뀌는가?

휴식 상태
1.
활성 상태 : 생성, 준비, 실행, 대기, 완료
2.
휴식, 보류 대기 상태, 보류 준비 상태
휴식 상태
프로세스가 작업을 일시적으로 쉬고 있는 형태
종료된 것이 아니라 실행을 잠시 멈춘 상태
사용하던 데이터가 메모리에 그대로 존재하고, 프로세스 제어 블록도 유지된다.
멈춘 지점에서부터 재시작할 수 있다.
fg, bg 를 입력하면 다시 시작
Ctrl + C 를 누르면 프로세스 종료