1 프로세스의 개념
프로그램과 프로세스의 차이를 알아보자.
프로그램은 하드디스크 같은 저장장치에 보관되어 있다가 실행된다.
폰노이만 구조에서 프로그램이 실행된다는 것은 해당 코드가 메모리에 올라와서 작업이 진행된다는 의미이다.
프로그램은 저장장치에 저장되어 있는 정적인 상태이고
프로세스는 실행을 위해 메모리에 올라온 동적인 상태이다.
3 프로그램에서 프로세스로의 전환
프로세스는 컴퓨터 시스템의 작업 단위로 태스크라고도 부른다.
운영체제는 프로그램을 메모리의 적당한 위치로 가져온다. 동시에 프로세스 제어 블록(PCB)을 만든다.
PCB에는 프로세스를 처리하는 데 필요한 다양한 정보가 있다.
대표적으로 프로세스 구분자(PID)와 메모리 관련 정보, 각종 중간값 등이 저장된다.
이런 정보들을 저장하는 구조가 프로세스 제어 블록이다.
이 프로세스 제어 블록은 해당 프로세스를 관리하는 데이터 구조이기 때문에 운영체제 영역에 만들어진다.
컴퓨터에는 일반 사용자의 사용자 프로세스와 운영체제의 커널 프로세스가 섞여서 실행된다.
4 프로세스의 상태
운영체제에서 여러 이유로 프로세스의 상태가 변화된다.
프로세스의 다섯 가지 상태
생성 상태 : 실행 준비를 완료한 상태이다. 프로그램이 메모리에 올라오고 운영체제로 부터 프로세스 제어 블록이 생성된다.
준비 상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태이다. 프로세스 제어 블록은 준비 큐에서 기다리며 CPU 스케줄러에 의해 관리된다. 준비 상태에서 실행 상태로 옮겨가는 것을 디스패치라고 하는데, CPU 스케줄러가 dispatch(PID) 명령을 통해 실행 상태로 옮긴다.
실행 상태 : 준비 상태에 있는 프로세스가 CPU를 얻어 실제 작업을 수행하는 상태. 실행 상태에 있는 프로세스는 일정 시간 동안만 작업할 수 있는데 그 시간을 다 쓰면 timeout(PID)명령을 통해 준비 상태로 옮긴다.
만약 작업을 완료하면 exit(PID)를 실행해 종료한다. 만약 입출력을 요청하면 block(PID)로 대기 상태로 옮긴다.
대기 상태 : 입출력이 완료될 때까지 기다리는 상태이다. 입출력이 완료되면 인터럽트가 발생하고 대기 상태에 있는 여러 프로세스 중 해당 인터럽트로 꺠어날 프로세스를 찾는데 wakeup(PID)를 통해 준비 상태로 이동한다.
완료 상태 : 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치고 프로세스 제어 블록을 폐기한다. exit()를 통해 처리한다.
오류나 비정상적으로 종료되는 강제종료(abort)를 만나면 디버깅하기 위해 강제 종료 직전의 메모리 상태를 저장장치로 옮기는데 이를 코어 덤프(core dump)라고 한다. 코어 덤프를 통해 종료 직전의 메모리 상태를 확인해서 오류를 수정할 수 있게 한다.
휴식 상태와 보류 상태
휴식 상태 : 프로세스가 작업을 일시적으로 쉬고 있는 상태. ctrl+z를 누르면 휴식 상태에 들어간다. 재시작을 통해 다시 실행될 수 있다.
보류 상태 : 메모리에서 잠시 쫓겨난 상태로 일시 정지 상태라고도 불린다.
메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 보내거나, 프로그램에 오류가 있을 때, 바이러스 프로세스라고 판단될 떄 등 여러 이유로 보류 상태로 전환된다.
보류 상태에 들어간 프로세스는 메모리 밖으로 쫓겨나 스왑 영역에 보관된다.
보류 상태는 대기 상태에서 옮겨진 보류 대기 상태와 준비 상태에서 옮겨진 보류 준비 상태로 구분된다. 각 상태에서 재시작하면 원래의 활성 상태로 들어간다.
보류 대기 상태에서 입출력이 완료되면 보류 준비 상태로 옮겨간다.
'프로그래밍 이론 & 책 > 운영체제' 카테고리의 다른 글
[운영체제] 3.3 프로세스의 연산 (0) | 2020.05.22 |
---|---|
[운영체제] 3.2 프로세스 제어 블록(PCB)와 문맥 교환(Context Switch) (0) | 2020.05.22 |
[운영체제] 2.4 병렬 처리 (0) | 2020.05.21 |
[운영체제] 2.3 컴퓨터 성능 향상 기술 (0) | 2020.05.21 |
[운영체제] 2.2 CPU와 메모리 (0) | 2020.05.21 |