멀티프로세싱과 멀티스레딩멀티프로세싱(Multiprocessing)과 멀티스레딩(Multithreading)은 현대 소프트웨어에서 동시에 여러 작업을 수행하기 위한 대표적인 두 가지 병렬(또는 병행) 처리 기법임.CPU 코어가 늘어나고 고성능 환경이 요구됨에 따라, 이 두 방식을 적절히 활용하는 것은 프로그래밍과 시스템 설계에서 매우 중요한 주제가 됨. 기본 정의와 개념 : 멀티 프로세싱1. 정의물리적으로 여러 개의 프로세스를 동시에 실행하는 것을 말함.여러 프로세스를 활용해 병렬 처리를 수행하고, 각각의 프로세스는 운영체제로부터 독립된 자원(메모리 공간, 파일 디스크립터 등)을 할당받음. 2. 운영체제 레벨에서의 특징운영체제마다 약간씩 다르지만, 보통 각 프로세스는 별도의 주소 공간을 가짐.프로세스 간 ..
프로세스와 스레드의 차이프로세스(Process)와 스레드(Thread)는 현대 운영체제(특히 멀티태스킹 OS)에서 중요한 개념임.서로 긴밀히 연관되어 있으면서도 메모리 구조, 생성 및 종료 오버헤드, 자원 공유 방식 등에 있어 차이를 가짐. 정의1. 프로세스(Process)프로그램(코드)이 메모리에 적재되어 실행 중인 상태를 가리킴.독립된 실행 흐름을 갖고, 운영체제로부터 자원을 할당받아 구동되는 하나의 작업 단위임. 2. 스레드(Thread)프로세스 안에서 실행되는 가장 작은 실행 흐름 단위임.한 프로세스 내부에 여러 스레드가 존재할 수 있으며, 각각 병렬적(또는 병행적)으로 작업을 수행함. 주소 공간과 자원 관리1. 프로세스각 프로세스는 독립된 메모리 공간(코드 세그먼트, 데이터 세그먼트, 힙, 스택..
CPU 스케줄링 알고리즘운영체제에서 CPU 스케줄링(CPU Scheduling)은 여러 프로세스(또는 스레드)가 제한된 CPU 자원을 효율적으로 공유할 수 있도록, 어느 시점에 어떤 프로세스에 CPU를 할당할지를 결정하는 핵심 기법임.스케줄링 알고리즘은 다양한 시스템 목표(처리량, 응답 시간, 공정성, 실시간성 등)를 최대화 또는 최적화하기 위한 전략을 제시함. CPU 스케줄링 개념과 배경1. 프로세스 상태와 준비 큐(Ready Queue)프로세스(또는 스레드)는 Running, Ready, Waiting 등의 상태를 가짐.CPU 스케줄러는 주로 Ready 상태에 있는 프로세스 중 하나를 선택하여 CPU를 할당함. 2. 선점(Preemption) vs 비선점(Non-preemptive)비선점(Non-pr..
자바 표준 스펙자바(Java)는 단순히 하나의 프로그래밍 언어가 아니라, 언어 사양과 가상 머신 사양, 그리고 방대한 표준 라이브러리로 구성된 플랫폼임.자바 ‘표준 스펙(사양)’이란 이러한 자바 플랫폼을 정의하는 일련의 공식 문서를 가리키며, 일반적으로 다음과 같은 세 가지 주요 축으로 나누어 설명함. 1. 자바 언어 명세서 (Java Language Specification, JLS)2. 자바 가상 머신 명세서 (Java Virtual Machine Specification, JVMS)3. 표준 라이브러리(API) 명세 (Java SE API Specification) 이 세 요소는 자바가 어떤 문법과 특징을 가진 언어이고, 그 프로그램을 어떻게 실행하며, 어떤 표준 라이브러리를 제공하는지를 정의함.또..
운영체제의 PCB운영체제(Operating System)에서 프로세스(Process)는 프로그램이 실행 중인 ‘실체’를 의미함.이때 OS는 프로세스의 상태, 스케줄링 정보, 자원 할당 정보 등을 체계적으로 관리해야 하는데, 이를 위해 사용하는 핵심 자료구조가 바로 PCB(Process Control Block)임.PCB는 운영체제 커널이 프로세스를 식별하고 제어하기 위해 유지하는 정보의 집합임. PCB의 개념과 역할1. 프로세스 식별 및 관리운영체제가 여러 프로세스를 동시에(시분할, 멀티태스킹) 관리하기 위해서는 각 프로세스를 ‘고유하게 식별’해야 함.PCB에는 프로세스 식별자로 불리는 PID(Process ID)를 비롯한 여러 정보를 저장하여 운영체제가 프로세스를 구분, 추적, 제어할 수 있도록 함. ..
메모리 계층컴퓨터 메모리 계층 구조(Memory Hierarchy)는 프로세서가 데이터를 저장하고 접근하는 데 필요한 다양한 저장 매체들을 ‘속도와 비용, 용량’ 등의 여러 측면에서 계층적으로 배치한 것을 의미함.일반적으로 가장 빠르지만 용량은 작고 가격이 비싼 매체부터, 상대적으로 느리고 용량이 크며 가격이 저렴한 매체까지 층을 이루게 됨. 계층적 구조의 필요성1. 속도 vs 비용의 Trade-off반도체 기반의 초고속 메모리는 매우 빠르지만 단가가 높고, 대규모로 확장하기 어려움.느리지만 대용량 저장이 가능한 장치는 저렴하므로 데이터를 많이 저장할 수 있지만 속도가 상대적으로 낮음. 2. 지역성(Locality) 원리 활용시간적 지역성(Temporal Locality): 최근에 사용된 데이터나 명령어..
도커의 파일시스템도커(Docker)은 컨테이너 기술을 제공하는 플랫폼으로, 핵심적인 특징 중 하나가 바로 레이어(layer) 개념과 유니온 파일시스템(Union Filesystem)을 활용한 독특한 파일시스템 구조임.도커 파일시스템 구조를 정확히 이해하면 도커 이미지가 어떻게 구성되는지, 컨테이너 내부에서 파일 변경이 어떻게 처리되는지, 다양한 스토리지 드라이버는 어떤 방식으로 동작하는지 등을 심도 있게 파악할 수 있음. 도커 이미지와 레이어도커 이미지는 여러 개의 읽기 전용 레이어(읽기 전용 파일시스템)를 유니온 파일시스템으로 합쳐서 하나의 논리적인 파일시스템을 구성한 형태임.도커 이미지는 전통적인 VM 이미지를 생각했을 때와 달리 매우 가볍고, 변경점만을 새로운 레이어로 관리함으로써 이미지를 효율적으..
도커 볼륨 구조도커(Docker) 볼륨(Volume)은 컨테이너의 파일시스템 외부에 위치하는, 데이터를 영구적으로 저장하기 위한 특별한 메커니즘임.도커 볼륨은 컨테이너가 재시작되거나 삭제되더라도 데이터를 유지할 수 있고, 여러 컨테이너 간에 손쉽게 데이터 공유도 가능함. 도커의 파일시스템1. 레이어(Layer) 기반 이미지 구조도커 이미지는 여러 읽기 전용 레이어(RO layer)의 합으로 이루어지며, 컨테이너를 실행할 때 읽기/쓰기(RW) 레이어가 추가됨.컨테이너 내부에서 파일이 변경되면 RW 레이어에만 해당 변경 사항이 저장되고, 원본 이미지는 변경되지 않음.이 RW 레이어는 일반적으로 일시적(휘발성)이기 때문에 컨테이너가 삭제되면 데이터도 함께 삭제됨. 2. 영속 데이터 문제데이터베이스나 로그, 업..
컨테이너 실시간 모니터링 방법도커 컨테이너가 사용하는 CPU, 메모리와 같은 자원 사용량은 운영 환경에서 중요한 지표임.이 지표를 실시간으로 모니터링하여 병목 현상을 사전에 파악하거나, 장애 상황을 빠르게 진단할 수 있음. docker stats 명령어 활용1. 개요도커는 기본적으로 docker stats라는 CLI 명령을 제공함.이 명령을 사용하면 실행 중인 모든 컨테이너의 CPU, 메모리, 네트워크, 블록 I/O 사용량을 실시간으로 볼 수 있음. 2. 사용 방법docker stats별다른 인자가 없으면, 모든 컨테이너의 상태를 실시간으로 표시함.특정 컨테이너만 보고 싶으면, 컨테이너 이름이나 ID를 지정함.docker stats ... 3. 출력 정보CONTAINER ID: 컨테이너 IDNAME: ..
도커 컨테이너의 자원과 로컬의 자원도커(Docker) 컨테이너는 가상머신(VM)과 달리 호스트 OS의 커널을 직접 공유하면서 애플리케이션을 격리하는 방식으로 동작함.이로 인해 가볍고 빠른 실행 환경을 제공하지만, 동시에 호스트 머신(로컬) 자원과 긴밀히 연결되어 있음. 도커 컨테이너의 기본 아키텍처1. 호스트 커널 공유컨테이너는 호스트 OS(또는 VM 내부)의 커널을 그대로 공유함.가상머신(VM)처럼 별도의 OS 커널을 갖지 않으므로, 프로세스 수준에서 격리가 이루어짐.이를 통해 오버헤드가 적고, 리소스를 효율적으로 사용할 수 있음. 2. Namespaces (네임스페이스)리눅스 커널의 네임스페이스 기술을 활용해 프로세스, 네트워크, 파일시스템, 사용자, IPC, UTS 등을 격리함.예를 들면,PID N..