WIL 11~12주차 - 크래프톤 정글

손찬호·2024년 5월 31일

크래프톤 정글 5기

목록 보기
11/12
post-thumbnail

Virtual Memory

가상 메모리는 실제 물리적 메모리보다 더 큰 메모리 공간을 프로세스에 제공하는 기술이다.
프로세스 입장에서는 무한한 메모리를 가진 것처럼 동작하도록 하지만
실제 메모리는 필요한 부분만 로딩해서 사용한다.

Page Table

페이지 테이블은 가상 주소를 물리적 주소로 매핑하는데 사용되는 자료구조이다.
각 프로세스는 고유한 페이지 테이블을 가지고 있고
MMU(Memory Management Unit)이 가상 주소를 매핑된 물리 주소로 변환해준다.

페이지 테이블은 PCB(Process Controller Block)이라는 운영체제가 사용하는
자료구조에 저장되고 PCB는 RAM에 저장된다.

Translation Lookaside Buffer (TLB)

페이지 테이블의 일부분을 캐시하는 작은 메모리로 빠른 주소 변환을 위해 사용됩니다.
TLB 히트가 발생하면, MMU는 페이지 테이블을 검색하지 않고 바로 물리 주소를 얻을 수 있습니다.

Lookaside의 사전적 정의는 (computing) The technique of searching for something in a precalculated cache before attempting a more time-consuming search elsewhere.
전체 탐색를 하기 전에 이전 계산결과가 있는 캐시 저장소를 먼저 탐색하는 행위를 말한다.
https://ko.wordow.com/english/dictionary/lookaside

페이지 테이블에서는 가상 주소에 대응되는 물리주소를 찾을 때
페이지 테이블에 전체 탐색하기 전에 미리 캐시된 TLB를 확인하여 페이지 테이블을 검색하지 않고
매핑된 물리주소를 찾을 수 있다는 걸 의미한다.
모든 주소를 캐싱하기보다는 자주 사용되는 일부 페이지를 TLB에 캐시한다.

Page Fault

프로세스가 접근하려는 페이지가 물리적 메모리에 없을 때 발생하는 인터럽트이다.
접근하려는 페이지가 물리적 메모리에 없다는 것은 해당 프로세스가 사용하려는 데이터나 코드가 현재 사용하는 메모리인 RAM에 로드되어 있지 않다는 뜻이다.
Page Fault를 발생하면 운영체제는 해당 페이지를 디스크에서 찾아 메모리로 로드해서 해결한다.

Lazy Loading

프로세스가 실제로 해당 페이지를 필요로 할 때까지 페이지를 메모리에 로드하지 않는 기법이다.
메모리가 실제로 필요할 때 로드하기 때문에 메모리 최적화가 가능해진다.

Page Replacement Policy

페이지 교체 정책(Page Replacement Policy)는
프로세스가 데이터에 접근하려 할 때 해당 데이터가 현재 메모리(RAM)의 프레임에 없고
보조 기억장치(e.g HDD, SSD 등)에 있으면 해당 데이터를 메모리(RAM)에 적재하려고 하는데
이때 기존에 메모리에 있는 데이터 중에서 어떤 데이터를 보조 기억장치로 보낼지 정하는 정책을 말한다.

가상 메모리인 페이지는 무한정 만들 수 있지만
물리 메모리인 RAM은 한정되어 있기에 페이지가 가리키는 데이터를 보조 기억장치에 저장해서 사용한다.

페이지 교체 정책의 종류

대표적인 페이지 교체 정책의 종류는 크게 2가지가 있다.

  • LRU (Least Recently Used):
    사용된지 가장 오래된 페이지의 데이터를 메모리에서 보조 기억장치로 보내는 정책이다.
  • FIFO (First In First Out):
    가장 먼저 사용된 페이지를 가장 먼저 교체하는 정책이다.

Anonymous page

익명 페이지(Anonymous page)는 백업되지 않은 메모리 페이지를 의미하며
파일 시스템이나 다른 곳에 저장되어 있지 않으며 주로 프로세스의 데이터를 임시로 저장할 때
사용한다. 프로세스가 메모리 동적할당을 할 때 생성되는 힙 영역 또는 함수 호출 관련된 데이터를 저장하는 스택 영역에 익명 페이지가 사용된다.

그리고 익명 페이지와 헷갈릴 수 있는 개념이 lazy loading에서 '미할당 상태의 페이지'이다.
프로세스가 특정 데이터를 필요로 하기 전까지는 페이지에만 있고 물리 메모리 RAM에 할당되지 않은
상태의 페이지가 미할당 상태의 페이지이다.

처음에 이 두 페이지가 헷갈렸는데 좀 더 공부해보니 완전히 다르다는 것을 알게되었다.
익명 페이지는 RAM에서만 사용하고 파일 시스템에 저장하지 않는 일회용 용기같은 페이지라면
lazy loading의 미할당 상태의 페이지는 아직 물리메모리에 로드되지 않은 상태의 페이지라
익명 페이지일 수도 있고, 파일 시스템에 백업하는 페이지를 가리킬 수도 있다.

Swap Disk

가상 메모리의 일부분을 저장하는데 사용되는 디스크 공간이다.
페이지가 가리키는 데이터 양에 비해서 물리 메모리(RAM)가 더 적은 데이터를 저장하는 경우
넘치는 만큼 보조 기억장치인 디스크에 저장해두게 되는데 이 디스크에서 저장한 공간을
Swap Disk라고 보면 된다.

File-backed Page

파일 시스템 내의 파일에 연결된 메모리 페이지를 의미한다.
물리 메모리에 적재된 동안 불러온 파일의 데이터를 저장한 페이지를 수정해도
바로 파일 시스템의 파일과 동기화되진 않아서
나중에 따로 명시적으로 동기화를 요청해야 파일 시스템에 해당 파일 데이터에 반영된다.
만약 실시간으로 계속 동기화를 한다면 계속 인터럽트가 발생해서
성능에 좋진 않기 때문에 일정 시간동안만 변경사항을 페이지에 저장하고
나중에 한 번에 동기화를 하는 방식으로 최적화를 한다.
이때 사용하는 시스템 콜이 fsync등이 사용된다.

이때 불러오는 파일은 주로 문서나 이미지 파일을 의미한다. (.txt, .png, .jpg, .jpeg 등등)
이런 종류의 파일들은 예외가 발생한 경우가 아니라면 swap disk에 들어가진 않는다고 한다.
왜냐하면 page fault가 발생해서 file-backed page가 *eviction과정을 겪어
victim page로 지정되면 그동안 수정한 변경사항을 fsync같은 동기화 시스템 콜로
동기화를 하고 물리메모리 RAM에서 그냥 삭제한다고 한다.
왜냐하면 동기화를 한 후 다시 데이터가 필요해지면 보조 기억장치인 DISK에서
다시 파일을 불러오면 되기 때문이다.

*eviction: Page Fault가 발생해 RAM에서 Disk로 빼버릴 페이지를 정하는 과정

Direct Memory Access

DMA는 CPU를 거치지 않고 메모리와 주변 장치 간에 데이터를 직접 전송할 수 있는 기능을 의미한다.
CPU에 부담을 줄여주어 컴퓨터 시스템의 전체적인 성능과 효율성이 향상된다.

DMA를 사용하지 않으면 주변 장치가 메모리에 접근하려고 할 때마다 CPU가 처리해줘야해서
CPU에 추가적인 연산을 요구해서 컴퓨터 시스템 성능이 떨어지지만
DMA를 사용하면 CPU가 추가적인 연산을 하지않고 DMA Controller라는 DMA를 관리하는
하드웨어 장치에게 위임해서 메모리와 주변장치 간에 데이터를 직접 전송하도록 합니다.
이때 CPU가 DMA에게 권한을 위임하는 방식은 크게 2가지가 있다.
1. 일정 주기로 권한을 위임하기
2. 첫 데이터 입력이 들어오고 더 이상 입력이 없을때까지 권한을 위임하기

profile
매일 1%씩 성장하려는 주니어 개발자입니다.

0개의 댓글