0.🚶들어가며
프로세스라는 말은 개발 공부를 시작하며 정말 많이 들어봤으나 누군가에게 설명할 수 있을 정도로 알고 있는 것 같지 않아 이에 대해 정리해보고자 글을 써봅니다.
1.📕프로세스란?
1) 프로세스의 개념
(1) 프로그램과 프로세스의 차이
- 프로그램은 어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어 놓은 것이며 하드디스크와 같은 저장장치에 보관됩니다.
- 프로세스는 프로그램을 실행한 것인데 "실행했다"라는 말은 프로그램이 메모리에 올라가 작업이 진행된다는 것입니다.
- 프로세스를 한마디로 말하면 "실행 중인 프로그램" 이라고 할 수 있습니다.
앞으로 설명할 내용은 현대 운영체제 방식을 가정하고 진행합니다.
즉, 메모리에 여러 프로세스가 올라가고 실행시키는 방식(시분할 방식)에서의 내용입니다.
(2) 프로그램의 프로세스로의 전환
- 프로그램을 실행시키면 운영체제는 이를 메모리의 적당한 위치에 가져옵니다.
- 그와 동시에 프로세스 제어 블록(PCB, Process Control Block)을 만드는데 이는 프로세스를 처리하는 데 필요한 다양한 정보를 담고 있습니다. PCB에 대한 자세한 내용은 다음 글에서 다뤄보겠습니다.
- 정리하자면 프로그램이 프로세스가 되려면 메모리에 올라가는 동시에 PCB가 생성되어야 합니다.
2) 프로세스의 상태
메모리에 프로세스가 하나만 올라온다면 (일괄 작업 시스템) 프로세스의 상태는 생성, 실행, 완료 정도면 충분할 것 입니다. 하지만 시분할 시스템에서는 프로세스의 상태가 이보다 복잡합니다. 프로세스가 CPU를 얻어 실행되던 중 다른 프로세스에게 CPU를 넘겨주는 일이 빈번하기 때문입니다. 시분할 시스템에서 프로세스 상태는 어떻게 관리되고 있는지에 대해 알아보겠습니다.
위 그림은 프로세스 상태에 대한 그림입니다. 처음 보면 복잡해보일 수 있지만 각 상태에 대해 차근차근 알아보겠습니다.
(1) 생성 상태 (New)
- 프로세스가 생성중인 상태입니다.
- 프로세스가 되기 위해 필요한 여러 작업(PCB 생성)과 장기 스케줄러의 승인 등의 과정을 밟고 있는 상태입니다.
(2) 준비 상태 (Ready)
- 준비상태는 생성된 프로세스가 CPU를 얻을 때까지 기다리는 상태입니다.
- CPU가 하나인 경우 컴퓨터에서는 한 번에 하나의 프로세스만 실행할 수 있기 때문에 자기 순서가 올 때까지 준비 상태로 기다리게 됩니다.
- 많은 준비상태 프로세스들 중 어떤 프로세스를 실행상태로 바꿀지(dispatch), 즉 CPU 자원을 어떤 프로세스에게 줄 지에 대한 내용은 다양한 알고리즘이 있는데 이는 추후 자세히 다뤄보겠습니다.
(3) 실행 상태 (Running)
- 실행 상태는 준비상태의 프로세스가 CPU를 얻어 실제 작업을 수행하는 상태입니다.
- 주어진 시간(Time slice) 내에 작업을 끝내지 못하면(Timeout) 프로세스는 다시 준비 상태로 돌아가게 됩니다.
- 실행 상태의 프로세스가 CPU를 반납하는 경우는 Timeout, System call과 같은 Interrupt가 발생하는 경우, I/O 등의 이유로 대기 상태가 되는 경우, 작업을 끝내 완료 상태가 되는 경우가 있습니다.
(4) 완료 상태 (Terminated)
- 실행 상태의 프로세스가 작업을 마치면 완료상태가 됩니다.
- 이때 해당 프로세스의 코드와 사용했던 데이터를 메모리에서 삭제하고 PCB를 폐기합니다.
(5) 대기 상태 (Wait, Blocked)
- 위에서 살펴본 4가지 상태만으로도 프로세스들을 관리하는데 문제는 없습니다.
- 하지만 작업 효율성을 위해 운영체제는 대기상태를 추가했습니다.
- CPU를 주어도 당장 작업을 수행할 수 없는 상태입니다.
- 실행 상태의 프로세스가 입출력을 요구한 경우가 대기상태로 들어가는 대표적인 예입니다.
- 입출력의 경우 CPU의 속도보다 매우 느리기 때문에 이를 기다리기에는 너무 비효율적입니다. 따라서 프로세스를 대기상태로 바꾸고 다시 준비 상태의 프로세스를 하나 집어 실행 상태로 바꿉니다. 기존 프로세스는 쫓아내는 것이죠.
- 입출력을 요구한 프로세스의 입출력이 끝나는 경우 인터럽트를 통해 운영체제에게 알리고 이 프로세스를 다시 준비 상태로 바꾸게 됩니다.
- 추후 다뤄볼 공유 데이터를 사용하는 경우도 Blocked 상태로 전환될 수 있는 경우입니다. 이 경우는 하드웨어의 느린 속도때문에 발생하는 대기 상태는 아닙니다. 우선은 이정도로 알고 넘어갑시다!
2.💨나가며
이번 시간에는 프로세스의 개념과 상태에 대해 알아보았습니다. 프로세스 관련 내용은 다룰 것이 많은데 다음 글에서는 PCB와 문맥 교환에 대해 알아보겠습니다.
반응형
'CS > 운영체제' 카테고리의 다른 글
[운영체제(OS)] CPU 스케줄링 - (2) 스케줄링 알고리즘 (0) | 2022.02.25 |
---|---|
[운영체제(OS)] CPU 스케줄링 - (1) CPU 스케줄링의 개념 (1) | 2022.02.17 |
[운영체제(OS)] 프로세스와 스레드 - (3) 스레드 (0) | 2022.02.14 |
[운영체제(OS)] 프로세스와 스레드 - (2) 프로세스 제어 블록과 문맥 교환 (0) | 2022.02.14 |
[운영체제(OS)] 운영체제란 무엇인가? (0) | 2022.02.11 |