전체 글 361

OS 캐시에 대하여..

디스크는 메모리와 속도차이가 많이 나고, OS에서는 이를 보완하기 위해 OS 캐시라는 것을 사용한다.리눅스는 대표적으로 페이지 캐시 (Page Cache)를 갖고 있다. 페이지 캐시(Page Cache)리눅스 커널이 디스크에서 읽거나 쓴 데이터를 메모리에 저장하는 방식.주로 파일 시스템의 성능을 향상시키기 위해 사용됨.디스크 I/O를 줄이고 성능을 최적화하는 역할. 페이지 캐시를 이해하기 위해서는 가상 메모리에 대해 좀 더 구체적으로 알아야 한다. 가상메모리가상 메모리는 프로세스마다 독립적인 주소 공간을 제공하는 시스템입니다.즉, 각 프로세스는 0x00000000~0xFFFFFFFF (예: 32비트 시스템) 범위의 주소를 사용할 수 있지만,이 주소들은 실제 물리 메모리와 직접 매칭되지 않고 OS가 관리합..

Computer Science 2025.03.19

select, epoll

목차select와 epoll의 개념을 이해하기 위해 FD 관련된 내용을 알아야 하므로 링크 참조.https://jaemni.tistory.com/entry/File-Descriptor-File-Table-Inode-Table File Descriptor, File Table, Inode Table[File Descriptor]프로세스에서 열린 파일 목록을 관리하는 테이블. (네트워크 소켓 역시 FD로 관리된다.)각 프로세스는 자신만의 FD를 가진다.프로세스가 파일에 접근할 때 FD를 사용하며 파일을 열면jaemni.tistory.com [개요]select와 epoll 모두 I/O 멀티플렉싱을 구현하기 위해 시스템콜. I/O 멀티플렉싱이란 하나의 프로세스가 여러 I/O 작업을 동시에 감시하고 처리할 수 있..

File Descriptor, File Table, Inode Table

[File Descriptor]프로세스에서 열린 파일 목록을 관리하는 테이블. (네트워크 소켓 역시 FD로 관리된다.)각 프로세스는 자신만의 FD를 가진다.프로세스가 파일에 접근할 때 FD를 사용하며 파일을 열면 사용하지 않은 가장 작은 값을 부여한다. (eg: 마지막으로 99를 썻다면 다음으로는 100이 부여된다)표준 입력/출력/에러에 0, 1, 2 라는 값이 미리 부여되어 있다. FD 테이블은 아래 데이터를 포함한다.FD: 프로세스가 접근하는 파일에 대한 인덱스파일테이블에 대한 포인터: 시스템 전역으로 관리되는 파일테이블을 가리키는 포인터 예시)File DescriptorPointer to File Table0 (STDIN)File Table Entry A1 (STDOUT)File Table Entr..

Java NIO - Direct Byte Buffer, Heap ByteBuffer

Java 1.0에 포함된 Input/Output Stream에는 BufferedInputStream, BufferedOutputStream이라는 구현체가 있다.내부적으로 버퍼를 사용하는데, 이 버퍼는 JVM Heap에 존재하는 버퍼이다. 그리고 실제로 리소스를 읽어오려면 커널 영역의 버퍼를 통해 복사를 해와야 하는데 이 과정에서 CPU 자원을 사용하게 된다.반면 커널 영역의 버퍼를 바로 사용할 경우 Disk Controller에 의해 CPU 도움 없이 리소스를 버퍼로 바로 복사할 수 있다. Java 1.4에서 등장한 Java NIO에서는 Channel과 Buffer를 통해 리소스와 통신을 하게 되며ByteBuffer를 활용하는 경우 DirectByteBuffer, HeapByteBuffer 2가지로 제공..

Reactive Programming 을 적용하는 이유?

GPT에게 물어본 내용을 그대로 발췌함. [Reactive Programming을 적용하는 이유?]1. 높은 동시성 및 확장성 (Concurrency & Scalability)Reactive Programming은 비동기 및 논블로킹(non-blocking) 처리를 기반으로 하기 때문에, 제한된 스레드로 많은 요청을 동시에 처리할 수 있습니다.블로킹 모델의 한계 극복: 전통적인 스레드 기반 모델에서는 각 요청마다 하나의 스레드를 할당해야 하므로, 높은 트래픽에서 스레드 자원이 소진될 수 있습니다. Reactive Programming은 이러한 블로킹 문제를 피합니다.효율적인 리소스 사용: 이벤트 루프와 같은 메커니즘을 사용하여, 스레드를 효율적으로 관리합니다.2. 낮은 지연시간 및 빠른 응답 (Low L..

Reactive System, Stream, Programming

Reactive System, Reactive Stream, Reactive Programming은 모두 비슷한 맥락에서 사용되지만, 각각의 의미와 목적이 약간씩 다르다.  Reactive System: Reactive Manifesto에 정의된 소프트웨어 아키텍쳐. 4가지 원칙이 존재한다.Responsive (응답성)Resilient (복원력)Elastic (유연성)Message-driven (메시지 기반) Reactive Programming: Reactive Manifesto에 영향을 받아 비동기 데이터 흐름을 다루는 프로그래밍 기법RxJavaRxJs (Javascript)Project Reactor (Spring Webflux) Reactive Stream: 데이터 스트림을 비동기적으로 처리하기 ..

Reactive Manifesto?

Reactive Manifesto? Reactive Manifesto (리액티브 선언문) 리액티브 시스템 설계 원칙을 정의한 문서"리액티브 시스템을 만들기위해 어떤 조건을 갖춰야 하는지를 명세해놓은 가이드라인"2013년에 처음 발표되었으며 4가지의 특성을 정의하고 있다. 공식 웹사이트: https://www.reactivemanifesto.org/  1. Responsive (응답성, 반응성)시스템은 사용자의 요청에 빠르고 일관되게 응답해야 한다.낮은 응답 시간과 고가용성을 유지하며, 시스템이 느리거나 장애가 발생한 경우에도 이를 적절히 처리해야 한다.Responsive를 준수했을 때 오류처리도 단순화 할 수 있고, 신뢰성 있는 시스템을 구축할 수 있다.2. Resilient (복원성)복제, 봉쇄, 격리..