[운영체제] 5. Process1

이건회·2022년 3월 12일
0

운영체제

목록 보기
4/27

프로세스의 개념

  • 프로세스는 "실행 중인 프로그램"을 의미한다.
  • 프로세스의 문맥을 이해하는 것이 중요하다. 이는 특정 시점에서 프로세스가 어디까지 수행을 했는지를 규명하는 것이다. 프로그램의 현재 상태를 나타내는 모든 요소를 뜻한다.
  • 문맥을 나타내기 위해서는 프로그램 카운터(PC)가 코드의 어느 부분까지를 실행했는가를 알아야 하고, 프로세스의 메모리에 어떤 내용을 담고 있는가, 지금 담은 변수의 값, 어떤 지시를 실행했는가를 알아야 한다.
  • 문맥은 크게 세 가지로 구분된다. 먼저 CPU와 관련된 하드웨어 문맥인데 이는 현재 시점에 프로세스가 지시를 어디까지 수행했는가를 알기 위해서 필요하다. 주로 레지스터가 어떤 값을 가지는지 나타낸다.
  • 두 번째는 메모리와 관련된 프로세스 주소 공간이다. 코드,데이터,스택에 어떤 내용이 들어갔는지가 중요하다.
  • 세 번째는 프로세스 관련 커널 자료 구조인데, 프로세스가 생길 때 마다 운영체제는 프로세스 관리를 위해 자신의 관리 데이터에 자료구조를 두는데 이를 PCB라 한다. 또 커널 스택이라 하여 프로세스가 시스템 콜을 하게 되면 커널의 코드를 사용하는데 커널에서 함수 호출이 이루어지면 스택에 관련 정보를 쌓아놓는다. 커널은 모든 프로세스가 공유하는 코드다.
  • 다만 커널에서 함수 호출이 이루어져 스택에 정보를 쌓을 때는 프로세스 별로 스택을 별도로 두고 있다.

  • 프로세스는 상태를 바꿔가며 실행하는데 프로세스의 상태를 나타내는 다양한 용어가 있다.
  • CPU를 잡고 있는 프로세스는 매 순간 단 하나다. 프로세스가 CPU를 잡고 지시를 수행하는 상태를 Running 이라 부른다.
  • 다른 조건을 모두 만족하고 CPU를 사용하기 위해 기다리는 상태를 Ready라 한다.
  • i/o가 되지 않은 등 CPU를 줘봤자 지시를 수행 못하는 상태를 Blocked라 한다.
  • 프로세스가 생성중인 상태를 New라 한다
  • 프로세스의 수행이 끝난 상태를 Terminated라 한다.

  • 다음은 프로세스의 상태도다. i/o등 오래걸리는 작업 경우로 자진해서 cpu를 내놓은 상태면 waiting(blocked)가 된다.
  • CPU를 쓰는 할당시간이 끝나면 Timer interrupt가 들어와 CPU를 뺏기게 된다. 그러면 다시 ready로 돌아간다.
  • new 에서 ready 로 넘어갈 때 admitted는 프로세스가 메모리에 넘어가는 것을 admit 한다는 뜻이다.

  • 연두색으로 표시된 것이 프로세스다. 프로세스가 cpu에서 쓰이고 있다가 타이머 인터럽트가 들어오면 cpu를 뺏기고 ready queue의 맨 뒤로 간다.
  • 공유데이터는 여러 프로세스가 동시에 접근하면 일관성이 깨지므로 프로세스가 cpu를 쓸 때 다른 프로세스 접근을 막아주어야 한다. 이를 위해 프로세스가 기다리는 resouce queue를 둔다.

  • 그림의 큐는 운영체제 커널이 본인의 데이터 영역의 자료구조를 만들어 놓고 운영을 하는 것이다.

  • PCB는 운영체제가 프로세스를 관리하기 위해 프로세스당 유지하는 정보다. 총 네 가지 구성 요소가 있다.
  • (1)은 os가 관리상 사용하는 정보다. 프로세스 상태(ex)blocked), 프로세스 id, 우선순위를 나타내는 스케쥴링 정보와 priority 등이 있다.
  • (2)는 프로세스의 문맥을 나타내는 정보다. 어떤 레지스터 값을 cpu에 넣어 실행하고 있었는가 등의 내용이다
  • (3)은 메모리 관련 문맥이다. 코드 데이터 스택 위치 정보다.
  • (4)는 프로세스가 오픈하고 있는 파일 정보다.

  • 문맥 교환은 CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정이다.
  • 프로세스 A가 CPU에서 실행중일 때 인터럽트가 들어와 CPU를 빼앗길 때, 프로세스A가 다음에 CPU를 얻었을 때 진행중이던 문맥 부터 실행을 재개하기 위해 레지스터에 저장된 값을 A의 PCB에 저장해놓는다.
  • 다음에 CPU를 얻은 프로세스 B는 역시 본인의 문맥을 과거에 PCB에 저장해둔 부분에서 찾아 하드웨어에 복원시킨다.

  • 시스템 콜은 프로세스 본인의 필요에 의한 것이고 인터럽트는 프로세스의 필요가 아닌 외부의 필요에 의한 것이다. 두 경우 모두 발생할 때 CPU제어권이 프로세스에서 운영체제로 넘어 간다. 그러나 이 경우는 프로세스-프로세스 교환이 아니므로 문맥 교환이 아니다.
  • 문맥 교환은 반드시 프로세스A에서 다른 프로세스B로 넘어가야만 문맥 교환인 것이다.
  • 타이머 인터럽트와 i/o 요청 시스템 콜은 프로세스를 다른 프로세스에게 넘기기 위한 목적인 것이므로 문맥 교환이 일어난다.
  • 문맥교환이 일어나게 되면 프로세스가 사용하는 캐시 내용을 모두 지우므로 오버헤드가 많이 든다.

  • 다음은 프로세스를 스케줄링하기 위한 큐들이다.
  • Ready 큐는 CPU를 기다리는 프로세스 집합이다.
  • Device 큐는 i/o 장치의 처리를 기다리를 프로세스 집합이다
  • Job 큐는 현재 시스템 내의 모든 프로세스, 즉 위의 큐들이 Job 큐에 속한다.

  • 맨 위가 레디 큐, 아래는 모두 디바이스 큐다. 서비스를 기다리는 PCB를 줄 세운 모습이다.

  • 프로그램이 시작되면 레디 큐에서 줄을 서다가 자기 차례가 되면 cpu를 얻는다. 할당 시간이 끝나면 레디 큐에 와서 줄을 슨다. 오래 걸리는 작업을 수행하면 i/o 큐에 와서 줄을 서고 있다 작업이 끝나면 레디큐로 들어간다.
  • 프로세스가 cpu를 잡다가 자식 프로세스를 만들 수 있는데 자식이 실행중일 때 프로세스는 레디 큐에서 기다린다.

  • 스케쥴러는 순서를 정해주는 것이다. 다음과 같은 종류가 있다.
  • 롱 텀 스케줄러는 job 스케줄러라고도 불리며 메모리를 어떤 프로세스에게 할당할 지 결정한다. 프로세스가 시작되고 메모리에 올라가는 것을 허락 받아야 레디 상태가 되는데, 롱 텀 스케줄러가 뉴 상태의 프로세스중 누구에게 메모리를 줄 지를 다룬다. 메모리에 있는 프로세스의 수를 제한해 degree of multiprogramming을 제어해야 한다. 메모리에 프로세스가 너무 적어도, 너무 많아도 안 된다.
  • 숏 텀 스케줄러는 CPU 스케줄러라고도 불리며 매우 짧은 시간단위로 스케줄링 된다. 다음 번에 어떤 프로세스에게 cpu를 줄지를 결정한다.
  • 미디엄 텀 스케줄러는 Swapper라고도 불리며, 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아내는 역할을 한다.따라서 어떤 프로세스의 메모리를 뺏을지를 결정해야할 필요성이 있다. 역시 메모리에 있는 프로세스의 수를 제한해 degree of multiprogramming을 제어해야 한다.
  • 롱 텀 스케줄러는 프로세스가 시작 될 때 누구에게 메모리를 줄지를 제어하고, 미디엄 텀 스케줄러는 메모리에 올라운 프로세스 중 누구를 쫓아낼지를 제어하는 것이다.

  • 이전에 프로세스의 상태를 세 가지로 제한했지만, 중개(미디엄 텀) 스케줄러 때문에 하나의 상태가 더 추가되는데, 이것이 suspended(stopped)상태이다. 이는 중개 스케줄러 때문에 메모리를 통째로 빼앗겨 디스크로 swap out된 상태를 의미한다.
  • Blocked 는 자신이 요청한 일(i/o)이 만족되기를 기다리는 상태이고 일이 만족되면 다시 ready 상태가 된다.
  • Suspended는 외부에서 정지시켜 놓은 상태이고, 외부가 다시 재개해줘야지만 Active한 상태(ready or running or blocked)로 넘어갈 수 있다.

  • 따라서 다음과 같이 상태도를 갱신할 수 있다. Running을 두 가지로 나뉘어, 프로세스가 본인의 코드를 실행시키는 경우가 user mode이고 프로세스 본인이 코드를 실행하지 못해 운영체제가 코드를 실행하는 경우가 monitor mode이다.
  • user mode에서 인터럽트나 시스템 콜 등이 실행되면 monitor mode가 된다.
  • suspended 상태가 ready 상태에서 수행됐는지 block 상태에서 수행되었는지에 따라 구분된다.
  • 외부적인 이유로 프로세스가 정지된 상태가 inactived이고, 다시 외부에 의해 재개가 되면 active가 된다.
profile
하마드

0개의 댓글