[TIL/크래프톤 정글] DAY 52

배재준·2025년 4월 30일

크래프톤 정글 - TIL

목록 보기
45/93
post-thumbnail

2025.04.30

TIL(TODAY I LEARN)


  • 오늘한 내용 : 7주차 키워드 정리

  • WEEK07: 시스템 콜, 데이터 세그먼트, 메모리 단편화, sbrk/mmap


7주차 키워드 정리

가상 메모리, 페이징

  • 가상 메모리
    • 개념
      • 실제 물리 메모리보다 훨씬 큰 주소 공간을 프로세스가 사용하는 것처럼 동작하게 만드는 OS의 메모리 추상화 기법.
    • 특징
      • 각 프로세스는 독립적인 주소 공간을 가짐 → 보안, 충돌 방지
      • 실제 메모리는 부족하더라도, 디스크 공간을 일부 활용해 실행 가능
      • 프로세스는 연속된 공간을 쓰는 것처럼 보이나, 실제 물리 메모리에는 조각나게 저장
  • 페이징
    • 개념
      • 가상 주소 공간을 고정 크기 단위인 페이지(Page)로 나누고,

        물리 메모리도 같은 크기의 프레임(Frame)으로 나눔

      • 페이지 단위로 가상 주소 → 물리 주소 변환

        용어설명
        페이지(Page)가상 메모리의 고정 단위 (보통 4KB)
        프레임(Frame)물리 메모리의 고정 단위 (페이지와 동일 크기)
        페이지 테이블각 가상 페이지가 어떤 물리 프레임에 매핑되는지 저장 (프로세스별로 존재)
        TLB자주 접근하는 주소 변환 캐시 → 빠른 변환
[가상 주소]: 0x0012_34AB  
→ 페이지 번호: 0x0012  
→ 오프셋: 0x34AB

페이지 테이블에서 0x0012 → 물리 프레임 0x9F

→ 물리 주소 = 0x9F_34AB
장점설명
보호프로세스 간 메모리 침범 방지
효율적 사용필요할 때만 메모리 사용 가능 (지연 로딩)
프로세스 독립성각 프로세스는 자신만의 메모리 공간 가짐
스왑 가능페이지 단위로 디스크와 교체 가능 → 실제 메모리보다 큰 프로그램 실행 가능

동적 메모리 할당 (힙, sbrk, malloc, free)

함수설명
malloc(size)size만큼의 메모리를 할당하고, 시작 주소를 리턴
free(ptr)malloc으로 할당된 메모리를 해제
calloc(n, sz)n개 × sz 크기의 메모리를 할당하고, 0으로 초기화
realloc(ptr, sz)기존 메모리 크기를 sz로 재조정
  • sbrk() 시스템 콜
    • 커널에게 요청하여 힙 영역을 늘리는 저수준 인터페이스
    • malloc()은 내부적으로 sbrk() 또는 mmap()을 호출해 힙 확장

메모리 단편화

유형설명예시
외부 단편화 (External)사용 가능한 메모리 공간이 조각나 있어서 원하는 크기만큼 연속된 공간을 할당할 수 없는 경우총 1000바이트가 남아도 3칸으로 나뉘면 500바이트 연속 할당이 안 됨
내부 단편화 (Internal)할당된 블록 내에서 실제로는 사용되지 않는 낭비된 공간100바이트만 필요하지만 128바이트 블록이 할당된 경우
  • 해결 방법
    구분해결 방법설명
    외부 단편화블록 병합(Coalescing)인접한 가용 블록을 합쳐서 단편화 감소
    페이징고정 크기 페이지로 관리하면 외부 단편화 방지 가능
    가비지 컬렉션(C/C++은 수동) 안 쓰는 메모리 회수로 단편화 간접 완화
    내부 단편화블록 분할(Splitting)큰 블록을 요청 크기에 맞게 쪼개어 내부 단편화 최소화

메모리 할당 정책 (first fit, next fit, best fit)

정책설명
First Fit가용 리스트에서 처음으로 맞는 블록을 찾으면 즉시 할당
Next Fit이전 탐색 위치부터 시작해서, 맞는 블록을 찾으면 할당
Best Fit가장 딱 맞는(가장 작은 적합한) 블록을 찾아서 할당
Worst Fit가장 큰 블록을 찾아서 할당 (→ 자투리 많이 남기려는 전략)
Segregated Fit크기별로 여러 개의 free list를 운영하여 해당 크기 리스트에서 할당
  • 장단점
정책장점단점
First Fit빠름, 구현 쉬움단편화 발생 가능 (앞부분 집중)
Next Fit앞부분 재사용 방지 가능성능 불안정 (최악 시 전부 탐색)
Best Fit내부 단편화 최소화 가능외부 단편화 심화, 탐색 느림
Worst Fit큰 블록 보존 전략내부 단편화 심화 가능
Segregated Fit탐색 빠르고 정밀할당 가능리스트 많고 구현 복잡

implicit free list / explicit free list

  1. Implicit Free List (암시적 가용 리스트)
    • 구조
      • 모든 힙 블록(할당 + 가용)연속적으로 순회
      • 각 블록은 헤더(Header)푸터(Footer)를 가지고 있으며,블록 크기와 할당 여부를 비트로 저장
    • 특징
      • 탐색은 first-fit, next-fit, best-fit 등으로 가능
      • 가용 여부를 블록 내부 정보만으로 파악
    • 장점
      • 구조 간단
      • 구현 쉬움
    • 단점
      • 가용 블록이 많아질수록 느려짐 (불필요한 블록까지 다 검사)
  2. Explicit Free List (명시적 가용 리스트)
    • 구조
      • 가용 블록끼리만 따로 연결 리스트 구성
      • 각 가용 블록에 전/후임 포인터(prev, next) 저장 → 단방향 또는 양방향 연결 리스트
    • 특징
      • 가용 블록만 탐색하므로 탐색 속도 향상
      • 블록 삽입/삭제 시 포인터 조작 필요 → 구현 복잡
    • 장점
      • 성능 향상 (탐색 비용 ↓)
      • 다양한 전략 적용 용이 (LIFO, address-order 등)
    • 단점
      • 가용 블록마다 포인터 오버헤드
      • 코드 복잡도 증가
항목Implicit Free ListExplicit Free List
탐색 대상모든 블록 (할당 + 가용)가용 블록만
탐색 속도느림빠름
구현 난이도쉬움어려움
오버헤드적음prev/next 포인터 공간 필요
블록 정보header/footerheader + 포인터 필드
  • Segregated Free List
    • 가용 블록을 크기별로 여러 개의 리스트로 분리해서 관리
    • 각 리스트는 특정 크기 범위의 블록만 저장
    • 탐색 범위를 줄여 할당 속도를 향상시킴
예시 : 
class[0] (1~16B)[Block][Block]  
class[1] (17~32B)[Block]  
class[2] (33~64B)NULL

demand-zero memory

메모리 블록을 요청했을 때 즉시 물리 메모리를 할당하지 않고,

해당 페이지에 처음 접근할 때 OS가 실제로 물리 메모리를 할당하고 0으로 초기화하는 방식

  • 핵심 특징
항목설명
"요청 즉시 할당 안 함"malloc()이나 brk()로 공간을 요청해도 물리 메모리는 실제 접근 시까지 비할당
"처음 접근 시 0으로 초기화"해당 페이지에 쓰기 작업이 발생할 때 → OS가 실제 페이지를 할당하고 0으로 초기화
효율적 메모리 사용실제로 사용하지 않은 메모리는 할당조차 되지 않음 (낭비 방지)작동 과정 (간단히)
작동 예시
1. malloc(4096) 호출
→ 커널은 가상 주소 공간만 확보 (물리 메모리 미할당)

2. 사용자가 arr[0] = 1 실행
→ 해당 주소에 접근 시 Page Fault 발생

3. OS가 빈 페이지를 물리 메모리에 할당 + 0으로 초기화
→ 다시 접근 재시도 → 정상 작동
  • 연관 기술
기술설명
Demand Paging접근할 때까지 메모리 페이지를 할당하지 않는 전략 전체 (zero 초기화 포함 or 미포함)
Copy-on-Write (COW)프로세스 복사 시 페이지 공유하다가 쓰기 발생 시에만 복사 (fork와 밀접)
mmap + MAP_ANONYMOUS파일 기반이 아닌, 익명 메모리 매핑 (보통 demand-zero로 동작)

시스템 콜

사용자 프로그램이 운영체제 커널의 기능을 요청할 때 사용하는 인터페이스

일반 프로그램은 커널 자원(파일, 메모리, 장치 등)에 직접 접근 불가

→ 시스템 콜을 통해 간접적으로 요청

  • OS는 메모리 보호, 자원 보호를 위해 사용자 코드가 커널에 직접 접근하지 못하게 함. 대신, 시스템 콜이라는 공식 통로를 통해서만 커널 기능 사용 가능
구분설명
라이브러리 함수단순히 사용자 공간에서 동작 (printf, strlen)
시스템 콜커널 기능 호출 → 사용자 모드에서 커널 모드로 전환 발생
  • 시스템 콜은 비용이 큼
    • 문맥 전환(user → kernel) 필요
    • 캐시 플러시, 권한 설정 등의 오버헤드
      • 캐시 플러시(Cache Flush) : 사용자 모드→ 커널 모드 시 보안 문제로 인해 캐시(L1~L3등) 비워줌

      • 권한 설정(Privileage Switching) : CPU가 접근 권한 수준을 나눔
        - 스택 변경 (커널 전용 스택으로 전환)
        - 레지스터 백업
        - 보안 확인
        - 인터럽트 마스크 설정 등이 포함됨

        항목설명
        캐시 플러시TLB나 CPU 캐시 무효화 → 캐시 혜택 상실 → 성능 저하
        권한 전환사용자 모드 → 커널 모드 전환 시 스택/레지스터/보호 모드 전환 등 처리 필요

DMA

CPU 개입 없이, I/O 장치가 직접 메모리와 데이터를 주고받는 기술

→ CPU는 단순 데이터 전송에 낭비되지 않고, 다른 연산을 수행할 수 있음

기존 방식:

[디스크] → CPU → [메모리]
  • CPU가 데이터를 받아서 메모리에 옮김
  • 이 과정이 반복되면 CPU는 I/O 처리만 하게 됨 → 비효율적

DMA 방식:

[디스크] → [메모리] (CPU 없이 직접 전송)
  • CPU는 단지 DMA에게 "이 주소로 이만큼 복사해라" 명령만 내리고, 실제 데이터 전송은 DMA 컨트롤러가 수행
  • 사용 예시
사용 사례왜 DMA로 처리하는가?
디스크에서 파일을 메모리로 읽을 때디스크는 MB~GB 단위 대용량 데이터를 처리함 → CPU가 직접 복사하면 시간 낭비 + 부하 증가. DMA가 대신 처리하면 CPU는 다른 작업에 집중 가능
네트워크 카드(NIC)가 패킷 수신고속 네트워크 환경(예: 1Gbps 이상)에서는 수백~수천 개 패킷/초가 들어옴 → CPU가 직접 수신 처리하면 병목 발생. NIC가 패킷을 메모리로 직접 복사하고, 완료 후 인터럽트로 알리는 구조가 훨씬 효율적
GPU → 프레임 버퍼 전송GPU는 매 프레임마다 수천~수만 픽셀 데이터를 화면으로 보내야 함. CPU가 개입하면 그래픽 처리 속도 저하. DMA가 화면 메모리에 직접 전송하면 실시간 렌더링이 가능해짐 (ex. 게임, 영상 스트리밍 등)
  • 장단점
장점설명
CPU 부하 감소단순 데이터 이동 대신 계산/처리 집중 가능
전송 속도 향상버스 대역폭을 직접 사용, 빠름
효율적 멀티태스킹DMA 수행 중에도 CPU는 다른 작업 가능
단점설명
메모리 보호 어려움DMA는 메모리에 직접 접근하므로 부적절한 접근 위험 존재 (보안 이슈)
동기화 필요DMA 중에 해당 메모리 영역을 CPU가 접근하면 경쟁 상태(race condition) 발생 가능
버스 경합DMA도 시스템 버스를 사용하기 때문에, CPU와 충돌 가능성 있음

이더넷(Ethernet)

컴퓨터 간의 데이터를 유선(LAN)을 통해 전송하는 대표적인 네트워크 기술

프레임(Frame) 기반으로 동작하며, MAC 주소로 통신 대상을 식별

  • 우리가 흔히 말하는 유선 인터넷
  • 학교, 회사, 가정 등에서 사용하는 LAN(Local Area Network) 기반 기술
  • 대부분의 컴퓨터/라우터/스위치는 이더넷을 기본으로 지원
┌───────────┬─────────┬────────┬─────────────────┬────────┐
│ Dest MAC │Src MAC │  Type  │ Payload(Data) │  CRC   │
└───────────┴─────────┴────────┴─────────────────┴────────┘
필드설명
Destination MAC수신자 하드웨어 주소 (6바이트)
Source MAC송신자 하드웨어 주소 (6바이트)
Type상위 프로토콜 정보 (예: IPv4, ARP 등)
Payload전송할 실제 데이터 (46~1500바이트)
CRC오류 검출용 체크섬
  • MAC 주소
    • Media Access Control 주소 → 물리적 주소임
    • 네트워크 인터페이스 카드(랜카드)의 고유 하드웨어 식별자
    • 이더넷 통신은 MAC 주소를 기반으로 이루어짐
  • 이터넷 특징
    항목설명
    유선 기반전기 신호로 데이터를 주고받음 (UTP 케이블 등)
    프레임 단위 전송고정 구조로 신뢰성 있게 데이터 전송
    비연결형 프로토콜연결 설정 없이 바로 데이터 전송 (→ 상위 계층 TCP가 신뢰성 담당)
    브로드캐스트 지원같은 네트워크 상 모든 장치에 전송 가능 (ARP 등에서 사용됨)
  • 전송 방식: CSMA/CD (전통 방식) - 반이중(Half-Duplex)

    Carrier Sense Multiple Access / Collision Detection

    • 듣고 있다가 (Carrier Sense)
    • 채널이 비면 전송 (Multiple Access)
    • 충돌이 나면 중단 후 재시도 (Collision Detection)
    ※ 현재는 대부분 스위치 기반 전이중 통신(full-duplex)으로 충돌 없음

0개의 댓글