블로킹 큐(Blocking Queue)는 동기화와 스레드 안전성을 보장하는 자료구조이다. 주로 멀티 스레드 환경에서 사용되며, 생산자-소비자 패턴과 같은 문제를 해결할 때 유용하다.블로킹 큐의 동작 방식블로킹 큐는 큐가 비어 있거나 가득 찼을 때, 큐에 데이터를 넣거나 빼려는 스레드가 일정 조건을 만족할 때까지 대기 상태(블로킹)에 들어간다. 이를 통해 스레드 간의 안전한 데이터 공유가 가능하다.삽입 시 대기큐가 가득 찬 경우, 데이터를 삽입하려는 스레드는 큐에 빈 공간이 생길 때까지 대기한다.다른 스레드가 큐에 데이터를 소비해서 자리가 생기면, 삽입하려는 스레드는 대기 상태에서 깨어나고 데이터를 큐에 넣을 수 있다.삭제 시 대기큐가 비어 있는 경우, 데이터를 꺼내려는 스레드는 큐에 새로운 데이터가 삽입..
이전에 뮤텍스 락과 세마포에 대해서 다룬 적이 있습니다. 현재 글은 이전 글을 다듬어서 새로 작성된 게시물입니다.https://server-technology.tistory.com/338 동기화가 필요한 이유여러 스레드가 동시에 임계 구역(Critical Section)에 접근하면 데이터 일관성 문제가 발생할 수 있다. 임계 구역이란 공유 자원에 여러 스레드가 동시에 접근하였을 때 문제가 발생할 수 있는 코드 영역이다. 여러 스레드가 동시에 임계 구역에 접근하여 문제가 발생하는 것을 레이스 컨디션(Race Condition)이라고 한다.레이스 컨디션 문제를 해결하기 위해서는 동기화 처리가 필요하다. 동기화란 실행 순서를 제어하고 상호 배제를 준수하는 것이다.실행 순서 제어 : 여러 스레드가 존재할 때 ..
page table은 메모리에 저장되는데, CPU는 프로세스를 사용하기 위해 메모리에 두 번 접근해야 한다.메모리에 저장된 page table에 접근가상 주소를 물리 주소로 변환하기 위해 page table에 접근한다.page table 기반으로 실제 메모리에 접근page 테이블에서 얻은 물리 주소를 통해 실제 물리 메모리에 접근한다. CPU에서 메모리에 접근하는 것은 시간이 소요되는 작업이다. 따라서 메모리에 두 번의 접근이 필요하면 상당한 시간이 소요된다. 이러한 문제를 해결하기 위해서는 메모리에 접근하는 횟수를 줄여야 한다. 1. TLB(Translation Lookaside Buffer)1-1. TLB란?TLB(Translation Lookaside Buffer)는 메모리 접근 횟수를 줄이고자 ..
1. 프로세스 주소 공간스택(Stack) 영역컴파일 시점에 크기가 결정된다.함수의 호출과 관계있는 지역 변수와 매개 변수 그리고 함수의 실행을 마치고 복귀할 주소가 저장되는 영역이다.스택 영역은 함수의 호출과 함께 생성되고 종료와 함께 소멸된다.메모리의 높은 주소에서 낮은 주소 방향으로 할당된다.재귀가 너무 깊게 호출되면 StackOverFlow 예외가 발생하는데, 이는 제한된 스택 영역을 초과하였기 때문에 발생한다.프로그램 실행 중에 변경될 수 있으므로 Read-Write로 설정되어 있다.힙(Heap) 영역런타임 시점에 결정되는 영역이다.사용자에 의해 동적으로 할당되고 명시적으로 해제해야 한다.malloc(), new(), free()주로 참조형 데이터가 할당된다.프로그램 실행 중에 변경될 수 있으므로..
Context Switching이란?멀티 프로세스 또는 멀티 스레드 환경에서 여러 프로세스 또는 스레드가 CPU를 공유하기 때문에 컨텍스트 스위칭이 발생한다.진행 중이던 작업에서 다른 작업을 수행해야할 때, 현재 프로세스 또는 스레드는 지금까지 진행한 작업의 상태를 저장한다. 그리고 컨텍스트 스위칭을 통해 다른 작업을 수행하는 프로세스의 이전 작업 내용을 복원한다. Context란?Conext란 CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들이다.각 프로세스는 독립된 메모리 공간에 PCB(Process Control Block)을 저장하며, 프로세스의 정보인 Context가 저장된다.PCB는 다음 정보를 저장한다.프로세스 상태: 생성, 준비, 수행, 대기, 중지PC(프로그램 카운터): 프로..