오늘 하루 요약

내 멘탈 잘있어...
✏️오늘의 한 일
🌈오늘의 성장
가상 메모리 완벽 정리 🚀
1. 주소 지정 방식
- 물리 주소 지정: 초기 컴퓨터 시스템
- 가상 주소 지정: 현대 프로세서
2. 주소 공간
- 페이지 & 페이지 테이블
- 지역성(Locality) → 동적 집합, 쓰레싱 방지
3. 가상 메모리란?
- 사적 주소 공간 제공: 각 프로세스에 독립적 주소 공간 제공
- 효율적 메모리 사용: 디스크를 메모리처럼 활용, 필요한 데이터만 메모리로
- 메모리 보호: 프로세스 간 메모리 침범 방지
4. 가상 메모리의 작동 원리
4.1 물리 주소 방식
CPU → 물리 주소 직접 생성 → 메모리 접근
4.2 가상 주소 방식
CPU → 가상 주소 생성 → MMU가 물리 주소로 변환 → 메모리 접근
5. 주소 공간의 추상화
- CPU는 가상 주소만 다룸.
- MMU가 이를 물리 주소로 자동 변환.
- 하나의 물리 메모리를 여러 프로세스가 서로 다른 가상 주소로 사용 가능.
6. 캐시 도구로서의 가상 메모리
- 가상 메모리 = 디스크 기반의 배열
- 페이지(Page) 단위로 블록 관리 (보통 4KB)
페이지 상태
- Unallocated: 아직 할당되지 않음
- Cached: 메모리에 있음
- Uncached: 디스크에만 있음
7. 페이지 테이블과 주소 변환
- CPU → 가상 주소 생성
- MMU → 페이지 테이블 참조 (PTE)
- 유효 비트:
- 1: 메모리에 있음 → 물리 주소 변환
- 0: 디스크에서 로드 필요 → Page Fault
8. 페이지 폴트 처리 과정
- 커널 모드 진입
- 희생자 페이지 선정 → 스와핑
- 디스크에서 새 페이지 로드
- 페이지 테이블 갱신
- 명령어 재실행
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 Paging과 Copy-On-Write로 메모리 최적화
- TLB와 다단계 페이지 테이블로 속도와 메모리 절약
질
- 6주차 발표하는데 사진 안나와서 당황.... 말로 설명하는게 삽질 그자체