[운영체제] 가상메모리

찬들이·2022년 8월 17일
0

컴퓨터공학

목록 보기
15/34
post-custom-banner

🎯 가상메모리

  • 가상 메모리는 메모리가 실제 메모리보다 많아 보이게 하는 기술로, 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안하여 고안되었다.
  • 어플리케이션이 실행될 때, 실행에 필요한 일부분만 메모리에 올라가며 어플리케이션의 나머지는 디스크에 남게 된다.
    • 결론으로 작은 기억장치를 크고 느린 기억장치와 병합하여, 하나의 크고 빠른 기억장치(가상메모리) 처럼 동작하게 하는 것이다.
  • 가상메모리를 사용하기 위해서는 MMU라는 하드웨어가 필요하다.

    MMU

    • MMU는 는 가상주소를 물리주소로 변환하고, 메모리를 보호하는 기능을 수행한다.
    • MMU를 사용하게 되면, CPU가 각 메모리에 접근하기 이전에 메모리 주소 번역 작업이 수행된다.
    • 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 RAM을 여러 부분(페이지, pages)로 나누어 각 페이지를 하나의 독립된 항목으로 처리한다.

    가상메모리의 크기

    • 가상메모리는 이론적으로 무한대의 크기를 가진다.
    • 현실적인 최대 크기는 물리 메모리의 최대 크기로 한정 된다.
      (32bit cpu에서 4gb)

    페이징 기법

    • 구현
      • 고정 분할 방식을 활용한 가상 메모리 관리 기법으로 물리 주소 공간을 같은 크기로 나누어 사용한다.
      • 가상 주소는 프로세스 입장에서 바라본 메모리 공간이기 때문에 항상 0번지 부터 시작한다.
      • 가상 주소의 분할된 각 영역을 페이지, 물리 메모리의 영역은 프레임이라 부른다
      • 페이지와 프레임이 연결된 형태는 페이지 테이블에 숫자의 형태로 담아 놓는다.
      • 페이지에 있는 메모리 구간이, 물리 메모리와 연결 되지 않았을 때는 페이지 테이블에 invalid 기입해 놓는데, 이는 swap영역에 있음을 의미한다.
    • 페이지 테이블 매핑 방식
      • 메모리가 부족할 때나 페이지 테이블의 일부도 스왑 영역으로 넘어가는 경우에 페이지 테이블이 참조하는 공식이 변형 된다.
      • 직접 매핑
        • 페이지 테이블 전체가 물리 메모리의 운영체제 영역에 존재하는 방식으로 별다른 부가 작업 없이 주소 변환이 가능하다.
        • 페이지 테이블 전체가 메모리에 올라와 있기 때문에, 프레임 번호만 적어 줘도 변환이 가능하고, 페이지 번호만 알면 바로 조회가 가능하다.
        • 페이지 테이블 기준 레지스터가 페이지 테이블의 시작 주소를 알고 있으므로, 이를 기반으로 페이지의 실제 주소를 아는 것이 쉽다.
      • 연관 매핑
        • 페이지 테이블 전체를 스왑 영역에서 관리하는 방식으로 물리 메모리의 여유 공간이 적을 때 사용한다.
        • 페이지 테이블의 일부만 물리메모리에 가지고 있으며, 프레임 번호와 페이지 번호를 둘 다 페이지 테이블에 기입해야 한다.
        • 페이지 번호를 알아도 테이블에서 모든 번호를 조회해야 한다는 단점이 있다.
        • 일부 페이지 테이블이 물리 메모리에 올라와 있는 것을 변환 색인 버퍼라 부른다.
        • 캐시 시스템과 유사하다 (TLBhit/TLBMiss)
        • TLBMiss가 자주 발생하면 시스템의 성능이 저하된다.
      • 집합 연관 매핑
        • 연관 매핑의 문제점을 개선한 방식으로 모든 페이지 테이블을 스왑영역에서 관리하는 점은 동일하나 스왑 영역에 있거나, 물리 영역에 있는 것을 연관 매핑처럼 일일이 검색하지 않아도 된다.
        • 페이지 테이블이 일정 크기의 묶음으로 나뉘기 때문에 가상주소를 VA = <P,D>가 아닌 VA = <P1,P2,D>로 표기한다.
        • P1,P2를 통해 테이블 덩어리가 메모리 영역에 있는지 스왑영역에 있는지 확인이 가능하다.
      • 역매핑
        • 페이지 번호를 기준으로 테이블을 구성하는 위 세가지 방식과 달리, 물리 메모리의 프레임 번호를 기준으로 테이블을 구성한다.
        • PID를 기준으로 구성하며, PID가 어떤 페이지에 올라와 있는지를 표기한 테이블이다.
        • 프로세스 수와 상관없이 하나의 테이블만 존재하기 때문에 크기가 매우 작다.
        • 단점으로는 가상메모리에 접근 할 때 PID/페이지 번호를 모두 찾아야 한다.

    세그멘테이션 기법

    • 구현
      • 물리 메모리를 프로세스의 크기에 따라 가변적으로 나누어 사용한다.
      • 페이징 기법과 마찬가지로 세그먼테이션 테이블을 사용하며, segment의 크기를 나타내는 limit와 메모리상의 시작 주소를 나타내는 address가 테이블에 기입 되어있다.
      • 물리 메모리 부족 시 swap영역을 사용하는데, address에 invalid값을 대입하여 사용한다.
      • 가변 분할 방식과 동일하다.
    • 세그먼테이션 기법의 주소 변환 방식
      • VA=<S,D>로 표현한다.
      • S는 Segment number를 의미하고 D는 세그먼트 시작 지점에서 해당 주소까지의 거리를 의미한다.
      • a프로세스의 b번째 주소에 접근하는 경우를 가정하면
      • a 프로세스가 segment 몇으로 분할되었는지 확인하고 va를 표기한다.
      • 세그먼트 번호에 맞는 limit 값에 거리 값 D를 더하면, 주소 값이 나온다.

    캐시 매핑 기법

    • 직접 매핑
      • 메모리 주소와 캐시의 순서를 일치시킨다.
      • 만약 메모리가 1~100까지 있고, 캐시가 1~10까지 있다면 1~10까지의 메모리는 캐시 1에 위치하는 방식으로 매핑한다.
      • 구현이 간단하다는 장점이 있지만, 캐시가 효율적이지 않게 자꾸 교체되어야 하는 일이 발생한다.
      • 위의 문제를 해결하기 위해 LRU기법을 사용한다.
    • 연관 매핑
      • 순서를 일치시키지 않는다.
      • 필요한 메모리 값을 캐시의 어디든 편하게 저장 될 수 있다.
      • 장점은 필요한 캐시들 위주로 저장할 수 있기 때문에 적중률이 높고 성능이 좋다.
      • 단점은 찾는 과정에서 태그마다 비교해야 하기 때문에 복잡하고 느리다.
    • 직접 연관 매핑
      • 연관매핑과 직접매핑의 집합체이다.
      • 순서를 일치시키고 편하게 저장하되, 일정 그룹을 두어 그 그룹 내에서 편하게 저장시키느 것이다.
      • 예를 들어 메모리가 1~100까지 있고, 캐시가 1~10까지 있다면 캐시 1~5에는 1~50의 데이터를 무작위로 저장시키는 것이다.
      • 블록화가 되어 있기 때문에 검색은 좀 더 효율적이고, 적중률도 많이 떨어지지 않는다
profile
Junior-Backend-Developer
post-custom-banner

0개의 댓글