8. 가상 메모리

holim0·2021년 1월 23일
4

Operating System

목록 보기
8/9

안녕하세요.

운영체제 시리즈를 이어서 진행하겠습니다.

이번 시간의 주제는 가상 메모리입니다.


기본 개념

우선 페이지(Page)와 세그먼트(Segement)가 무엇인지 알아야 합니다.

모든 프로그램은 작은 조각들로 나눠지게 됩니다.

📢 조각들의 크기를 모두 같도록 하면 한 조각을 **페이지(Page)**라고 하고 서로 다르게 하면 조각들을 각각 **세그먼트(Segment)**라고 합니다.

페이지와 세그먼트는 그 크기가 메모리와 디스크 사이에서 한 번에 전송되는 전송 단위가 됩니다.
보통 전송 단위를 **블록(Block)**이라고 합니다.


가상 메모리에서는 주소의 **사상(mapping)**이라는 개념이 등장합니다.

실행 중인 프로그램에서 참고하는 주소가 실제 메모리에 있는 주소와 달라서 메모리상의 주소로 변환을 해줘야 하는데 이것이 **사상(mapping)**입니다.

프로그램에서 참조하는 주소를 Virtual Address, 실제 메모리상의 주소를 Real Address라고 합니다.


페이징(Paging)

💡 페이징을 위해서는 모든 프로세스를 같은 크기의 조각인 페이지로 나눠야 합니다.

메모리도 역시 **프레임(Frame)**이라고 불리는 페이지와 같은 크기로 나눠져 있고 번호가 매겨져 있습니다.

운영체제는 가상주소를 실주소로 변환하기 위해 프로세스당 하나의 페이지 테이블을 만들어 두어야 하는데 이것을 페이지 **사상 테이블(Map Table)**이라고 합니다.

이 테이블의 크기는 해당 프로세스의 페이지 개수에 비례합니다.


➡️ 실행 시 참조되는 가상주소는 페이지 번호(p)와 페이지 내에서의 위치(d)로 표시됩니다.

[페이징의 사상(mapping)]

  • 가상 주소의 사상(mapping)을 위해 먼저 페이지 테이블의 접근 후, 실주소를 가지고 실제 워드의 접근을 하게 되어 2번의 메모리 접근이 항상 요구됩니다.

TLB(Translation Lookaside Buffer)

➡️ TLB는 고속 캐시의 일종으로, 주소로 접근되는 일반 메모리와는 달리 Key 값으로 찾고자하는 워드를 동시에 접근하는 연관 메모리로서 검색이 빠릅니다.

빈번하게 검색된 엔트리들을 TLB에 넣되, 페이지 번호(p)를 키 값으로 동식 검색을 합니다.

[TLB를 사용한 사상]



세그먼테이션(Segmentation)

💡 대부분의 프로그램을 보면 메인 프로그램, 프로시저, 함수, 지역 및 전역 변수, 호출 시 사용되는 스택 등으로 이루어져 있는데 이런 논리적인 각각의 단위를 **세그먼트(Segment)**라고 합니다.

이런 단위 대로 사상하고 적재하는 기법이 바로 **세그먼테이션(Segmentation)**입니다.

사상에 대한 전반적인 과정은 페이징 기법과 크게 차이가 없습니다.


➡️ 가상주소는 **세그먼트 번호(s)**와 세그먼트 내에서의 **위치 값(d)**으로 표현됩니다.

[세그먼테이션 사상]

  • 세그먼트 테이블을 보면 세그먼트 길이(length) 필드가 있는데 이는 세그먼트의 크기가 서로 다르기 때문에 있는 것입니다.

페이징을 사용하는 세그먼테이션

💡 페이징의 편리함과 세그먼테이션의 노리적 장점을 함께 가지는 기법입니다.

프로그램을 먼저 세그먼트로 나눈 후, 각 세그먼트는 다시 페이지들로 나뉩니다.

➡️ 가상주소는 세그먼트 번호(s), 페이지 번호(p), 그리고 페이지 내의 위치 값(d)으로 표현됩니다.



마무리

이번 시간에는 가상 메모리에 대해서 알아보았습니다.

다음 시간에는 가상 메모리의 관리에 대해서 알아보겠습니다. 🧐

감사합니다.

profile
매일 조금씩 성장하고 있는 개발자입니다.

0개의 댓글