멀티스레딩은 여러 개의 스레드를 동시에 수행하는 컴퓨팅의 한 형태입니다. 이로 인해 프로그램의 효율성이 높아지지만, 동시에 여러 가지 복잡한 이슈들이 발생할 수 있습니다. 경쟁 상태(Race Conditions): 두 개 이상의 스레드가 동시에 공유 데이터에 액세스할 때 발생하는 문제입니다. 이로 인해 데이터의 일관성이 깨질 수 있습니다. 예를 들어, 스레드 A와 B가 동시에 같은 변수에 접근해서 수정한다고 생각해 봅시다. A가 먼저 읽고 B가 먼저 쓴다면, A가 가지고 있던 데이터는 더 이상 유효하지 않게 됩니다. 이런 현상을 경쟁 상태라고 합니다. 데드락(Deadlock): 두 개 이상의 스레드가 서로 다른 스레드가 사용하고 있는 자원을 기다리면서 영원히 대기하는 상태입니다. 각 스레드는 다른 스레드..
OS
1. 뮤텍스 (Mutex) 뮤텍스는 "Mutual Exclusion"의 줄임말로, 상호 배제를 의미합니다. 이는 한 번에 하나의 스레드만 특정한 코드를 실행할 수 있게 하는 동기화 기술입니다. 이 기술은 특히 공유 자원에 대한 동시 접근을 제어하는데 사용됩니다. 예를 들어, 두 개의 스레드가 동시에 같은 메모리 위치를 수정하려고 시도하면 예측 불가능한 결과가 발생할 수 있습니다. 뮤텍스는 이런 상황을 방지하며, 하나의 스레드만이 특정 시점에서 공유 자원을 사용할 수 있게 합니다. 2. 모니터 (Monitor) 모니터는 고급 동기화 기법으로, 하나의 프로세스 또는 스레드만이 공유 자원을 접근할 수 있게 하는 메커니즘입니다. 모니터는 뮤텍스와 비슷하게 작동하지만, 모니터는 상호 배제를 보장하는 메소드와 변수..
세마포어(Semaphore)는 다중 프로그래밍 환경에서 동기화 문제를 해결하기 위한 방법 중 하나입니다. 이 블로그 글에서는 세마포어의 개념과 사용 방법에 대해 설명하고, 관련된 동기화 기법에 대해서도 알아보겠습니다. 1. 동기화(Synchronization)란? 다중 프로그래밍 환경에서 여러 개의 스레드나 프로세스가 동시에 실행됩니다. 이 때 공유 자원에 동시에 접근하여 문제가 발생하는 경우를 '경쟁 상태(Race Condition)'라고 합니다. 동기화는 이러한 경쟁 상태를 방지하기 위해 스레드나 프로세스 간의 실행 순서를 조절하는 것입니다. 2. 세마포어(Semaphore)의 개념 세마포어는 공유 자원에 접근하는 스레드의 수를 제한하는 카운터입니다. 세마포어의 값은 정수이며, 일반적으로 두 가지 연..
요약: 프로세스와 쓰레드는 독립적인 실행 단위이지만, 그들 간에는 중요한 차이점이 있습니다. 이 글에서는 프로세스와 쓰레드의 차이점과 각각의 특징을 구체적으로 살펴보겠습니다. 1. 프로세스(Process)란? 프로세스는 실행 중인 프로그램의 인스턴스입니다. 프로세스는 각각의 메모리 공간, 코드, 데이터, 그리고 시스템 자원을 포함하며, 이들은 서로 독립적입니다. 프로세스는 운영 체제에 의해 관리되며, 서로 다른 프로세스 간에 자원을 공유하지 않습니다. 2. 쓰레드(Thread)란? 쓰레드는 프로세스 내에서 실행되는 독립적인 실행 흐름입니다. 쓰레드는 프로세스의 메모리 공간과 시스템 자원을 공유하며, 각 쓰레드는 자신만의 레지스터, 스택, 프로그램 카운터 등을 가집니다. 쓰레드는 경량 프로세스라고도 불리며..
요약: 컨텍스트 스위칭은 운영 체제에서 프로세스나 쓰레드 간 전환을 가능하게 하는 과정입니다. 이 글에서는 컨텍스트 스위칭의 개념, 원리, 그리고 그 과정에서 발생하는 오버헤드에 대해 설명합니다. 1. 컨텍스트 스위칭(Context Switching)이란? 컨텍스트 스위칭은 프로세스나 쓰레드의 실행 상태를 저장하고 다른 프로세스나 쓰레드의 상태를 복원하는 과정입니다. 이 과정을 통해 여러 프로세스나 쓰레드가 동시에 실행되는 것처럼 보이게 합니다. 컨텍스트 스위칭은 운영 체제에서 멀티태스킹을 가능하게 하는 중요한 기술입니다. 2. 컨텍스트 스위칭의 원리 컨텍스트 스위칭은 다음 단계를 거쳐 진행됩니다: 현재 실행 중인 프로세스나 쓰레드의 상태를 저장합니다. 스케줄러가 다음 실행할 프로세스나 쓰레드를 결정합니..