멀티태스킹 (Multi-Tasking)

  • 하나의 운영 체제 안에서 여러 프로세스가 실행이 된다
  • 원래 한개의 CPU는 특정 순간 수행할 수 있는 테스크의 개수는 한개이다
    다만 스케쥴링을 활용하여 CPU 의 사용시간을 일정한 기준에 따라 나누어 다양한 테스크를 수행할 수 있도록 분배해준다
  • 멀티태스킹은 CPU 로 하여금 다양한 테스크들 사이에서 자주 전환하여 작업하면서 각각의 프로그램들과 동시에 상호작용하게 된다
  • 스케쥴링에 의해 분배받은 시간이 종료되면 사용하던 CPU 를 다른 테스크가 사용할 수 있도록 재배정하는 것을 문맥교환(Context Switching)이라고 한다
  • 문맥교환이 자주 발생하면 사용자는 작업이 동시에 이루어지는 것처럼 느끼게 된다

멀티스레딩 (Multi-Threading)

  • 하나의 프로세스가 하나 또는 그 이상을 여러 스레드를 사용하여 동시 처리하는 것을 뜻한다
    이는 자원의 생성과 관리의 중복성을 최소화시키며 수행 능력을 향상시킨다
  • 이는 시스템 자원소모, 처리비용 감소 및 실행속도 향상, 쓰레드간 자원 공유 (stack)를 하는 장점 및 프로그램 응답시간 단축이 있다
  • 반면 단점으로는 디버깅이 어려우며 동기화이슈, 하나의 쓰레드에서 오류가 발생하면 전체 프로세스에 문제 발생하게 된다
  • 멀티스레딩은 프로세스 내의 작업을 여러개의 스레드로 분할하면서 작업 부담 줄여준다


멀티태스킹 vs 멀티스레딩

  1. 멀티태스킹은 다수의 프로그램을 동시에 실행시키는것
    멀티스레딩은 다수의 스레드가 같은 또른 다른 프로세스에 동시에 실행되는 것이다

  2. 멀티태스킹에서는 CPU가 다수의 프로그램 사이에서 전환하면서 작업해야 한다
    이는 곧 동시에 다수의 프로그램이 실행되는 것처럼 보이게 된다
    반면 멀티스레딩은 CPU 가 다수의 스레드들 사이에서 전환하면서 스레드들이 동시에 실행되는 것처럼 보인다

  3. 멀티태스킹은 각각의 메모리와 자원을 수집하여 각각의 프로세스 프로그램에 할당하는데 멀시트레딩은 한 프로세스 내에서의 스레드들은 메모리/자원을 공유한다


  1. 싱글 스레드
  • 하나의 프로세스에서 하나의 스레드 실행한다
  • 자원 접근에 대한 동기화 신경 쓸 필요가 없다 (여러개일 경우 공용 자원에 대한 접근 통제 필요)
  • 작업 전환이 필요 없다 (작업 비용)
    단점으로는 여러 개의 CPU를 사용하지 못한다
  1. 멀티 스레드
  • 프로그램을 다수의 실행 단위로 나누어 실행한다
  • 프로세스 내에서의 자원을 공유하여 자원 생성/관리 중복 최소화가 가능하다
  • 새로운 프로세스의 생성보다 기존 프로세스에서의 스레드 생성이 더 빠르다
  • 프로세스의 작업전환보다 스레드의 작업전환이 더 빠르다
    단점으로는 스레드 스케쥴링에 신경써야하며 멀티 스레딩을 위한 운영체제의 지원이 필요하다


멀티프로세싱 (Multi-Processing)

  • 컴퓨터가 하나 이상의 CPU 를 동시에 사용하여 처리하는 과정으로 안정성이 높지만 (독립된 구조) 각각 독립된 메모리 영역이기에 작업량이 많을수록 오버헤드 생긴다는 단점이 있다
  • 더불어 Context Switching 으로 인한 성능 저하가 발생할 수 있다
  • 보통 하나의 프로세서가 하나의 작업을 하지만 멀티 프로세싱은 다수의 프로세서가 다수의 작업을 함께 협력해서 처리하는 것이다
  • 하나의 프로세서가 고장나도 해당 프로세서가 진행 중인 작업은 다른 프로세서에서 수행하고 있기 때문에 작업이 정지되지 않는다
  • 여러 개의 프로세스를 처리할 때 동일한 데이터를 사용한다면 각 데이터를 각 프로세서에게 할당할 필요 없어 하나의 공간에서 공유한다면 비용을 절약할 수 있다
  • 여러 개의 프로세서가 작업을 병렬처리하는 것으로 정의할 수 있다

멀티프로세싱 vs 멀티스레딩

프로세스를 생성하는 것보다 스레드가 더 효율적이지만 더 좋은것은 아닐 수 있다
크롬을 예로 들어보자
크롬은 멀티프로세싱을 하는 동시에 멀티스레딩을 하고 있다
각각의 탭들은 프로세스로 구성 (서로 메모리 공유 안함)이 되며 각 페이지 안에서 여러 일을 처리한다 (한 페이지에서 파일을 다운로드 하면서 다른 페이지에서도 다운로드 하는 등)
멀티프로세싱과 멀티스레딩은 각각 장단점이 존재한다

멀티프로세싱은 여러 개의 프로그램들을 병렬로 처리한다
반면 멀티스레딩은 하나의 프로그램 안에서 다수의 스레드를 병렬 처리한다
효율적인 것은 측면에서 보면 멀티스레딩이고 안정성 측면에서는 멀티프로세싱이라고 할 수 있다

멀티스레딩은 왜 사용할까?

운영체제는 시스템 자원을 효율적으로 관리하기 위해 스레드를 사용한다
멀티 프로세스를 멀티 스레드로 바꾸면 프로세스를 생성하며 자원 할당 하는 작업이 줄어 자원을 효율적으로 관리할 수 있다
뿐만 아니라 스레드간의 통신 비용이 상대적으로 적어지면서 부담이 적다
하지만 스레드 간의 자원 공유는 전역 변수를 이용하므로 동기화 문제에 신경 써야 한다는 주의점이 있다


멀티프로그래밍 (Multi-Programming)

  • 컴퓨터가 하나 이상의 프로그램을 실행한다 (엑셀 / 크롬 같이 여는 것 같은)
  • 하나의 프로세서 (CPU) 가 하나의 프로세스를 수행하는 동안 다른 프로세스에 접근할 수 있도록 한다
  • 멀티프로그래밍은 하나의 프로세스의 입출력이 완료될때까지 기다리는 시간을 버리지 않고 다른 프로세스를 처리할 수 있도록 하는 것이다

멀티프로그래밍 vs 멀티태스킹

  1. 멀티프로그래밍은 프로세서가 작업을 처리할 때 낭비되는 시간동안 다른 프로세스를 처리하도록 해주는 스케쥴링의 한 방식이다
    멀티태스킹은 다수의 작업을 정해진 시간동안 번갈아가면서 수행하는 것이다

  2. 멀티프로그래밍을 멀티테스킹을 구현하는 스케쥴링의 한 방식이라고 생각할 수 있다 (멀티태스킹을 수행하는 방법 중 하나가 멀티프로그래밍)


context switching (문맥교환)

  • 하나의 프로세스가 CPU를 사용중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해 이전 프로세스의 상태를 보관하고 새로운 프로세스 상태를 적재하는 작업을 뜻한다
  • 저장되어 있는 상태는 프로세스 제어 블록(PCB)에 기록되어 있으며 운영체제의 CPU 자원을 할당하는 스케쥴러에 의해 발생된다

0개의 댓글