CS

[CS] 프로세스와 스레드

kyoulho 2024. 8. 9. 13:21

프로그램

  • 정의: 컴퓨터가 실행할 수 있는 명령어들의 집합. 프로그램은 실행되기 전에는 코드나 파일 형태로 존재하며, 하드디스크나 SSD 같은 비휘발성 저장장치에 저장된다.
  • 종류: 프로그램은 운영체제, 응용 프로그램, 시스템 소프트웨어 등으로 나눌 수 있다. 응용 프로그램에는 워드 프로세서, 웹 브라우저, 게임 등이 포함되며, 시스템 소프트웨어는 운영체제와 드라이버 등이 포함된다.
  • 배포 및 실행: 프로그램은 실행 가능한 파일 형태로 배포되며, 사용자나 시스템의 명령에 의해 실행된다. 실행 파일은 운영체제에 의해 메모리에 로드되어 실행된다.

 

프로세스

  • 정의: 컴퓨터에서 실행 중인 프로그램의 인스턴스. 프로세스는 운영체제에 의해 관리되며, CPU에서 실행될 준비가 된 명령어들과 필요한 데이터들을 포함한다.
  • 메모리 공간: 각 프로세스는 독립된 메모리 공간을 할당받아 다른 프로세스와 메모리 공간을 공유하지 않으며, 이로 인해 서로 간섭 없이 안정적으로 실행된다.
  • 구성 요소: 프로세스는 일반적으로 코드(명령어), 데이터(변수, 구조체 등), 힙(동적 메모리 할당), 스택(함수 호출, 로컬 변수 등)으로 구성된다.
  • 상태: 프로세스는 실행 중, 대기 중, 종료된 상태 등 여러 상태를 가질 수 있으며, 운영체제의 스케줄러에 의해 상태가 관리되고, CPU 자원을 효율적으로 사용하기 위해 프로세스가 주기적으로 전환된다.
  • 멀티프로세스: 현대 운영체제는 멀티프로세싱을 지원하여 여러 프로세스를 동시에 실행할 수 있다. 이는 CPU의 여러 코어가 동시에 다른 프로세스를 실행할 수 있음을 의미한다.
  • 프로세스 제어 블록(PCB): 프로세스는 PCB라는 데이터 구조로 관리된다. PCB는 프로세스의 상태, 프로그램 카운터, 레지스터, 메모리 할당 정보, 프로세스 ID 등 프로세스의 실행에 필요한 정보를 포함한다.
  • 프로세스 간 통신(IPC): 프로세스는 IPC 메커니즘을 통해 서로 소통할 수 있다. IPC의 방법에는 파이프, 메시지 큐, 세마포어, 공유 메모리 등이 있다.

 

단일 프로세스 

  • 정의: 한 번에 하나의 프로그램만 실행되는 시스템. 초기 컴퓨터 시스템들은 이러한 구조를 가졌으며, CPU는 한 번에 하나의 프로세스만 처리할 수 있었다.
  • 단점: 단일 프로세스 시스템에서는 CPU가 한 번에 하나의 프로세스만 실행하기 때문에, 특정 프로세스가 I/O 작업을 수행하는 동안 CPU는 다른 작업을 수행할 수 없어 쉬게 된다. 이는 CPU 사용률이 낮아지는 주요 원인 중 하나이다.

 

멀티프로그래밍 

  • 정의: CPU의 사용률을 극대화하고 자원을 효율적으로 사용하기 위한 시스템 설계 방식이다. 여러 프로세스가 메모리에 상주하고, 하나의 프로세스가 I/O 작업을 수행하는 동안 다른 프로세스가 CPU를 사용할 수 있도록 한다.
  • 프로세스 스케줄링: 멀티프로그래밍에서는 여러 프로세스가 메모리에 상주하며, CPU는 이러한 프로세스 간의 전환을 관리한다. 이 전환은 주로 I/O 작업의 발생이나 프로세스의 상태 변화에 따라 이루어진다.
  • 시간 할당: 멀티프로그래밍에서 프로세스가 CPU를 사용하는 시간은 상대적으로 긴 시간일 수 있다. CPU는 프로세스 간에 직접적인 전환을 관리하며, 이로 인해 시스템 전체의 자원 활용을 개선한다.
  • 스케줄링 알고리즘: 다양한 스케줄링 알고리즘이 사용된다. 예를 들어, 선입선출(FIFO), 라운드 로빈(Round Robin), 우선순위 기반 스케줄링 등이 있다.

 

멀티태스킹

  • 정의: CPU 시간을 매우 짧은 간격으로 나누어 여러 작업(프로세스 또는 스레드)이 동시에 실행되는 것처럼 보이게 하는 기술. 이는 사용자가 여러 작업을 동시에 수행하는 것처럼 느끼게 한다.
  • 단점: 하나의 프로세스가 동시에 여러 작업을 수행하지는 못하며, 프로세스의 컨텍스트 스위칭은 무거운 작업이다. 또한, 프로세스 간 데이터 공유가 까다롭고, 듀얼 코어가 등장했지만 이를 잘 활용하지 못할 수 있다.

 

스레드

  • 정의: 프로세스는 여러 개의 스레드를 가질 수 있다. 스레드는 CPU에서 실행되는 단위로, 이전에는 프로세스가 CPU에서 실행되는 단위였다. 스레드는 동일 프로세스의 메모리 영역을 공유하므로 데이터 공유가 쉽다.
  • 컨텍스트 스위칭: 스레드 간의 컨텍스트 스위칭은 프로세스 간의 스위칭보다 가볍다.
  • 스레드 간 동기화: 멀티스레딩 환경에서는 스레드 간의 동기화가 중요하다. 동기화는 데이터의 일관성을 유지하기 위해 세마포어, 뮤텍스, 모니터 등을 사용하여 여러 스레드가 동시에 접근하는 데이터를 보호한다.
  • 스레드 안전성: 멀티스레드 프로그램에서 스레드 안전성을 보장하려면, 공유 자원에 대한 접근을 조절하고 동기화를 적절히 처리해야 한다.

 

멀티스레딩

  • 정의: 하나의 프로세스가 동시에 여러 작업을 실행하는 데 목적이 있다. 멀티스레딩은 확장된 멀티태스킹 개념으로, 여러 프로세스와 스레드가 매우 짧은 CPU 시간을 나누어 갖는다.
  • 스레드 풀: 멀티스레딩에서 스레드 풀을 사용하여 스레드 생성과 소멸의 오버헤드를 줄일 수 있다. 스레드 풀은 미리 생성된 스레드의 집합을 유지하여, 필요한 작업을 할당받아 수행한다.

 

멀티프로세싱

  • 정의: 두 개 이상의 프로세서나 코어를 활용하는 시스템으로, 다중 프로세서 시스템을 통해 처리 능력을 향상시킬 수 있다.
  • 병렬 처리: 멀티프로세싱 시스템에서는 여러 프로세서나 코어가 동시에 작업을 수행하여 병렬 처리가 가능하다. 이는 대규모 계산 작업이나 데이터 처리 작업에서 성능을 극대화하는 데 유리하다.
  • 프로세스 간 통신: 멀티프로세싱 환경에서는 프로세스 간 통신(IPC) 메커니즘을 통해 데이터를 교환하고 협력할 수 있다. IPC는 프로세스들이 서로 소통하고 협력하여 작업을 수행할 수 있게 한다.
  싱글코어 CPU
싱글-스레드
프로세스 2개
싱글코어 CPU
듀얼-스레드
프로세스 1개
듀얼코어
CPU 싱글-스레드
프로세스 2개
듀얼코어 CPU
듀얼-스레드
프로세스 1개
듀얼코어 CPU
듀얼-스레드
프로세스 2개
멀티태스킹 O O X X O
멀티스레딩 X O X O O
멀티프로세싱 X X O O O

 

 

메모리 구조 (싱글 스레드 vs 멀티 스레드)

728x90

'CS' 카테고리의 다른 글

[CS] 프로세스/스레드 상태 변화  (0) 2024.08.11
[CS] Deadlock  (0) 2024.08.11
[CS] 동기화  (0) 2024.08.09
[CS] CPU Bound, I/O Bound  (0) 2024.08.09
[CS] 컨텍스트 스위칭  (0) 2024.08.09