가상 메모리(논리메모리)는 물리 메모리에 디스크가 더해진 것이다. 가상 메모리가 디스크, 메모리에 모두 분산 할당을 진행한다. 이러면 메모리 공간이 엄청나게 커지는 이점이 있다.
이렇게 가상 메모리가 가능한 이유는 몇 가지가 있다.
우선 오류코드 루틴이다. 다음은 배열, 리스트, 테이블 중에서 일부만 사용하기 때문이다. 마지막으로는 자주 사용되지 않는 문서 편집기의 기능이다. 위에는 예시다. 잠깐 쉽게 알아보자면 한 프로세스가 존재한다. 그 프로세스는 실행될 때 꼭 프로세스의 모든 부분이 메모리에 가서 실행되지 않는다. 파워포인트 같은 경우에는 기능이 엄청 많지만 우리는 늘 그 모든 기능을 사용하지 않는다. 보통 자주 사용하는 기능만 사용한다. 이처럼 프로세스는 모든 기능을 메모리에 올리지 않고 필요하고 자주 사용하는 부분만 메모리에 올려서 프로세스를 실행시킨다. 배열도 마찬가지로 모든 인덱스의 요소를 사용하지 않는다. 그래서 남는 것은 굳이 애매하게 메모리에 할당하지 않는다.
가상 메모리의 구조는 레지스터, 캐시, 메인 메모리, 디스크로 이루어지며 속도는 레지스터가 제일 빠르고 디스크가 제일 느리다. 속도 순으로 정렬했다.
마찬가지로 가상 주소를 물리주소로 바꾸어야 한다.
가상 메모리의 이점은 프로그램 작성이 쉽다. 공간 제약이 없으므로 중첩 작성이 불필요하다.
공간 없어도 부분적 적재가 가능하다. 덕분에 많은 작업이 실행 가능하다.
프로세서의 이용률과 처리율은 향상되었지만 응답 시간이나 반환시간은 증가되지 않을 수 있다.
가상 메모리의 단점도 존재한다.
메모리와 디스크 공간 사이의 이동량 증가에 따른 교체 공간(SWAP)를 확보해야 한다.
페이징 적재와 복귀에 관한 알고리즘도 필요하다. 또한 만약 물리 메모리에 접근했는데 페이지가 없다면 디스크에 가야 한다. 페이지 부재에 대한 처리 방안도 필요하다.
가상 메모리의 주소매핑 기법은 우선 2가지가 있다.
동적 주소 변환이다. 연속적 가상 기억 장소를 주소 사상 기법을 통해 메인 메모리, 즉 물리 주소에 접근한다.
가상 메모리의 MMU는 속도 향상을 위해 CPU 내부에 존재하며 매핑 속도가 빨라 전체 성능을 향상한다.
다음은 2단계 메모리 기법이다.
1단계는 프로세스가 수행되고, 참조되는 자료를 메인 메모리에 저장한다.
2단계는 제한된 메인 메모리에 들어갈 수 없는 자료를 저장해야 하는데 이는 디스크와 같은 2차 기억장치의 대용량 메모리에 저장한다. 즉 물리 메모리에서 주소를 가지고 프레임에 접근했는데 해당하는 페이지가 없다면 디스크에 가서 찾아야 한다.
이제 가상 메모리에 블록 매핑에 대해 알아보자. 우선 블록이란 무엇인가? 프로세스를 쪼개면 페이지라 하고 메모리를 쪼갠 건 프레임이라고 했다. 페이징 기법에서는 분할 단위가 페이지 세그멘테이션에서 분할 단위는 세그먼트다. 가상 메모리에서 분할 단위는 블럭이다. 즉 가상 메모리를 분할한 것이 블럭이다. 가상 메모리는 블럭의 집합이다.
블럭매핑을 할 때는 주소사상테이블이 필요하다. 만약 필요한 페이지를 물리적 메모리에서 찾으면 hit 했다고 하고 못 찾았으면 fault라고 한다. 이는 이제 디스크에서 페이지를 찾아야 한다. 블록 매핑에서 가상 주소는 블록 번호와 변위로 구성된다.
블록 매핑도 마찬가지다. BTOR인 블록 시작 테이블의 시작점 레지스터를 이용해서 시작 주소와 블록 번호를 더한다. 그러면 주소 사상 테이블에 접근할 수 있다. 그러면 블록 존재 비트를 먼저 확인한다. 이것은 메모리에 페이지가 부재하는지 존재하는지 확인하는 것이다. 이후 블록비트가 있다면 주소 사상 테이블에는 메모리 주소가 있는데 논리 주소에 있는 변위와 함께 사용해 메모리 주소를 구하면 된다.
가상 메모리에서도 페이징 기법을 사용할 수 있다.
다음은 요구 페이징이다. 실행이 필요한 페이지만 필요한 시점에 메모리에 적재하는 것을 요구 페이징이라고 한다. 요구 페이징의 이점으로는 사용되지 않을 메모리의 페이지를 읽어 들이는 것을 예방한다. 교체 시간이 감소하며 기억공간도 감소하고 다중 프로그래밍의 효과를 얻을 수 있다. lazy swapper이 페이지 요구가 있을 때 페이지를 메모리에 교체한다.
페이지 부재는 타당, 비 타다 비트를 확인할 수 있다 . 블록매핑에서 확인한 블록 존재 비트의 개념과 유사하다. 만약 비타당 비트를 발견하면 디스크로 가야 한다. 타당 비트면 해당 매핑하는 물리 메모리의 주소로 가서 페이지에 접근한다.
다음은 순수 요구 페이징이다. 앞에서 말한 요구 페이징과 거의 같다.
요구될 때까지 결코 페이지를 메모리에 들여놓지 않는 방법이다. 필요로 하는 페이지가 실제로 메모리에 있게 될 때까지 필요할 때마다 페이지 부재를 발생시킨다. 페이지 시스템에서의 페이지 부재.
순서는 프로세스가 CPU를 이용해 논리 주소를 얻었다. 이 논리주소를 매핑해 페이지 테이블에 접근한다. 만약 메모리에 페이지가 없다면 페이지 부재로 명령을 다시 시작하며 디스크에서 페이지를 가져온다. 만약 메모리에 페이지가 있다면 테이블에서 물리 메모리 주소를 얻고 접근한다.
댓글