본문 바로가기
CS/운영체제

프로세스

by 악어코딩 2022. 12. 2.

프로세스란?

프로세스의 문맥(context)

  • CPU 수행 상태를 나타내는 하드웨어 문맥
    • Program Counter
    • 각종 register
  • 프로세스의 주소 공간
    • code, date, stack
  • 프로세스 관련 커널 자료 구조
    • PCB(Process Control Block)
    • Kernel stack

프로세스의 상태(Process state)

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

  • Running
    • CPU를 잡고 instruction을 수행중인 상태
  • Ready
    • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
  • Blocked(wait, sleep)
    • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
    • Process 자신이 요천한 event가 즉시 만족되지 않아 이를 기다리는 상태
    • 예) 디스크에서 file을 읽어와야 하는 경우
  • Suspended(stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 통째로 디스크에 swap out 된다
    • 예) 사용자가 프로그램을 일시 정지시킨 경우 (break key)
    • 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (메모리에 너무 많은 프로세스가 올라와 있을 때)

New: 프로세스가 생성중인 상태

Terminated: 수행(execution)이 끝난 상태

Blocked: 자신이 요청한 event가 만족되면 Ready

Suspended: 외부에서 resume해 주어야 Active

 

PCB

문맥 교환(Context Switch)

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 실행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
  • System call이나 Interrupt 발생 시 반드시 context switch가 일어나는 것은 아님

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

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

스케줄러

  • Long-term scheduler(job scheduler)
    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼 지 결정
    • 프로세스에 memory를 주는 문제
    • degree of multiprogramming을 제어
    • time sharing system에는 보통 장기 스케줄러가 없음(무조건 ready)
  • Short-term scheduler(CPU scheduler)
    • 어떤 프로세스를 다음번에 running 시킬 지 결정
    • 프로세스에 CPU를 주는 문제
    • 충분히 빨라야함(ms)
  • Medium-Term scheduler(swapper)
    • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄
    • 프로세스에게서 memory를 뺏는 문제
    • degree of multiprogramming을 제어

프로세스 상태도

Thread

Thread는 CPU사용의 가장 기초단위

Thread의 구성

  • Program counter
  • register set
  • stack space

Thread가 동료 Thread와 공유하는 부분(task)

  • code section
  • data section
  • OS resources

전통적인 개념의 heavyweight process는 하나의 thread를 가지고있는 task로 볼 수 있다

다중 스레드로 구성된 테스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 테스크 내의 다른 스레드가 running되어 빠른 처리를 할 수 있다

동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다

스레드를 사용하면 병렬성을 높일 수 있다

Thread의 장점

  1. 응답성 - 웹브라우저가 여러개의 쓰레드를 갖고 있으면 network가 block되더라도 다른 쓰레드가 display를 계속 진행함
  2. 자원공유 - 쓰레드끼리는 code, data, resource를 공유할 수 있다. 하나의 프로세스를 만들고 그 안에 여러 쓰레드를 넣으면 효율적
  3. 경제성 - 프로세스를 만들거나 CPU switching보다 효율적이다. Solaris의 경우 overhead가 각각 30배, 5배 더 많다.
  4. CPU가 여러개 있는 경우에서의 활용 - 각각의 쓰레드는 다른 프로세서에서 병렬적으로 실행된다.
  • 오버헤드(overhead): 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다.

예를 들어 A라는 처리를 단순하게 실행한다면 10초 걸리는데, 안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면, 오버헤드는 5초가 된다. 또한 이 처리 B를 개선해 B'라는 처리를 한 결과, 처리시간이 12초가 되었다면, 이 경우 오버헤드가 3초 단축되었다고 말한다

쓰레드의 구현

출처 :

-  ABRAHAM SILBERSCHATZ ET AL., OPERATING SYSTEM CONCEPTS, NINTH EDITION, WILEY, 2013

- 반효경, 운영체제와 정보기술의 원리, 이화여자대학교 출판부, 2008

- 반효경, 운영체제, 이화여대 강의, 2014-1

'CS > 운영체제' 카테고리의 다른 글

CPU 스케줄링  (4) 2022.12.04
프로세스 매니저  (0) 2022.12.04
시스템 구조 & 프로그램 실행  (0) 2022.11.29
운영체제란?  (0) 2022.11.29