JUNGLE 240329 (W02)

KRAFTON JUNGLE Week 02

1. Keywords

B-Tree

참고 자료

           [8, 14]
          /       \
     [3, 5]     [10, 12]
    /  |  \      /  |  \
 [1, 2] [4] [9] [11] [13, 15]
  • 데이터 베이스와 파일 시스템에서 사용되는 트리 자료구조의 일종
  • 데이터를 효율적으로 저장하고 탐색하는데 사용
  • 매우 큰 데이터 집합을 효율적으로 관리하기 위해 고안
  • DB 인덱스 구조나 파일 시스템의 디스크에서 사용되는 인덱스 구조로 널리 사용됨
B-Tree의 특징
  1. 균형 트리
    • 모든 리프 노드가 같은 높이에 있는 균형 이진 트리
    • 탐색 시간일정하게 유지하여 DB나 파일 시스템 성능 향상
  2. 다차원 탐색
    • 다차원 데이터의 효율적인 탐색 지원
    • 각 노드는 여러 키를 저장할 수 있으며, 이를 통해 다차원 데이터의 탐색 수행
  3. 노드의 차수
    • B-Tree의 각 내부 노드는 여러 키를 가질 수 있음
    • 이 때 각 노드가 가질 수 있는 키의 개수는 트리의 차수에 의해 결정
  4. 디스크 기반의 구현
    • B-Tree는 주로 디스크 기반의 데이터 구조로 사용
    • 디스크에서 데이터를 읽거나 쓰는 데 소요되는 비용을 고려하여 설계
  5. 자기 균형화
    • 삽입과 삭제 연산을 수행할 때 자동으로 균형 유지
    • 이를 통해 트리의 높이를 최소화하고 탐색 시간일정하게 유지

트라이 (Trie)

      (root)
      /    \
     a      b
    /|\      \
   p p b      a
   | | |      |
   p p a      t
   |   |
   l   n
   |
   e ($)
  • 트리 자료 구조의 일종, 키-값 쌍을 저장하고 검색하는 데 사용
  • 문자열 검색과 관련된 문제를 해결하는 데 특히 유용
트라이의 특징
  1. 접두사 검색
    • 문자열의 접두사 검색에 특히 효율적
    • 트라이의 각 노드는 특정 문자열의 한 글자
    • 루트에서 해당 문자열까지의 경로를 따라가면 해당 문자열을 찾을 수 있음
  2. 공통 접두사
    • 트라이는 키가 공통 접두사를 가지고 있는 경우에도 메모리를 효율적으로 저장
    • 공통된 접두사 부분은 하나의 경로로 공유되므로 메모리를 효율적으로 사용
  3. 메모리 효율성
    • 문자열의 일부가 중복되는 경우에도 메모리를 효율적으로 사용
    • 각 노드는 해당 문자열의 한 글자를 나타내므로, 중복되는 부분이 많은 문자열의 경우 다른 자료 구조보다 효율적
  4. 문자열 검색 및 삽입 시간
    • 문자열 검색과 삽입이 문자열의 길이에 비례하여 빠르게 수행
    • 트라이의 높이는 문자열의 길이와 관련있으며 각 노드는 상수 시간에 접근 가능

2. CS:APP (1.5 ~ )

프로세서(Processor) vs 프로세스(Process)

  • 프로세서는 컴퓨터 시스템에서 데이터를 처리하고 명령어를 실행하는 장치
  • 주로 CPU를 가리키며, 컴퓨터 시스템에서 계산과 연산을 수행하는 핵심적인 하드웨어
  • 프로세스프로그램의 실행 단위, 여러 프로세스가 동시에 실행
  • 메모리에 로드되어 CPU에 의해 실행되는 프로그램의 인스턴스, 실행 중인 프로그램의 상태실행 정보를 가짐
  • 각 프로세스는 고유한 메모리 공간, 자원, 실행 상태를 가지며 운영 체제에 의해 관리

운영 체제

  1. 프로세스 (Process)
    • 실행 중인 프로그램
    • 각 프로세스는 독립적인 메모리 공간을 가지며, 운영체제로부터 실행을 위해 할당받은 자원 사용
    • 각 프로세스는 하나 이상의 스레드로 구성
  2. 가상 메모리 (Virtual Memory)
    • 실제 물리적인 메모리(RAM)를 확장하여 프로세스가 더 큰 메모리 공간을 사용할 수 있도록 하는 메모리 관리 기술
    • 프로세스에게 실제 메모리 주소가 아닌 가상 주소 공간을 제공하여, 물리적 메모리의 효율적인 사용과 메모리 보호 달성
    • 가상 메모리는 페이지 단위로 관리되며 필요에 따라 물리적 메모리와 디스크 사이에서 페이지 스왑
  3. 스레드 (Thread)
    • 프로세스 내에서 실행되는 실행 단위
    • 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 각 스레드는 프로세스의 자원을 공유
    • 프로세스의 코드, 데이터, 힙 등의 자원을 공유하며, 각 스레드는 독립적으로 실행
  4. 파일 (File)
    • 데이터를 저장하는 논리적인 단위
    • 운영체제는 파일을 관리하고, 파일을 읽고 쓰는 인터페이스 제공
    • 파일은 디스크 등의 보조 저장 장치에 저장되며, 응용 프로그램은 파일 시스템을 통해 파일을 관리

가상 메모리

운영 체제에서 제공하는 메모리 관리 기술 중 하나로, 프로세스가 물리적인 메모리보다 큰 메모리 공간을 사용할 수 있도록 하는 기술

  1. 가상 주소 공간 (Virtual Address Space)
    • 각 프로세스에게 제공되는 가상 주소 공간은 프로세스가 사용할 수 있는 주소의 범위
    • 가상 주소 공간은 주로 텍스트, 데이터, 힙, 스택 등의 섹션으로 구성
    • 이러한 섹션은 프로세스의 실행 및 데이터 저장에 사용
  2. 페이징 (Paging)
    • 가상 메모리는 페이징 기술을 사용하여 물리적인 메모리가상 주소 공간 간의 매핑을 관리
    • 프로세스의 가상 주소 공간은 페이지로 나뉘어져 있으며, 물리적인 메모리도 페이지 단위로 관리
  3. 페이지 교체 (Paging Replacement)
    • 가상 메모리가 물리적인 메모리보다 작은 경우, 페이지 교체 알고리즘이 사용
    • 페이지 교체 알고리즘은 페이지 부재가 발생했을 때 어떤 페이지를 디스크에서 메모리로 로드할지 결정
  4. 스와핑 (Swapping)
    • 프로세스의 전체 가상 주소 공간이 물리적인 메모리에 들어갈 수 없는 경우, 스와핑 발생
    • 스와핑은 메모리에 올라와 있는 페이지를 디스크로 옮기고, 새로운 페이지메모리로 가져오는 과정
    • 스와핑은 물리적인 메모리디스크 사이의 데이터 전송을 관리
  5. 페이지 테이블 (Page Table)
    • 가상 주소와 물리적인 주소 간의 매핑 정보를 저장하는 자료구조
    • 각 프로세스마다 페이지 테이블이 별도로 존재하며, 가상 주소를 물리적인 주소로 변환하는 데 사용
    • 페이지 테이블은 가상 주소의 일부를 검색하여 해당 페이지의 물리적인 주소를 찾음

가상 주소 공간

  • 프로세스가 실행될 때 해당 프로세스에게 할당되는 가상적인 주소 공간
  • 프로세스가 메모리를 관리하고 사용하는 데 필요한 모든 주소 범위를 포함
  1. 텍스트(코드) 섹션
    • 프로그램 코드가 저장되는 공간
    • CPU가 실행하는 명령어들이 포함되어 있으며, 보통 읽기 전용
    • 실행 파일의 명령어들을 포함하고, 프로세스가 실행되면 CPU가 여기에 있는 명령어들을 읽어와 실행
  2. 데이터 섹션
    • 초기화된 및 초기화되지 않은 데이터가 저장되는 공간
    • 초기화된 데이터는 프로그램에서 명시적으로 초기화된 변수들을 저장
    • 초기화되지 않은 데이터는 프로그램에서 초기화되지 않은 전역 변수들을 저장
    • 프로그램이 실행될 때 초기화되며, 읽기/쓰기 권한을 가짐
  3. 힙(Heap) 섹션
    • 동적으로 할당되는 메모리가 저장되는 공간
    • 프로그램이 실행 중에 동적으로 할당된 메모리를 관리하는 데 사용
    • 동적으로 할당된 메모리는 일반적으로 malloc(), calloc(), realloc()과 같은 함수를 사용하여 힙에서 할당되고 해제됨
  4. 스택(Stack) 섹션
    • 지역 변수 및 함수 호출 시 사용되는 데이터가 저장되는 공간
    • LIFO 방식으로 동작하며, 함수 호출 시 매개변수, 복귀 주소 등의 정보가 저장
    • 프로그램이 실행될 떄 자동으로 생성되며, 스택 프레임이라는 구조로 함수 호출 정보를 저장