KKanging

[운영체제] 멀티프로세서 스케줄링(고급) 본문

cs/운영체제

[운영체제] 멀티프로세서 스케줄링(고급)

천방지축 개발자 2024. 5. 3. 19:50

 

멀티프로세서란

요즘 cpu 코어가 여러개인 멀티 코어 cpu가 많이 나온다.

멀티 코어이므로 여러개의 멀티 프로세스를 ㄹㅇ 병렬적으로 실행할 수 있게되었다.

작업을 병렬적으로 여러개를 할 수 있다는 건 동시에 여러작업을 여러개의 cpu로 작업을 할 수 있다는
의미이다.

그렇다면 응용프로그램의 여러 작업은 스케줄은 ? -> 쓰레드를 스케줄 하는것

그렇다면 os 의 여러 작업 스케줄은? 프로세스를 어떻게 스케줄링하는 것이다

우리는 이때까지 단 하나의 cpu에서의 스케줄링을 공부했다.

그렇다면 여러개의 멀티 프로세서 구조의 스케줄링은 어떻게 해야할까?

싱글 프로세스와 멀티 프로세스의 구조적인 차이

싱글 프로세스의 구조

cpu에는 캐시가 존재한다
캐시는 지역성의 기반하여 (시간적 지역성 + 공간적 지역성) 메모리에 자주 쓰는 데이터를
cpu에 가까운 메모리 공간에 저장한다.

멀티 프로세스의 캐시 일관성 문제

CPU 0 에서 작업을 하다가 D를 읽고 D를 수정했다(CPU 01 둘다 캐시에 D가 없는 순간에서 시작)
그리고 CPU 0D를 수정했지만 아직 메모리에 반영은 안하고 캐시에 저장하고 있다.

여기서 CPU1D를 읽을 때 오래된 D를 읽게 된다.
이런 문제를 캐시 일관성 문제라고 한다.

멀티 프로세스의 캐시 일관성 문제

CPU 0 에서 작업을 하다가 D를 읽고 D를 수정했다(CPU 01 둘다 캐시에 D가 없는 순간에서 시작)
그리고 CPU 0D를 수정했지만 아직 메모리에 반영은 안하고 캐시에 저장하고 있다.

여기서 CPU1D를 읽을 때 오래된 D를 읽게 된다.
이런 문제를 캐시 일관성 문제라고 한다.

캐시 일관성 해결하는 방법

추가적인 구조에 따른 문제

동기화 : 공유된 자원을 접근하였을 때 생기는 문제
보통 공유된 자원 접근은 락을 걸고 함

캐시 친화성 : 한번 수행한 CPu의 캐시에 많은 정보가 기록된다.
그래서 스케줄링 시에는 수행했던 CPU를 선택하는 편이 유리하다/

단일 큐 스케줄링 (SQMS)

단순하게 구현이 된다.

여러 CPU가 하나의 큐를 공유한다.

이때 확장성 즉 다수의 CPU에서 잘 돌아가기 하기 위해 큐에 락을 거는데
이는 성능 저하의 원인이다.

그리고 캐시 친화성도 오른쪽 처럼하면 구현할 순 있지만 완벽하진 않다

멀티 큐 멀티프로세서 스케쥴링

캐시 친화성 용이 , 동기화 부담 감소

단점 : 부하 불균등

CPU 마다 독립적인 큐를 가지고 있음

부하 불균등 해결책

큐를 너무 자주 검사하게 되면 높은 오버헤드로 확장성에 문제가 생기게 된다.

확장성은 멀티 큐 스케줄링의 가장 중요한 목적이다.

반면 너무 큐를 검사하지 않으면 부하 불균등이 올 것이다.