semtax의 개발 일지

운영체제론 : 가상메모리 내용 간략 정리 본문

보안/시스템 해킹

운영체제론 : 가상메모리 내용 간략 정리

semtax 2020. 4. 23. 00:39
반응형

개요

해당 포스팅은, 예전에 학교 과제로 정리했던 시스템 프로그래밍/운영체제론 과제를 하면서 정리한 내용들을 올린 포스팅입니다.
틀린내용이 있을 수 있으므로 너그럽게 봐주시면 감사하겠습니다.

1. 가상메모리의 정의

실제 메모리(혹은 디바이스)의 물리적인 주소와 가상의 주소를 물리 주소와 대응 시켜서 실제 물리적인 용량보다 더욱 큰 용량을 사용할 수 있게 하는 기법이다. 보통 세그먼트 방식과 페이징 방식 2가지가 사용된다. (추가적인 내용으로 캐시의 주소도 가상주소를 사용하는 경우가 있는데 보통 VIVT(인덱스 / 태그 주소를 둘다 가상화), VIPT(인덱스만 가상화),PIVT(태그 주소만 가상화), PIPT(둘다 물리주소 사용) 등의 기법이 존재하고, VIPT를 보통 많이 사용하는것으로 알려져 있다.

2. 운영체제의 역할

사실 요즘의 거의 대부분의 CPU(MCU를 제외한 대부분의 CPU)에서는 하드웨어 적으로 빠르게 주소변환을 해주는 MMU라는 장치가 존재하기 때문에,
OS에서는 해당 MMU가 필요한 정보들이 저장된 테이블(ex : x86의 GDT, LDT, PML,PTE, etc..) 의 내용들을 알맞게 설정하면,
CPU에서 하드웨어적으로 알아서 주소변환을 수행해준다.
따라서, 메뉴얼을 잘 보고 해당 부분을 잘 설정 해주면 된다.
(추가적인 내용으로, 요즘 CPU에서는 DMA컨트롤러와 I/O 버스간의 주소변환을 수행해주는 I/O MMU 라는 것도 도입을 해서 사용하고 있다.)

3. 가상메모리를 사용하면서 얻는 이점

첫 번째로는, 메모리 뿐만 아니라 디바이스나 I/O 와 같은 것들을 메모리를 다루는것 처럼 일관된 방식으로 I/O나 디바이스들을 제어 할 수 있다. 그 예시로, 별 다른 I/O 명령어를 수행하지 않고도 편리하게 메모리를 읽고 쓰듯이 I/O 디바이스에 값을 송/수신 하는 방식(Memory Mapped I/O)을 예시로 들 수 있다.

두번째로는 각 메모리 영역마다 정책을 다르게 할당 해 줄 수있다는 것이다. 실제로 x86을 예시로 들면, 각 페이지 테이블 마다, 읽기/쓰기/실행 권한을 각각 지정해 줄 수 있다는 것을 예시로 들 수 있다.

4. 기타 의문점 & 잡설:

Linux 4.x 버전 커널에서는 부팅 초기에 MMU가 설정되기 이전에 사용하는 early 메모리 할당자로 기존에 쓰이던 bootmem 방식을 버리고 CMA방식인 memblock 방식을 사용하는데, 해당 부분이 잘 이해가 가지 않습니다.

사실 위에서 언급한 MMU에도 버그가 존재하는데, 인텔 CPU와 같은 경우 64비트의 주소 중 48비트 밖에는 사용하지 못하는데, 해당 48비트를 넘어가는 영역을 강제로 access 하는 경우, 해당 행위는 정의되지 않은 행위(Undefined Behavior)이기 때문에 CPU 기종에 따라서 CPU가 정지하거나, 다른 치명적인 결과(Kernel 영역의 민감한 정보를 긁어온다거나)를 유발 할 수 있는것으로 알고 있다.

페이징도 사실 그냥 페이지 테이블만 존재하는것이 아닌, 수학의 역함수와 같은 inverse page table이 존재하는데, 이를 통해 특정 프로세스에서 할당한 메모리들을 빠르게 해제 할 수 있는 장점이 존재한다.

여러가지 OS들을 동시에 띄울수 있는 하이퍼 바이저(Xen, VT-X) 와 같은 경우, Shadow Page table이라고 해서 실제 CPU와 각각의 OS 간의 메모리 주소를 매핑해주는 테이블이 존재 한다. (요즘에는 해당 Shadow Page table도 VMX와 같은 기술을 이용해서 처리하는것으로 알고있음)

반응형

'보안 > 시스템 해킹' 카테고리의 다른 글

ARM 메모리 관리기법 분석  (1) 2020.04.23
인텔 메모리 관리 기법 분석  (0) 2020.04.23
pwnable.kr fd 풀이  (0) 2020.04.15
Comments