J-C-01 OS와 하드웨어로 이해하는 프로세스와 스레드
글 정보
- 카테고리
- Programming/Java/Core
- 태그
- JavaLevel3
1. OS와 Process (실행의 단위)
운영체제(OS)는 Process(프로세스) 단위로 자원을 할당합니다.
가장 핵심적인 자원은 가상 메모리 공간(Virtual Memory Space)입니다.
- 프로세스와 스레드의 관계
- 하나의 프로세스는 최소 1개의 Thread(스레드)를 가집니다.
- 프로세스 내의 스레드들은 할당받은 가상 메모리 공간을 공유합니다.
- (코드, 데이터, 힙 영역을 공유하며 스택은 별도로 가집니다)
- OS의 권한 통제
- OS는 프로세스 단위로 시스템 자원에 대한 접근 권한을 관리합니다.
- 대표적인 접근 대상은 File(파일) 시스템입니다.
- 참고: JVM의 위치
- JVM(자바 가상 머신) 또한 OS 입장에서는 하나의 사용자 모드 응용 프로그램일 뿐입니다.
- 즉, 하나의 프로세스로 동작하며 OS의 통제를 받습니다.
2. Thread (작업의 흐름)
Windows OS 기준, Platform Thread는 실제 CPU Core를 점유하는 주체입니다.
실행의 최소 단위이며, 독립적인 실행 흐름을 가집니다.
- CPU 점유 매커니즘
- 특정 스레드가 CPU Core 하나를 점유하여 연산을 수행합니다.
- 현대의 컴퓨터에서는 보통 수천 개의 스레드가 동시에 존재합니다.
- 스레드 스케줄링 (Thread Scheduling)
- 물리적인 코어 개수는 한정적입니다.
- OS는 우선순위(Priority)에 따라 어떤 스레드에게 CPU를 줄지 결정합니다.
- Context Switching (문맥 교환)
- 실행 중인 스레드를 변경하는 과정에서 필연적으로 오버헤드가 발생합니다.
- 기존 작업 내용을 백업하고 새로운 작업을 불러와야 하기 때문입니다.
- CPU 레지스터 값 저장/복원
- 캐시 메모리(Cache) 초기화에 따른 성능 저하
3. 하드웨어 구조와 성능의 한계
소프트웨어를 이해하려면 하드웨어의 구조적 특성을 알아야 합니다.
메모리 계층 구조 (Memory Hierarchy)
컴퓨터의 저장 장치는 속도와 용량의 트레이드오프 관계를 가집니다.
피라미드 구조로 위로 갈수록 빠르지만 비싸고, 아래로 갈수록 느리지만 용량이 큽니다.
- Registers (최상위)
- CPU 내부에서 연산에 직접 사용되는 가장 빠른 메모리입니다.
- Cache (L1, L2, L3)
- CPU와 RAM 사이의 속도 차이를 완충합니다.
- RAM (주기억장치)
- 실행 중인 프로세스와 데이터가 적재됩니다.
- Storage (HDD, SSD)
- 비휘발성이며 용량이 가장 크지만 속도가 가장 느립니다.
멀티 스레딩의 등장 배경
"왜 복잡하게 멀티 스레딩을 사용해야 할까요?"
- CPU와 주변기기의 속도 차이
- CPU는 매우 빠르지만, I/O 장치(주변기기)는 상대적으로 매우 느립니다.
- 단일 작업만 수행하면 CPU가 노는 시간(Idle)이 많아집니다.
- 클럭 속도의 물리적 한계
- 과거에는 CPU 클럭(속도)을 높여 성능을 올렸습니다.
- 발열과 전력 소비 문제로 클럭 속도 향상은 한계에 부딪혔습니다.
- 해결책: 멀티 코어 & 멀티 스레딩
- 빠른 코어 1개보다, 적당한 성능의 코어 N개를 사용하는 방식으로 진화했습니다.
- 멀티태스킹 환경에서 CPU 사용 효율을 극대화할 수 있습니다.
- 메모리 보호 (Memory Protection)
- OS는 한 프로세스의 가상 메모리 공간(VMS)을 다른 프로세스가 침범하지 못하도록 하드웨어 수준에서 보장합니다.
4. 멀티스레딩 VS 멀티프로세싱
동시성 처리를 위해 어떤 모델을 선택하느냐에 따라 장단점이 극명하게 갈립니다.
1) 싱글 프로세스 + 멀티 스레딩
하나의 프로세스 안에서 여러 스레드가 동작하는 방식입니다.
- 장점: 효율성
- 모든 스레드가 프로세스의 가상 메모리 공간과 자원을 공유합니다.
- 데이터 교환을 위한 별도의 통신 비용이 거의 없습니다.
- 단점: 낮은 안정성
- 하나의 스레드에서 치명적인 오류가 발생하면, 프로세스 전체가 종료될 수 있습니다.
- 공유 자원에 대한 동기화 이슈를 개발자가 직접 관리해야 합니다.
2) 멀티 프로세스 + 싱글 스레딩
여러 개의 프로세스를 동시에 띄워 작업을 처리하는 방식입니다. (예: 크롬 브라우저의 탭 격리)
- 장점: 높은 안정성
- 각 프로세스는 독립적인 가상 메모리 공간과 권한을 가집니다.
- 하나의 프로세스가 죽어도 다른 프로세스에 영향을 주지 않습니다.
- 단점: 비용 발생
- 프로세스 간 통신을 위해 IPC(Inter-Process Communication) 기술이 필요합니다.
- 메모리 사용량이 상대적으로 많고, 문맥 교환 비용이 더 큽니다.