개발세발
08. 프로세스의 개요 본문
📍 프로세스
: 실행을 위해 메모리에 올라온 동적인 상태 ( 운영체제에서 프로세스는 하나의 작업 단위 )
- 프로그램으로 작성된 작업 절차를 실제로 실행에 옮긴다는 뜻으로, 누군가가 작성한 프로그램이 실행되면 프로세스가 된다
↔️ 프로그램 : 저장장치에 저장되어 있는 정적인 상태
- 어던 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어 놓은 것
📍 태스크 task
: 컴퓨터 시스템의 작업 단위
📍 프로세스 제어 블록 Process Control Block, PCB
: 하나의 프로세스를 실핼ㅇ하기 위한 여러 정보를 보관하는 데이터 구조
- 운영체제가 해당 프로세스를 위해 관리하는 데이터 구조이기 때문에 운영체제 영역에서 만들어짐
- 프로세스가 종료되면 프로세스가 메모리에서 삭제되고, 프로세스 제어 블록도 폐기됨
* PCB에 있는 대표적인 정보
◼️ 프로세스 구분자 Process IDentification, PID
: 프로세스를 구분하기 위한 구분자
◼️ 메모리 관련 정보
: 프로세스의 메모리 위치 정보 (CPU는 실행하려는 프로세스가 메모리의 어디에 저장되어있는지 알아야 작업을 할 수 있음)
◼️ 각종 중간값
: 프로세스가 사용했던 중간값
- 시분할 시스템에서는 여러 프로세스가 번갈아가며 실행되기 때문에 각 프로세스는 일정 시간 작업을 한 후 다른 프로세스에 CPU를 넘겨줌
📍프로그램과 프로세스
- 프로그램 ➡️ 프로세스 : 운영체제로부터 프로세스 제어 블록을 얻음
- 프로세스가 종료 : 해당 프로세스 제어 블록이 폐기
* 프로세스 = 프로그램 + 프로세스 제어블록
* 프로그램 = 프로세스 - 프로세스 제어블록
* 부트스트랩
운영체제 프로세스를 메모리에 올리는 프로그램인 부트스트랩이 많은 운영체제 관련 프로세스를 실행한 후 일반 프로세스가 실행됨
➡️ 컴퓨터에는 일반 사용자의 사용자 프로세스 user process와 운영체제의 커널 프로세스 kernel process가 섞여서 실행됨
📍프로세스 상태 process status
* 일괄 작업 시스템의 프로세스 상태는 생성 create, 실행 run, 완료 terminate
📍 활성상태 active status
: 생성, 준비, 실행, 대기, 완료 상태
◼️생성상태 create status
: 프로세스가 메모리에 올라와 프로세스 제어 블록을 할당받아 실행 준비를 완료한 상태
- 프로세스를 관리하는 데 필요한 프로세스 제어 블록이 생성됨
- 생성된 프로세스는 바로 실행되는 것이 아니라 준비 상태에서 자기 순서를 기다리며 프로세스 제어 블록도 같이 준비 상태로 옮겨짐
◼️ 준비 상태 ready status
: 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태
- 프로세스 제어 블록은 준비 큐 ready queue에서 기다리며 CPU 스케쥴러에 의해 관리됨
-CPU 스케쥴러는 준비 상태에서 큐를 몇 개 운영할지, 큐에 있는 어떤 프로세스의 프로세스 제어 블록을 실행 상태로 보낼지를 결정함
* dispatch(PID) : CPU 스케줄러가 어떤 프로세스 제어 블록을 선택하는 작업을 dispatch명령으로 처리
- PID : 프로세스 구분자
- CPU 스케쥴러가 dispatch(PID)를 실행하면 해당 프로세스가 준비 상태에서 실행 상태로 바뀌어 작업이 이루어짐
◼️ 실행 상태 running status
: 준비 상태에 있는 프로세스 중 하나가 CPU를 얻어 실제 작업을 수행하는 상태 (execute status)
- 실행 상태에 들어간 프로세스는 일정 시간 동안 CPU를 사용할 권리를 가짐
- 주어진 시간동안 작업을 끝내지 못했다면 준비 상태로 돌아온 후 다음 차례를 기다림
➡️ 자신의 작업을 끝낼 때까지 준비/실행 상태를 왔다 갔다 함
- 시간을 다 사용하면 timeout(PID)가 실행됨
* timeout(PID) : 프로세스 제어 블록을 실행상태에서 준비 상태로 옮김
- 실행 상태 동안 작업이 완료되면 exit(PID)가 실행되어 프로세스가 정상 종료됨
- block(PID)
: 실행 상태에 있는 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청하고 block(PID)를 실행함
- block(PID)는 입출력이 완료될 때까지 작업을 진행할 수 없어서 해당 프로세스를 대기 상태로 옮김
- CPU 스케쥴러는 새로운 프로세스는 실행 상태로 가져옴(디스패치)
* 준비 상태에 있는 프로세스 중 실행 상태에 들어가는 프로세스 = CPU의 개수
◼️ (new) 대기 상태 blocking status [wait status]
: 입출력을 요구한 프로세스가 입출력이 완료될 때까지 기다리는 상태
: 작업의 효율성을 높이기 위해 입출력을 요청한 프로세스를 실행 상태에 두지 않고 대기 상태로 옮기는 것
- 대기 상태의 프로세스는 입출력장치별로 마련된 큐에서 기다림
* wakeup(PID)
: 입출력이 완료되면 인터럽트가 발생하고, 대기 상태에 있는 여러 프로세스 중 해당 인터럽트로 깨어날 프로세스를 찾는 것
- 찾은 프로세스의 프로세스 제어 블록이 준비 상태로 이동하게 됨
-- 인터럽트 : 입출력 또는 어떤 이벤트 발생에 의해 생겨남
◼️ 완료 상태 terminate status
: 프로세스 제어 블록이 사라진 상태
- 실행 상태의 프로세스가 주어진 시간 동안 작업을 마치면 완료 상태로 진입.
- 완료 상태에서는 코드와 사용했던 데이터를 메모리에서 삭제하고 프로세스 제어 블록을 폐기함
- exit() : 정상적인 종료
- abort : 비정상적으로 강제 종료
- 디버깅을 위해 강제 종료 직전의 메모리 상태를 저장장치로 옮김 (코어 덤프 core dump)
: 코어 덤프는 종료 직전의 메모리 상태를 확인함으로써 오류를 수정할 수 있게 해줌
📍 휴식 상태 pause status
: 프로세스가 작업을 일시적으로 쉬고 있는 상태
- 사용하던 데이터가 메모리에 그대로 있고, 프로세스 제어 블록도 유지되므로 프로세스는 멈춘 지점에서부터 재시작resume 할 수 있다
* fg : foreground job
* bg : background job
- stop 상태의 작업을 전면(fg) 혹은 후면 (bg)에서 다시 시작하라는 명령어
- 후면에서 작동하는 명령어는 끝에 &가 붙음
📍 보류상태 suspend status
: 프로세스가 메모리에서 잠시 쫓겨난 상태.
- 휴식상태와 다르며, 보류상태의 반댓말이 활성상태이다.
* 보류 상태인 경우
- 메모리가 꽉 차서 일부 프로세스를 메모리 밖으로 내보낼 때
- 프로그램에 오류가 있어서 실행을 미루어야 할 때
- 바이러스와 같이 악의적인 공격을 하는 프로세스라고 판단될 때
- 매우 긴 주기로 반복되는 프로세스라 메모리 밖으로 쫓아내도 큰 문제가 없을 때
- 입출력을 기다리는 프로세스의 입출력이 계속 지연될 때
* 스왑 영역 swap area
: 보류 상태에 들어간 프로세스는 메모리 밖으로 쫓겨나 스왑여역에 보관됨
- 메모리에서 쫓겨난 데이터가 임시로 보관되는 곳
보류상태 | 휴식상태 | |
스왑영역에 있는 상태 | 프로세스가 메모리에 있으나 멈춘 상태 | |
보류 대기 상태 block suspend status ➡️ 입출력 완료시 보류 준비 상태로 |
보류 준비 상태 ready suspend status |
|
각 상태에서 재시작하면 원래의 활성 상태로 들어감 |
'코딩공부 > OS' 카테고리의 다른 글
10. 프로세스의 연산 (0) | 2023.01.06 |
---|---|
09. 프로세스 제어 블록과 문맥 교환 (0) | 2023.01.02 |
07. 병렬 처리 (0) | 2022.12.29 |
06. 컴퓨터 성능 향상 기술 (0) | 2022.12.28 |
05. CPU와 메모리 (0) | 2022.12.27 |