연관기억장치, 복수모듈기억장치, 캐쉬메모리
들어가기 전에
프로그램을 실행할 때 중앙제어장치, 주기억장치, 보조기억장치는 반드시 필요한 물리적 자원들입니다. 그러나 과거에는 이러한 물리장치들의 속도, 용량이 한정적이었기 때문에 프로그램을 실행 시 효율성을 추구하는 여러가지 기법들이 고안되었습니다. 예를 들면, 주기억장치의 공간이 부족하여 단편화가 발생하면, 이를 해결하기 위해 가상기억장치가 도입이 된 경우가 대표적인 예입니다. 지금은 기술의 발달로 수십개의 프로그램을 동시에 실행하여도 충분히 빠르고 효율적으로 실행할 수 있지만, 과거에는 어떻게 한정된 자원을 가지고 논리적으로 해결해나갔는지를 물리장치 별 특성을 통해 알아보겠습니다.
연관기억장치
연관기억장치는 CPU와 주기억장치 간 속도가 느린 점을 개선한 장치로 주기억장치처럼 주소번지를 기억하여 데이터에 접근하는 방식이 아니라, 일부 내용을 기억하여 데이터를 검색하고 저장하는 기억장치입니다. Associative Memory 혹은 Contents Addressable Memory로 불립니다. 대표적인 예로 스마트폰의 전화번호부가 연관기억장치에 해당합니다. 전화번호부에서 홍길동을 찾을 때 자음검색으로도 찾을 수 있는 것과 비슷하다고 볼 수 있습니다. 하드웨어로 구성할 수 있는 기억장치이며, 일부 내용을 갖고 검색하기 때문에 주기억장치보다 검색속도가 빠릅니다.
복수모듈기억장치
복수모듈기억장치는 CPU와 주기억장치 간의 속도 향상을 위해서 각 메모리 모듈과 CPU를 1:다 형식으로 매핑하여 하드웨어적으로 회선을 구성합니다. 그래서 메모리 모듈 별로 번갈아가며 병행처리가 가능하게끔 만든 기억장치입니다. 통짜로 된 메모리는 한번에 한 프로그램만 로드하고 실행할 수 있으나, 메모리 인터리빙 방식을 적용하여 메모리 모듈 별로 나누어 프로그램을 실행할 수 있습니다. 따라서 여러 프로그램을 한꺼번에 돌릴 수 있습니다.
캐시메모리
캐시메모리는 CPU와 주기억장치 간의 속도 향상을 위해서 지역성 이론에 기반하여 만들어진 메모리입니다. 지역성이란, 예를 들면 CPU는 프로세스를 처리하기 위해서 주기억장치로부터 명령과 데이터를 가져옵니다. 이때 주소번지 순서대로 가져오게 되어서 자주 접근하는 주소번지가 발생하게 됩니다. 이를 참조의 지역성이라고 합니다. 참조의 지역성을 기반으로 캐시 메모리에 자주 사용하는 주소번지를 다른 공간에 저장해두었다가 요청 시 빠르게 찾을 수 있도록 개선한 기억장치입니다.
*Cache Hit: 캐시메모리에서 데이터를 찾는 경우를 말합니다.
*Cache Miss: 캐시메모리에서 데이터를 못찾았을 경우를 말합니다.
캐시메모리는 CPU 내부에 존재하는 L1 캐시메모리, CPU 외부에 존재하는 L2, L3 캐시메모리가 있습니다. 여기서 L은 레벨(Level)을 의미합니다. 우리 말로 하면, 1차캐시, 2차캐시, 3차캐시메모리가 되는 것입니다. 속도와 크기에 따라 분류한 이 레벨은 CPU 내부에 내장되어 있는 L1캐시가 가장 접근 속도가 빠릅니다. CPU와 물리적으로 가장 가깝기 때문입니다. 만약 CPU가 L1 캐시에서 Cache Miss가 나면, 그 다음인 L2 캐시에서 찾습니다. 아래 그림은 캐시 내부 구조를 나타낸 그림입니다.
가상기억장치
가상기억장치는 주기억장치의 용량이 부족할 때 하드디스크의 일부공간을 마치 주기억장치처럼 사용하는 기억장치를 말합니다. 연관기억장치, 복수모듈기억장치, 캐시메모리는 모두 속도와 관련하여 개선된 기억장치이지만, 가상기억장치는 기억용량 부분에서 개선한 기억장치라고 할 수 있습니다. 하드디스크 일부를 주기억장치처럼 사용하려면, 우선 실제 주소 번지를 호환 및 사용할 수 있도록 주소매핑이 필요합니다. 그리고 주기억장치와 하드디스크 간 프로세스를 무슨 단위로 로드(Load)하고 저장(Store)할지를 정해야 합니다. 이러한 주소매핑과 프로세스 단위를 정하는 기법에는 크게 페이징기법, 세그먼트기법이 있습니다. 아래 그림과 함께 두 가지 방식에 대해 설명드리겠습니다.
하드디스크에는 운영체제, 한글프로그램, 포토샵 프로그램, 파워포인트 프로그램이 설치되어 있습니다. RAM의 전체 크기는 14라고 하고, 운영체제를 실행하는데 필요한 용량이 5, 한글 3, 포토샵 4, 파워포인트 6라고 가정해봅시다. 그리고 운영체제부터 순서대로 프로그램을 실행한다고 했을 때, RAM의 용량은 14인데 파워포인트까지 실행하기 위해 필요한 총 용량은 18로 2만큼의 RAM 공간 밖에 사용하지 못하게 됩니다. 그래서 파워포인트가 RAM에 로드가 되지 못하는 상황이 생겼습니다. RAM으로 파워포인트를 로드하려면 2만큼의 외부 공간이 추가로 필요한 상황이 발생(외부 단편화)했으므로 아래 그림과 같이, 하드디스크에 가상메모리 영역을 따로 확보를 해놓아야 합니다. 첫번째로 포토샵을 RAM에서 내리고, 가상 메모리에 임시로 저장(Store)합니다. 그러면 RAM에는 포토샵 실행에 사용한 4만큼의 공간을 확보하여 총 6만큼의 공간을 확보하게 됩니다. 그리고 파워포인트를 RAM으로 로드하면 파워포인트를 실행할 수 있게 됩니다.
이렇게 포토샵 프로그램과 파워포인트 프로그램이 가상-주기억장치 간에 저장하고 로드하는 과정을 컨텍스트 스위칭(Context Switching) 즉 문맥교환을 한다라고 합니다. 그러나 문맥교환이 자주 일어나게 되면 오히려 좋지 않은 성능결과를 초래할 수 있습니다. 즉 실제 프로그램을 실행하는 시간보다 교체하는 시간이 더 오래 걸리게 되는 쓰래싱 현상이 발생할 수 있는 것입니다. 쓰래싱 현상을 막기 위해서는 워킹셋(Working Set)을 활용하거나, 가능하다면 가상 메모리 할당 크기를 어느정도 크게 잡는 것이 좋습니다.
컨텍스트 스위칭 단일할당 기법
컨텍스트 스위칭을 할 때 메모리가 단일 메모리라면 단일할당 기법을 사용합니다. 단일할당 기법에는 크게 오버레이(Overlay)기법과 스와핑(Swapping)기법이 있습니다.
오버레이(Overlay)기법: 단일 메모리에 한 프로그램을 통짜로 올리고 내리는 방식입니다.
스와핑(Swapping)기법: 프로그램을 모듈로 쪼개서 자주 사용하는 것을 메모리에 올리고 내리는 방식입니다.
컨텍스트 스위칭 복수할당 기법
메모리가 복수 모듈 메모리라면 복수할당 기법을 사용합니다. 가상메모리는 오버레이 기법과 스와핑 기법을 섞어서 개선한 기억장치로 복수할당기법에 해당합니다. 복수할당기법에는 크게 페이징기법과 세그먼트기법이 있습니다.
페이징기법: 고정된 메모리 모듈 크기만큼 가상메모리에 할당하는 방법으로, 외부 단편화가 발생하기 보다는 고정된 크기만큼 할당하기 때문에 내부 단편화가 발생할 수 있습니다.
세그먼트기법: 프로그램의 크기만큼 가상메모리에 할당하는 방법입니다. 내부적으로 남는 공간이 없지만(내부단편화는 발생하지 않지만) 외부단편화가 발생할 수 있습니다.
기억장치의 분류
기억장치는 크게 4가지 기준으로 분류할 수 있습니다.
기억장치의 속도, 용량에 따라 다음과 같이 분류할 수 있습니다.
프로그램을 실행할 때 중앙제어장치, 주기억장치, 보조기억장치는 반드시 필요한 물리적 자원들입니다. 그러나 과거에는 이러한 물리장치들의 속도, 용량이 한정적이었기 때문에 프로그램을 실행 시 효율성을 추구하는 여러가지 기법들이 고안되었습니다. 예를 들면, 주기억장치의 공간이 부족하여 단편화가 발생하면, 이를 해결하기 위해 가상기억장치가 도입이 된 경우가 대표적인 예입니다. 지금은 기술의 발달로 수십개의 프로그램을 동시에 실행하여도 충분히 빠르고 효율적으로 실행할 수 있지만, 과거에는 어떻게 한정된 자원을 가지고 논리적으로 해결해나갔는지를 물리장치 별 특성을 통해 알아보겠습니다.
연관기억장치
연관기억장치는 CPU와 주기억장치 간 속도가 느린 점을 개선한 장치로 주기억장치처럼 주소번지를 기억하여 데이터에 접근하는 방식이 아니라, 일부 내용을 기억하여 데이터를 검색하고 저장하는 기억장치입니다. Associative Memory 혹은 Contents Addressable Memory로 불립니다. 대표적인 예로 스마트폰의 전화번호부가 연관기억장치에 해당합니다. 전화번호부에서 홍길동을 찾을 때 자음검색으로도 찾을 수 있는 것과 비슷하다고 볼 수 있습니다. 하드웨어로 구성할 수 있는 기억장치이며, 일부 내용을 갖고 검색하기 때문에 주기억장치보다 검색속도가 빠릅니다.
복수모듈기억장치
복수모듈기억장치는 CPU와 주기억장치 간의 속도 향상을 위해서 각 메모리 모듈과 CPU를 1:다 형식으로 매핑하여 하드웨어적으로 회선을 구성합니다. 그래서 메모리 모듈 별로 번갈아가며 병행처리가 가능하게끔 만든 기억장치입니다. 통짜로 된 메모리는 한번에 한 프로그램만 로드하고 실행할 수 있으나, 메모리 인터리빙 방식을 적용하여 메모리 모듈 별로 나누어 프로그램을 실행할 수 있습니다. 따라서 여러 프로그램을 한꺼번에 돌릴 수 있습니다.
<그림1> 복수모듈기억장치의 메모리 인터리빙기법 구동 과정
캐시메모리
캐시메모리는 CPU와 주기억장치 간의 속도 향상을 위해서 지역성 이론에 기반하여 만들어진 메모리입니다. 지역성이란, 예를 들면 CPU는 프로세스를 처리하기 위해서 주기억장치로부터 명령과 데이터를 가져옵니다. 이때 주소번지 순서대로 가져오게 되어서 자주 접근하는 주소번지가 발생하게 됩니다. 이를 참조의 지역성이라고 합니다. 참조의 지역성을 기반으로 캐시 메모리에 자주 사용하는 주소번지를 다른 공간에 저장해두었다가 요청 시 빠르게 찾을 수 있도록 개선한 기억장치입니다.
<그림2> 캐시메모리 구동 과정
*Cache Hit: 캐시메모리에서 데이터를 찾는 경우를 말합니다.
*Cache Miss: 캐시메모리에서 데이터를 못찾았을 경우를 말합니다.
캐시메모리는 CPU 내부에 존재하는 L1 캐시메모리, CPU 외부에 존재하는 L2, L3 캐시메모리가 있습니다. 여기서 L은 레벨(Level)을 의미합니다. 우리 말로 하면, 1차캐시, 2차캐시, 3차캐시메모리가 되는 것입니다. 속도와 크기에 따라 분류한 이 레벨은 CPU 내부에 내장되어 있는 L1캐시가 가장 접근 속도가 빠릅니다. CPU와 물리적으로 가장 가깝기 때문입니다. 만약 CPU가 L1 캐시에서 Cache Miss가 나면, 그 다음인 L2 캐시에서 찾습니다. 아래 그림은 캐시 내부 구조를 나타낸 그림입니다.
<그림3> L1, L2, L3 캐시메모리 구조를 도식화한 그림
가상기억장치
가상기억장치는 주기억장치의 용량이 부족할 때 하드디스크의 일부공간을 마치 주기억장치처럼 사용하는 기억장치를 말합니다. 연관기억장치, 복수모듈기억장치, 캐시메모리는 모두 속도와 관련하여 개선된 기억장치이지만, 가상기억장치는 기억용량 부분에서 개선한 기억장치라고 할 수 있습니다. 하드디스크 일부를 주기억장치처럼 사용하려면, 우선 실제 주소 번지를 호환 및 사용할 수 있도록 주소매핑이 필요합니다. 그리고 주기억장치와 하드디스크 간 프로세스를 무슨 단위로 로드(Load)하고 저장(Store)할지를 정해야 합니다. 이러한 주소매핑과 프로세스 단위를 정하는 기법에는 크게 페이징기법, 세그먼트기법이 있습니다. 아래 그림과 함께 두 가지 방식에 대해 설명드리겠습니다.
<그림4> RAM 공간부족으로 인한 외부단편화 발생상황
하드디스크에는 운영체제, 한글프로그램, 포토샵 프로그램, 파워포인트 프로그램이 설치되어 있습니다. RAM의 전체 크기는 14라고 하고, 운영체제를 실행하는데 필요한 용량이 5, 한글 3, 포토샵 4, 파워포인트 6라고 가정해봅시다. 그리고 운영체제부터 순서대로 프로그램을 실행한다고 했을 때, RAM의 용량은 14인데 파워포인트까지 실행하기 위해 필요한 총 용량은 18로 2만큼의 RAM 공간 밖에 사용하지 못하게 됩니다. 그래서 파워포인트가 RAM에 로드가 되지 못하는 상황이 생겼습니다. RAM으로 파워포인트를 로드하려면 2만큼의 외부 공간이 추가로 필요한 상황이 발생(외부 단편화)했으므로 아래 그림과 같이, 하드디스크에 가상메모리 영역을 따로 확보를 해놓아야 합니다. 첫번째로 포토샵을 RAM에서 내리고, 가상 메모리에 임시로 저장(Store)합니다. 그러면 RAM에는 포토샵 실행에 사용한 4만큼의 공간을 확보하여 총 6만큼의 공간을 확보하게 됩니다. 그리고 파워포인트를 RAM으로 로드하면 파워포인트를 실행할 수 있게 됩니다.
<그림5> 가상메모리에 포토샵 프로그램을 저장(Store)하는 과정
<그림6> 가상메모리로부터 파워포인트 프로그램을 로드(Load)하는 과정
이렇게 포토샵 프로그램과 파워포인트 프로그램이 가상-주기억장치 간에 저장하고 로드하는 과정을 컨텍스트 스위칭(Context Switching) 즉 문맥교환을 한다라고 합니다. 그러나 문맥교환이 자주 일어나게 되면 오히려 좋지 않은 성능결과를 초래할 수 있습니다. 즉 실제 프로그램을 실행하는 시간보다 교체하는 시간이 더 오래 걸리게 되는 쓰래싱 현상이 발생할 수 있는 것입니다. 쓰래싱 현상을 막기 위해서는 워킹셋(Working Set)을 활용하거나, 가능하다면 가상 메모리 할당 크기를 어느정도 크게 잡는 것이 좋습니다.
컨텍스트 스위칭 단일할당 기법
컨텍스트 스위칭을 할 때 메모리가 단일 메모리라면 단일할당 기법을 사용합니다. 단일할당 기법에는 크게 오버레이(Overlay)기법과 스와핑(Swapping)기법이 있습니다.
오버레이(Overlay)기법: 단일 메모리에 한 프로그램을 통짜로 올리고 내리는 방식입니다.
스와핑(Swapping)기법: 프로그램을 모듈로 쪼개서 자주 사용하는 것을 메모리에 올리고 내리는 방식입니다.
컨텍스트 스위칭 복수할당 기법
메모리가 복수 모듈 메모리라면 복수할당 기법을 사용합니다. 가상메모리는 오버레이 기법과 스와핑 기법을 섞어서 개선한 기억장치로 복수할당기법에 해당합니다. 복수할당기법에는 크게 페이징기법과 세그먼트기법이 있습니다.
페이징기법: 고정된 메모리 모듈 크기만큼 가상메모리에 할당하는 방법으로, 외부 단편화가 발생하기 보다는 고정된 크기만큼 할당하기 때문에 내부 단편화가 발생할 수 있습니다.
세그먼트기법: 프로그램의 크기만큼 가상메모리에 할당하는 방법입니다. 내부적으로 남는 공간이 없지만(내부단편화는 발생하지 않지만) 외부단편화가 발생할 수 있습니다.
기억장치의 분류
기억장치는 크게 4가지 기준으로 분류할 수 있습니다.
<표1> 기억장치의 분류
기억장치의 속도, 용량에 따라 다음과 같이 분류할 수 있습니다.
<그림7> 속도, 용량에 따른 기억장치의 분류
Comments
Post a Comment