[Pintos] Project 1 WIL - keyword 정리

해롱그·2023년 10월 3일
0

OS

목록 보기
6/12

Project 1: Threads

Time-sharing system

  • Context Switching
    : CPU가 현재 작업 중인 프로세스(or 쓰레드)에서 다른 프로세스로 넘어갈 때 지금까지의 프로세스의 상태를 저장하고, 새 프로세스의 저장된 상태를 다시 적재하는 작업을 Context Switch(문맥 교환)이라 한다.
    프로세스의 정보는 PCB에 저장되고, 스레드의 정보는 TCB에 저장된다.
  • Scheduler
    • Round Robin (RR)
      : 선점형 방식 중에 가장 단순한 방식으로, 한 프로세스가 할당받은 시간(time slice)동안 작업을 하다가 작업을 완료하지 못하면 ready queue의 맨 뒤로 가서 자기 차례를 기다리는 방식
    • Priority
      • Priority donation
        : 우선순위를 기반으로 하는 스케줄링 방식으로, Running 중인 스레드보다 우선순위가 높은 스레드가 ready list에 들어오게 되면 실행 중이던 스레드가 우선순위를 양보해주는 매커니즘
    • Multi-Level Feedback Queue Scheduler (MLFQS)
      : 다단계 피드백 큐 스케줄링
      우선순위가 낮은 프로세스에 불리한 다단계 큐 스케줄링(MLQS)의 문제점을 보완한 방식으로, MLQS와 기본적인 형태는 같아 우선순위를 가진 여러 개의 큐를 사용한다. 하지만 MLFQS의 경우 CPU를 사용하고 난 뒤 프로세스의 우선순위가 낮아진다. CPU를 사용한 프로세스는 원래 큐로 되돌아가지 않고 우선순위가 하나 낮은 큐의 끝으로 들어간다.

      - 4BSD
      : 스케줄링 방식 중 하나로, 대기 스레드의 개수, 실행 시간 등으로 overhead는 있지만 복잡한 스케줄링을 효과적으로 처리한다.
      - nice
      : 스케줄링에 들어가는 parameter
      nice가 높을수록 점유 시간이 지나면 priority가 낮아져서 다른 스레드에게 양보한다.
  • Thread
    • Thread Control Block (TCB)
      : 스레드 제어 블록
      OS kernel이 스레드를 관리하기 위해 필요한 정보를 담는 구조체로, PintOS에서는 PCB 대신 스레드의 진행 상황을 running thread의 스택에 저장한다.
    • +) Process Control Block (PCB)
      : 프로세스 제어 블록
      운영체제가 프로세스 스케줄링을 위해 프로세스에 관한 모든 정보를 가지고 있는 데이터베이스

Timer Interrupt

  • interrupt
    • 내부 인터럽트 (소프트웨어 인터럽트)
      주로 프로그램 내부에서 잘못된 명령이나 잘못된 데이터 사용 시 예외상황이 발생하는 것
      • 0으로 나눴을 때
      • 사용자 모드에서 허용되지 않은 명령 또는 공간 접근 시 (시스템 콜)
      • 계산 결과가 Overflow/Underflow 날 때
    • 외부 인터럽트 (하드웨어 인터럽트)
      주로 하드웨어, 프로그램 외부에서 발생되는 이벤트
      • 전원 이상
      • 기계 문제
      • 키보드 등 I/O 관련 이벤트
      • Timer 이벤트
  • timer interrupt (=오버플로우 인터럽트)
    : 마이크로프로세서의 내부 시계를 이용하여 특정 시간마다 발생하는 인터럽트
    예를 들어 1ms마다, 1초마다 인터럽트를 발생시킨다. MSP430에는 4개의 타이머를 가지고 있다. (TA0, TA1, TA2, TB0)
    프로세스 running 중에 스케줄러가 이를 중단시키고, 다른 프로세스로 교체하기 위해 현재 프로세스의 실행을 중단시킨다. 그러려면 스케줄러 코드가 실행되어야 하는데, 이 때 잠시 인터럽트가 사용되는데 이것이 타이머 인터럽트이다.

Timer sleep

일정한 타이머 시간동안 thread가 실행되지 않도록 정지

Synchronization

특정 작업 or critical area가 interrupt에 방해받지 않도록 consistency를 보장하고 이를 동기화라고 한다.

  • Semaphore
    : 양수의 정수를 사용해서 관리 (다수의 프로세스 접근)
  • lock
    : boolean을 사용해서 관리 (한 개의 프로세스 접근)
  • condvar
    : 특정 조건을 만족하기를 기다리는 변수로 thread간의 신호 전달을 위해 사용함
    하나의 thread가 waiting 중이면 조건을 만족한 thread에서 변수를 바꾸고 signaling을 통해 깨우는 방식이다.
    condition variable을 추가하여 동시 접근과 동기화 문제를 해결 (한 개의 프로세스 접근)

발표자료

💡
스레드 스케줄링 할 때 timer(하드웨어)가 꼭 필요하다
timer interrupt를 어떻게 handler할 것 인가
데드락?
낮은 우선순위를 가진 스레드가 락을 점유하고 있을 때 높은 우선순위를 실행하기 위해 시도를 하지만 락의 홀더가 아니므로 두 스레드는 데드락 상태이다.
rip, rsp를 이해하지 못하면 project2 진행할 수 없음!

profile
사랑아 컴퓨터해 ~

0개의 댓글