프로세스와 스레드
2024. 11. 15. 22:58ㆍ정보처리,전산/운영체제
반응형
Single-threaded vs. Multi-threaded
- Single-threaded:
- 정의: 하나의 프로세스 내에서 하나의 작업만 순차적으로 처리하는 방식.
- 예시: 브라우저가 페이지를 로딩할 때, 페이지 로딩이 끝날 때까지 다른 작업을 처리하지 않음.
- 장점: 간단하고 구현이 용이하지만, 멀티태스킹을 잘 지원하지 못함.
- 단점: CPU 자원을 효율적으로 활용하지 못함.
- Multi-threaded:
- 정의: 하나의 프로세스가 여러 개의 스레드를 이용해 동시에 여러 작업을 처리하는 방식.
- 예시: 브라우저가 웹페이지를 로딩하는 동시에 백그라운드에서 다른 작업을 수행할 수 있음.
- 장점: CPU 자원을 효율적으로 활용하고, 여러 작업을 동시에 처리 가능.
- 단점: 스레드 간 자원 경쟁 문제나 동기화 문제 발생 가능성 있음.
Processes vs. Threads
- Process (프로세스):
- 독립적으로 실행되는 프로그램 인스턴스.
- 각 프로세스는 자체적인 메모리 공간과 시스템 자원을 가짐.
- 예시: 여러 개의 애플리케이션(브라우저, 음악 플레이어 등)이 동시에 실행되는 경우.
- Thread (스레드):
- 프로세스 내에서 실행되는 작은 단위의 작업.
- 여러 스레드는 동일한 메모리 공간을 공유하며, 하나의 프로세스 내에서 여러 작업을 동시에 수행.
- 예시: 브라우저 내에서 각각의 탭을 실행하는 스레드.
Degree-4 Multiprogramming
- Degree of Multiprogramming
- 정의: 메모리 내에서 동시에 실행되는 프로세스의 수.
- Degree-4 Multiprogramming: 메모리에서 동시에 4개의 프로세스가 실행되는 상황.
- 멀티프로그래밍은 CPU가 여러 작업을 처리할 수 있도록 하여 효율성을 높이는 기술이다. CPU가 유휴 상태로 있을 때 다른 프로세스를 실행하도록 하여 작업을 분배한다.
Hardware: Multicore vs. Single-core
- Single-core Processor (싱글 코어 프로세서):
- 정의: 하나의 처리 유닛(CPU 코어)만을 가지고 있는 CPU.
- 단점: 여러 작업을 동시에 처리하는 데 제한적이며, 멀티태스킹 성능이 떨어짐.
- Multicore Processor (멀티코어 프로세서):
- 정의: 여러 개의 처리 유닛(CPU 코어)을 가진 CPU.
- 장점: 여러 작업을 동시에 처리할 수 있어 멀티태스킹 성능이 크게 향상됨.
- 예시: 듀얼코어(2코어), 쿼드코어(4코어) CPU 등.
CPU (Central Processing Unit)
- CPU:
- 정의: 컴퓨터의 중앙 처리 장치.
- 역할: 명령을 받아서 계산 및 작업을 수행하는 컴퓨터의 '두뇌' 역할을 한다.
- CPU는 데이터를 처리하고 프로그램을 실행하는데 필요한 계산을 수행한다.
- CPU Core:
- 정의: CPU 내부의 독립적인 처리 유닛.
- 역할: 하나의 코어가 하나의 작업을 처리하며, 멀티코어 CPU는 여러 개의 코어를 이용해 병렬로 여러 작업을 동시에 처리할 수 있다.
쓰레드 자원 공유
쓰레드는 하나의 프로세스 내에서 자원을 공유한다. 여러 개의 쓰레드가 같은 메모리 공간을 공유하며 동시에 작업을 수행할 수 있기 때문에 효율적인 작업 처리가 가능한다. 그러나 자원을 공유하는 방식은 장점과 단점을 모두 동반한다.
장점
- 자원 효율성:
- 같은 프로세스 내의 쓰레드들이 메모리나 파일 핸들 등 자원을 공유하므로, 각 쓰레드가 별도의 자원을 할당받지 않아도 된다. 이는 시스템 자원의 낭비를 줄여주고 효율적으로 처리할 수 있게 도와준다.
- , 여러 탭을 동시에 처리하는 웹 브라우저에서 각 탭은 동일한 메모리 공간을 공유하고, 하나의 프로세스 내에서 여러 쓰레드가 작업을 분담한다. 이 방식은 빠르고 효율적이다.
- 동시 작업 처리:
- 여러 쓰레드가 병렬로 작업을 처리할 수 있어, 멀티태스킹을 효율적으로 수행할 수 있다. , 브라우저에서 페이지를 로드하는 동안 다른 작업을 동시에 할 수 있게 해준다.
단점
- 자원 경쟁:
- 여러 쓰레드가 동시에 동일한 자원에 접근하려 할 때 문제가 발생할 수 있다. , 두 쓰레드가 동시에 같은 데이터를 수정하려 할 경우, 데이터 경합(race condition)이 발생할 수 있다. 이런 경우, 예상치 못한 오류나 버그가 발생할 수 있다.
- 동기화 문제:
- 쓰레드 간에 자원을 공유할 때, 이를 적절히 동기화(synchronization)하지 않으면 자원에 대한 충돌이나 일관성 문제를 일으킬 수 있다.
- , 두 쓰레드가 동시에 동일한 파일에 쓰기를 시도할 때 데이터가 손상될 수 있다. 이를 방지하기 위해 락(lock) 또는 세마포어(semaphore) 등의 동기화 기법을 사용해야 한다.
- 디버깅의 어려움:
- 자원을 공유하는 쓰레드 간의 문제는 디버깅이 매우 어렵다. , 두 쓰레드가 자원을 동시에 접근하면서 예상치 못한 타이밍에 문제가 발생할 수 있다. 이러한 문제는 불규칙적이고, 재현하기 어려운 경우가 많아 디버깅을 어렵게 만든다.
let sharedData = 0; // 공유되는 자원
function thread1() {
sharedData++; // 공유 자원을 증가
}
function thread2() {
sharedData--; // 공유 자원을 감소
}
thread1(); // thread1이 실행되어 sharedData가 1 증가
thread2(); // thread2가 실행되어 sharedData가 1 감소
console.log(sharedData); // 예상: 0
sharedData는 두 쓰레드가 공유하는 자원이다. 두 쓰레드가 동시에 실행되면, sharedData의 최종 값이 예기치 않게 변할 수 있다. 이 문제를 해결하려면 동기화 기법을 사용해야 한다
프로세스 (Process)란?
프로세스는 실행 중인 프로그램을 의미하며, 컴퓨터 시스템에서 동작하는 모든 작업을 처리하는 기본적인 단위이다. 프로세스는 실행 파일을 클릭하여 시작되며, 이때 운영 체제는 메모리(RAM)에 해당 프로그램을 할당하고, 실행을 시작한다. 이 시점부터 프로그램은 "프로세스"라고 불리게 된다.
프로세스의 메모리 구조
프로세스는 다양한 영역으로 나누어진 메모리 공간을 가진다. 이를 통해 프로세스가 실행되는 동안 필요한 데이터를 저장하고, 프로세서에서 이를 참조하면서 작업을 수행한다. 아래는 프로세스 메모리의 주요 영역이다:
- Text (Code) 영역
- 이 영역은 프로그램 코드가 저장되는 곳이다. 즉, 실행되는 명령어들이 이곳에 저장된다.
- 또한, 프로그램 카운터 (Program Counter)와 레지스터 내용 같은 실행 중인 프로세스의 현재 상태 정보도 이 영역에 저장된다.
- Data 영역
- 이 영역은 전역 변수와 정적 변수가 저장된다.
- 전역 변수는 프로그램 어디에서나 접근할 수 있는 변수이며, 정적 변수는 함수 내부에서 정의되지만 함수 호출 간에 값을 유지하는 변수이다.
- Heap 영역
- 동적 메모리 할당을 위한 영역이다. 런타임 동안 프로그램이 필요에 따라 메모리를 동적으로 할당받을 때 사용된다.
- , malloc 또는 new와 같은 메모리 할당 함수는 Heap 영역에서 메모리를 할당한다.
- Stack 영역
- 함수 호출 시 필요한 로컬 변수와 매개변수, 반환 주소가 저장된다.
- 각 함수 호출 시, 스택에 새로운 프레임이 쌓이고 함수 호출이 완료되면 해당 프레임이 제거된다.
- 스택 오버플로우 (Stack Overflow)는 이 영역이 과도하게 사용될 때 발생하며, 너무 많은 함수 호출로 스택 공간이 부족해질 때 발생한다.
메모리 영역의 충돌 (Overflow)
- Heap Overflow
- Heap 영역이 과도하게 확장되면서 Stack 영역을 침범하는 상황이다.
- 이는 동적 메모리 할당이 많아지면 발생할 수 있으며, 이로 인해 다른 메모리 영역과 충돌할 수 있다.
- Stack Overflow
- Stack 영역이 과도하게 확장되면서 Heap 영역을 침범하는 상황이다.
- 일반적으로 함수 호출이 지나치게 깊어질 때(무한 재귀 호출 등) 발생하며, 프로그램이 예기치 않게 종료될 수 있다.
프로세스의 주요 단계
- 프로세스 생성
- 실행 파일을 클릭하거나 명령어를 실행하면 운영체제는 해당 프로그램을 메모리에 로드하여 프로세스를 생성한다.
- 프로세스 실행
- 메모리 공간이 할당되고, 프로세서는 이 프로세스의 코드와 데이터를 처리하며 실행된다.
- 프로세스 종료
- 프로그램 실행이 끝나면 프로세스는 종료되며, 운영체제는 해당 프로세스가 사용하던 메모리를 해제한다.
프로세스의 자원 관리
- 프로세스는 CPU 시간, 메모리, 입출력 장치와 같은 자원을 사용하며, 운영체제는 여러 프로세스를 관리하고 자원을 효율적으로 배분하기 위해 스케줄링을 수행한다.
- 각 프로세스는 독립적으로 실행되며, 하나의 프로세스가 실패하더라도 다른 프로세스에 영향을 미치지 않도록 설계된다.
프로세스와 쓰레드
- 프로세스는 독립적으로 실행되는 프로그램의 단위이며, 각 프로세스는 독립적인 메모리 공간을 가진다.
- 쓰레드는 프로세스 내에서 실행되는 경량화된 작업 단위로, 하나의 프로세스 내에서 여러 개의 쓰레드가 자원을 공유하며 동작한다.
프로세스는 프로그램이 실행되는 동안 필요한 모든 자원을 포함하며, 운영체제는 여러 프로세스를 동시에 관리하여 시스템 자원을 효율적으로 배분한다. 프로세스의 각 영역은 메모리 관리와 실행 흐름을 최적화하는 데 중요한 역할을 한다.
반응형
'정보처리,전산 > 운영체제' 카테고리의 다른 글
비선점형 SJF (Shortest Job First) (0) | 2024.10.19 |
---|---|
FIFO (0) | 2024.10.04 |
LRU (least recently used) | frame (1) | 2024.10.03 |
운영체제의 발달 과정 (0) | 2024.09.27 |
UNIX CPU 스케줄링 (1) | 2024.08.16 |