[OS] 프로세스와 스레드란?

강준호·2024년 1월 16일
0

기술면접

목록 보기
2/9

프로세스와 스레드

프로세스(회사)

  • 자체적인 리소스와 커뮤니케이션 문제를 갖고 있는 독립적인 개별 회사

  • 프로세스는 실행 중인 컴퓨터 프로그램의 인스턴스입니다.
    여기에는 프로그램 코드와 현재 활동이 포함됩니다. 각 프로세스에는 별도의 메모리 주소 공간이 있습니다.

특징: 프로세스의 격리

  • 이는 한 프로세스가 다른 프로세스의 메모리나 리소스에 직접 액세스할 수 없음을 의미!

비유

  • 회사가 별도의 건물에 거주하는 것처럼 프로세스도 별도의 메모리 공간에서 작동합니다.
  • 한 회사는 다른 회사의 자원이나 정보에 직접 접근할 수 없습니다.

특징: 통신

  • 프로세스에는 파이프, 소켓 또는 공유 메모리와 같은 IPC(프로세스 간 통신)를 위한 특별한 메커니즘이 필요한 경우가 많습니다.

  • 리소스 집약적: 새로운 프로세스를 생성하려면 별도의 메모리 공간과 기타 리소스를 할당해야 하므로 리소스 집약적입니다.

비유

  • 두 회사가 커뮤니케이션하거나 협업(프로세스 간 커뮤니케이션)하려는 경우 전화 통화, 이메일, 회의 등 확립된 채널을 통해 이를 수행해야 하며
  • 더 번거롭고 시간이 많이 걸린다ㅜ

스레드(회사 내 부서)

  • 스레드는 OS에서 수행할 수 있는 가장 작은 처리 단위입니다.

  • 프로세스의 구성 요소!

  • 마치 회사 내의 여러 부서 또는 팀처럼 회사의 자원을 공유 + 각 부서마다 고유한 특정 작업이 있으며 서로 다른 프로젝트를 동시에 수행!

  • 프로세스와 달리, 여러 스레드가 동일한 프로세스 내에 존재할 수 있으며 메모리와 같은 리소스를 공유할 수 있다!

특징: 격리 및 안정성

비유

  • 부서는 서로 더 많이 연결되어 있지만 한 부서(스레드)의 문제는 같은 회사(프로세스) 내의 다른 부서에 더 쉽게 영향을 미칠 수 있습니다.

  • 반면, 기업(프로세스)은 더욱 고립되어 있으므로 한 기업의 위기가 다른 기업에 직접적인 영향을 미치지 않습니다.

특징: 효율성

  • 스레드는 프로세스에 비해 생성 및 관리에 리소스를 덜 사용합니다. 따라서 동일한 애플리케이션 내에서 빈번한 병렬 작업이 필요한 작업에 적합합니다.

비유

  • 회사 없애고 다시 시작하는거보다 새로운 부서를 시작하는 것이 더 쉽고 빠른 것처럼, 새 프로세스를 시작하는 것보다 기존 프로세스 내에서 새 스레드를 만드는 것이 리소스 효율적!

특징: 통신

  • 동일한 프로세스 내의 스레드는 동일한 메모리 공간을 공유하므로 프로세스보다 더 효율적으로 서로 통신할 수 있습니다.

비유

  • 같은 회사 내의 부서는 별도의 회사보다 더 쉽게 소통하고 협업할 수 있습니다. 스레드는 메모리를 공유하고 쉽게 정보를 교환할 수 있는 것처럼 동일한 인프라를 공유하고 직접적인 통신 회선을 갖습니다.

멀티 프로세스 & 멀티스레드

멀티프로세스(여러 회사가 하나의 프로젝트에 참여)

  • 대규모 프로젝트의 서로 다른 부분을 각각 작업하는 여러 회사

독립적으로 운영

  • 각 프로세스(회사)에는 자체 리소스와 작업 공간이 있다.
  • 독립적이며 작업을 위해 다른 것에 의존하지 않는다!

자체 리소스 보유

  • 모든 프로세스(회사)에는 가 있는 각 프로세스와 마찬가지로 자체 메모리와 리소스(자체 직원, 장비 및 규칙)가 있다.

외부 커뮤니케이션

  • 이러한 프로세스(회사)는 조정이 필요할 때 컴퓨팅의 프로세스 간 커뮤니케이션(회의나 계약)과 같은 외부 수단을 통해 커뮤니케이션합니다.

정리

  • 일반적으로 프로세스는 문제에 직면하더라도 다른 프로세스에 직접적인 영향을 미치지 않기 때문에 더 안전하고 안정적!

  • 그러나 리소스 집약적일 수 있으며 프로세스 간의 통신 속도가 느려질 수 있습니다.

멀티스레드(회사 내 여러 부서가 협력)

  • 여러 부서(스레드)가 있는 하나의 회사(프로세스)!

리소스 공유

  • 모든 부서는 동일한 프로세스(회사) 지붕 아래에 있으며 스레드가 동일한 프로세스 내에서 메모리와 리소스를(시설과 도구)를 공유한다.

효율적인 커뮤니케이션

  • 쓰레드(부서)는 모두 동일한 조직에 속해 있고 공통 커뮤니케이션 채널을 공유하므로 보다 효율적이고 빠르게 커뮤니케이션하고 협업할 수 있습니다.

공유 목표

  • 각 쓰레드(부서)는 동일한 프로젝트의 서로 다른 측면에서 작업하여 공통 목표에 기여한다.

정리

  • 이러한 멀티 쓰레드를 통해 리소스를 효율적으로 사용하고 통신 속도를 높일 수 있다!

  • 그러나 이는 한 스레드의 문제가 전체 프로세스에 영향을 미칠 수 있는 위험성이 있다. (잠재적으로 프로세스까지도)


면접 질문들

Q. 프로세스와 스레드의 차이점은?

  • 프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다. 

  • 프로세스는 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당 받는다.(code, heap, stack)

  • 스레드는 이중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유한다.

프로세스 : 자신만의 고유 공간과 자원을 할당받아 사용

스레드 : 다른 스레드와 공간과 자원을 공유하면서 사용


Q. 프로세스의 문제점은?

  • 프로세스 생성에 큰 오버헤드가 있다. ( 프로세스를 생성할때 많은 시간이 소요)
  • 프로세스 컨텍스트 스위칭의 비효율성, 오버헤드가큼
  • 프로세스 사이에 통신이 어렵다는점 (IPC사용해야함)

Q. 스레드의 출현 목적은?

  • 프로세스보다 크기가 작은 실행 단위 필요
  • 프로세스의 생성 및 소멸에 따른 오버헤드 감소
  • 빠른 컨텍스트 스위칭
  • 프로세스들의 통신 시간, 방법 어려움 해소

Q. 컨텍스트 전환이란?

  • 작업의 주체가 현재 Context를 잠시 중단하고 다른 Context를 실행하는 것을 Context Switching이라 한다.

  • 즉, 멀티태스킹 운영 체제에서 시스템이 CPU를 한 프로세스(또는 스레드)
    실행에서 다른 프로세스 실행으로 전환할 때 발생하는것!

0개의 댓글