-
단일프로세스,멀티프로그래밍,멀티태스킹,멀티프로세싱,컨텍스트 스위칭,스레드,멀티쓰레드란 무엇인가?컴퓨터과학 2024. 5. 17. 11:40728x90반응형
초기 컴퓨터와 프로세스
초기의 컴퓨터는 한 번에 하나의 작업만 수행할 수 있었습니다. 이러한 시스템은 배치 처리(batch processing) 시스템으로, 하나의 작업이 끝나야 다음 작업을 시작할 수 있었습니다. 이때, 하나의 작업 단위는 프로세스(process)로, 독립적인 주소 공간과 자원을 가지는 프로그램 실행 단위를 의미합니다. 프로세스간에는 메모리가 공유되지 않는다.
단일프로세스
cpu는 메모리에서 프로세스를 실행한다.
단하나의 메모리에 있는 프로세스을 실행하는것을 단일프로세스라고한다.
단일프로세스의 단점은 cpu 1개의 하나의 프로세스을 실행시키므로 cpu낭비가 심하다.
멀티프로그래밍
단일프로세스의 단점을 보완하기 위해 생긴 개념
cpu가 2개이상의 프로세스를 실행시키는 개념이다.
예를들어 p1,p2 프로세스가 존재한다면, 시간의 흐름에 따라
p1이 실행하되 p1이 I/O 작업을 진행하면 인터럽트가 들어와서 p2가 실행되며 반복한다.
멀티프로그래밍의 단점은 p1이 작업시간을 길게 잡으면 p2는 무기한 기다려야한다는것이다.
이를 보완하기 위해 멀티태스킹이 나타났다.
멀티프로세싱
멀티프로세싱(Multiprocessing)은 여러 CPU 또는 CPU 코어를 사용하여 동시에 여러 작업을 병렬로 처리하는 기술을 의미합니다. 멀티프로세싱은 컴퓨터 시스템의 처리 능력을 극대화하고, 더 많은 작업을 더 빠르게 수행할 수 있게 합니다. 이를 통해 시스템 성능과 효율성을 높일 수 있습니다.
멀티태스킹
멀티프로그래밍의 단점을 보완하기위해 현재 작업중인 프로세스가 끝날떄까지 기다리는것이 아니라,
퀀텀단위로 시간을 쪼개서 프로세스들을 번갈아가면서 실행시키는 방식이다.
예를들어 p1,p2 프로세스가 존재한다면 각 프로세스를 1초마다 실행시켜서 (p1,p2,p1,p2)
프로세스의 응답시간을 최소화 시키는 것이다.
컨텍스트 스위칭
위에서 cpu가 작업을 할떄 p1에서 p2로 갈아타는 작업을 컨텍스트 스위칭이라고한다.
프로세스 간의 문맥 전환에는 전체 주소 공간, 레지스터, 메모리 맵 등의 변경이 필요하다.
스레드
1970년대와 1980년대에 들어서면서, 다중 프로세스 환경에서의 효율성을 높이기 위한 방법이 모색되었습니다. 특히, 프로세스 간의 문맥 전환 오버헤드를 줄이고자 하는 요구가 커졌습니다. 이때 등장한 개념이 바로 쓰레드입니다.
쓰레드는 동일한 프로세스 내에서 실행되는 경량 프로세스(lightweight process)로 볼 수 있습니다. 쓰레드는 독립적인 실행 경로를 가지지만, 프로세스의 주소 공간과 자원을 공유합니다. 이를 통해 문맥 전환 시 프로세스 전체를 교체할 필요 없이, 최소한의 상태 정보만 교체하면 되므로 훨씬 빠르게 전환할 수 있습니다.
- 쓰레드란 프로그램(프로세스) 실행의 단위이며
하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다. - 하나의 프로세스를 구성하는 쓰레드들은 프로세스에 할당된 메모리, 자원 등을 공유한다.
- 프로세스와 같이 실행, 준비, 대기 등의 실행 상태를 가지며
실행 상태가 변할때마다 쓰레드 문맥교환(context switching)을 수행한다. - 각 쓰레드별로 자신만의 스택과 레지스터를 가진다.
프로세스 vs 스레드
- 프로세스(Process): 독립적인 실행 환경을 가지는 프로그램의 인스턴스. 독립적인 메모리 공간을 가짐.
- 스레드(Thread): 프로세스 내에서 실행되는 가벼운 실행 단위. 같은 프로세스 내에서 다른 스레드와 메모리 공간을 공유함.
CPU의 작업 단위
CPU의 작업 단위는 문맥에 따라 다르게 이해할 수 있습니다:
- 운영체제의 관점:
- 초기 컴퓨터 시스템에서는 CPU의 작업 단위가 프로세스였습니다. 운영체제는 프로세스 간의 문맥 전환(context switching)을 통해 멀티태스킹을 구현했습니다.
- 프로세스는 독립적인 실행 단위로서, 각각의 프로세스는 운영체제에 의해 스케줄링되고 관리됩니다.
- 현대 멀티태스킹 시스템:
- 멀티태스킹이 발전함에 따라, 특히 멀티코어 및 멀티프로세서 시스템에서는 더 세분화된 작업 단위인 스레드가 사용됩니다.
- 운영체제의 스케줄러는 이제 스레드를 작업 단위로 취급하여, 프로세스 내에서 여러 스레드를 동시에 실행할 수 있도록 합니다.
왜 스레드가 작업 단위인가?
현대 컴퓨팅 환경에서는 다음과 같은 이유로 CPU의 작업 단위를 스레드로 간주합니다:
- 경량화된 문맥 전환: 스레드 간의 문맥 전환은 프로세스 간의 문맥 전환보다 오버헤드가 훨씬 적습니다. 스레드는 같은 주소 공간을 공유하기 때문에, 메모리 맵이나 파일 디스크립터 등을 변경할 필요가 없습니다.
- 병렬 처리: 멀티코어 프로세서에서는 여러 스레드를 병렬로 실행할 수 있습니다. 각 코어가 독립적으로 스레드를 실행하며, 이를 통해 성능을 극대화합니다.
- 자원 공유: 같은 프로세스 내의 스레드는 데이터와 코드 등 자원을 공유하여 협력적으로 작업을 수행할 수 있습니다. 이는 특히 복잡한 응용 프로그램에서 효율성을 높입니다.
결론
- 프로세스는 여전히 중요한 실행 단위로, 독립적인 실행 환경을 제공하고 운영체제가 관리합니다.
- 그러나, 스레드는 더 세분화된 실행 단위로서, CPU가 실질적으로 작업을 수행할 때 사용하는 기본 단위입니다. 이는 스레드가 더 가벼운 문맥 전환을 가능하게 하고, 멀티코어 환경에서 병렬 처리를 최적화하기 때문입니다.
따라서, 현대의 CPU와 운영체제의 관점에서 "하나의 작업 단위"는 스레드로 이해하는 것이 맞습니다.
멀티쓰레드
멀티스레드(multi-threading)는 하나의 프로세스 내에서 둘 이상의 스레드를 생성하고 실행하는 기술을 말합니다. 멀티스레드는 프로그램의 동시성과 병렬성을 높여, 시스템 자원의 효율적인 사용과 응답성을 개선하는 데 중요한 역할을 합니다.
멀티스레드의 도전 과제
멀티스레드 프로그래밍은 여러 도전 과제를 동반합니다:
- 동기화(Synchronization):
- 스레드 간의 자원 접근을 조정하여 데이터 무결성을 유지해야 합니다. 이는 잠금(lock), 세마포어(semaphore), 모니터(monitor) 등을 사용하여 구현합니다.
- 데드락(Deadlock):
- 스레드가 서로 자원을 기다리며 무한 대기에 빠지는 문제입니다. 이를 방지하기 위해 주의 깊은 설계가 필요합니다.
- 경쟁 상태(Race Condition):
- 여러 스레드가 동시에 자원에 접근할 때 발생하는 문제로, 예상치 못한 결과를 초래할 수 있습니다. 이를 해결하기 위해 적절한 동기화 메커니즘이 필요합니다.
헷갈리는 멀티프로세싱,멀티스레딩,멀티태스킹 예제 정리
싱글코어 cpu에 싱글 스레드 프로세스 2개
멀티태스킹 o , 멀티프로세싱 x , 멀티스레딩 x
싱글코어 cpu에 2개의 스레드 프로세스 1개
멀티태스킹 o 멀티스레딩 o 멀티프로세싱 x
듀얼코어 cpu에 1개의 스레드 프로세스 2개
멀티태스킹 x 멀티스레딩 x 멀티프로세싱 o
듀얼코어 cpu에 2개의 스레드 포르세스 1개
멀티태스킹 x 멀티스레딩 o 머리프로세싱 o
728x90반응형'컴퓨터과학' 카테고리의 다른 글
cpu바운드 프로그램 멀티쓰레딩에 최적의 스레드 개수 결정 방법 및 멀티쓰레딩 개발에 주의할점 (0) 2024.05.22 프로세스 컨텍스트 스위칭과 스레드 컨텍스트 스위칭 정의 및 차이 with 예제 python (0) 2024.05.22 동기(sync)/비동기(async) , 블로킹(blocking)/논블로킹(nonblocking) 쉽게 이해하고 완전 정복 하자 with 예제코드 with java (0) 2024.05.08 DMA(Direct Memory Access)란 왜사용할까? - 수정중 (0) 2024.05.08 직렬화란?(serialization),역직렬화란?? java.io.Serializable (0) 2024.04.25 - 쓰레드란 프로그램(프로세스) 실행의 단위이며