Garbage Collection

ref: https://blog.siner.io/2021/12/26/garbage-collection/ Mark-and-Sweep 전통적인 가비지 컬렉션 기법 중 하나. 프로그램 실행 중 동적으로 할당된 메모리들에 대해 주기적으로 sweeping을 진행하며 메모리를 관리함. 과정 Mark: 프로그램이 도달할 수 있는 모든 객체에 대해 탐색을 시작하며(유향그래프 형태), 직접 또는 간접적으로 참조 가능한 객체에 “표시"를 남긴다. 이는 트리 탐색과 비슷한 형식으로 이루어지며, 모든 루트 객체에서 시작해 연결된 객체를 찾아나가는 과정을 거친다. mark 단계에서 root set 전체를 순회하며 flag를 ‘사용중’상태로 설정한다. 현재 참조가 되어 있는 객체들은 모두 ‘사용중’ flag를 가지게 된다....

September 24, 2024

Multiplexing

Multiplexing 정리 별 생각 없다가, 어제 디코에서 아우슥 사람들 얘기 듣다 보니 나도 헷갈려서 다시금 정리한다. Encap, Decap에 대한 개념을 시작으로 이어진 얘기였지만 결국 Multiplexing에 대한 내용을 정리하는 것으로 한다! 그렇게 되면 내용을 컴퓨터 일반으로 빼서 고민하는 것이 좋았겠지만, 주로 논의되는 곳이 네트워크 단에서이고 이 글을 쓰게 된 발단이 네트워킁 이야기이므로 이곳에 정리한다. Multiplexing in logic design 한국어로 다중화, 처음 만난 것은 논리 설계 수업이었다. 멀티플렉서 멀티플렉서(multiplexer) 또는 mux는 여러 아날로그 또는 디지털 입력 신호 중 하나를 선택하여 선택된 입력을 하나의 라인에 전달하는 장치이다....

September 14, 2024

[Operating System] Lightweight Processing Units 2

V8-isolate study 결국 독립적인 heap 메모리 할당, GC 등을 통하여 독립적인 실행 환경을 구성하도록 해준다. https://github.com/nodejs/node/blob/main/src/node_worker.cc 위 파일에서 확인 시 Node.js의 worker_thread 또한 내부적으로 v8-isolate를 사용하여 구현된 것을 알 수 있는데, 그렇기에 동작이 매우 유사하다. 경량 스레드 경량 스레드는 (Light weight thread) 는 일반적인 스레드와 달리 운영체제 커널에서 관리되지 않고 유저 레벨에서 관리되는 스레드이다. 효율적인 멀티스레딩 환경을 제공하고, 커널의 간섭 없이 애플리케이션 수준에서 이를 스케쥴링 및 컨텍스트 스위칭을 할 수 있도록 한다....

September 11, 2024

[Operating System] Lightweight Processing Units 1

Go goroutine, JAVA virtual thread, Node.js worker_thread 공통점 경량 스레드 이들 모두 경량 스레드 또는 작업 단위로서 동작한다. 즉, 전통적인 운영체제의 스레드보다 훨씬 적은 비용으로 생성되고 스케쥴링될 수 있다. 실제 운영체제 스레드보다 메모리 사용량이 적고, 컨텍스트 스위칭 비용이 적다. 동시성 지원 모두 동시성 프로그래밍을 지원하며, 여러 작업을 비동기적으로 실행하여 프로그램의 응답성을 높인다. 복잡한 병렬 처리나 비동기 작업을 더 쉽게 관리할 수 있도록 한다. 비동기적 실행 병렬 작업을 스케쥴링하고 비동기적으로 실행할 수 있다....

September 11, 2024

[Operating System] V8 Isolate

v8-isolate v8 isolate class reference isolate은 v8엔진의 일종의 복사본으로, 격리된 환경에서 독립적인 병렬 실행이 가능하도록 도와주는 기능이다. 하나의 프로세스 내에서 여러 작업들이 서로 간섭 없이 실행되도록 한다. 특히 서버리스 환경에서 조금 더 작은 단위의 여러 작업들을 병렬 실행하고자 할 때, 프로세스를 여러 격리된 환경으로 분리하는 것에 탁월하다. 실제 Cloudflare Workers 는 모든 동작에 대해 http call 을 통해 서비스를 제공하는데, 이 경우 v8-isolate를 사용하여 경량 작업들을 하나의 인스턴스에서 병렬로 실행하게 만들어두었다....

September 8, 2024

[Networks] Networks Basics

프로토콜 스택에서 이더넷부터의 동작 프로토콜 스택에서 이더넷 프레임은 48비트 목적지 주소와 16비트 이더넷 유형 필드를 포함하는데, 이 목적지 주소는 링크 계층 주소 또는 MAC주소라고 불린다. 이더넷 유형 필드 값 중에 (16진법 기준) 0x0800 은 IPv4, 0x0806은 ARP, 0x86DD는 IPv6를 표시하는 표시자가 된다. MAC 주소가 일치한다면 이후 이더넷 유형 필드를 확인하여 알맞는 3계층 프로토콜이 처리할 수 있도록 돕는다. 3계층 동작 데이터그램 안의 IP주소 등 항목을 검사한다. 이후 본인 주소와 일치하고 데이터그램의 헤더에 오류가 없을 경우, 8비트 IPv4 프로토콜 필드 (IPv6에서는 Next protocol field)를 사용하여 어떤 프로토콜을 호출해야하는지 결정한다....

September 7, 2024

[Database] Database Basics

데이터베이스 수강하기 전에 공부해두기 알고 있는 사항 SQLD자격증을 취득한 정도의 SQL 문법 이해도 트랜잭션, ACID, 트랜잭션 격리 수준 등 공부할 사항 데이터베이스 엔진을 만들기 위해서 필요한 것들 데이터베이스 엔진 구축하기 MySQL의 사례를 기반으로 설명하는 경우가 있음 이후 간단하게 Rust기반 RDBMS를 만들면서 관련 사항들을 되짚는다 메모리와 디스크 간의 데이터 관리 데이터베이스 시스템은 일반적으로 메모리 (RAM)과 디스크 (HDD/SSD)를 함께 사용하여 데이터 관리. - 메모리: 고속 액세스가 필요한 임시 데이터를 저장함. 예를 들어, 자주 액세스되는 데이터 페이지를 메모리에 캐싱하여 데이터베이스의 응답을 높이는 등의 처리 가능....

August 30, 2024