권영진 교수님의 OS 특강 을 기반으로 정리 및 진행하되, 가상 메모리 중심으로 정리.
정글 키워드 [더보기]
[ Index ] Jungle keyword
Virtual memory management
paging
- virtual page
- physical frame
- page table & supplementary page table
Memory Management Unit (MMU)
Translation Lookaside Buffer (TLB)
Page type
Uninitialized page
Lazy initialization
Anonymous page
stack growth
file-backed page
mmap syscall
Swap in/out
page replacement policy
swap disk
[1] Virtual Memory : 가상 일문일답
Q. 가상 메모리는 무엇일까?
A. 프로그램이 메모리를 혼자서 사용하는 것처럼 메모리를 가상화하는 메모리 관리 기법의 하나이다. 멀티태스킹 OS 체제에서 주로 사용되며, 실제 물리 메모리(RAM)보다 더 큰 가상의 주소를 제공하는 방법으로 사용된다. 가상 주소 공간은 하드웨어의 메모리 관리 장치(Memory Management Unit)에서 물리 주소로 변환된다. 가상 메모리 방식은 세그먼트 방식과 페이징 방식 두 가지가 있다.
Q. Virtual Memroy는 왜 필요할까?
A 프로세스 간의 메모리 영역의 보호를 위해서 가상 메모리 기술이 필요하다. OS는 각 프로세스마다 서로 다른 가상 주소 공간을 제공함으로써 프로그램이 메모리에 직접 접근하는 것을 막으며 프로그램 간의 격리를 구현해 보안과 안정성을 높일 수 있다. 또한 메모리 용량의 제한을 뛰어넘을 수 있으며 메모리 관리를 할 수 있다는 이점이 있다.
Q. 만약 주기억장치의 용량이 충분하다면 가상 메모리 기법이 필요 없을까?
A 설사 주기억장치의 용량이 넉넉하더라도 프로그램의 메모리 직접 접근은 메모리 접근에 대한 오류를 일으킬 수 있으며 메모리 관리 측면에서 여전히 필요하다.
Q. 프로그램이 만약 직접 메모리(H/W)에 접근 할 수 있다면 어떤 일이 일어날까?
A. 첫째로 OS subsystem이 충돌할 수 있다. 둘째로는 다른 프로그램의 메모리를 읽거나 쓸 수 있다. 셋째로는 CPU 시간을 독점할 수 있다.
OS :: Protection
특권 명령어 : 프로그램의 중요 명령어 직접 실행을 막아야 한다.
메모리 보호 : 프로그램이 다른 프로그램의 메모리를 읽거나 쓰는 것을 막아야 한다. (VM)
타이머 인터럽트 : 운영체제가 프로그램에 대해 제어권을 획득해야 한다.
[2] 주소 변환 (Address Translation) : Dynamic | Static Relocation
Dynamic 동적 재배치 | Static 정적 재배치 | |
기반 | HW : MMU을 이용해 구현 | SW로 구현 |
실행 순간 | 실제로 메모리에 접근할 때마다 주소 변환이 일어난다. page table이나 segment table이 필요하다. | 프로그램이 메모리에 적재될 때 1회 (프로그램 실행 전에 모든 주소가 결정) |
방식 | base and bound | 로더(sw)가 타겟 실행 파일의 모든 가상 주소를 물리 메모리 오프셋을 사용하여 변환 |
변환방법(physical addr) | virtual addr + base (binding) | virtual addr + 상수 |
사용 레지스터 | base 레지스터 bound 레지스터 |
재배치 레지스터 (프로그램 실행 중 주소가 변하지 않음) |
장점 | - 프로그램이 메모리 위에서 동적으로 자유롭게 움직이므로 메모리 관리에 효율적 - 가상 메모리 기법을 활용해 물리 메모리 이상의 메모리 공간을 사용할 수 있게 함 - bound를 활용한 검증 기능이 존재(접근하려는 주소 공간이 유효하지 않을 때 MMU가 예외를 발생) |
실행 파일이 로드되기 전 간단하게 수행됨. |
단점 | - MMU 때문에 메모리 접근 시간이 늘어남 - 주소 변환 과정 중 오버헤드가 클 수 있다 |
- 보호 기능(bound)이 없으므로 다른 프로세스의 메모리를 침범할 수 있다.(unsafety) - 한번 배치 후 재배치 불가능(컴파일 이후에 대처 불가능) |
동적 메모리 재할당: Memory Management Unit (MMU):
MMU는 runtime 동안 base와 bound 레지스터를 활용하여 프로세스의 가상 주소와 물리 메모리의 물리 주소를 확인하며 재배치한다. 만약 주소가 유효하지 않는다면 fault handler를 사용해 예외를 발생한다.
- base 레지스터: 가상 메모리의 시작 주소(0)과 매핑되는 물리 주소를 담는다.
- bound 레지스터: 주소 공간의 끝을 가리킨다.
동적 재할당, 즉 하드웨어 기반 주소 변환에는 HW의 요구사항이 많고, OS가 담당하는 것들이 있다.
- 메모리 관리
- 새로운 프로세스를 메모리에 할당하기
- process가 종료 되었을 때 메모리를 회수한다.
- 빈 공간 리스트를 구축하고 관리한다.
- base /bound 레지스터를 context switching 발생시 올바르게 세팅해야 한다.
- 예외 처리하기
~~~~
Translation Lookaside Buffer (TLB) : 변환 색인 버퍼
자주 참조되는 가상주소-물리주소 변환 정보를 저장하는 하드웨어 캐시cache
주소 변환이 일어날 때 메모리에 존재하는 page table 등을 접근해 읽어야 하는데, 이것이 성능 저하를 불러온다.
메모리를 읽고 쓸 때 찾아오는 성능 저하를, 자주 참조되는 데이터를 임시 저장하는 cache를 만들어 극복하는 것처럼, H/W(CPU)에 존재하는 MMU도 비슷한 전략을 취한다. 그것이 변환 색인 버퍼이다.
~~~
디버깅 과정
lazy loading bf booting
'공부기록 > OS' 카테고리의 다른 글
[TIL][Project 3] Page Type| Swap In/Out (0) | 2023.12.23 |
---|---|
[TIL][Project 3] Segmentation | Paging | Page Table (0) | 2023.12.22 |
[TIL][OS] OS review Summary: Abstractions (0) | 2023.12.20 |
[TIL] [Project 2 보충] Filesystem, Buffer, syn-read issue (0) | 2023.12.19 |
[TIL][Setting] ubuntu Setting for PintOS (0) | 2023.12.18 |