일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스레드
- 데이터베이스
- 운영체제
- 안드로이드 개발
- github
- 안드로이드
- Android
- 코틀린
- MVVM
- reactnative
- 프로세스
- Kotlin
- 액티비티
- 메모리
- React
- CS지식
- db
- 안드로이드 디자인 패턴
- Operating System
- cs
- 앱 개발
- Database
- 앱
- 개발
- 앱개발
- 디자인 패턴
- 리액트네이티브
- 디자인패턴
- OS
- 리액트
- Today
- Total
Tech Log
[Operating System] 프로세스의 상태 본문
프로세스는 여러 가지 상태 값을 가진다.
생성 상태(create)
프로세스가 생성된 상태를 말한다.
프로세스가 메모리에 올라와 실행 준비를 완료한 상태가 된다.
fork(), exec() 함수를 통해 생성한다.
이때 PCB가 할당된다.
생성된 프로세스는 바로 실행되는 것이 아니라,
준비 상태에서 자기 순서를 기다리며 PCB도 같이 준비 상태로 옮겨진다.
*PCB(Process Conrtol Block) : 프로세스 제어 블록, 운영체제가 해당 프로세스를 위해 관리하는 자료 구조를 말한다.
fork()
부모 프로세스의 주소 공간을 그대로 복사하여,
새로운 자식 프로세스를 생성하는 함수.
주소 공간만 복사할 뿐,
부모 프로세스의 비동기 작업 등을 상속하지는 않는다.
exec()
새롭게 프로세스를 생성하는 함수
대기 상태(ready)
메모리 공간이 충분하면 메모리를 할당받고,
아니면 아닌 상태로 대기하고 있는 상태.
CPU 스케줄러로부터 CPU 소유권이 넘어오기를 기다리는 상태.
대기 중단 상태(ready suspended)
메모리 부족으로 일시 중단된 상태.
실행 상태(running)
CPU 소유권과 메모리를 할당받고,
인스트럭션(instruction, 명령어)을 수행 중인 상태
CPU burst가 일어났다고도 말한다.
실행 상태에 있는 프로세스는 자신에게 주어진 시간 동안만 작업할 수 있다.
이 시간을 다 사용하면 timeout(PID)가 실행되어 프로세스가 정상 종료된다.
실행 상태에 있는 프로세스가 입출력을 요청하면 CPU는 입출력 관리자에게 입출력을 요청한다.
그리고 block(PID)를 실행한다.
block(PID)는 입출력이 완료될 때까지 작업을 진행할 수 없다.
따라서 해당 프로세스를 준비 상태로 옮기고,
CPU 스케줄러는 새로운 프로세스를 실행 상태로 가져온다.
중단 상태(blocked)
어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태.
I/O 디바이스에 의한 인터럽트로 이런 현상이 많이 발생한다.
일시 중단 상태(blocked suspended)
중단된 상태에서 프로세스가 실행되려고 했지만 메모리 부족으로 일시 중단된 상태.
대기 중단 상태와 유사하다.
종료 상태(reminated)
메모리와 CPU 소유권을 모두 놓고 가는 상태.
종료는 자연스럽게 종료되는 것도 있으나,
부모 프로세스가 자식 프로세스를 강제 종료시키는 비자발적 종료(abort)도 있다.
정상적인 종료는 exit()로 처리한다.
PCB가 사라진 상태가 된다.
자식 프로세스에 할당된 자원의 한계치를 넘어서거나,
부모 프로세스가 종료되거나,
사용자가 process kill 하는 등
여러 명령어로 프로세스를 종료할 때 발생
오류나 다른 프로세스에 의해 비정상적으로 종료되는 강제 종료를 만나면,
디버깅하기 위해 종료 직전의 메모리 상태를 저장장치로 옮긴다.
이를 코어 덤프(core dump)라고 한다.
이 코어 덤프를 통해 프로그램이 어떤 상태로 오류가 났는지 알 수 있다.
각 상태와 관련된 작업은 다음과 같다.
상태 | 설명 | 작업 |
생성 상태 | 프로그램을 메모리에 가져와 실행 준비가 완료된 상태. | 메모리 할당, PCB 생성 |
준비 상태 | 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태. CPU 스케줄러가 실행할 프로세스를 선택. |
dispatch(PID) : 준비 -> 실행 |
실행 상태 | 선택된 프로세스가 타임 슬라이스(실행할 수 있는 시간)를 얻어 CPU를 사용하는 상태. 프로세스 사이의 context switching이 일어난다. |
timeout(PID) : 실행 -> 준비 exit(PID) : 실행 -> 종료 block(PID) : 실행 -> 대기 |
대기 상태 | 실행 상태에 있는 프로세스가 입출력을 요청하면, 입출력이 완료될 때까지 기다리는 상태. 입출력이 완료되면 준비 상태로 간다. |
wakeup(PID) : 대기 -> 준비 |
종료 상태 | 프로세스가 종료된 상태. 정상 종료인 exit와 비정상 종료인 abort를 포함 |
메모리 삭제, PCB 삭제 |
참조
- 주홍철, 면접을 위한 CS 전공지식 노트, 길벗(2022)
- 조성호, 쉽게 배우는 운영체제, 한빛아카데미(2018)
'Computer Science > Operating System' 카테고리의 다른 글
[Operating System] 멀티 프로세싱과 멀티 스레딩 (0) | 2023.02.11 |
---|---|
[Operating System] PCB(Process Control Block) (0) | 2023.02.11 |
[Operating System] 프로세스(Process) (0) | 2023.02.10 |
[Operating System] 페이지 교체 알고리즘 (0) | 2023.01.28 |
[Operating System] 메모리 할당 (1) | 2023.01.28 |