프로세스 & 스레드: 두 판 사이의 차이

기술노트
(CS 용어 정리 - 프로세스 & 스레드 추가)
 
(Gemini 벌크 업로더로 자동 업로드)
 
1번째 줄: 1번째 줄:
== 프로세스 & 스레드 ==
== ⚙️ 프로세스 (Process) & 스레드 (Thread) ==


<br>
'''프로세스'''와 '''스레드'''는 운영체제에서 프로그램을 실행하는 데 사용되는 핵심 개념입니다. 둘 다 작업을 수행하는 실행 단위이지만, 자원 공유 방식에서 큰 차이를 보입니다.


> '''프로세스''' : 프로그램을 메모리 상에서 실행중인 작업
----
>
> '''스레드''' : 프로세스 안에서 실행되는 여러 흐름 단위


<br>
=== 🧱 프로세스 (Process) ===


기본적으로 프로세스마다 최소 1개의 스레드 소유 (메인 스레드 포함)
프로세스는 '''실행 중인 프로그램의 인스턴스'''입니다. 운영체제로부터 독립적인 메모리 공간(Code, Data, Heap, Stack)과 자원(파일 핸들, 네트워크 연결 등)을 할당받아 실행됩니다. 각 프로세스는 다른 프로세스와 독립적으로 동작합니다.


<br>
* '''독립적인 메모리 공간''' : 다른 프로세스의 메모리 영역을 침범할 수 없습니다.
* '''무거운 생성/소멸''' : 프로세스를 생성하고 제거하는 데 많은 자원과 시간이 소요됩니다.
* '''프로세스 간 통신 (IPC)''' : 프로세스 간에 데이터를 주고받으려면 별도의 IPC(Inter-Process Communication) 메커니즘(파이프, 소켓, 공유 메모리 등)을 사용해야 합니다.


![img](https://camo.githubusercontent.com/3dc4ad61f03160c310a855a4bd68a9f2a2c9a4c7/68747470733a2f2f74312e6461756d63646e2e6e65742f6366696c652f746973746f72792f393938383931343635433637433330363036)
----


=== 🧵 스레드 (Thread) ===


스레드는 '''프로세스 내에서 실행되는 작업의 최소 단위'''입니다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 각 스레드는 독립적인 실행 흐름을 가집니다.


프로세스는 각각 별도의 주소공간 할당 (독립적)
* '''메모리 공유''' : 같은 프로세스 내의 다른 스레드와 Code, Data, Heap 영역을 공유합니다. 각 스레드는 자신만의 독립적인 Stack과 프로그램 카운터(PC) 레지스터를 가집니다.
* '''가벼운 생성/소멸''' : 프로세스보다 생성 및 소멸이 훨씬 가볍고 빠릅니다.
* '''스레드 간 통신''' : 메모리를 공유하므로, 별도의 통신 메커니즘 없이 직접 데이터를 주고받을 수 있어 효율적입니다.


* Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령)
----


* Data : 전역변수, 정적변수, 배열 등
=== 💡 정보처리기사 핵심 Point ===
    - 초기화 된 데이터는 data 영역에 저장
    - 초기화 되지 않은 데이터는 bss 영역에 저장
   
* Heap : 동적 할당 시 사용 (new(), malloc() 등)


* Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역)
* 정보처리기사 시험에서는 '''프로세스와 스레드의 개념, 그리고 자원 공유 방식의 차이점'''을 묻는 문제가 자주 출제됩니다.
 
* '''멀티태스킹(Multitasking)'''은 여러 프로세스를 동시에 실행하는 것이고, '''멀티스레딩(Multithreading)'''은 하나의 프로세스 내에서 여러 스레드를 동시에 실행하는 것입니다.
<br>
* 스레드 간의 메모리 공유는 효율적이지만, 여러 스레드가 공유 자원에 동시에 접근할 때 '''동기화 문제(경쟁 상태, 교착 상태)'''가 발생할 수 있습니다. 이를 해결하기 위한 동기화 기법(뮤텍스, 세마포어 등)에 대한 이해가 중요합니다.
 
스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유
 
<br>
 
하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성
 
<br>
 
'''프로세스는 자신만의 고유 공간과 자원을 할당받아 사용'''하는데 반해, '''스레드는 다른 스레드와 공간, 자원을 공유하면서 사용'''하는 차이가 존재함
 
<br>
 
<br>
 
##### 멀티프로세스
 
> 하나의 컴퓨터에 여러 CPU 장착 → 하나 이상의 프로세스들을 동시에 처리(병렬)
 
'''장점''' : 안전성 (메모리 침범 문제를 OS 차원에서 해결)
 
'''단점''' : 각각 독립된 메모리 영역을 갖고 있어, 작업량 많을 수록 오버헤드 발생. Context Switching으로 인한 성능 저하
 
<br>
 
'''''Context Switching''이란?'''
 
> 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정
>
> 즉, 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순번의 프로세스가 동작하면서 이전에 보관했던 프로세스 상태를 복구하는 과정을 말함
>
> → 프로세스는 각 독립된 메모리 영역을 할당받아 사용되므로, 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재함
 
<br>
 
<br>
 
##### 멀티 스레드
 
> 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
 
스레드들이 공유 메모리를 통해 다수의 작업을 동시에 처리하도록 해줌
 
<br>
 
'''장점''' : 독립적인 프로세스에 비해 공유 메모리만큼의 시간, 자원 손실이 감소
전역 변수와 정적 변수에 대한 자료 공유 가능
 
'''단점''' : 안전성 문제. 하나의 스레드가 데이터 공간 망가뜨리면, 모든 스레드가 작동 불능 상태 (공유 메모리를 갖기 때문)
 
* 멀티스레드의 안전성에 대한 단점은 Critical Section 기법을 통해 대비함
 
  > 하나의 스레드가 공유 데이터 값을 변경하는 시점에 다른 스레드가 그 값을 읽으려할 때 발생하는 문제를 해결하기 위한 동기화 과정
  >
  > <syntaxhighlight>
  > 상호 배제, 진행, 한정된 대기를 충족해야함
  > </syntaxhighlight>

2025년 9월 6일 (토) 05:54 기준 최신판

⚙️ 프로세스 (Process) & 스레드 (Thread)

프로세스스레드는 운영체제에서 프로그램을 실행하는 데 사용되는 핵심 개념입니다. 둘 다 작업을 수행하는 실행 단위이지만, 자원 공유 방식에서 큰 차이를 보입니다.


🧱 프로세스 (Process)

프로세스는 실행 중인 프로그램의 인스턴스입니다. 운영체제로부터 독립적인 메모리 공간(Code, Data, Heap, Stack)과 자원(파일 핸들, 네트워크 연결 등)을 할당받아 실행됩니다. 각 프로세스는 다른 프로세스와 독립적으로 동작합니다.

  • 독립적인 메모리 공간 : 다른 프로세스의 메모리 영역을 침범할 수 없습니다.
  • 무거운 생성/소멸 : 프로세스를 생성하고 제거하는 데 많은 자원과 시간이 소요됩니다.
  • 프로세스 간 통신 (IPC) : 프로세스 간에 데이터를 주고받으려면 별도의 IPC(Inter-Process Communication) 메커니즘(파이프, 소켓, 공유 메모리 등)을 사용해야 합니다.

🧵 스레드 (Thread)

스레드는 프로세스 내에서 실행되는 작업의 최소 단위입니다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있으며, 각 스레드는 독립적인 실행 흐름을 가집니다.

  • 메모리 공유 : 같은 프로세스 내의 다른 스레드와 Code, Data, Heap 영역을 공유합니다. 각 스레드는 자신만의 독립적인 Stack과 프로그램 카운터(PC) 레지스터를 가집니다.
  • 가벼운 생성/소멸 : 프로세스보다 생성 및 소멸이 훨씬 가볍고 빠릅니다.
  • 스레드 간 통신 : 메모리를 공유하므로, 별도의 통신 메커니즘 없이 직접 데이터를 주고받을 수 있어 효율적입니다.

💡 정보처리기사 핵심 Point

  • 정보처리기사 시험에서는 프로세스와 스레드의 개념, 그리고 자원 공유 방식의 차이점을 묻는 문제가 자주 출제됩니다.
  • 멀티태스킹(Multitasking)은 여러 프로세스를 동시에 실행하는 것이고, 멀티스레딩(Multithreading)은 하나의 프로세스 내에서 여러 스레드를 동시에 실행하는 것입니다.
  • 스레드 간의 메모리 공유는 효율적이지만, 여러 스레드가 공유 자원에 동시에 접근할 때 동기화 문제(경쟁 상태, 교착 상태)가 발생할 수 있습니다. 이를 해결하기 위한 동기화 기법(뮤텍스, 세마포어 등)에 대한 이해가 중요합니다.