(TIL)VM 시작부터 강하다

낚시하는 곰·2025년 5월 29일
1

jungle TIL

목록 보기
4/20

일단 64bit 가상 주소라고 한다.

4kib크기를 가지는 가상 메모리의 연속된 영역?

마지막 12bit에는 page offset이 있고, 상위 12bit에는 …?

63          48 47            39 38            30 29            21 20         12 11         0
+-------------+----------------+----------------+----------------+-------------+------------+
| Sign Extend |    Page-Map    | Page-Directory | Page-directory |  Page-Table |    Page    |
|             | Level-4 Offset |    Pointer     |     Offset     |   Offset    |   Offset   |
+-------------+----------------+----------------+----------------+-------------+------------+
              |                |                |                |             |            |
              +------- 9 ------+------- 9 ------+------- 9 ------+----- 9 -----+---- 12 ----+
                                          Virtual Address

프레임은 물리 메모리 상에서 연속적인 주소를 가지고 있다.

프레임의 크기는 페이즈 사이즈로 알 수 있다.

                          12 11         0
    +-----------------------+-----------+
    |      Frame Number     |   Offset  |
    +-----------------------+-----------+
              Physical Address

64bit 물리 주소의 형태??

x86은 물리 메모리에 직접적으로 접근하지 않는다

커널 가상 메모리를 물리 메모리에 직접 매핑한다?

                           +----------+
          .--------------->|Page Table|-----------.
         /                 +----------+           |
        |   12 11 0                               V  12 11 0
    +---------+----+                         +---------+----+
    | Page Nr | Ofs|                         |Frame Nr | Ofs|
    +---------+----+                         +---------+----+
     Virt Addr   |                            Phys Addr    ^
                  \_______________________________________/

가상 주소의 상위 48bit에는 page 번호가, 그리고 하위 12bit에는 오프셋이 포함된다.

물리 주소의 상위 48bit에는 frame number가 들어가고, 하위 12bit에는 오프셋이 포함된다.

스왑 슬롯?? 디스크 공간의 페이지 크기의 영역.

스왑 슬롯은 페이지 크기에 정렬?

페이지 폴트 핸들링?

non-pageable 메모리 → calloc이나 malloc에 의해서 할당된 자료구조들을 저장할 수 있다.

구현의 선택지로는 배열, 리스트, 비트맵, 해시 테이블이 있다.

배열은 구현이 단순하지만 밀도가 희박한 배열을 메모리를 낭비시킨다?

리스트도 마찬가지로 구현은 단순하지만 특정 위치를 찾기 위해 리스트 전체를 순회하는 것은 시간 소모가 크다.

비트맵 자료구조를 사용할 수 있다. 비트맵은 각각 true 또는 false 값을 가질 수 있는 비트들로 이루어진 배열을 말한다.

동일한 자원 집합 내부에서 사용 현황을 추적하기 위해 사용된다? 자원 n이 사용중이면 비트맵의 비트 n은 true값을 가진다?

해시 테이블은 다양한 테이블 크기에서의 삽입과 삭제를 효율적으로 지원한다.


보조 페이지 테이블?

보조 데이터들을 담고 있는 프로세스마다 존재하는 자료구조

각각의 페이지(frame, dist, swap 중)어디에 데이터가 존재하는 지, 커널 가상 주소를 가리키는 포인터 주소 같은 걸 담고 있다고 한다.

보조 페이지 테이블은 페이지 폴트가 발생했을 때 그곳에 어떤 데이터가 있었어야 했는지?를 알아내기 위해서 커널에서 보조 페이지 테이블에서 폴트가 발생한 가상 페이지를 탐색한다.

커널이 프로세스가 종료될 때 어떤 자원을 해제할 지 고르기 위해? 보조 페이지 테이블을 조사한다.

보조 페이지 테이블을 내가 원하는 데로 구성할 수 있다?


페이지 폴트 핸들러가 하는 일??

보조 페이지 테이블.. → 폴트가 발생한 페이지를 찾는다.

만약 메모리 참조가 유효하다면 보조 페이지 엔트리?? 를 사용해서 데이터가 들어갈 페이지를 찾는다.

페이지는 파일 시스템에 있을 수도 있고, 스왑 슬롯에 있을 수도 있으며 단순히 0으로만 이루어져야 할 수도 있다.

일단 지금 읽고 있는 문장에서 copy on write가 뭔지 모르겠고, 공유를 구현한다는 데 페이지 테이블에 데이터가 없고, 페이지 프레임에 있다고 하는데?? 이게 뭔 말이지?

일단 보조 페이지 테이블과 페이지 폴트 핸들러가 매우 중요한 일을 한다는 것만은 알겠다.

보조 페이지 테이블이 어떤 정보를 보여줄 수 있다. 유저 프로세스가 접근하려던 주소에서 데이터를 얻을 수 없거나 페이지가 커널 가상 메모리 영역에 존재하거나 읽기 전용 페이지 에 대해 쓰기를 시도하는 상황?? 에서 뭘 할 수 있는데? 아…. 이런 상황일 때 유효하지 않은 접근이라는 것이다. 유효하지 않은 접근은 프로세스를 종료시킨다.

페이지를 저장하기 위해 프레임을 획득해?? 자꾸 공유 얘기가 나오는 것을 보면 이것도 구현할 때 어떤 키가 되는 것 같다… 필요한 데이터는 이미 프레임에 있을 것이고, 나는 해당 프레임을 찾을 수 있어야 한단다.

데이터를 파일 시스템이나 스왑에서 읽어온다. 또는 초기화해서 프레임으로 가져온다. 만약 공유를 구현하고 있다면 필요한 페이지가 이미 프레임에 존재한다.

thread/mmu.c에서 폴트가 발생한 가상주소에 대한 페이지 테이블 엔트리가 물리페이지를 가리키도록 지정.

참고 자료

git book(한글 번역판)

profile
취업 준비생 낚곰입니다!! 반갑습니다!!

0개의 댓글