ukk1211
1k
2021-04-08 22:55:17
4
172

가상메모리 페이징 질문입니다.


프레임은 물리적인 메모리를 가르키는 말이고

페이지는 가상 메모리를 가르키는 말이라고 나와있는데요.

물리메모리는 RAM을 말하는 것이고 RAM에 존재하는데

여기서 말하는 가상 메모리는 어디에 존재하는 건가요?

또한 페이지 테이블은 어디에 존재하는 개념인가요?

페이지, 페이지 테이블의 존재 위치가 궁금합니다.

하드디스크에는 Swap 시에만 저장해놓은 페이지를 로딩하는걸로 알고 있습니다. 


0
  • 답변 4

  • 지붕뚫고높이차
    1k
    2021-04-08 23:14:32
    운영체제 이론서를 보시면
    좋을것 같습니다.
  • 캐티
    2k
    2021-04-09 08:06:38

    인텔 cpu 가 가장 접근하기 쉬울꺼빈다. 머말인진 모르겠지만 스택오버플로나 위키피디아나 osdev 자료들이 유용할 듯 하는쩌여.

    https://www.google.com/search?q=intel+cpu+paging

    하드스왑은 옜날에 썼던 버퍼링 방식인 것 같스빈다. 페이징은 자체적으로 구현하거나 인텔의 메뉴얼을 따라야 할거빈다. 플랫폼에 유연하려면 엔탈의 메뉴얼만 따라서는 되지 않을쩌여. 

  • 인그니야
    1k
    2021-04-09 09:49:50

    말씀하신대로 물리메모리는 RAM 실물이 맞고, 가상 메모리는 커널에서 관리하는 메모리 테이블입니다.

    그렇게 페이지 및 페이지 테이블을 사용하는 이유는 시스템의 안전성과 RAM의 메모리를 최대한 쓰기 위함입니다.

    일단 HW를 물리주소로 접근했을 때 실수가 발생하면 치명적인 문제가 발생할 수 있습니다. 그래서 커널은 그 윗 단에 실제 물리주소와 매핑된 가상 주소를 할당해주고 중개역할을 해줍니다.

    그리고 메모리를 사용하다보면, 1, 2바이트 정도로 작은 크기의 미사용 메모리 영역이 발생하게 됩니다. 하지만 우리가 페이지 테이블 없이 직접 메모리를 관리한다면, 이런 미사용 메모리를 일일히 추적 및 관리하기 어려울 것이고, 나중에는 이런 류의 영역들이 쌓여 많은 메모리들을 낭비하게 될겁니다.

    하지만 커널은 테이블 개념을 도입해서 이런 미사용 메모리를 최대한 사용하도록 합니다.

    그래서 유저가 할당받은 가상 메모리의 주소는 0x0000_1000 ~ 0x0000_1003 으로 리니어하게 이어진 영역으로 보일 수 있지만, 커널 테이블에 의해 실제로는 0x1000_0008, 0x3000_0000~0x3000_0002 이런 식으로 동떨어진 영역일 수도 있는 겁니다.

  • dnew
    107
    2021-04-09 09:56:24

    부팅 후 저장장치(ex, 하드, Flash)에서 모든 정보(주소변환 테이블)를 읽어 옵니다.

    가상메모리는 주소변환 테이블로 물리메모리로 변환 됩니다. 테이블도 RAM에 위치 합니다.

    이후 프로세스들은 주소를 할당 받는데 (OS는 주소변환 테이블을 기준으로 할당) 실제 물리 메모리 영역은 다르지만 프로세스들은 물리주소를 몰라도 동작 합니다.

    프로세스 A, B가 있다고 가정하고 프로세스 A의 0x100 번지나 프로세스 B의 0x100 번지는 실제 사용하는 물리주소가 다르지만 각 프로세스는 그냥 자신만의 주소(가상주소)만 사용 합니다.

    완벽하게 알지 못해 더 이상 설명을 못하겠네요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.