컴구 강의중에 교수님이 언급하신 swap.
처음 든 생각은 vim 제대로 못 쓸 때 저장을 안 했었나? 나도 모르게 생긴 swap 파일들과 충돌 해결한 거…
같은 swap 개념인지는 모르겠지만, 분명 파일시스템 아래에서 관리되고 있었다. 원래 제목을 파일시스템은 swap을 어떻게 관리하고 있을까? 였는데 뭔가 적다보니 디스크라고 하는 게 정답에 가까워지는 것 같아 디스크로 바꿨다.
커널이 관리한다고 하는 게 맞는 것 같아 커널로 변경~!
vim의 swap 파일
대략적인 이해는 이렇다. 일단 vim의 임시파일과는 완전 다른 개념.
정상적으로 저장되지 않은 vim 에디터 상의 데이터를 저장하는 .swp 확장자를 가진 파일.
바이너리로 저장된다고 하고, vim -r 명령어로 복구가 가능하다.
생기는 원리 TBD
SWAP 메모리 / 가상 메모리
그럼 메인 메모리의 용량이 부족해서 디스크를 메모리처럼 활용하는 개념은 뭐라고 불러야 할까?
SWAP 메모리, 가상 메모리 라고 한다.
주로 무료티어의 서버 환경을 사용하는 사람들이 자주 활용한다고 한다.
사용하지 않는 페이지만 SWAP에 저장한다? 그냥 메인 메모리처럼 활용한다? 공식 문서를 찾아봐야겠다.
CH.11 Swap Management
공식 문서? 인지는 모르겠지만, 위 글에서 정리한 건 다음과 같다.
Swap 메모리를 생성하는 과정을 Swaping이라 하지 않고, Paging이라 한다.
- 페이지를 copy하는 것과 동일하게 구현되어 있다 함 (위치가 디스크겠지?)
- 용량이 꽉 찼을 때 뿐만 아니라, 사용되지 않지만 초기화 되어 있는 페이지를 디스크로 내려서 관리하기도 한다. (버퍼를 활용하기 위해)
활성화된 Swap 영역에는 swap_info_struct 구조체가 있다.
런타임 중에 swap_info라는 32개 사이즈를 가진 정적 배열에서 관리된다.
동시에 32개의 swap 영역만 활성화 될 수 있다.
| |
swap_info에도 저장이 되지만, swap_list라는 배열에도 저장이 된다.
swap_list는 간단한 구조로, 라이트한 탐색이 가능.
영역 안의 각 슬롯은 페이지 크기 만큼 할당된다. 첫 번째 슬롯엔 슬롯 영역에 대한 메타데이터가 저장된다.
| |
11.2 부터는 PTE → swap 파일로 swap out할 때 어떤 과정을 거치는 지 설명되어 있다. 스왑 캐시나 복구 과정도 나와있다.
여유로울 때 추가 예정
어떻게 관리하는지는 위의 구조체를 활용하는구나~ 정도로 이해가 된다. 디스크 섹터나 선형 탐색용 인덱스 필드 같은 최적화 요소들이 많이 있는 게 인상적이다.
