안녕하세요.
운영체제 시리즈를 이어서 진행하겠습니다.
이번 시간의 주제는 가상 메모리입니다.
우선 페이지(Page)와 세그먼트(Segement)가 무엇인지 알아야 합니다.
모든 프로그램은 작은 조각들로 나눠지게 됩니다.
📢 조각들의 크기를 모두 같도록 하면 한 조각을 페이지(Page)라고 하고 서로 다르게 하면 조각들을 각각 세그먼트(Segment)라고 합니다.
페이지와 세그먼트는 그 크기가 메모리와 디스크 사이에서 한 번에 전송되는 전송 단위가 됩니다.
보통 전송 단위를 블록(Block)이라고 합니다.
가상 메모리에서는 주소의 사상(mapping)이라는 개념이 등장합니다.
실행 중인 프로그램에서 참고하는 주소가 실제 메모리에 있는 주소와 달라서 메모리상의 주소로 변환을 해줘야 하는데 이것이 사상(mapping)입니다.
프로그램에서 참조하는 주소를 Virtual Address, 실제 메모리상의 주소를 Real Address라고 합니다.
💡 페이징을 위해서는 모든 프로세스를 같은 크기의 조각인 페이지로 나눠야 합니다.
메모리도 역시 프레임(Frame)이라고 불리는 페이지와 같은 크기로 나눠져 있고 번호가 매겨져 있습니다.
운영체제는 가상주소를 실주소로 변환하기 위해 프로세스당 하나의 페이지 테이블을 만들어 두어야 하는데 이것을 페이지 사상 테이블(Map Table)이라고 합니다.
이 테이블의 크기는 해당 프로세스의 페이지 개수에 비례합니다.
➡️ 실행 시 참조되는 가상주소는 페이지 번호(p)와 페이지 내에서의 위치(d)로 표시됩니다.
[페이징의 사상(mapping)]
➡️ TLB는 고속 캐시의 일종으로, 주소로 접근되는 일반 메모리와는 달리 Key 값으로 찾고자하는 워드를 동시에 접근하는 연관 메모리로서 검색이 빠릅니다.
빈번하게 검색된 엔트리들을 TLB에 넣되, 페이지 번호(p)를 키 값으로 동식 검색을 합니다.
[TLB를 사용한 사상]
💡 대부분의 프로그램을 보면 메인 프로그램, 프로시저, 함수, 지역 및 전역 변수, 호출 시 사용되는 스택 등으로 이루어져 있는데 이런 논리적인 각각의 단위를 세그먼트(Segment)라고 합니다.
이런 단위 대로 사상하고 적재하는 기법이 바로 세그먼테이션(Segmentation)입니다.
사상에 대한 전반적인 과정은 페이징 기법과 크게 차이가 없습니다.
➡️ 가상주소는 세그먼트 번호(s)와 세그먼트 내에서의 위치 값(d)으로 표현됩니다.
[세그먼테이션 사상]
세그먼트 테이블을 보면 세그먼트 길이(length) 필드가 있는데 이는 세그먼트의 크기가 서로 다르기 때문에 있는 것입니다.
💡 페이징의 편리함과 세그먼테이션의 노리적 장점을 함께 가지는 기법입니다.
프로그램을 먼저 세그먼트로 나눈 후, 각 세그먼트는 다시 페이지들로 나뉩니다.
➡️ 가상주소는 세그먼트 번호(s), 페이지 번호(p), 그리고 페이지 내의 위치 값(d)으로 표현됩니다.
이번 시간에는 가상 메모리에 대해서 알아보았습니다.
다음 시간에는 가상 메모리의 관리에 대해서 알아보겠습니다. 🧐
감사합니다.