[04.24/week07] TIL

CHO WanGi·2025년 4월 24일

KRAFTON JUNGLE 8th

목록 보기
37/89

오늘 하루 요약

내 멘탈 잘있어...

✏️오늘의 한 일

  • CSAPP 9 ~9.8

🌈오늘의 성장


가상 메모리 완벽 정리 🚀

1. 주소 지정 방식

  • 물리 주소 지정: 초기 컴퓨터 시스템
  • 가상 주소 지정: 현대 프로세서

2. 주소 공간

  • 페이지 & 페이지 테이블
  • 지역성(Locality) → 동적 집합, 쓰레싱 방지

3. 가상 메모리란?

  • 사적 주소 공간 제공: 각 프로세스에 독립적 주소 공간 제공
  • 효율적 메모리 사용: 디스크를 메모리처럼 활용, 필요한 데이터만 메모리로
  • 메모리 보호: 프로세스 간 메모리 침범 방지

4. 가상 메모리의 작동 원리

4.1 물리 주소 방식

CPU → 물리 주소 직접 생성 → 메모리 접근

4.2 가상 주소 방식

CPU → 가상 주소 생성 → MMU가 물리 주소로 변환 → 메모리 접근

5. 주소 공간의 추상화

  • CPU는 가상 주소만 다룸.
  • MMU가 이를 물리 주소로 자동 변환.
  • 하나의 물리 메모리를 여러 프로세스가 서로 다른 가상 주소로 사용 가능.

6. 캐시 도구로서의 가상 메모리

  • 가상 메모리 = 디스크 기반의 배열
  • 페이지(Page) 단위로 블록 관리 (보통 4KB)

페이지 상태

  • Unallocated: 아직 할당되지 않음
  • Cached: 메모리에 있음
  • Uncached: 디스크에만 있음

7. 페이지 테이블과 주소 변환

  1. CPU → 가상 주소 생성
  2. MMU → 페이지 테이블 참조 (PTE)
  3. 유효 비트:
    • 1: 메모리에 있음 → 물리 주소 변환
    • 0: 디스크에서 로드 필요 → Page Fault

8. 페이지 폴트 처리 과정

  1. 커널 모드 진입
  2. 희생자 페이지 선정 → 스와핑
  3. 디스크에서 새 페이지 로드
  4. 페이지 테이블 갱신
  5. 명령어 재실행

9. 지역성(Locality) 개념

  • 시간 지역성: 최근 접근 데이터 재접근 가능성 높음
  • 공간 지역성: 인접한 데이터 접근 가능성 높음
  • 동적 집합(Working Set): 자주 사용하는 페이지 집합
  • 쓰레싱(Thrashing): 동적 집합 > 메모리 크기 → 빈번한 스와핑 발생

10. 보호를 위한 가상 메모리

  • Permission Bits:
    • SUP: 커널 전용 접근 여부
    • READ: 읽기 권한
    • WRITE: 쓰기 권한
  • 위반 시: SIGSEGV (Segmentation Fault)

11. TLB(Translation Lookaside Buffer)

  • PTE 전용 캐시 → 주소 변환 속도 향상 (1사이클)
  • TLB 적중 시: 빠르게 물리 주소 변환
  • TLB 미스 시: 페이지 테이블 접근 후 TLB 갱신

12. 다단계 페이지 테이블

  • 단일 테이블 비효율다단계 구조로 메모리 절약
  • 예: 32bit → 2단계, 64bit → 3~4단계

13. 메모리 매핑의 두 가지 유형

  • 일반 파일 매핑: 실행 파일, 라이브러리 등 → 요구 페이징
  • 무기명 파일 매핑: 힙, 스택 → 초기값 0 → Demand-Zero

14. Copy-On-Write(COW)

  • fork() 호출 시 메모리 복사 안 함
  • 쓰기 시도 시 → 복사 후 독립적 페이지 할당

15. execve() 함수

  • 현재 프로세스를 새로운 프로그램으로 교체
  • 기존 메모리 제거 → 새 코드/데이터/힙/스택 매핑

16. mmap() 함수

void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
  • 파일을 메모리에 직접 매핑하여 빠른 접근 가능
  • 예시:
int fd = open("file.txt", O_RDONLY);
void *addr = mmap(NULL, 4096, PROT_READ, MAP_PRIVATE, fd, 0);
if (addr == MAP_FAILED) {
    perror("mmap");
    exit(1);
}

요약 💡

  • 가상 메모리는 효율적인 메모리 사용, 보호, 단순화를 제공
  • MMU가 주소 변환을 자동으로 처리
  • Demand PagingCopy-On-Write로 메모리 최적화
  • TLB다단계 페이지 테이블로 속도와 메모리 절약

  • 6주차 발표하는데 사진 안나와서 당황.... 말로 설명하는게 삽질 그자체
profile
제 Velog에 오신 모든 분들이 작더라도 인사이트를 얻어가셨으면 좋겠습니다 :)

0개의 댓글