🏷️멀티 프로세싱 vs 멀티태스킹

멀티 프로세싱은 하드웨어 장비의 관점, 멀티태스킹은 소프트웨어 운영체제의 관점

  • 멀티 프로세싱(Multi Processing)
    • 여러 CPU를 사용하여 동시에 여러 작업을 수행
    • 하드웨어 기반으로 성능 향상

  • 멀티태스킹(Multi Tasking)
    • 하나의 CPU로 여러 작업을 동시에 수행하는 것처럼 보이게 하는 것
    • 소프트웨어 기반으로 시분할(시간분할)하여 작업을 할당(우선순위, 타임슬롯 등등의 요소)

🏷️프로세스와 스레드

개념 : 운영체제(OS) → 프로세스(Process) → 스레드(Thread)

프로세스란, 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 독립적인 메모리 공간을 갖고 있으며, 운영체제에서 별도의 작업 단위로 분리해서 관리된다. 각 프로세스는 별도의 메모리 공간을 갖고 있기 때문에 서로 간섭하지 않는다. 프로세스는 격리되어 관리되기 때문에 하나의 프로세스가 충돌하더라도 다른 프로세스에는 영향을 미치지 않는다.

프로세스의 구성 : 코드 섹션, 데이터 섹션, 힙, 스택

  • 코드 섹션 : 실행할 프로그램의 코드가 저장되는 부분
  • 데이터 섹션 : 전역 변수 및 정적 변수가 저장되는 부분
  • 힙(Heap) : 동적으로 할당되는 메모리 영역
  • 스택(Stack) : 메서드 호출 시 생성되는 지역 변수와 반환 주소가 저장되는 영역

스레드란, 프로세스 내에서 실행되는 작업의 단위이다. 한 프로세스 내에는 여러 스레드가 존재할 수 있으며, 이들은 프로세스가 제공하는 동일한 메모리 공간을 공유한다. 스레드를 프로세스보다 단순하므로 생성 및 관리가 단순하고 가볍다.

스레드의 구성 : 공유 메모리, 개별 스택

  • 공유 메모리 : 같은 프로세스의 코드 섹션, 데이터 섹션, 힙, 스택은 프로세스 안의 모든 메모리가 공유한다.
  • 개별 스택 : 각 스레드는 자신의 스택을 가지고 있다.

스레드는 프로세스 내에서 실행되는 작업의 단위라고 했다. 한 프로세스 내에 하나의 스레드가 존재할 수도 있고 여러 스레드가 존재할 수도 있다. 이런 것을 단일 스레드, 멀티 스레드라고 한다.

  • 단일 스레드 : 한 프로세스 내에 하나의 스레드만 존재
  • 멀티 스레드 : 한 프로세스 내에 여러 스레드가 존재

👉결론적으로 프로세스는 실행 환경과 자원을 제공해주는 컨테이너 역할을 하고 스레드는 CPU를 사용해서 하나하나 실행한다.

👉멀티 쓰레딩은 CPU 사용률을 향상시키고 여러 작업을 동시에 처리할 수 있어 효율적이지만 멀티 쓰레드 프로세스의 경우 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하면서 작업을 하기 때문에 발생할 수 있는 동기화, 교착상태와 같은 문제들을 고려해야한다.

🏷️스레드와 스케줄링

단일 코어 스케줄링 과정(이러한 과정을 거친다는 점을 이해할 것)

  1. 스레드 A1, 스레드 B1, 스레드 B2가 스케줄링 큐에서 대기한다.

  1. 운영체제는 스레드 A1을 큐에서 꺼내고 CPU를 통해 실행한다.

  1. 스레드 A1을 잠시 멈추고 스케줄링 큐에 다시 넣는다.

  1. 운영체제는 스레드 B1을 큐에서 꺼내고 CPU를 통해 실행한다.


멀티 코어 스케줄링 과정(이러한 과정을 거친다는 점을 이해할 것)

  1. 스레드 A1, 스레드 B1, 스레드 B2가 스케줄링 큐에서 대기한다.

  1. 스레드 A1, 스레드 B1을 병렬로 실행한다. 스레드 B2는 스케줄링 큐에 대기한다.

  1. 스레드 A1의 수행을 잠시 멈추고, 스레드 A1을 스케줄링 큐에 다시 넣는다.

  1. 스레드 B1을 CPU 코어1에서 실행한다.

👉프로세스, 스레드와 스케줄링 정리

멀티 태스킹이란, 하나의 CPU를 사용하여 동시에 여러 작업을 수행하는 것을 말하는데 이를 위해 운영체제에서 스케줄링 기법을 제공한다.

프로세스는 실행 중인 프로그램의 인스턴스이다. 각 프로세스는 서로에게 영향을 주지 않는 격리된 메모리 공간을 가진다.

스레드는 프로세스 내에서 실행되는 작업 단위이다. 여러 스레드는 하나의 프로세스 내에서 자원을 공유한다. 실제로 CPU에 의해 실행되는 단위는 스레드이다.

🏷️컨텍스트 스위칭(Context Switching, 문맥 교환

스레드 A와 스레드 B가 있다고 가정하자. 멀티태스킹을 해야 하기 때문에 스레드 A만 계속 실행할 순 없다. 스레드 A를 잠시 멈추고, 스레드 B를 실행한다. 이후에 스레드 A로 그냥 돌아갈 수 없다. CPU에서 스레드를 실행하는데 코드가 어디까지 수행되었는지 위치를 찾아야 한다. 그리고 계산하던 변수들의 값을 다시 CPU로 불러와야 한다. 따라서 스레드 A를 멈추는 시점에 CPU에서 사용하던 값들을 메모리에 저장해두어야 한다. 그리고 이후에 스레드 A로 다시 돌아올 때 이 값들을 CPU에 다시 불러와야 한다. 이런 과정을 컨텍스트 스위칭이라고 한다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN