프로세스 관리

Sumin Kim·2022년 9월 6일
1

✔ Operating system

목록 보기
3/5
post-thumbnail

본 글은 KOCW 이화여대 반효경 교수님의 운영체제 강의를 듣고 정리한 내용입니다.
http://www.kocw.net/home/m/search/kemView.do?kemId=1226304

  1. 프로그램의 실행과정을 이해하고 커널이 가진 내용과 사용자 프로그램이 사용하는 함수를 알아본다.
  2. 프로세스의 개념, 상태, 문맥과 운영체제가 프로세스를 큐에 넣고 관리하는 형태에 대해 알아본다.
  3. 스케줄러의 세 종류인 장기, 단기, 중기 스케줄러에 대해 알아본다.
  4. 프로세스의 상태 변화와 프로세스 중 CPU 수행 단위인 스레드에 대해 알아본다.
  5. 프로세스의 생성에 있어 자식 프로세스가 부모 프로세스를 복제, 새로운 과정을 덮어씌우는 과정과 프로세스의 종료에 대해 알아본다.

Process

🔹 프로세스의 개념

  • 실행중인 프로그램

    • 프로그램의 실행
  • 프로세스의 context(문맥)

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

🔹 프로세스의 상태

  • Ready, Running, Blocked
    • Running
      • CPU를 잡고 instruction을 수행중인 상태
    • Ready
      • CPU를 기다리는 상태 (메모리 등 다른 조건을 모두 만족하고)
    • Blocked (Wait, Sleep)
      • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
      • Process 자신이 요청한 event(ex.I/O)가 즉시 만족되지않아 이를 기다리는 상태
      • ex) 디스크에서 file을 읽어와야하는 경우
        - New : 프로세스가 생성중인 상태
        - Terminated : 수행이 끝난 상태

    • Suspended(stopped) : 중기 스케줄러에 의해, ...
      • 외부적인 이유로 프로세스의 수행이 정지된 상태
      • 프로세스는 통째로 디스크에 swap out 된다
      • ex) 사용자가 프로그램을 일시정지시킨 경우 (break key)
        시스템이 여러이유로 프로세스를 잠시 중단시킴(메모리에 너무 많은 프로세스가 올라와있을때)
        • Blocked : 자신이 요청한 event 가 만족되면 Ready
        • Suspended : 외부에서 resume해주어야 Active
  • 프로세스 상태도

    💠 인터럽트

    • 현대의 운영체제는 인터럽트에 의해 구동됨

🔹 Process Control Block (PCB)

  • PCB

    • 운영체제 kernel에 PCB를 가지고있음

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

    • 다음과 같은 구성요소 구조체로 유지
      (1) OS 가 관리상 사용하는 정보
      (2) CPU 수행 관련 하드웨어 값

      • 🔹 Context Switch
        • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
        • System call이나 interrupt 발생시 반드시 일어나는 것은 아님
        • CPU 가 다른 프로세스에게 넘어갈 때
          1. CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장함
          2. CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
        • 문맥교환이 아닌 경우
          • 오버헤드가 작은 경우
          • CPU 수행정보 등 context 의 일부를 PCB에 save해야하지만 문맥교환을 하는 경우 그 부담이 훨씬 큼
        • 문맥교환인 경우

      (3) 메모리 관련
      (4) 파일 관련

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

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


🔹 스케줄러 (Scheduler)

  • 운영체제 안에있는 코드의 일부다.
  • Long-term scheduler (장기스케줄러 or job scheduler)
    • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
    • 프로세스에 memory(및 각종자원)을 주는 문제
    • degree of Multiprogramming (== 메모리에 올라가있는 프로그램 수) 을 제어
    • time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)

  • Short-term scheduler (단기 스케줄러 or CPU scheduler)
    • 어떤 프로세스를 다음번에 running 시킬지 결정
    • 프로세스에 CPU를 주는 문제
    • 충분히 빨라야함 (millisecond 단위)

  • Medium-term scheduler (중기 스케줄러 or Swapper)
    • 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    • 프로세스에게서 메모리를 뺏는 문제
    • degree of Multiprogramming을 제어

🔹 스레드 (Thread)

  • A thread is a basic unit of CPU utilization

  • Thread 의 구성

    • 별도로 가지는 것들 (이외에는 다 공유)
      • program counter
      • register set
      • stack space

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

    • code section
    • data section
    • OS resources

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

  • 다중 스레드로 구성된 태스크 구조에서는 하나의 서버스레드가 blocked(waiting)상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 할 수 있음 → 응답성 빨라짐

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

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

  • PCB

  • 장점

    • 응답성이 빠르다
    • 자원을 공유하는 효과가 있음
    • 경제적
      • 스레드 하나를 만드는 것보다 프로세스 하나를 만드는 것이 30배 더 시간이 소요됨 (오버헤드 차이)
    • Multi processor 유용성 : 병렬성 추구 가능

  • 구현 방법

    • Kernel Threads : 운영체제가 스레드의 존재를 알게 구현하는 것
    • User Threads : 운영체제가 스레드의 존재를 모름
      • 프로세서 내부에서 스레드를 옮기는

🔹 프로세스 생성

  • 부모프로세스가 자식프로세스 생성
  • 프로세스의 트리 (계층구조) 형성
  • 프로세스는 자원을 필요로 함
    • 운영체제로부터 받는다
    • 부모와 공유한다
  • 자원의 공유
    • 부모와 자식이 모든 자원을 공유하는 모델
    • 일부를 공유하는 모델
    • 전혀 공유하지 않는 모델
  • 수행 (Execution)
    • 부모와 자식은 공존하며 수행되는 모델
    • 자식이 종료(terminate)될때까지 부모가 기다리는(wait) 모델 - blocked 상태

  • 주소공간 (Address space)
    • 자식은 부모의 공간을 그대로 복사함 (binary and OS data)
    • 자식은 그 공간에 새로운 프로그램을 올림
  • ex) UNIX
    • fork() 시스템 콜이 새로운 프로세스를 생성
      • 부모를 그대로 복사 (OS data except PID + binary)
      • 주소 공간 할당
    • fork 다음에 이어지는 exec() 시스템콜을 통해 새로운 프로그램을 메모리에 올림

🔹 프로세스 종료

  • 프로세스가 마지막 명령을 수행후 운영체제에게 이를 알려줌 (exit)
    • 자식이 부모에게 output data를 보냄 (via wait0
    • 프로세스의 각종 자원들이 운영체제에게 반납됨
  • 부모 프로세스가 자식의 수행을 종료시킴 (abort)
    • 부모보다 자식이 먼저 종료
    • 자식이 할당자원의 한계치를 넘어서면 자식에게 할당된 태스크가 더이상 필요하지 않음
    • if) 부모가 exit 된 경우
      • 자식이 더이상 수행되지 않도록 자식들을 먼저 다 종료되고 부모가 종료
      • 단계적인 종료 (가장 말단의 자식부터)

🔹 시스템 콜

🧐 fork()

  • A process is created by the fork() system call
    • 복제 생성 (자식프로세스 생성)
    • parent process:pid > 0 ; child process:pid = 0

🧐 exec()

  • A process can execute a different program by the exec() system call
    • 새 프로그램으로 대체
    • 보통 fork()를 먼저하고 자식에게는 execlp()를 해서 새롭게 돌리는 구조

🧐 wait()

  • 프로세스 A가 wait() 시스템 콜을 호출하면
    • 커널은 child가 종료될때까지 프로세스 A를 sleep 시킨다 (block 상태)
    • Child process가 종료되면 커널은 프로세스 A를 깨운다 (ready 상태)

🧐 exit()

  • frees all the resources, notify parent
  • 프로세스의 종료
    • 자발적 종료
      • 마지막 statement 수행후 exit() 시스템 콜을 통해 프로그램에 명시적으로 적어주지않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌
    • 비자발적 종료
      • 부모 프로세스가 자식 프로세스를 강제 종료시킴
        • 자식프로세스가 한계치를 넘어서는 자원요청
        • 자식에게 할당된 태스크가 더이상 필요하지않음
      • 키보드로 kill, break 등을 친 경우
      • 부모가 종료하는 경우
        • 부모프로세스가 종료하기 전에 자식들이 먼저 종료됨

🔹 프로세스간 협력

  • 독립적 프로세스 (Independent process)

    • 프로세스는 각자의 주소 공간을 가지고 수행되므로 원치적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지못함
  • 협력 프로세스 (Cooperating process)

    • 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
  • 프로세스간 협력 메커니즘 (IPC : Interprocess Communication)

    • 메시지를 전달하는 방법

      • message passing : 커널을 통해 메시지 전달
        • 프로세스 사이에 공유변수를 일체 사용하지 않고 통신하는 시스템
        • 방식
    • 주소 공간을 공유하는 방법

      • shared memory : 서로 다른 프로세스간에도 일부 주소공간을 공유하게하는 shared memory 매커니즘이 있음
        ** thread : thread는 사실상 하나의 프로세스이므로 프로세스간 협력이라고 보긴 어렵지만 동일한 프로세스를 구성하는 스레드 간에는 주소 공간을 공유하므로 협력이 가능

0개의 댓글