os

    컨텍스트 스위칭(Context Switching)이란?

    컨텍스트 스위칭(Context Switching)이란?컨텍스트 스위칭은 하나의 CPU 코어가 여러 작업을 동시에 수행하는 것처럼 보이게 만들어주는 핵심 개념입니다. 운영체제는 실제로 여러 프로세스 또는 스레드를 아주 빠르게 전환해가며 실행시켜 사용자에게 동시에 여러 작업이 이루어지는 것 같은 환상을 제공합니다.왜 필요한가?멀티태스킹 환경에서 CPU 자원을 효율적으로 공유하기 위해I/O 요청 등으로 대기 중인 프로세스를 쉬게 하고, 다른 프로세스를 먼저 실행시키기 위해하나의 CPU가 여러 프로세스/스레드를 번갈아 처리하려면 현재 실행 상태를 기억하고 복원해야 하기 때문컨텍스트(Context)란?CPU가 특정 작업을 수행할 때 내부적으로 사용하는 정보입니다.주요 구성 요소는 다음과 같습니다:레지스터 상태프로..

    가상 메모리와 물리 메모리, 그리고 페이징과 세그멘테이션

    가상 메모리란 무엇인가?가상 메모리는 운영체제가 각 프로세스에 제공하는 독립적인 논리 주소 공간입니다. 프로그램은 자신만의 연속된 메모리 공간을 갖고 있는 것처럼 동작하지만, 실제로는 물리 메모리(RAM)에 존재하는 위치와 다를 수 있습니다.왜 가상 메모리가 필요한가?보안: 다른 프로세스의 메모리에 접근하지 못하게 막아줍니다.안정성: 잘못된 포인터 참조나 접근으로 인한 시스템 전체 오류를 방지합니다.메모리 확장: 실제 메모리보다 더 많은 메모리를 사용하는 것처럼 동작할 수 있습니다 (스왑 공간).편리한 메모리 관리: 코드, 힙, 스택 등을 분리해 관리하고, 동적으로 할당·해제할 수 있도록 합니다.물리 메모리란?물리 메모리는 컴퓨터에 실제로 장착된 RAM입니다. 이곳이야말로 CPU가 데이터를 읽고 쓰는 실..

    동기 vs 비동기 & 블로킹 vs 논블로킹

    동기(Synchronous)와 비동기(Asynchronous)동기는 호출한 함수가 작업이 끝날 때까지 기다리는 방식.즉, 요청을 보내고 결과가 반환될 때까지 아무 일도 하지 않고 기다린다는 의미.비동기는 호출한 함수가 작업이 끝날 때까지 기다리지 않고 바로 다음 작업을 수행하는 방식.결과는 나중에 콜백이나 이벤트를 통해 알려줌즉, 동기냐 비동기냐는 ‘작업 완료 여부를 누가 신경 쓰는가’에 대한 관심.동기: 호출한 쪽이 작업 완료를 신경 씀비동기: 호출당한 쪽이 작업 완료를 신경 씀 (콜백 등으로 알려줌)블로킹(Blocking)과 논블로킹(Non-blocking)블로킹은 함수 호출 시, 작업이 끝날 때까지 현재 스레드를 멈추게 함. 즉, 함수가 끝날 때까지 다른 작업을 못함논블로킹은 함수가 바로 리턴되고,..

    캐시 메모리란?

    캐시 메모리란?프로그램 실행 속도를 높이기 위해 컴퓨터는 다양한 하드웨어 최적화 기법을 활용하는데, 그중에서도 가장 핵심적인 요소 중 하나가 캐시 메모리(cache memory)다.1. 캐시의 정의캐시 메모리는 CPU 내부 혹은 매우 가까운 위치에 존재하는 고속 메모리이다. CPU가 명령어나 데이터를 처리할 때, 메인 메모리(RAM)에 접근하는 속도가 상대적으로 느리기 때문에, CPU 성능을 100% 활용하지 못하는 병목이 발생할 수 있다.이를 해결하기 위해 자주 사용하는 데이터나 명령어를 캐시에 미리 저장해두고, CPU가 먼저 캐시에서 해당 정보를 찾도록 설계되어 있다. 만약 캐시에 있으면 빠르게 처리하고, 없으면 메인 메모리에서 가져온 뒤 캐시에 다시 저장하는 방식이다.이 과정은 전부 하드웨어적으로 ..

    프로그램은 어떻게 실행되는가

    프로그램은 어떻게 실행되는가프로그램은 단순히 코드를 작성한다고 바로 실행되는 것이 아니다. 사람이 읽기 쉬운 고급 언어로 작성된 코드가 컴퓨터에서 실제로 실행되기까지는 여러 단계를 거친다. 이 과정은 크게 작성 → 빌드 → 실행 → 종료의 흐름으로 정리할 수 있다.1. 소스 코드 작성개발자는 C, C++, Java 등 고급 언어로 프로그램의 동작을 기술한다. 이 코드는 사람이 읽고 이해할 수 있도록 만들어졌지만, 컴퓨터는 직접 실행할 수 없다.2. 빌드: 실행 파일 생성작성된 소스 코드는 컴파일러와 링커를 거쳐 기계가 이해할 수 있는 실행 파일로 변환된다. 대표적인 단계는 다음과 같다."프로그램의 빌드 과정" 페이지 참고.3. 로딩: 실행 파일을 메모리에 적재사용자가 실행 파일을 실행하면, 운영체제 커널..

    스핀락(Spin Lock)

    스핀락(Spin Lock)이란?스핀락은 임계영역에 진입하기 위해 락이 해제될 때까지 루프를 돌며(busy waiting / active waiting) 대기하는 락 기법이다.즉, 락이 걸려 있을 때 블록 상태로 대기하지 않고, 계속해서 락을 얻기 위해 시도하는 방식이다.작동 방식한 스레드가 락을 획득하면, 다른 스레드는 락이 풀릴 때까지 계속 CPU를 점유한 채 반복 검사(spin) 한다.락이 해제되면 가장 먼저 락을 검사하던 스레드가 락을 획득하고 임계영역에 진입한다.// 간단한 의사 코드while (locked) { // do nothing (busy wait)}locked = true;// 임계영역...locked = false;특징장점컨텍스트 스위칭이 발생하지 않아, 락이 짧게 유지될 경우 ..

    세마포어(Semaphore)

    세마포어멀티스레드나 멀티프로세스 환경에서는 여러 실행 흐름이 동시에 하나의 공유 자원에 접근할 수 있기 때문에, 예상치 못한 충돌이나 오류가 발생할 수 있다.이를 방지하기 위해 등장한 동기화 도구 중 가장 기본적이면서 강력한 것이 바로 세마포어(Semaphore)이다.세마포어는 크게 카운팅 세마포어와 이진 세마포어로 나뉘며, 이 글에서는 두 종류를 각각 개념부터 동작 방식, 예외 사항까지 정리한다.1. 범용 세마포어 (카운팅 세마포어)개념카운팅 세마포어는 정수 값을 가지는 동기화 객체로, 여러 개의 동일한 공유 자원을 보호할 때 사용된다.세마포어의 값은 현재 사용 가능한 자원의 수를 의미하며, 프로세스나 스레드가 자원을 사용할 때는 값을 감소시키고, 반납할 때는 값을 증가시킨다.연산초기화: 자원의 개수만..

    뮤텍스(Mutex)

    뮤텍스 (Mutex)란?뮤텍스(Mutex, Mutual Exclusion)는 하나의 공유 자원에 여러 스레드가 동시에 접근하는 것을 방지하기 위한 동기화 기법이다.멀티스레드 환경에서 발생할 수 있는 경쟁 조건(Race Condition)을 방지하고, 임계영역(Critical Section)을 안전하게 보호하는 데 사용된다.주요 특징단일 자원 보호에 특화된 락소유 개념 존재: 락을 획득한 스레드만 해제할 수 있다임계영역 보호: 동시 접근을 차단하여 데이터 일관성 유지커널 기반 동기화 도구: 필요 시 사용자 모드 → 커널 모드 전환 (문맥 교환 발생 가능)동작 방식뮤텍스는 기본적으로 다음의 구조로 작동한다.스레드가 공유 자원을 사용하기 전 lock을 시도다른 스레드가 이미 뮤텍스를 소유하고 있다면 블로킹 상..