1. Process
OS입장에서 보면 실행되어야 하는 프로그램들에게 시스템자원을 적절히 분배해줘야 하는 책임이 있습니다. 이때 task 단위로 서로 명확하게 구분이 되어야 하는데 이것을 프로세스라고 지칭합니다.
실행중인 프로그램을 의미합니다. 즉 메모리위에 올라와 실행되고 있는 프로그램의 인스턴스로 OS로부터 정상적인 실행을 위해 필요한 환경을 부여받은 능동적인 존재입니다. OS로부터 시스템 자원을 할당받는 작업의 단위이기도 합니다.
예를 들어, 크롬 브라우저가 두 개가 실행되면 두 개의 크롬 프로세스가 실행되는 것입니다.
1.1 Process Control Block (PCB)
프로세스 하나가 만들어진다는 것은 곧, 그 프로세스에 대한 모든 정보를 나타내는 PCB 하나가 만들어진다는 말과 같습니다.
OS는 프로세스를 관리하기 위한 데이터를 가지고 있어야 합니다. 프로세스를 생성하고 관리할때 OS는 PCB 자료구조를 사용해 프로세스를 관리할 수 있습니다.
OS가 프로세스를 관리한다는 것은 PCB의 다양한 행동으로 이어집니다. 프로세스의 수가 많고 PCB에 대한 작업은 매우 빈번하기 때문에 PCB는 기본적으로 메모리에 저장합니다.
- PCB는 Linked List 방식으로 관리되기 때문에 삽입, 삭제가 용이합니다.
- Pointer : 각종 자원에 대한 포인터입니다.
- 부모/자식 프로세스에 대한 포인터.
- 프로세스가 위치한 메모리 블록의 포인터
- 할당된 자원에 대한 포인터
- Process State : 프로세스의 현재 상태를 나타냅니다.
- Process number (PID) : 프로세스가 생성될 때 부여받는 고유 식별자를 의미합니다.
- Process Counter : 프로세스가 다음에 수행해야할 명령어의 주소를 가지고 있습니다.
- Registers : 중앙처리장치의 각종 레지스터 상태를 저장하기 위한 공간입니다. 레지스터의 저장 값이 앞으로 수행할 프로세스에 관한 정보로 교체됩니다.
- List of open files : 할당받은 자원들에 대한 정보를 가지고 있습니다.
1.2 Process Life Cycle
- New : 사용자 요청이 커널에 등록되고 PCB가 만들어져 프로세스가 만들어진 상태로 다음 준비나 보류 준비 상태로 되기 위해 잠시 거치는 상태이다.
- OS는 프로세스를 생성한 후 메모리 공간을 검사하여 충분한 공간이 있으면 메모리를 할당하면서 Ready 상태로 바꾸어주지만, 메모리에 공간이 부족하다면 보류 준비상태로 바꿔준다.
- Ready : CPU를 할당받기 위해 기다리고 있는 상태.
- 다중 프로그래밍 시스템의 경우 준비 상태의 여러 프로세스들이 메모리에 적재되어있다. 이 프로세스들이 서로 CPU를 할당받기를 기다리고 있다. 이때 보통 큐(리스트) 자료구조가 사용되는데, 이들의 순서를 정하는것을 CPU 스케쥴링이다!
- Running : CPU를 할당받아 실행중인 상태로 이때 CPU를 할당하는 것을 Dispatch 라고 한다.
- Waiting : Running 상태였다가 입출력 처리를 요청하거나 바로 확보될 수 없는 자원을 요청하면 , CPU를 양도하고 요청한 작업이 완료되기를 기다리는 상태.
- Terminated : 프로세스가 종료될때 잠시 거치는 상태로 프로세스는 할당되었던 모든 자원들을 반납한다.
- PCB만 커널에 남아있는 상태이다.
- OS가 시스템에 남겨져 있는 이 프로세스의 흔적들을 정리하면(PCB를 삭제하면) 프로세스가 완전히 사라진다.
- 보류 상태 : 메모리 공간이 부족할때 OS는 당분간 메모리를 회수해도 문제가 되지 않을 프로세스들을 선택해 보류시킨다. 이렇게 보류시킨 프로세스를 다시 메모리로 올리는 작업을 Swapping이라고 한다.
- 메모리 공간을 뺏기고 디스크로 나가는것 - Swapped Out
- 나중에 다시 메모리로 들어오는것 - Swapped In
'CS Study > Operating System' 카테고리의 다른 글
메모리 관리 - 메모리 단편화, 페이징, 세그멘테이션 (0) | 2021.03.24 |
---|---|
병행 프로세스와 동기화 - 병행성 vs 병렬성, 상호 배제, 세마포어, 뮤텍스 (0) | 2021.03.09 |
Thread란? Multi-Thread, Multi-Tasking, Multi-Processing (0) | 2021.03.03 |
Interrupt 란? 인터럽트 프로세스, 인터럽트 우선순위 (0) | 2021.02.26 |