티스토리 뷰

CS/OS

4. Process (프로세스)

Sueaty 2020. 1. 10. 03:05

이 글은 프로세스에 대해 다루겠습니다. OS? Oh Yes! 서적 기반, 숙명여대 김주균 교수님 강의, Chegg 등을 정리했습니다. 공부한 것을 정리하는 형식으로 작성되었으므로 오류가 있을 수 있습니다. 오류 발견시 댓글로 꼭 말씀해주세요! 시작해볼까요?

Process

프로세스에 대해 설명을 할 때 a program in execution (실행 중인 프로그램)이라는 표현을 많이 씁니다. 눈치를 채셨는지 모르겠지만 실행 중이라는 것은 단순히 디스크에 머물러 있는 프로그램이 아닌 메모리에 등록이 되어 있다는 뜻입니다. 그렇다면 프로세스는 시스템 내에서 어떤 모습으로 존재할까요?

 

프로세스는 테이블 모양의 자료구조인 PCB(Process Control Block, 프로세스 제어 블록)의 형태로 존재합니다. 이 PCB는 프로세스의 모든 것이 표현되어 있는데 한 프로세스가 생성되어서 종료될 때까지 메모리에 저장되어 있습니다.(PCB가 메모리에 저장되어 있는 이유는 작업이 빈번하게 일어나기 때문) 자, PCB가 전부를 표현하다고 했는데, 어떤 정보들을 갖고 있는지 간략하게 살펴보도록 하겠습니다. 참고로, PCB가 담는 정보는 운영체제 마다 다르니 일반적으로 갖는 정보에 대해 알아보겠습니다.

정보 설명
PID(프로세스 번호) 프로세스마다 가지는 고유 정수 번호
프로세스의 상태(Status) 준비, 실행, 대기, 보류 등의 상태정보
프로세스의 우선순위(Priority) 스케줄링 시 이용됨
프로그램 카운터 값 다음 실행할 명령어의 주소 값
메모리 포인터

프로그램과 데이터가 저장되어 있는 메모리 블록 위치, 공유되는 메모리 블록들에 대한 포인터

문맥 데이터 문맥교환 시 CPU 레지스터 값들을 저장
할당받은 자원 목록 할당 받은 자원들의 정보
계정 정보 CPU 사용 시간 등의 정보
입출력 정보 진행 중인 입출력 요구 등의 정보

Process State (프로세스 상태와 변화) 

프로세스의 상태 변화

프로세스는 생성되어 종료될 때 까지 여러 사건들에 의해 상태 변화를 겪게 됩니다. 시스템 마다 상태의 종류는 다른데, 가장 기본적인 것들은 다음과 같습니다. 하나의 상태에서 다른 상태로 넘어갈 때의 원인을 파악하고, 그림을 보고 이해하며 하나씩 살펴보도록 하겠습니다.

 

 [ 생성 상태 ] (Create) 

우선 위 그림의 New 부분인데 통상적으로는 Create라고 부르는 것으로 알고 있습니다. 생성 상태는 아주 잠깐 머무르는 상태인데, 생성 상태에서는 사용자가 요청한 작업이 커널에 등록되고 PCB가 생성됩니다. 이 때 운영체제는 메모리 공간을 검사하는데, 프로세스에게 할당해 줄 여유가 있다면 할당을 하고 준비(ready)상태로 전환하고, 만일 여유가 없다면 보류 준비(suspended ready) 상태로 전환합니다.

  • 생성 상태 → 준비 상태 : 할당 해 줄 수 있는 메모리 공간이 있을 때
  • 생성 상태 → 보류 준비 상태 : 할당 해 줄 수 있는 메모리 공간이 없을 때

 

 [ 준비 상태 ] (Ready) 

준비 상태에 있는 프로세스들은 CPU가 주어지면 바로 실행이 가능한 상태입니다. 만약 다중 프로그래밍 시스템을 사용한다면 준비 상태에 있는 여러 프로세스들은 메모리에 적재 되어 있고, 큐/리스트를 통해 관리가 되는데 CPU를 할당 받는 순서를 CPU 스케줄링이라고 부릅니다. CPU를 할당 받은 프로세스는 실행 상태로 전환되고 이 과정을 dispatch(디스패치)라고 부릅니다.

  • 준비 상태 → 실행 상태 : 프로세스가 CPU를 할당 받았을 때

 [ 실행 상태 ] (Running) 

실행 상태의 프로세스는 CPU를 할당 받아 실행을 하고 있는 상태를 말합니다. 당연히 multiprocessing system(다중처리 시스템)이라면 여러개의 CPU가 여러 프로세스를 동시에 실행시키고 있겠죠. 하지만 하나의 프로세스가 자신이 끝날 때까지 CPU를 붙잡고 있을 수는 없습니다. CPU 스케줄링 정책에 따라 실행 상태의 프로세스는 CPU를 빼앗길 수 있는데 그 대표적인 예시가 timeout(시간 종료) 되었을 때 입니다. 즉, 자신(프로세스)에게 주어진 시간이 끝났을 때 놓아주어야 하는 것입니다. Timeout이 되면 준비 상태로 전환됩니다. 또 다른 전환이 일어나는 경우는 실행 상태의 프로세스가 입출력이 필요해 system call을 했을 때 입니다. System call을 하게 되면 실행 상태의 프로세스는 입출력 처리의 종료를 기다리는 대기 상태로 전환됩니다.

  • 실행 상태 → 준비 상태 : (예시) timeout 되었을 때.
  • 실행 상태 → 대기 상태 : system call을 하게 되었을 때, 당장 사용할 수 없는 자원을 요청하였을 때

 [ 대기 상태 ] (Blocked) 

대기 상태는 위에도 설명되어 있지만 실행 도중 프로세스가 시스템 호출을 하거나 당장 사용할 수 없는 자원을 요청하였을 때 CPU를 내어 주고 대기 상태로 전환됩니다. 준비 상태 처럼 대기 상태의 관리도 큐 또는 리스트로 관리가 되는데, 자신이 요청한 일이 완료되면 CPU를 받을 준비가 완료된 것이므로 준비 상태로 바뀌고 준비 큐/리스트에 들어갑니다.

  • 대기 상태 → 준비 상태 : 자신이 요청한 일이 모두 처리 되었을 때

 [ 종료 상태 ] (Exit) 

Exit 또는 Terminated 라고도 불리는 이 종료 상태는 생성 상태 처럼 아주 잠깐 거쳐가는 상태입니다. 프로세스가 종료되면 종료 상태가 되는데 이 때 프로세스에게 할당 된 자원들이 회수되고 PCB만 커널에 남겨져 있는 상황입니다. 운영체제에 의해 PCB까지 삭제하면 프로세스는 완전히 사라지게 됩니다.


메모리는 크기가 한정적이기 때문에 밀려오는 프로세스들을 전부 메모리에 올려놓을 수는 없습니다. 그렇기 때문에 때에 따라 할당 해 주었던 메모리를 다른 프로세스로 부터 빼앗아 여유 공간을 확보하는 경우가 있습니다. 물론 그렇게 빼앗기는 프로세스는 당장 메모리를 회수해도 크게 문제가 되지 않을 프로세스들입니다. 이렇게 메모리 공간을 확보하기 위함도 있지만 보류 상태가 필요한 경우는 또 있습니다. 예를 들어 프로세스의 결과에 오류가 있을 때, 프로세스가 시스템에 위협하는 수상한 행동을 보일 때, 주기적인 일이라서 다음 주기의 실행 때까지 메모리를 회수해도 문제 되지 않을 때가 있습니다.

메모리 공간을 빼앗기고 보류 상태로 되는 것을 Swapped Out(스왑되어 나간다)라고 하고 나중에 다시 메모리를 할당 받아 메모리로 들어오면 Swapped In(스왑되어 들어온다)라고 부르는데 이 둘을 합쳐서 Swapping(스와핑)이라고 부릅니다.

 

 [ 보류 준비 상태 ] (Suspended Ready) 

처음에 잠깐 보류 준비 상태가 언급되었습니다. 프로세스가 생성되었으나 메모리 공간을 할당을 받지 못해 준비 상태가 아닌 보류 준비 상태가 되었습니다. 이 때 뿐만 아니라 준비 또는 실행 상태에서 메모리를 잃게 되면 보류 준비 상태가 됩니다.(실행 상태에서 CPU도 빼앗기고 메모리 까지 잃으면 보류 준비 상태)

보류 준비 상태의 프로세스는 메모리에 여유가 생기거나 준비 상태의 프로세스가 0개 일 때 대기 상태의 프로세스를 보류 대기 상태로 만들고, 자신은 준비 상태로 swapped in 하게 됩니다.

  • 생성 → 보류 준비 상태
  • 준비 상태 → 보류 준비 상태 : 충분한 공간의 메모리 확보가 필요 할 때, 우선 순위가 매우 높은 보류 대기 상태가 준비 상태가 될 때
  • 실행 상태 (→ 준비 상태) → 보류 준비 상태 : CPU도 빼앗기고, 메모리까지 뺴앗겨야 할 때

 

 [ 보류 대기 상태 ] (Suspended Block) 

보류 대기 상태는 대기 상태일 때 메모리 공간을 잃은 상태 입니다. 위에서 언급했지만 준비 상태의 프로세스가 0개일 때 대기를 보류 대기로 만든다고 했습니다. 하지만 준비 상태에 프로세스가 있었어도 메모리 공간을 더 확보하기 위해 보류 대기가 되기도 합니다. 보류 대기 상태는 주로 입출력이나 기다리던 사건의 종료 시 보류 준비 상태가 됩니다.

  • 대기 상태 → 보류 대기 상태 : 준비 상태의 프로세스가 0개 일 때, 메모리의 여유 공간을 더 확보하기 위해
  • 보류 대기 상태 → 보류 준비 상태 : 기다리던 입출력이나 사건의 종료 시

 

 

사진 출처 : https://www.chegg.com/homework-help/questions-and-answers/consider-state-transition-diagram-following-figure-suppose-time-os-dispatch-process-proces-q23616098

'CS > OS' 카테고리의 다른 글

6. CPU 스케줄링  (0) 2020.01.11
5. Thread(스레드)  (0) 2020.01.10
3. 들어가기 전에 ③  (0) 2020.01.09
2. 들어가기 전에②  (0) 2020.01.08
1. 들어가기 전에①  (0) 2020.01.08
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함