리눅스데브코스 [10주차 - 2]<프로세스 상태 및 스케줄러 기본 구조>

심우열·2023년 6월 6일
0

1. 리눅스 스레드 스위칭

1. 리눅스 스레드 스위칭이 발생하는 두가지 상황

  • 스레드 스위칭을 통해 환상을 만들도록 함
    -> 각 프로세스는 혼자 CPU를 사용하고 있다고 착각
    -> 실제로는 스케줄러가 스위칭

1. 자발적인 sleep 과 wait

  • 시스템 콜 호출
  • 프로세스는 디바이스 또는 파이프 I/O 대기

2. 선점

  • 일반적으로 타이머 인터럽트 또는 다른 인터럽트

2. 리눅스 스케줄러 디자인 철학

1. 리눅스는 유저와 커널 스레드를 선점하면서 진행

2. 선점 방법

  • 인터럽트(ex. 10ms 타이머 인터럽트)
  • 대부분이 에너지 절약 때문에 tick-less 커널로 동작

3. 특정 유저 프로그램 CPU-hopping 방어

4. 반응성

  • 공정하게 진행
  • CFS(Complete Fair Schedular) 스케줄러의 철학

2. 커널 슬립 관련 이슈

  1. Lost wakeup
  2. Termination running

1. 스레드가 일하는 중 kill(target_pid) 메시지를 받으면?

1. 문제점

  • 타겟 프로세스는 아마도 실행 중
  • 여전히 프로세스의 kernel stack, page table, proc[] entry를 사용중

2. 해결 방법

  • 리눅스는 바로 실행중인 프로세스를 종료하지 않는다

Linux는 스스로 자살하도록 구현

  • flag만 세팅
  • 타겟 스레드는 trap이나 exit 시 flag를 체크
  • exit()에서 FD들을 close
  • Yields CPU -> parent process

2. sleeping 중 종료 메시지를 받으면?

1. 문제점

  • Task's kernel stack, page table은?

2. 해결책

  • ZOMBIE 상태로 변경
  • 부모 프로세스는 wait() 시스템 콜로 kernel stack, page table을 free

3. 스케줄러

1. 스케줄러에서 중요한 점

1. 타임 슬라이스

  • 어떠한 정책으로 스레드의 타임 슬라이스를 결정하는지
  • 스레드에 주어진 시간
  • 타이머 (HZ)에 영향을 받음
  • 최적화가 어려움
    -> Latency 향상을 위해 너무 작게 잡으면 poor throughput -> context switch overhead
    -> Throughput 향상을 위해 너무 크게 잡으면 poor latency

2. 다음 스레드 선택 정책

  • 어떤 스레드를 어떻게 선택할 지

3. 멀티코어 로드 밸런서

profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

0개의 댓글