CS/운영체제

[운영체제] KOCW 반효경 교수님 강의 - 5. Process 1

pythaac 2022. 3. 28. 03:30

  • 프로세스
    • program in execution = 실행중인 프로그램
    • 프로세스의 문맥(context)이 중요
  • 프로세스 context
    • 특정 시점에서 프로세스가 어디까지 수행했는지, stack/data/code와 PC와 register 등 어떤 상태인지
    • 프로세스의 현재 상태를 정의
    • 1. CPU 수행 상태를 나타내는 하드웨어 문맥
      - PC, register
      - 이 프로세스가 instruction을 어디까지 실행했는지
    • 2. 프로세스의 주소 공간
      - code, data, stack
      - 현 시점의 프로세스 주소공간에 어떤 내용이 들어가 있는가
    • 3. 프로세스 관련 커널 자료구조
      - PCB, 커널 스택
      - 프로세스가 실행될 때마다 운영체제가 PCB를 하나씩 두고 관리
      - 시스템 콜이 발생할 때마다 커널에서 stack으로 관련 정보를 작성
  • 프로세스의 context가 중요한 이유
    • 현대 운영체제는 프로세스가 특정 시간 CPU를 점유하고나면 다른 프로세스를 실행함
    • 이 때 이 프로세스의 상태를 정확하게 기억해야 다시 실행할 때 문제가 없음

  • 프로세스의 상태
    • Running
      • 컴퓨터에 CPU가 하나만 있다면, CPU가 잡고 있는 프로세스는 매 순간 하나
      • CPU를 점유하여 instruction이 실행중인 프로세스의 상태
      • Running에서 상태가 변하는 경우
        • I/O와 같은 event 발생으로 자진해서 CPU를 반납 -> waiting(Blocked)
        • Timer에서 인터럽트로 인해 반납 -> ready
    • Ready
      • CPU를 기다리는 프로세스의 상태
      • CPU에서 바로 실행할 수 있도록, 메모리에 load하는 등 다른 준비는 끝난 상태
      • CPU만 할당하면 바로 실행
    • Blocked
      • CPU를 줘도 당장 instruction을 실행할 수 없는 상태
      • ex) 프로세스가 요청한 event(I/O)가 즉시 만족되지 않아 기다리는 상태
      • ex) swap 영역의 instruction을 실행하여 바로 실행할 수 없는 상태
    • 그 외
      • New : 프로세스가 생성 중인 상태
      • Terminated : 프로세스가 수행이 끝나서 정리중인 상태

 

  • 프로세스의 상태 변화 예시
    • CPU에 할당된 프로세스는 Running
    • 할당된 시간이 종료되면, Timer의 인터럽트로 인해 Ready Queue로 옮겨져서 Ready
    • Running 중에 디스크에서 읽어올 데이터가 있으면 Disk I/O 관련 Queue로 옮겨져서 Blocked
    • I/O 뿐 만 아니라, 공유 데이터에 접근해야할 시 해당 Resource에 관련된 Queue로 옮겨져서 Blocked
    • 해당 작업이 완료가 되면 Ready Queue로 옮겨져서 Ready

  • Process Control Block (PCB)
    • 운영체제에서 프로세스의 상태를 관리하기위해 저장하는 정보
    • 1. OS가 관리하기위해 사용하는 정보
      • 프로세스 상태
      • 프로세스 ID
      • 스케줄링 정보
      • 우선순위 -> 운영체제는 RR인 것 같지만, 우선순위가 높은 프로세스에게 더 빨리 CPU를 줌
    • CPU의 문맥을 표시하기 위한 값들
    • 2. CPU 수행 관련 하드웨어 값
    • 3. 메모리
    • 4. 파일

  • 문맥 교환 (Context Switch)
    • CPU를 하나의 사용자 프로세스에서 다른 사용자 프로세스로 넘겨주는 과정
    • 프로세스의 상태(문맥)를 정확히 기억하고 있어야함
    • 이 문맥(PCB)를 저장하기 위해 커널의 주소공간 data 영역에 공간이 있음

  • 문맥 교환의 헷갈리는 개념
    • System call이나 interrupt가 발생한다고 해서 context switching이 일어나는 것은 아니다
    • 문맥 교환의 정의 : 하나의 사용자 프로세스에서 다른 사용자 프로세스로 CPU가 넘어가는 것
    • system call과 interrupt는 사용자 프로세스에서 운영체제에게로 CPU가 넘어감
    • interrupt 이 후, 이전에 실행중이던 프로세스가 아닌 다른 사용자 프로세스에게 CPU가 넘어가면 context switching이 일어남 (Timer interrupt)
    • 커널 모드로 들어가는 것도 메모리영역과 같이 어느 정도 문맥이 바뀌지만, 프로세스 A에서 프로세스 B로 CPU가 전부 바뀌는 것보다 오버헤드가 적다
    • 예를 들면, 프로세스가 바뀌면 이전 프로세스가 사용하던 캐시 메모리를 모두 삭제

  • 프로세스 스케줄링 큐
    • 프로세스를 큐에 줄 세운다는 것은 PCB를 줄세운다는 것
    • Job queue
      - 모든 프로세스 큐
    • Ready queue
      - ready 상태의 프로세스들의 큐
    • Device queue
      - I/O 처리를 기다리는 프로세스의 큐

 

  • 스케줄러
    • 1. CPU scheduler (Short-term scheduler, 단기 스케줄러)
      • 굉장히 빠른 주기로 스케줄링이 이루어져서 short-term
      • 어떤 프로세스에게 CPU를 줄지를 결정
    • 2. Job scheduler (Long-term scheduler, 장기 스케줄러)
      • 프로세스가 시작될 때 메모리를 줄지말지 결정하는 스케줄러
      • 프로세스의 상태가 new -> ready가 될 때 이루어지는 일
        - 프로세스가 메모리를 얻지 못하면 아무것도 못함
        - 메모리가 올라오는 것을 허락(admitted)해주면 비로소 ready 상태가 됨
        - 이를 관리하는 것이 Job scheduler
      • degree of Multiprogramming 제어 : 메모리에 올라가는 프로세스의 수를 관리
        - 메모리에 너무 적은 프로세스가 올라오면 컴퓨터 성능이 안좋음
        - 프로세스가 I/O 하러 가면 아무 프로그램도 실행되지 않음
        - 메모리에 너무 많은 프로세스가 올라와도 컴퓨터 성능이 안좋음
        - 프로세스들에게 할당된 메모리가 적어, 당장 실행할 명령어도 메모리에 안올라와서 I/O하러감
      • 그러나 현대 운영체제에는 Job scheduler가 없다고 함 (degree of Multiprogramming은 중기 스케줄러로 조절)
    • 3. Swapper (Medium-term scheduelr, 중기 스케줄러)
      • 현대 운영체제는 프로그램을 실행시키면 일단 모두 메모리에 올림
      • degree of Multiprogramming 제어
        - 메모리에 너무 많은 프로세스가 올라오면, 프로세스를 통째로 디스크로 쫓아냄
      • 중기 스케줄러로 인해, 프로세스의 상태에 Suspended가 추가됨
        - Suspended(stopped) : 프로세스가 통째로 디스크에 swap out되어 정지된 상태

  • Blocked vs Suspended
    • Blocked는 I/O와 같이 자신이 요청한 event에 의해 멈춰진 상태
    • Blocked는 event가 완료되면 Ready Queue로 옮겨짐
    • Suspended는 외부에 의해서 stop된 상태
    • Suspended는 외부에서 재개 시켜줘야 active한 상태로 옮겨질 수 있음
    • 외부 : 중기 스케줄러, 리눅스에서 ctrl+z를 누르면 프로세스를 일시중지 시킬 수 있음 -> 사람이 다시 재개 시켜야함

  • Running 상태가 2개
    • Running(user mode)
      - user mode에서 프로세스가 실행 중일 때
    • Running(monitor mode)
      - System call 등으로 운영체제 코드가 실행 중일 때
      - "운영체제가 실행중이다"라고 말하지 않음
      - 이 프로세스가 "커널 모드에서 실행중이다"라고 함
    • 외부의 인터럽트는?
      - 외부의 인터럽트로 인해 ISR이 실행되더라도, 이 프로세스는 커널 모드에서 실행중이다라고 함
  •  Suspended 상태가 2개
    • Blocked에서 swap out되면 Suspended Blocked
    • Ready에서 swap out되면 Suspended Ready
    • 만약 Suspended Blocked에서 이벤트가 끝나면 Suspended Ready로 이동 가능