[운영체제] #3 Process

또상·2022년 6월 5일
0

Operating System

목록 보기
4/13
post-thumbnail

개념

  • 프로세스 : 실행중인 프로그램
  • CPU가 다른 프로세스로 넘어갈 때 이전에 실행하던 시점부터 시작하기 위한 정보가 필요하다.

  • 프로세스의 문맥 (context)
    • 프로세스의 현재 상태를 나타내기 위해 필요한 정보
    • CPU 수행 상태를 나타내는 하드웨어 문맥
      • instruction 을 어디까지 실행했는지에 대한 정보
      • Program Counter : 실행 중인 프로세스의 코드 영역을 가리키고 있음. (어디까지 실행했는지)
      • 각종 register
    • 프로세스의 주소 공간
      • 현재 프로세스의 메모리 공간에 어떤 값이 담겨있는지?
      • code, data, stack
    • 프로세스 관련 커널 자료구조
      • 커널에서 프로세스를 관리하기 위해서 가지고 있는 정보.
      • PCB (Process Control Block) : 프로세스 하나 당 PCB 하나
      • Kernel Stack : 커널 함수 실행 스택 - 프로세스별로 따로 공간을 가짐.

PCB

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

    1. OS가 관리상 사용하는 정보
    • Process State, Process ID
    • scheduling information, priority
    1. CPU 수행 관련 하드웨어 값
    • Program Counter, registers
    1. 메모리 관련
    • Code, Data, Stack 의 위치 정보
    1. 파일 관련
    • Open file descriptors ....

상태

  • Running : CPU 를 잡고 instruction 을 수행 중인 상태
  • Ready : CPU 를 기다리는 상태 - 다른 조건은 모두 만족하고 있어서 CPU를 잡기만 하면 바로 수행이 가능한 상태.
  • Blocked (wait, sleep) : CPU 를 주어도 instruction 을 수행할 수 없는 상태
    • Process 가 요청한 event (ex. I/O) 가 만족되지 않아서 그걸 기다리고 있는 상태
    • ex) 디스크에서 파일을 읽어와야 함...
  • New : 프로세스가 생성 중인 상태
  • Terminated : 수행이 끝난 상태 (종료됐지만 정리할 것이 남음)
  • 종료되면 프로세스가 아님!!!

문맥 교환 (Context Switch)

  • CPU 를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • 운영체제의 역할
    • CPU 를 내어주는 프로세스의 상태를 해당 프로세스의 PCB 에 저장하고,
    • CPU 를 얻는 프로세스의 상태를 해당 프로세스의 PCB 에서 읽어옴.

  • System call, Interrupt 가 발생했을 때, 항상 문맥 교환이 일어나는 것은 아니다.
  • 다른 프로세스로 CPU 가 넘어갈 때만 일어남. (ex. timer interrupt)
  • +) System Call 이 일어나서 OS 커널 코드가 실행중이면, 프로세스가 커널 모드에서 실행중이라고 하지 운영체제가 실행중이다.. 라고 하지 않는다.

프로세스 스케쥴링 큐

  • Job Queue : Ready + Device
    • 현재 시스템 내의 모든 프로세스의 집합
  • Ready Queue
    • 현재 메모리에 올라와 있으면서, CPU 를 잡아서 실행되기를 기다리는 프로세스의 집합
  • Device Queues
    • I/O device 의 처리를 기다리는 프로세스의 집합
  • 프로세스는 Ready, Device 를 왔다갔다 하면서 실행된다.
  • 큐는 연결리스트로 구현된다. PCB 를 연결!!!

스케쥴러

  • Long-term Scheduler (장기 스케줄러 or Job Scheduler)
    • New -(Long-term Scheduler)-> Ready
    • 시작 프로세스 중에서 어떤 것을 ready queue 로 보낼지 결정.
    • 프로세스에 메모리(+ 자원) 을 주는 문제
    • degree of MultiProgramming 을 제어 : 메모리에 올라가는 프로세스 수를 제어
    • Time-Sharing 에는 없는 경우가 많음.
  • Short-term Scheduler (단기 스케줄러 or CPU Scheduler)
    • Ready -(Short-term Scheduler)-> Running
    • 어떤 프로세스를 다음번에 running 시킬지 결정
    • 프로세스에 CPU 를 주는 문제
    • ms 단위로 동작할 수 있을 만큼 빨라야함.
  • Medium-term Scheduler (중기 스케줄러 or Swapper)
    • Ready/Running -(Medium-term Scheduler)-> Suspended
    • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄.
    • 프로세스에게서 memory 를 빼앗는 문제
    • degree of MultiProgramming 제어 : 메모리에서 내림.

프로세스의 상태 - Suspended(Stopped)

  • 중기 스케줄러 때문에 추가되는 프로세스의 상태
  • 외부적인 이유로 프로세스의 수행이 정지된 상태
  • 프로세스는 통째로 디스크에 Swap Out 된다.
  • 예) 사용자가 프로그램을 일시 정지 시킴 (Ctrl + Z)
  • 시스템이 프로세스를 잠시 중단시킴 (메모리에 너무 많은 프로세스가 올라와 있다던지..)

Blocked vs Suspended

  • Blocked : 자신이 요청한 Event 가 만족되면 Ready
  • Suspended : 외부에서 resume 해주어야 Active


Thread (lightweight process)

개념

  • 프로세스 내부의 CPU 실행 단위.
  • 같은 일을 하는 프로세스를 여러개 띄우고 싶을 때, 쓰레드를 사용하면 더 빠르고 자원의 낭비 없이 수행할 수 있다.

  • Thread 의 구성 : CPU 실행과 관련된 부분으로 이루어짐. (공유 X)
    • Program Counter
    • Register set
    • Stack space
  • Thread 가 공유하는 영역 (= task)
    • 메모리 내 Code, Data 영역
    • OS resources
  • 프로세스 (heavyweight process) : 하나의 thread를 가지는 task

장점

  • 하나의 서버 스레드가 Blocked (waiting) 상태여도 동일한 태스크 내의 다른 스레드가 Running (실행) 되면서 빠른 처리를 할 수 있다.
    • Web Browser : 각각을 프로세스가 아니라 쓰레드로 구성하면, Web Page (html 문서) 를 읽어오는 I/O 를 하는 동안 Blocked 로 가지 않고, 다른 스레드가 이미 읽어온 텍스트 먼저 보여줄 수 있다.
  • 동일한 일을 하는 다중 스레드가 협력해서 처리율이 높아지고 성능이 향상됨.
    • 같은 일을 하는 프로세스가 많으면 메모리에 전부 올라와 있어서 메모리 낭비임.
    • 하나의 프로세스 안에 스레드 여러개로 구성하면 많은 영역을 공유할 수 있어서 자원 낭비를 줄일 수 있음.
  • CPU 가 여러개인 컴퓨터에서 스레드 사용 시 병렬성을 높일 수 있다.
    • 행렬의 곱셈을 구역별로 나눠서 한다던가..

  • Responsiveness
  • Resource Sharing
  • Economy
    • 프로세스에 비해, Creating & Context Switching 오버헤드가 훨씬 적다.
    • Solaris 시스템의 경우, 스레드에 비해 프로세스의 오버헤드가 생성 30배, 문맥 교환 5배
  • Utilization of Multi Processer Architectures
    • 각 스레드가 각각 다른 CPU 에 의해서 병렬적으로 실행됨.

구현

  • Kernel Threads
    • OS 에서 지원하는 스레드
    • 쓰레드가 여러개임을 OS 도 알고 있기 때문에 CPU 가 thread 사이에서 이동할 때도 OS가 개입한다.
  • User Thread
    • 사용자 수준에서 스레드를 생성하는 것.
    • 직접 메모리에 접근해서 생성할 일은 없고, 라이브러리 코드를 이용!



출처 / 참고

반효경 교수님의 2014 운영체제 3. Process, 2, 3 강의를 듣고 포스팅하고,
공룡책을 읽고 추가 정리합니다.

사진 출처는 강의 자료.

profile
0년차 iOS 개발자입니다.

0개의 댓글