Haru's 개발 블로그

[운영체제] 3. Process - 1 본문

CS/운영체제

[운영체제] 3. Process - 1

Haru_29 2022. 5. 29. 23:16

프로세스의 개념

"Process is a program in execution" 즉, 실행중인 프로그램을 의미
프로세스를 이해하려면 프로세스의 문맥을 이해해야 한다.

 

프로세스의 문맥 (context)

  • 특정시점에서 프로세스가 어디까지 수행을 했는지에 대한 정보를 담고있다.
  • 프로세스의 문맥은 프로그램 카운터가 어디를 가리키고 있는지(코드의 어디까지 실행했는가), 메모리에 담고있는정보, 스택정보 등을 담고있기때문에 현재시점에 프로세스의 진행상황을 알 수 있다. 
  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter가 가르키는 instruction의 위치 -> 어디까지 실행하였느가?
    • 각종 register -> 어떤 정보가 담겨져 있는가?
  • 프로세스의 주소공간(메모리와 관련)
    • code, data, stack
      현재시점에 위의 메모리공간에 어떤 값이 들어있는가
  • 프로세스 관련 커널 자료구조
    •  PCB(Process Control Block)
      OS는 프로세스가 하나 시작될때마다 프로세스를 관리하기 위해서 자신의 데이터영역에 PCB라는 자료구조를 하나 둔다.
    • Kernel stack
      • 실행중인 프로세스의 PCB(Process Control Block) 정보
      • 실행중인 프로세스의 Kernel stack 정보커널의 코드는 모든 프로세스가 공유하기 때문에 프로세스마다 별도의 kernel stack을 두고 있다. 프로세스의 현재 상태를 규명하기 위해서는 해당 프로세스의 kernel stack 정보가 필요하다.

프로세스의 상태 (Process State)

프로세스는 상태가 변경되며 수행된다.

CPU가 하나밖에 없는 환경을 가정했을 때 CPU 제어권을 가지고 있는 프로세스는 매 순간 하나밖에 존재하지 않는다.

  • Running
    • CPU 제어권을 가지고 instruction을 수행중인 상태
  • Ready
    • CPU를 기다리는 상태 (실행을 위한 instruction이 메모리상에 올라와 있어서 CPU 제어권만 있으면 바로 실행할 수 있는 상태)
    • Ready 상태에 있는 프로세스들이 CPU 제어권을 주고 받으면서 instruction을 수행함
  • Blocked(wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태!
    •  process 자신이 요청한 event(예:I/O)가 즉시 만족되지 않아 이를 기다리는 상태
    •  Ex) 디스크에서 file을 읽어와야 하는 경우.
  • New
    •  프로세스가 생성중인 상태
  • Terminated
    •  수행이 끝난 상태

Ready queue에 대기하고 있다가 CPU 제어권을 얻어 instruction을 실행한다. 필요에 따라 I/O 작업 또는 공유데이터를 사용하기 위해 blocked 상태로 전환된 뒤 I/O queue 또는 Resource queue에 대기한다. 해당 작업이 끝나면 다시 Ready queue로 복귀한다.

커널이 자신의 data 영역에 queue라는 자료구조를 만들어 놓고 프로세스의 상태를 바꿔가면서 CPU 제어권 분배를 운영한다.

 

Process Control Block(PCB)

운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보

다음의 구성요소를 가진다

  1. OS가 관리상 사용하는 정보
    • Process State, Process ID
    • scheduling information, priority
    • Reday queue에서 대기 순서가 아닌 우선순위가 높은 프로세스가 먼저 CPU 제어권을 얻는다.
  2. CPU 수행 관련 하드웨어 값
    • Program counter, registers
  3. 메모리 관련
    • Code, data, stack의 위치정보
  4. 파일 관련
    • Open file descriptors

문맥교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장 (CPU에서 가지고있던 해당 프로세스에대한 레지스터내부의 정보나 PC에 대한 정보를 프로세스내부에 저장해놓는다)
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴(프로세스가 가지고있던 실행정보를 다시 CPU로 불러와서 복원을 시킨다.)

PCB 정보는 메모리상에서 커널의 data 영역에 저장된다.

 

system call이나 하드웨어 인터럽트가 발생했을 때 반드시 context switch가 일어나는 것은 아니다.

 

(1) 일반적인 하드웨어 인터럽트 system call의 경우 context switch 없이 kernel mode에서 user mode로의 전환만 발생한다.

(2) timer interrupt(CPU 제어권을 다른 프로세스에 넘기려고 하는 의도를 가진 인터럽트)나 I/O처리를 위한 system call(시간이 오래 걸리는 작업이기 때문에 프로세스의 상태를 blocked로 바꾸고 바로 작업 가능한 ready 상태의 다른 프로세스로 CPU 제어권을 옮기는 경우) context switch가 발생한다.

 

(1)의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 저장해야 하지만 문맥교환을 하는 (2)의 경우 그 부담(overhead)이 훨씬 크다. (e.g. cache memory flush)

프로세스를 스케줄링하기위한 큐

  • Job queue
    현재 시스템 내에 있는 모든 프로세스의 집합
  • Ready queue
    현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device queue
    I/O device의 처리를 기다리는 프로세스의 집합
  • 프로세스들은 각 큐를 오가며 수행된다.

맨 위에 있는 Ready queue와 나머지 device queue들의 자료구조를 나타낸 그림이다. PCB의 포인터를 통해 PCB를 줄세운다.

 

 

스케줄러(Scheduler)

Long-term scheduler(장기 스케줄러, job scheduler)

  • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
  • 프로세스에 memory 및 각종 자원을 주는 문제
  • degree of Multiprogramming을 제어(메모리의 올라가는 프로그램의 수를 조정할 수 있음)
  • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)

Short-term scheduler(단기 스케줄러, CPU scheduler)

  • 어떤 프로세스를 다음번에 running시킬지(CPU를 줄 지) 결정
  • 프로세스에 CPU를 주는 문제
  • 충분히 빨라야 함 (millisecond단위)
  • 짧은 시간단위로 스케줄이 실행됨

Medium-term scheduler(중기 스케줄러, Swapper)

사실 우리가 평소에 사용하는 것에는 장기스케줄러가 없다. 프로그램을 실행시키면 바로 메모리에 올라가기는한다. 그래서 이 중기 스케줄러로 메모리에 올라간 여러개의 프로그램을 조절

여유공간마련을 위해 프로세스를 통쨰로 메모리에서 디스크로 쫒아냄

  • 프로세스에게서 memory를 뺐는 문제
  • degree of Multiprogramming을 제어

동기식 / 비동기식 입출력


사용자 프로세스가 운영체제에게 입출력에대한 요청을 한다.
입출력이 수행되는 동안에사용자 프로세스가 아무것도 안하고 기다려야되면 동기식 입출력이고,
입출력요청을 해놓고 사용자 프로세스가 곧바로 CPU를 잡아서 무언가를 수행하면 비동기식 입출력이다.

 

 

 

Comments