블로킹 큐(Blocking Queue)는 동기화와 스레드 안전성을 보장하는 자료구조이다. 주로 멀티 스레드 환경에서 사용되며, 생산자-소비자 패턴과 같은 문제를 해결할 때 유용하다.블로킹 큐의 동작 방식블로킹 큐는 큐가 비어 있거나 가득 찼을 때, 큐에 데이터를 넣거나 빼려는 스레드가 일정 조건을 만족할 때까지 대기 상태(블로킹)에 들어간다. 이를 통해 스레드 간의 안전한 데이터 공유가 가능하다.삽입 시 대기큐가 가득 찬 경우, 데이터를 삽입하려는 스레드는 큐에 빈 공간이 생길 때까지 대기한다.다른 스레드가 큐에 데이터를 소비해서 자리가 생기면, 삽입하려는 스레드는 대기 상태에서 깨어나고 데이터를 큐에 넣을 수 있다.삭제 시 대기큐가 비어 있는 경우, 데이터를 꺼내려는 스레드는 큐에 새로운 데이터가 삽입..
동기 방식은 블로킹 I/O에서는 실행 상태에서 CPU 자원을 사용하던 프로세스가 입출력 작업이 발생하면 대기 상태로 이동한다. 대기 상태로 이동하면 사용하던 CPU 자원은 운영체제의 CPU 스케줄링에 의해 준비 상태에 있는 다른 프로세스에게 할당한다. 입출력 작업이 종료되면 대기 상태에서 준비 상태로 이동되어 CPU 스케줄링을 대기하게 된다. 비동기 방식인 논 블로킹 I/O에서는 실행 상태에 있는 프로세스가 입출력 작업이 발생하더라도 실행 상태를 유지하면서 CPU 자원을 사용한다. 이는 운영체제의 비동기 처리 메커니즘 덕분이다. 이 메커니즘은 CPU가 입출력 작업이 완료되기까지 기다리지 않고, 그 사이에 다른 작업을 할 수 있도록 하여 CPU 자원을 보다 효율적으로 사용할 수 있게 한다. 비동기 방식 메..
1. 해시 테이블(Hash Table)이란?해시 테이블이란 키와 값의 대응으로 이루어진 데이터 구조이다. 예를 들어, ISBN 번호가 키라면 그에 대응하는 책 제목이 값이 된다. 만약 ISBN 번호 9791162245651을 키로 입력하면 대응하는 값으로 혼자 공부하는 파이썬이 반환된다. 해시 테이블에서는 해시 함수를 사용하여 키를 특정 버킷에 매핑한다. 버킷은 배열처럼 여러 개로 이루어진 저장 공간이다. 해시 함수는 입력된 키에 대해 인덱스를 계산해 해당 버킷에 데이터를 저장하거나 찾을 수 있도록 한다. 예를 들어, Hanbit이라는 키를 해시 함수에 입력하면 해시 함수가 계산한 인덱스 2에 데이터를 저장하게 된다. 다른 키들도 마찬가지로 해시 함수를 통해 계산된 인덱스를 기반으로 버킷에 저장된다. 2..
1. 페이징 기법은 외부 단편화 문제를 해결한다.페이징(paging) 기법은 프로세스의 논리 주소 공간은 페이지(page)라는 일관된 크기로 나누고 물리 주소 공간을 페이지와 동일한 크기인 프레임(frame)으로 나눈다. 프레임에는 페이지가 적재된다. 페이징 기법은 프로세스의 논리 주소 공간을 일관된 크기의 페이지로 나누기 때문에 메모리에 빈 공간이 발생하지 않는다. 따라서 외부 단편화가 발생하지 않는다. 가상 메모리 기법이란 프로세스의 일부만 메모리에 적재하여 실제 메모리보다 더 큰 프로세스를 실행할 수 있도록 하는 메모리 관리 기법이다. 보조기억장치의 일부를 메모리처럼 사용하거나 실행에 필요한 프로세스의 일부만 메모리에 적재하여 메모리보다 더 큰 프로세스를 실행할 수 있다. 페이징 기법에서도 스와핑..
1. 커널 영역과 사용자 영역커널 영역에는 프로세스 제어 블록(PCB)이 저장되고, 사용자 영역에는 실행 중인 프로세스를 코드 영역, 데이터 영역, 힙 영역, 스택 영역으로 나뉘어 저장된다.1-1. 코드 영역코드 영역은 CPU가 실행할 명령어가 담겨 있기 때문에 읽기 전용(read-only) 모드로 사용한다. CPU는 코드 영역에 담긴 명령어를 읽고 실행만 하기 때문에, 수정되어서는 안 될 공간이다.1-2. 데이터 영역데이터 영역은 프로그램이 실행되는 동안 사용할 데이터가 저장되는 공간이다. 주로 정적 변수와 전역 변수가 저장된다.전역 변수 : 프로그램 전체에서 사용 가능한 변수이다.자바(Java)는 전역 변수를 지원하지 않는다.정적 변수 : 클래스에 속한 변수로, 클래스의 모든 인스턴스가 공유하는 변수..