<쉽게 배우는 운영체제> 교재를 참고하였습니다.
프로세스의 개념
- 프로그램 : 저장장치에 저장되어 있는 정적인 상태
- 프로세스 : 실행을 위해 메모리에 올라온 동적인 상태
더보기
- 운영체제에서 프로세스는 하나의 작업단위임.
- 프로그램과 프로세스 : 자신만의 메모리 영역이 있음을 의미함.
- 따라서, 우리가 작성한 프로그램이 실행되면 프로세스가 됨.
프로그램에서 프로세스로의 전환
더보기
- 시분할 방식에서 프로그램이 프로세스로 전환될 때, 먼저 OS는 프로그램을 메모리의 적당한 위치로 가져옴. 그 다음 작업지시서 생성, 이 작업지시서가 프로세스제어블록 (Process Control Block : PCB)
- PCB는 프로세스를 처리하는데 필요한 다양한 정보가 들어있음
- PCB가 없으면 프로그램이 프로세스로 전환되지 못함.
- 프로세스가 된다는 것은 OS로부터 PCB를 할당받았다는 것
- 프로세스 제어 블록 (Process Control Block, PCB)
- 운영체제가 해당 프로세스를 위해 관리하는 자료 구조
- 프로세스 구분자 : 각 프로세스를 구분하는 구분자
- 메모리 관련 정보 : 프로세스의 메모리 위치 정보
- 각종 중간값 : 프로세스가 사용했던 중간값
- 운영체제가 해당 프로세스를 위해 관리하는 자료 구조
더보기
- PCB에 있는 주요정보 :
- 프로세스구분자 (Process IDentification, PID) : 메모리에는 여러 개의 프로세스가 존재하므로 각 프로세스를 구분하는 프로세스구분자가 필요함
- 메모리 관련정보 : CPU는 실행하려는 프로세스가 메모리 어디에 저장되어 있는지 알아야 작업을 할 수 있음. 이를 위해서 PCB에는 프로세스의 메모리 위치 정보(주소)가 있음. 이에 더해서, 메모리 보호를 위해 경계 레지스터와 한계 레지스터도 포함됨.
- 각종 중간값 : 프로세스 제어블록(PCB)에는 프로세스가 사용했던 중간값이 저장됨. 시분할 시스템에서는 여러 프로세스가 교대로 실행되기 때문에 각 프로세스는 일정 시간 작업을 한 후 다른 프로세스에 CPU를 넘겨줌.
- 프로세스 A가 110번행까지 작업한 후 다른 프로세스에 CPU를 넘겨주었다고 가정하면, 시간이 지나서, 다시 프로세스 A의 차례가 되면 111번행부터 작업을 시작해야 함. 이런 작업을 위해, PCB에는 다음에 작업해야 할 코드의 위치가 담긴 레지스터인 프로그램 카운터가 저장됨.
- 또한 작업의 중간값을 보관할 수 있는 다른 레지스터도 함께 저장됨.
- 이렇게 하나의 프로세스를 실행하려면 프로세스구분자, 메모리 관련정보, 프로그램 카운터 및 각종 레지스터 같은 중간값을 관리해야 하며, 이런 정보들을 보관하는 데이터 구조가 PCB이다.
- 다시 말해, 프로그램이 프로세스가 되려면 메모리에 올라오는 것과 동시에 PCB가 생성되어야 함.
- PCB는 OS가 해당 프로세스를 위해 관리하는 데이터 구조이기 때문에 OS영역에 생성됨.
- 또한, 프로세스가 종료되면 프로세스가 메모리에서 삭제되고, PCB도 폐기됨.
- 프로세스와 프로그램의 관계
- 프로그램이 프로세스가 된다는 것은 운영체제로부터 프로세스 제어 블록(PCB)을 얻는다는 뜻
- 프로세스가 종료된다는 것은 해당 프로세스 제어 블록(PCB)이 폐기된다는 뜻
프로세스의 상태
- 프로세스의 네 가지 상태
- 생성 상태 : 프로세스가 메모리에 올라와 실행 준비를 완료한 상태
- 준비 상태 : 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
- 실행 상태 : 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태
- 완료 상태 : 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 진입하는 상태 (프로세스 제어 블록이 사라진 상태)
더보기
- 생성상태 : 프로세스를 관리하는데 필요한 PCB 생성됨
(큐에서 자기 순서를 기다림) - 준비상태 : CPU가 하나인 컴퓨터에서는 한 번에 하나의 프로세스만 실행할 수 있기 때문에 자기 실행 순서가 될 때까지 준비 상태에서 기다려야 함.
- 실행상태 : 실행 상태로 진입한 프로세스는 일정 시간 동안 CPU를 사용할 권리를 갖는다. 만약 할당 받은 시간을 모두 사용하고도 작업이 끝나지 않았다면, 프로세스는 준비 상태로 되돌아가서 다음 순서를 기다림. 프로세스는 자신의 작업이 종료될 때까지 준비상태와 실행상태를 왔다갔다 함.
- 완료상태
- 디스패치 : 준비 상태의 프로세스 중 하나를 골라(선택해) 실행 상태로 바꾸는 CPU 스케줄러의 작업
- 타임아웃 : 프로세스가 자신에게 주어진 하나의 타임 슬라이스 동안 작업을 끝내지 못하면 다시 준비 상태로 돌아가는 것
더보기
- 준비상태에 있는 여러 프로세스 중 다음에 실행할 프로세스를 선정하는 일은 CPU 스케줄러가 담당함.
- CPU 스케줄러는 준비 상태의 맨 앞에 기다리고 있는 프로세스 제어 블록을 CPU에 전달해 작업을 처리한다.
- CPU 스케줄러는 프로세스의 생성, 준비, 실행, 완료에 관여하여 모든 프로세스 작업이 원만하게 진행되도록 관리함.
- 프로세스는 자신에게 할당된 하나의 타임 슬라이스동안 작업을 마치지 못하면 다시 준비 상태로 복귀하는데 이를 타임아웃이라함.
- 프로세스의 다섯가지 상태
더보기
- 오늘날의 운영체제의 효율성을 고려하여 한 가지 상태가 추가됨.
- 어떤 프로세스가 실행상태에 진입해서 입출력을 요구했을 경우? : 인터럽트 시스템에서 프로세스가 입출력을 요구하면 CPU가 직접 데이터를 가져오지 않고 입출력 관리자에게 명령을 내림.
- 이 상태에서 프로세스는 요청한 작업이 끝날 때까지 다음 작업을 할 수 없음. 그러므로 CPU도 작업을 못하고 기다리게 되면 효율성이 하락함
- 이런 경우, 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태를 대기상태라고 함. 이는 작업의 효율성을 높이기 위해 입출력을 요청한 프로세스를 실행 상태에 두지 않고 대기상태로 옮기는 것.
- 입출력을 요청한 프로세스가 대기 상태로 옮겨지면 CPU 스케쥴러는 준비 상태에 있는 프로세스 중 하나를 가져다 실행 상태로 만듦. 그러면 시스템 입장에서는 새로운 작업을 진행할 수 있어 효율성이 높아짐.
더보기
- 대기상태의 프로세스는 요청한 입출력이 완료되면 입력 관리자로부터 인터럽트를 받음.
- 대기상태의 프로세스는 원래 실행 상태에서 옮겨왔기 때문에 입출력이 끝나면 실행 상태로 돌아가는 것이 알맞지만, 그러기 위해서는 현재 실행 상태에서 작업 중인 프로세스를 준비상태로 복귀시켜야 한다.
- 이렇게 두 프로세스 상태를 변화시켜야 하는 복잡한 상황이므로, 대기상태에서 입출력이 끝난 프로세스는 실행 상태로 복귀하지 않고, 준비상태로 돌아가 차례를 기다림
- 생성 상태
-
프로그램이 메모리에 올라오고 운영체제로부터 프로세스 제어 블록을 할당받은 상태
-
생성된 프로세스는 바로 실행되는 것이 아니라 준비 상태에서 자기 순서를 기다리며, 프로세스 제어 블록도 같이 준비 상태로 옮겨짐
-
- 준비 상태
-
실행 대기 중인 모든 프로세스가 자기 순서를 기다리는 상태
-
프로세스 제어 블록은 준비 큐에서 기다리며 CPU 스케줄러에 의해 관리
-
CPU 스케줄러는 준비 상태에서 큐를 몇 개 운영할지, 큐에 있는 어떤 프로세스의 프로세스 제어 블록을 실행 상태로 보낼지 결정
-
CPU 스케줄러가 어떤 프로세스 제어 블록을 선택하는 작업은 dispatch(PID) 명령으로 처리
-
CPU 스케줄러가 dispatch(PID)를 실행하면 해당 프로세스가 준비 상태에서 실행 상태로 바뀌어 작업이 이루어짐
-
- 실행 상태
-
프로세스가 CPU를 할당받아 실행되는 상태
-
실행 상태에 있는 프로세스는 자신에게 주어진 시간, 즉 타임 슬라이스 동안만 작업할 수 있음
-
그 시간을 다 사용하면 timeout(PID)가 실행되어 실행 상태에서 준비 상태로 옮김
-
실행 상태 동안 작업이 완료되면 exit(PID)가 실행되어 프로세스가 정상 종료
-
실행 상태에 있는 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block(PID)를 실행
-
block(PID)는 입출력이 완료될 때까지 작업을 진행할 수 없기 때문에 해당 프로세스를 대기 상태로 옮기고 CPU 스케줄러는 새로운 프로세스를 실행 상태로 가져옴
-
- 대기 상태
- 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태
-
대기 상태의 프로세스는 입출력장치별로 마련된 큐에서 기다리다가 완료되면 인터럽트가 발생하고, 대기 상태에 있는 여러 프로세스 중 해당 인터럽트로 깨어날 프로세스를 찾는데 이것이 wakeup(PID)
-
wakeup(PID)로 해당 프로세스의 프로세스 제어 블록이 준비 상태로 이동
더보기
- 실행상태 : 준비상태에 있는 여러 프로세스 중 실행상태에 진입하는 프로세스는 CPU 개수만큼임.
- 대기상태 : 어떤 프로세스가 대기 상태에서 준비 상태로 이동하는 것은 인터럽트 때문임. 인터럽트는 입출력으로 발생하지만 어떤 이벤트에 의해 발생하기도 함.
- 완료 상태
- 프로세스가 종료되는 상태
-
코드와 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록을 폐기
-
정상적인 종료는 간단히 exit( )로 처리
-
오류나 다른 프로세스에 의해 비정상적으로 종료되는 강제 종료를 만나면 디버깅하기 위해 종료 직전의 메모리 상태를 저장장치로 옮기는데 이를 코어 덤프(core dump)라고 함
'전공 > 운영체제' 카테고리의 다른 글
Ch03. 프로세스와 스레드 _03) 프로세스의 연산 (1) | 2023.03.26 |
---|---|
Ch03. 프로세스와 스레드 _02) 프로세스 제어 블록과 문맥 교환 (0) | 2023.03.26 |
Ch02. 컴퓨터의 구조와 성능 향상 _04) 병렬 처리 (0) | 2023.03.25 |
Ch02. 컴퓨터의 구조와 성능 향상 _03) 컴퓨터 성능 향상 기술 (0) | 2023.03.24 |
Ch02. 컴퓨터의 구조와 성능 향상 _02) CPU와 메모리 (0) | 2023.03.23 |
댓글