ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메모리? 메인 메모리?
    CS 2021. 1. 12. 22:14

    메모리 종류에는 메인 메모리, 캐시 메모리가 존재 한다.

     

    메인 메모리(Main Memory)

    메인 메모리는 CPU가 직접 접근할 수 있는 접근 장치로 프로세스가 실행되려면 프로그램이 메모리에 올라와야 한다.

    메인 메모리는 주소가 할당된 일련의 바이트들로 구성되어 있다.

     

    CPU는 레지스터가 지시한 대로 메모리에 접근해 다음에 수행할 명령어를 가져온다.

     

    명령어를 수행할 시 메모리에 필요한 데이터가 없으면 해당 데이터를 우선 가져오게 되는데 이 역할을 하는것이 MMU이다.

     

    MMU(Memory Management Utility)란 메모리 관리 장치로 논리 주소를 물리 주소로 변환해 주며, 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리하는 하드웨어이다.

     

    메모리의 공간은 한정적이기 때문에 사용자에게 더 많은 메모리를 제공하기 위해 가상 주소라는 개념이 존재한다.

    가상 주소는 프로그램 상에서 사용자가 보는 주소 공간으로 볼 수 있으며, 이 가상 주소에서 실제 데이터가 담겨있는 곳에 접근하기 위해 빠른 주소 변환이 필요하며 이를 도와주는 것이 MMU이다.

     

    메인 메모리의 직접 접근은 비효율적이다. CPU와 메인 메모리의 속도를 맞추기 위해 캐시 메모리가 존재한다.

     

    MMU의 메모리 보호

    프로세스는 독립적인 메모리 공간을 가져야 한다. 그리고 자신만의 메모리 공간에 접근해야 한다.

    즉, 한 프로세스에게 합법적 주소 영역을 설정해주고, 잘못된 접근이 올 경우 trap을 발생시켜 보호 해야 한다.

     

    base limit Register를 활용한 메모리 보호 기법

    base register는 메모리상의 프로세스 시작 주소를 물리 주소로 저장하고, limit register는 프로세스의 사이즈를 저장한다.

    프로세스의 접근 가능한 합법적 메모리영역을 base <= x < base+limit로 지정하며 이 영역 외의 값에서 접근 시 trap을 발생 시킨다.

     

    메모리 초과할당 (Memory Over Allocating)

    실제 메모리의 사이즈 보다 더 큰 사이즈 메모리를 프로세스에 할당한 경우를 말한다.

    페이징 기법 같은 메모리 관리 기법은 사용자가 모르게 가상메모리를 이용하여 메모리를 할당한다.

     

    초과적으로 할당한 경우 문제가 발생할 수 있는 상황이 존재 한다.

     

    프로세스 실행 중 page fault 발생 시, page fault 발생시킨 페이지 위치를 디스크에서 찾게되고 메모리의 빈 프레임에 페이지를 올려야 할 때 모든 메모리가 사용중이라 빈 프레임이 없는 경우 문제가 발생한다.

     

    이러한 문제를 해결하기 위해 메모리에 올라와 있는 프로세스를 종료 시켜 빈 프레임을 획득하던가 프로세스를 하나 swap out 하여 그 공간을 빈 프레임으로 사용해야 한다.(페이지 교체 알고리즘을 사용한다)

    보통은 전자의 방법은 사용자에게 발각될 위험이 매우 높아 후자의 방식을 사용한다.

     

    페이지 교체

    메모리 과할당 발생시 프로세스 하나를 swap out 하여 빈 프레임을 확보하는 방법.

     

    1. 프로세스 실행 도중 page fault 발생

    2. page fault 발생 시킨 page 위치를 디스크에서 찾는다.

    3. 메모리에 빈 프레임이 있는지 확인 한다.

    • 빈 프레임이 존재하면 해당 프레임을 사용한다.

    • 빈 프레임이 존재 하지 않을 시 victim 프레임을 선정해 디스크에 기록하고 page table 업데이트 한다.

    4. 빈 프레임에 page fault가 발생한 page를 올리고 page table 업데이트 한다.

     

    이 때, 사용자에게는 페이지 교체가 이루어져도 아무일 없던 것 처럼 프로세스를 계속 수행시켜 모르게 해야한다.

    하지만 빈 프레임이 없는 상황에서 victim 프레임을 비울 때, 원하는 페이지를 프레임으로 올릴 때, 총 두 번 디스크에 접근하게 된다. 페이지 교체가 많이 이루어 질수록 입출력 연산이 발생해 오버헤드가 생기는데 이를 최소화 시켜야 한다.

     

    오버헤드 최소화 방법

     

    비트를 사용한 방법

    변경비트를 모든 페이지마다 두어 victim page가 정해지면해당 page의 비트를 확인한다.

    • 해당 bit가 set state -> 해당 페이지 내용이 디스크 상의 내용과 달라졌다는 것을 의미하며 페이지가 메모리에 올라온 이후 한 번이라도 수정이 일어났음을 말한다. 즉 디스크에 기록해야 한다.
    • 해당 bit가 clear state -> 디스크 상의 내용과 메모리 상의 내용이 일치 하는 상황, 즉 디스크에 기록할 필요가 없다.

    비트를 활용하여 디스크에 기록하는 횟수를 줄이며 오버헤드에 대한 수를 최대 절반으로 감소 시키는 방법이다.

     

    페이지 교체 알고리즘은... 다음 포스팅에서 다룰 수 있도록 하겠습니다.

    'CS' 카테고리의 다른 글

    OS 기초 지식  (0) 2022.08.02
    파일 시스템  (0) 2021.01.07
    IP(Internet Protocol)?  (0) 2021.01.03
    로드 밸런싱?  (0) 2020.12.22
    해싱(Hashing)?  (0) 2020.12.22
Designed by Tistory.