운영체제에서 프로세스와 쓰레드는 작업을 처리하는 두 가지 주요 단위입니다. 이 글에서는 프로세스와 쓰레드에 대해 알아보려고 합니다
프로세스는 실행 중인 프로그램의 인스턴스로, 운영체제에 의해 관리됩니다.
특징
독립적인 메모리 공간(코드, 데이터, 힙, 스택)을 가집니다.
시스템 자원(CPU, 메모리, 파일 등)을 사용하며, 각 프로세스는 고유한 식별자(Process ID)를 가집니다.
멀티태스킹 환경에서 여러 프로세스가 동시에 실행될 수 있습니다.
프로세스는 다음과 같은 메모리 영역으로 구성됩니다
코드(Code) 영역: 프로그램 실행 코드가 저장되는 읽기 전용 공간.
데이터(Data) 영역: 전역 변수와 정적 변수가 저장되는 공간.
힙(Heap) 영역: 동적으로 할당된 메모리를 저장하는 공간.
스택(Stack) 영역: 함수 호출 및 지역 변수 저장을 위한 공간.
쓰레드는 프로세스 내에서 실행되는 작업 흐름 단위로, 프로세스의 자원을 공유하면서 독립적으로 실행됩니다.
특징
하나의 프로세스에 여러 쓰레드가 존재할 수 있습니다.
같은 프로세스 내에서 코드, 데이터, 힙 영역을 공유하며, 독립적인 스택과 레지스터를 가집니다.
멀티쓰레드를 통해 병렬 처리가 가능하며 시스템 자원을 효율적으로 활용할 수 있습니다.
쓰레드는 다음 두 가지 메모리 영역으로 나뉩니다:
공유 영역
독립적 영역
운영체제가 각 쓰레드를 관리하기 위해 사용하는 자료 구조.
멀티쓰레딩은 하나의 프로세스 내에서 여러 쓰레드를 생성하여 병렬 작업을 수행하는 방식입니다.
장점
자원 공유로 인해 메모리 효율성이 높음.
컨텍스트 전환 비용이 낮아 빠른 작업 처리 가능.
병렬 처리를 통해 성능 향상.
단점
동기화 문제 발생 가능 (예: 임계영역 문제).
하나의 쓰레드 오류가 전체 프로세스를 중단시킬 수 있음.
멀티쓰레드는 같은 메모리 공간을 공유하므로 통신이 빠르고 효율적입니다.
생성 및 컨텍스트 전환 비용이 멀티프로세스보다 낮습니다.
병렬 처리가 필요한 애플리케이션에서 성능 향상을 제공합니다.
Thread-Safe는 여러 쓰레드가 동시에 접근할 때도 데이터 무결성을 유지하도록 설계된 상태를 의미합니다.
설계 방법
동기화(Synchronization): Mutex나 Semaphore를 사용하여 임계영역 보호.
재진입 가능(Reentrant): 함수 호출 시 전역 변수 대신 지역 변수를 사용하여 상태를 분리.
불변 객체 사용: 데이터를 변경하지 않는 불변 객체를 활용하여 동기화 문제를 방지.
프로세스와 쓰레드는 각각 독립성과 효율성이라는 고유한 장점을 가지고 있습니다. 멀티쓰레드는 자원 공유와 병렬 처리로 성능을 극대화할 수 있지만 동기화 문제를 신중히 고려해야 합니다. 운영체제와 애플리케이션 개발에서 이들 간의 차이를 이해하고 적절히 활용하는 것이 중요합니다.