스케줄러, 스레드

원래벌레·2022년 9월 19일
0

🌞 스케줄러

  • 다중 프로그래밍의 핵심인 병행성을 가능하게 하는 동작으로 프로세스들에게 적절하게 프로세서를 할당한다.

🌼 프로세스의 우선순위

  • 스케줄링의 기준 요소 : 입출력 버스트, 프로세서 버스트
  • 프로세서 버스트의 예 : load, store, add, read

  • 위와 같은 사진으로 프로세스는 CPU버스트와 I/O버스트의 순환구조로 이루어져 있다.

  • 여기서 프로세스는 프로세서 중심 프로세스입출력 프로세스로 나뉘는데,
    먼저 프로세서 중심 프로세스는 프로세서버스트가 매우길다. 그 반면에 입출력프로세스 는 프로세서버스트가 짧다.

  • 위의 이유 때문에 입출력프로세스프로세서 중심 프로세스 보다 빨리 작업을 할 수 있다.

  • 따라서 스케줄러가 프로세스의 우선순위를 결정할 때 입출력프로세스 를 우선으로 설정한다.

  • 왜냐하면 프로세서 중심 프로세스를 앞으로 두게되면 입출력프로세스의 지연시간이 길어진다. 결국 이말은 유저에게 직접적인 영향을 주는 입출력이 느려진다는 것이다.

🌼 프로세서 사용 프로세스를 교환하는 일련의 과정

  • 프로세스의 레지스터들을 내용 보관하고 다른 프로세스의 레지스터들을 적재

  • 오버헤드 발생
    -> 메모리 속도, 저장할 레지스터 수, 특수 명령어의 유무에 따라 다름
    -> OS 설계 시 불필요한 문맥 교환을 감소시켜야 함

🌼 프로세스의 문맥 교환

  • 인터럽트 발생 시 Context Switching이 일어날수도 안 일어날수도 있다.

  • 입출력 완료 인터럽트에 의해서 입출력 동작이 종료되면 대기 상태의 프로세스를 준비 상태로 바꿔준다. 이 인터럽트에 의해서 Context Switching이 일어나지는 않는다.

  • 저장할 데이터가 많을수록 오버헤드가 많이 발생하여 시스템이 지연된다.

🌞 스레드

  • 스레드 실행 환경 정보 -> 레지스터

  • 지역 데이터 -> 스택

스레드 병행 수행의 이점

  • 사용자 응답성

  • 자원 공유

  • 경제성 - 쓰레드 교환은 문맥 교환보다 오버 헤드가 적음

  • 다중 프로세서 아키텍처를 활용하여 성능과 효율 향상

  • 확장성

🌞 스레드의 구현

🌼 사용자 수준 스레드 구현

  • 사용자 스레드 다수 개가 한 개의 커널 스레드에 대응

  • 다대일 매핑

  • 특징
    1) 스레드와 관련된 모든 동작이 사용자 영역
    2) 사용자 영역의 스레드 라이브러리로 구현
    3) 커널은 스레드가 아닌 프로세스에 프로세서 할당

  • 요즘 거의 사용안함

  • 커널영역과 사용자영역은 메모리의 한 부분임.

  • 커널 스레드는 사용자영역의 스레드가 실행되어도, 실행이 되고 있는지 알 수가 없다.

  • 따라서 스레드는 프로세스 하나를 실행하는 것으로 알고 있고, 사용자 영역의 있는 스레드매니저는 여러개의 스레드를 스케줄에 맞게 실행하고 있는것이다.

  • 사용자 수준 스레드는 병렬성이 없다.

  • 커널의 지원이 필요없다.

  • 커널에 대한 지원 없이 라이브러리로 만들어지기 때문에 이식성이 높다.

  • 커널 오버헤드가 일어나지 않는다. ( Context Switching이 일어나지 않음 )

🌼 커널 수준 스레드 구현

  • TCB가 커널영역에 존재한다. 커널스레드와 사용자 스레드가 1대1로 매핑 되어있다.

  • 소프트웨어적인 유연성이 떨어짐

  • 다중 프로세서로 병렬 수행이 가능하다.

🌼 혼합형 스레드 구현

  • 사용자 스레드 여러개를 커널 스레드 여러 개에 유연하게 맵핑

  • 다대다 매핑

  • 커널이 커널 스레드 수를 동적으로 조절

  • 커널 영역에서 병렬 처리 정도를 결정

  • 단점 보완
    1) 사용자 수준 스레드 구현의 병렬성 문제 해결
    2) 커널 수준 스레드 구현의 프로세스당 스레드 수 제한 문제 해결

  • 복잡하여 오버헤드 큼

  • ex) ThreadFiber 패키지가 있는 Windows

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글