ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] 운영체제 프로세스, 스케줄러
    Computer Science/OS 2022. 12. 29. 19:02

    http://www.kocw.net/home/cview.do?lid=b31830a2b3cf1e60 

     

    운영체제

    운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영체제를 구성하는 각

    www.kocw.net

    Process 1

     

    프로세스의 개념, 프로세스의 상태(Process State), 프로세스의 개념, 프로세스 상태도, Process Control Block(PCB), 문맥교환(Context Switch), 프로세스를 스케줄링하기 위한 큐, Ready Queue와 다양한 Device Queue, 스케줄러(Scheduler)


    프로세스

    • 실행 중인 프로그램
    • 프로세스의 문맥
      • 프로세스가 현재 어떤 상태에서 수행되고 있는지 정확히 규명하기 위해 필요한 정보를 의미
      • CPU 수행 상태를 나타내는 하드웨어 문맥
      • 프로세스의 주소 공간
      • 프로세스 관련 커널 자료구조
        • PCB
        • kernel stack

     

     

    📝 프로세스와 쓰레드의 차이
    프로세스
    - 메모리에 올라와 실행되고 있는 프로그램의 인스턴스
    - 특징
          운영체제로부터 독립된 메모리 영역을 할당받는다. ( 다른 프로세스의 자원에 접근할 수 X)
          프로세스들은 독립적이기 때문에 통신을 위해 IPC를 사용해야한다.
                *IPC(Inter Process Communication):프로세스들끼리 서로 데이터를 주고받는 행위 또는 그에 대한 방법
          프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있다.
    쓰레드
    - 프로세스 내에서 할당받은 자원을 이용해 동작하는 실행 단위
    - 특징
          쓰레드는 프로세스 내에서 stack만 따로 할당 받고, code, data, heap 영역은 공유한다.
          쓰레드는 프로세스 자원을 공유하기 때문에 다른 쓰레드에 의한 결과를 즉시 확인할 수 있다.
          프로세스 내에 존재하며, 프로세스가 할당받은 자원을 이용하여 실행된다.

     

    프로세스의 상태

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

    • Running
      • CPU를 잡고 instruction을 수행 중인 상태
    • Ready
      • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
    • Blocked(wait, sleep)
      • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
      • Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리는 상태
      • 예시) 디스크에서 file을 읽어와야 하는 경우

    프로세스 상태도


    Process Control Bolck (PCB)

    • 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
    • 구성요소 (구조체로 유지)
      1. OS가 관리상 사용하는 정보
        • Process state, Process ID
        • scheduling information, priority
      2. CPU 수행 관련 하드웨어 값
        • Program counter, registers
      3. 메모리 관련
        • code, data, stack 의 위치정보
      4. 파일 관련
        • Open file descriptors

    문맥교환 (context switch) ⭐️

    CPU는 굉장히 빠른 자원이기 때문에, 빠른 간격으로 얻었다가 뺏기는 과정을 반복합니다.

    → 뻇기는 시점을 기억해두었다가 그 시점부터 시작할 수 있도록


    기존의 프로세스의 상태 또는 레지스터 값을 저장하고 또 다른 프로세스를 실행할 수 있도록 새로운 프로세스의 상태 또는 레지스터 값을 교체하는 과정을 의미

    • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정

    • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
      • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
      • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

    ** 헷갈리기 쉬운 점

    • System call이나 interrupt 발생 시, 반드시 context switch가 일어나는 것은 아님 !
    System call : 본인이 필요해서 운영체제에게 요청을 할 때
    interrupt: 컨트롤러같은 장치가 CPU에 정보를 전달할 목적으로 interrupt를 거는 것
    • 예시1) 사용자 프로세스로부터 운영체제(커널 모드)로 넘어 간 것 → 컨텍스트 스위치 X

    • 예시2) 사용자 프로세스 A 에서 timer interrupt or I/O 요청 system call(오래걸리는 작업) 을 함 → 문맥교환 일어남(다른 프로세스를 실행시키기 위해) → 사용자 프로세스 B 실행 → 컨텍스트 스위치 일어남

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

     

    📝 Context Switching이란?
    • 인터럽트를 발생시켜 CPU에서 실행중인 프로세스를 중단하고, 다른 프로세스를 처리하기 위한 과정입니다.

    • 현재 실행중인 프로세스의 상태를 먼저 저장하고, 다음 프로세스를 동작시켜 작업을 처리한 후에 이전에 저장된 프로세스의 상태를 다시 복구합니다.

    • 인터럽트란, CPU가 프로세스를 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요함을 CPU에게 알리는 것을 말합니다.

     

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

    • Job queue
      • 현재 시스템 내에 있는 모든 프로세스의 집합

    • Ready queue
      • 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합

    • Device queues
      • I/O device의 처리를 기다리는 프로세스의 집합

    → 프로세스들은 각 큐들을 오가며 수행된다

    스케줄러(Scheduler)

    어떤 프로세스에게 자원을 할당할지를 결정하는 운영체제 커널의 코드

    • Long-term scheduler(장기 스케줄러 or job scheduler)
      • 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정

      • 프로세스에 memory(및 각종 자원)을 주는 문제  → 어떤 프로세스가 new상태에 있는 데 메모리를 줄지 안줄지를 결정

      • degree of Multiprogramming을 제어
        * degree of multiprogramming: 메모리에 올라가 있는 프로세스의 수

      • time sharing system에서는 보통 장기 스케줄러가 없음 (무조건 ready)

    • Short-term scheduler(단기 스케줄러 or scheduler)
      • 어떤 프로세스를 다음번에 running 시킬지 결정

      • 프로세스에 CPU를 주는 문제

      • 충분히 빨라야함 (millesecond 단위)

    • Medium-Term Scheduler(중기 스케줄러 or Swapper)
      • 여유 공간 마련을 위해 프로세스를 통쨰로 메모리에서 디스크로 쫓아냄

      • 프로세스에게서 memory를 뺏는 문제

      • degree of multiprogramming 을 제어
    multiprogramming: 메모리에 여러프로그램이 동시에 올라가는 것


    보통 시스템에선 곧바로 메모리로 올려놓기 때문에 long-term scheduler는 없다.

    중기 스케줄러를 이용하여 조절하고 있다.

    프로세스의 상태

    중기 스케줄러의 등장으로 인해 프로세스의 상태에 실행, 준비, 봉쇄 외의 상태가 더 추가 된다.

    • Running
      • CPU를 잡고 instruction을 수행 중인 상태

    • Ready
      • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

    • Blocked(wait, sleep)
      • CPU를 주어도 당장 instruction을 수행할 수 없는 상태
      • Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리는 상태
      • 예시) 디스크에서 file을 읽어와야 하는 경우

    • Suspended(stopped)
      • 외부적인 이유로 프로세스의 수행이 정지된 상태
      • 프로세스는 통쨰로 swap out된다.
        → 프로세스 당 보유 메모리양이 지나치게 적어진 경우 이를 완화하기 위해 일부 프로세스를 메모리에서 디스크로 스왑 아웃시킴
      ** swap out ? 메모리에 올라와 있는 프로세스 중 일부를 선정해 이들로부터 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑 영역에 저장해주는 것*
      • 예시) 사용자가 프로그램을 일시 정지 시킨 경우 시스템이 여러 이유로 프로세스를 잠시 중단시킴 (메모리에 너무 많은 프로세스가 올아와 있을 때)

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

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

    댓글

Designed by Tistory.