대칭적 멀티프로세싱(SMP)를 위한 운영체제 고려사항

  • SMP 시스템에서 커널은 어느 처리기 상에서도 실행될 수 있음 + 각 처리기는 스스로 스케줄링이 가능하기 때문에 프로세스/쓰레드들 중 원하는 것을 골라 실행

  • 커널 또한 여러 개의 프로세스/쓰레드로 구성될 수 있기 때문에 커널의 일부분이 병렬로 실행되기도 하는데, 이러한 병렬 수행이 일어날 때 동시에 같은 공유 자원을 참조하거나 장치에 접근하는 등의 행위를 조율해야 함

    • 이를 위해서는 공유자원에 대한 요청의 해결/동기화 하는 기법들의 도입이 필요하다.
  • SMP 운영체제는 사용자가 사용 가능한 프로세스가 하나인지 여러개인지를 상관할 필요 없이 여러 개의 프로세스 or 한 프로세스 내 여러 개의 쓰레드 등 이러한 구성의 응용들의 사용을 가능하게 만들어야만 함

  • 따라서 멀티프로그래밍 시스템 기능 뿐만 아니라 멀티프로세서를 활용할 수 있는 추가적 기능들도 같이 제공해야 함

  • 이를 위해서 필요한 것들

    • 동시 병행 프로세스 or 쓰레드
      • 커널에 요청했을 때(권한을 흭득하려고 할 때) 여러 개의 처리기들이 같은 커널 코드를 동시에 실행시키면서 경쟁적 흭득이 일어남
      • 이 과정에서 경쟁에서 밀려난 코드들이 후에 재진입(reentrant) 할 수 있어야 한다.
    • 스케줄링
    • 동기화
      • 상호배제사건 직렬화(일렬로 줄세우기)를 강제적으로 시행하는 기능
      • 공유 자원을 참조할 가능성이 있는 여러 개의 프로세스들이 동시에 실행되고 있는 상황이라면 동기화가 절실해진다.
    • 메모리 관리
      • 하드웨어 병렬성을 활용하는 메모리 관리 기법 제공
      • 페이지나 세그먼트를 여러 처리기가 공유할 때 발생하는 일관성 문제를 담보하기 위한 여러 처리기 상의 페이징 과정 조율
    • 신뢰성과 결함 허용
      • 결함이 발생한 처리기 개수만큼의 성능 하락만 허용
      • 시스템 전체가 결함이 발생하지 않도록 조율

멀티코어를 위한 운영체제 고려사항

  • SMP시스템에서 제시된 고려사항 + a
  • 요즘에는 점점 CPU에 코어가 많이 늘어나고 있는 매니코어 시스템 시대에 진입
  • 이러한 멀티코어의 처리 용량을 어떻게 하면 최대로 활용할 것인가와 멀티코어를 담고 있는 단일 CPU 칩 내에 존재하는 상당 용량의 자원들을 어떻게 지능적으로 관리할 것이냐가 관건
  • 중요한 점은 매니코어 시스템에 내재되어 있는 근원적 병렬성 지원 원리와 응용이 요구하는 성능 수준의 합치인데, 현재의 멀티코어 시스템에서 지원하는 병렬성은 세 단계에 걸쳐 존재

병렬성의 3단계

  • 연산자 수준 병렬성
    • 각 코어 처리기 내에서의 하드웨어 병렬성
    • 컴파일러나 응용 프로그래머가 활용하기 어려움

  • 여기서부터는 운영체제의 효과적이고도 확실한 지원이 없다면 멀티코어 시스템에서 사실상 효과를 발휘하기 어려움
  • 멀티프로그래밍, 멀티쓰레드 실행에서의 병렬성
  • 응용 내에서의 병렬성
    • 대부분의 응용들은 여러 개의 태스크로 나누어져 병렬로 실행 가능
    • 이 태스크들은 여러 개의 프로세스, 그리고 프로세스 안의 쓰레드들로 구성되기도 함
    • 하지만 이러한 작업들을 어떻게 독립적으로 실행되는 태스크들로 나누어야 할까?
    • 이를 위해서는 병렬 태스크들에게 자원을 효과적으로 할당해주는 운영체제의 도구가 필요
    • 그 중에 대표적 도구 중 하나가 GCD(Grand Central Dispatch)가상 기계(Virtual Machine) 방식

GCD(Grand Central Dispatch)

  • 멀티코어용 병렬 프로그래밍 개발자를 효율적으로 지원하는 대표적 도구 중 하나
  • 멀티코어용 응용 프로그래밍을 지원
  • 분할된 태스크들이 서로 충돌을 일으키지 않고 최대한 독립적으로 돌아갈 수 있도록 도와줌
  • 적정 수준의 병렬성을 지원하기 위해 각 태스크들을 쓰레드들에 매핑하는 쓰레드 풀(pool)기법(쓰레드를 미리 만들어놓고 할당하는 방식), 쓰레드가 입출력을 하면 블록시키는 기법 등을 사용
  • 유닉스 기반 Mac OS X & Iphone에 사용

가상 기계(Virtual Machine) 방식

  • 동일한 하드웨어를 공유하는 다수의 실행환경
  • 한 컴퓨터의 하드웨어가 다수의 다른 실행 환경을 제공하도록 추상화 하는 것
  • 가상기계도 커널 모드사용자 모드를 가지며, 가상 기계 자체는 커널모드에서 수행
  • 다수의 기계가 하나의 CPU를 공유하므로 느려질 수 있음
  • 각 기계는 완전히 격리되므로 시스템 자원이 완전히 보호된다· 각 기계의 자원을 직접 공유할 수 없으나, 가상 통신 네트워크를 통해 공유할 수 있다.