asymmetric multiprocessing
symmetric multiprocessing(SMP)
각 processor가 따로 self-scheduling을 시행한다.
scheduling을 실시하는 2가지 방법이 존재.
singlecore processor 여러 chip을 꽂는 것 보다 multicore processor 하나를 꽂는 것이 power를 덜 쓴다.
processor의 속도가 점점 빨라지면서, memory의 data가 사용가능해질 때 까지 걸리는 시간(memory stall)이 상대적으로 굉장히 길어지게 되었다. -> 줄여야 할 필요성이 생김.
해결 방법 : 둘 이상의 hardware thread(?)를 각 코어에 할당시킴 -> memory stall 시간동안 다른 스레드로 switch한다. -> CPU를 항상 작동상태로 만들 수 있다. (이 때에는 context-switch가 무시할 만한 수준인듯. -> X, 뒤에서 이 부분에 대해 다룬다.)
-> 운영체제 입장에서는 logical CPU가 2배로 존재한다고 인식한다. -> chip multithreading (CMT)
intel processor : hyper-threading(simultaneous multithreading or SMT)이라고 부름.
processing core를 multithread하는 방법
그럼에도 불구하고 physical core의 자원들은 (cache나 pipeline같은) hardware threads 간에 공유되어야 하므로, 한 번에 하나의 스레드만 실행될 수 있다. -> multithread, multicore processor는 2 level의 scheduling이 필요함.
level 1 : operating system에 의해 각 hardware thread(logical CPU)에 어떤 software thread가 할당되어야 하는지 선택해야 함.
level 2 : core가 어떤 hardware thread를 선택해야 하는지 결정해야 함.
위 그림의 두 가지 levels는 mutually exclusive할 필요는 없다. 예를 들어, 2 코어 2 hardware thread, 2 software thread가 존재할 때, 운영체제는 실제 코어의 상태를 판단해서(단순 4개의 logical processors로 보지 않고) 서로 다른 core에 존재하는 hardware thread에 각각 software thread를 할당할 수도 있다.