분류 전체보기
컨텍스트 스위칭(Context Switching)이란?
컨텍스트 스위칭(Context Switching)이란?컨텍스트 스위칭은 하나의 CPU 코어가 여러 작업을 동시에 수행하는 것처럼 보이게 만들어주는 핵심 개념입니다. 운영체제는 실제로 여러 프로세스 또는 스레드를 아주 빠르게 전환해가며 실행시켜 사용자에게 동시에 여러 작업이 이루어지는 것 같은 환상을 제공합니다.왜 필요한가?멀티태스킹 환경에서 CPU 자원을 효율적으로 공유하기 위해I/O 요청 등으로 대기 중인 프로세스를 쉬게 하고, 다른 프로세스를 먼저 실행시키기 위해하나의 CPU가 여러 프로세스/스레드를 번갈아 처리하려면 현재 실행 상태를 기억하고 복원해야 하기 때문컨텍스트(Context)란?CPU가 특정 작업을 수행할 때 내부적으로 사용하는 정보입니다.주요 구성 요소는 다음과 같습니다:레지스터 상태프로..
메모리 풀(Memory Pool) vs 오브젝트 풀(Object Pool)
메모리 풀(Memory Pool) vs 오브젝트 풀(Object Pool)게임 개발이나 시스템 프로그래밍에서 성능 최적화를 위해 자주 사용하는 두 가지 기법인 메모리 풀(Memory Pool) 과 오브젝트 풀(Object Pool) 은 비슷해 보이지만 목적과 범위가 다릅니다. 아래에서 각각을 비교하고 차이점을 정리합니다.개념 비교구분메모리 풀 (Memory Pool)오브젝트 풀 (Object Pool)목적메모리 할당/해제 비용 절감객체 생성/파괴 비용 절감관리 대상메모리 블록 (raw memory)실제 객체 인스턴스주요 사용 시점자주 할당/해제되는 메모리 사용이 필요한 경우자주 생성/삭제되는 객체가 있을 경우구현 방식일정 크기의 메모리 블록을 미리 할당하고 재사용미리 생성한 객체들을 재사용하며, 필요 시..
가상 메모리와 물리 메모리, 그리고 페이징과 세그멘테이션
가상 메모리란 무엇인가?가상 메모리는 운영체제가 각 프로세스에 제공하는 독립적인 논리 주소 공간입니다. 프로그램은 자신만의 연속된 메모리 공간을 갖고 있는 것처럼 동작하지만, 실제로는 물리 메모리(RAM)에 존재하는 위치와 다를 수 있습니다.왜 가상 메모리가 필요한가?보안: 다른 프로세스의 메모리에 접근하지 못하게 막아줍니다.안정성: 잘못된 포인터 참조나 접근으로 인한 시스템 전체 오류를 방지합니다.메모리 확장: 실제 메모리보다 더 많은 메모리를 사용하는 것처럼 동작할 수 있습니다 (스왑 공간).편리한 메모리 관리: 코드, 힙, 스택 등을 분리해 관리하고, 동적으로 할당·해제할 수 있도록 합니다.물리 메모리란?물리 메모리는 컴퓨터에 실제로 장착된 RAM입니다. 이곳이야말로 CPU가 데이터를 읽고 쓰는 실..
동기 vs 비동기 & 블로킹 vs 논블로킹
동기(Synchronous)와 비동기(Asynchronous)동기는 호출한 함수가 작업이 끝날 때까지 기다리는 방식.즉, 요청을 보내고 결과가 반환될 때까지 아무 일도 하지 않고 기다린다는 의미.비동기는 호출한 함수가 작업이 끝날 때까지 기다리지 않고 바로 다음 작업을 수행하는 방식.결과는 나중에 콜백이나 이벤트를 통해 알려줌즉, 동기냐 비동기냐는 ‘작업 완료 여부를 누가 신경 쓰는가’에 대한 관심.동기: 호출한 쪽이 작업 완료를 신경 씀비동기: 호출당한 쪽이 작업 완료를 신경 씀 (콜백 등으로 알려줌)블로킹(Blocking)과 논블로킹(Non-blocking)블로킹은 함수 호출 시, 작업이 끝날 때까지 현재 스레드를 멈추게 함. 즉, 함수가 끝날 때까지 다른 작업을 못함논블로킹은 함수가 바로 리턴되고,..
컴퓨터 메모리 계층 구조 (Memory Hierarchy)
컴퓨터 메모리 계층 구조 (Memory Hierarchy)Level 0 - 레지스터 (Registers)위치: CPU 내부속도: 가장 빠름 (CPU 한 사이클 수준)크기: 매우 작음 (보통 수십~수백 개, 총 수 킬로바이트 수준)특징: 연산에 직접 사용되며, 가장 비용이 높고 가장 빠른 메모리구현: 플립플롭(Flip-Flop)으로 구성Level 1 - 캐시 메모리 (Cache)위치: CPU와 메인 메모리 사이속도: 레지스터 다음으로 빠름크기: 수 메가바이트 수준 (L1 특징: 자주 접근하는 명령어나 데이터를 저장하여 CPU 접근 속도 향상구현: 정적 램(SRAM) 사용 → 빠르지만 고가Level 2 - 주기억장치 (Main Memory, RAM)위치: CPU가 직접 접근 가능속도: 캐시보다 느림크기: 수..
캐시 메모리란?
캐시 메모리란?프로그램 실행 속도를 높이기 위해 컴퓨터는 다양한 하드웨어 최적화 기법을 활용하는데, 그중에서도 가장 핵심적인 요소 중 하나가 캐시 메모리(cache memory)다.1. 캐시의 정의캐시 메모리는 CPU 내부 혹은 매우 가까운 위치에 존재하는 고속 메모리이다. CPU가 명령어나 데이터를 처리할 때, 메인 메모리(RAM)에 접근하는 속도가 상대적으로 느리기 때문에, CPU 성능을 100% 활용하지 못하는 병목이 발생할 수 있다.이를 해결하기 위해 자주 사용하는 데이터나 명령어를 캐시에 미리 저장해두고, CPU가 먼저 캐시에서 해당 정보를 찾도록 설계되어 있다. 만약 캐시에 있으면 빠르게 처리하고, 없으면 메인 메모리에서 가져온 뒤 캐시에 다시 저장하는 방식이다.이 과정은 전부 하드웨어적으로 ..
Effective C++ 공부 (항목 11 ~ 15)
Effective C++ 요약 (항목 11~15)항목 11: operator=에서는 자기 대입에 대한 처리를 빠뜨리지 말자문제점arr[i] = arr[j];*px = *py;위 연산들에는 자기 대입(self-assignment)의 가능성이 있음.단순히 delete 후 new로 처리할 경우 자기 대입 시 이미 지워진 데이터를 참조하게 될 수 있음.안전한 방법Widget& Widget::operator=(const Widget& rhs) { if (this == &rhs) return *this; Bitmap* pOrig = pb; pb = new Bitmap(*rhs.pb); // 복사 성공 시에만 교체 delete pOrig; return *this;}복사 먼저 → delet..
프로그램은 어떻게 실행되는가
프로그램은 어떻게 실행되는가프로그램은 단순히 코드를 작성한다고 바로 실행되는 것이 아니다. 사람이 읽기 쉬운 고급 언어로 작성된 코드가 컴퓨터에서 실제로 실행되기까지는 여러 단계를 거친다. 이 과정은 크게 작성 → 빌드 → 실행 → 종료의 흐름으로 정리할 수 있다.1. 소스 코드 작성개발자는 C, C++, Java 등 고급 언어로 프로그램의 동작을 기술한다. 이 코드는 사람이 읽고 이해할 수 있도록 만들어졌지만, 컴퓨터는 직접 실행할 수 없다.2. 빌드: 실행 파일 생성작성된 소스 코드는 컴파일러와 링커를 거쳐 기계가 이해할 수 있는 실행 파일로 변환된다. 대표적인 단계는 다음과 같다."프로그램의 빌드 과정" 페이지 참고.3. 로딩: 실행 파일을 메모리에 적재사용자가 실행 파일을 실행하면, 운영체제 커널..