CS/컴퓨터 구조론

컴퓨터 구조론 5장 [기억장치- 계층적 기억장치시스템]

devrabbit22 2025. 3. 29. 23:53
  • 컴퓨터시스템의 성능에 가장 중요한 영향을 미치는 요소는 CPU이다. 그러나 CPU가 아무리 빠르더라도 기억장치가 느리다면, CPU는 명령어나 데이터를 액세스하는 과정에서 많은 시간을 기다리게 되어 시스템 성능이 저하될 수밖에 없다.
  • 최근 기억장치 제조 기술의 발전으로 인하여 반도체 기억장치의 속도가 계속 높아지고 있지만, CPU의 속도는 더욱 급속히 향상되고 있기 때문에, 그들 간의 속도 격차는 줄어들지 않고 있다. 그러한 차이로 인한 성능 저하를 줄이기 위하여 가격이 높은 고속의 반도체 기억장치를 CPU와 주기억장치 사이에 위치시킨다. 
  • 더 심한 문제는 보조저장장치들이다. 컴퓨터 시스템에서 용량이 크고 영구저장 능력을 가진 보조저장장치도 필요하지만, 그들 대부분은 기계장치를 포함하고 있기 때문에 액세스 속도가 현저히 느리다.

계층적 기억장치 시스템

  • 속도, 가격 및 크기가 다양한 기억장치들을 계층적으로설치함으로써 성능대 가격비(performance/costratio)를 높이는 시스템 구성 방식

기억장치들은 유형에 따라 기능, 속도, 용량 및 가격이 매우 다양하다. 그런데 컴퓨터시스템에서 기억장치는 속도뿐 아니라 다른 측면들도 함께 고려하여 구성되어야 한다. 따라서 대부분의 컴퓨터시스템에서는 여러 유형의 기억장치들을 계층적으로 구성하여 설치함으로써, 평균 기억장치 액세스 속도를 높이면서 가격대성능비도 적절히 유지되도록 하고 있다.

필요성 및 효과

  • CPU가 프로그램 코드나 데이터를 인출하고자 할 때, 만약 그들이 주기억장치에 존재하지 않는다면, 보조저장장치(ex: 디스크)로부터 주기억장치로 이동시킨 다음에 인출할 수 있다. 그런데 주기억장치의 용량이 적다면, 프로그램이나 데이터를 조금씩만 이동시킬 수 있기 때문에 그러한 동작이 빈번히 일어나게 된다
  • 일반적으로 디스크의 속도는 주기억장치로 사용하는 반도체 기억장치의 속도에 비하여 대략 10만 배 정도 느리다. 따라서 그때마다 CPU는 오랜 시간을 기다려야 한다. 이러한 CPU 대기 시간은 주기억장치의 용량을 증가시킬수록 줄어들게 된다.
  • 주기억장치 용량이 커질수록 더 많은 프로그램과 데이터들을 CPU 가까이 위치시킬 수 있어서 평균 액세스 시간이 짧아지는 것이다. 그렇지만 속도가 빠른 기억장치일수록 가격이 더 높아지기 때문에, 용량을 무한정 증가시킬 수만은 없다. 따라서 기억장치의 설계에서 가격과 용량 및 속도 간에는 적절한 조정(tradeoff)이 필요하다.

그 동안 각종 기억장치들을 구현하는데 사용되는 기술들이 발전해왔고 그러한 발전 과정 속에서 기억장치의 특성들 간에는 다음과 같은 관계들이 성립되고 있다.

  • 액세스 속도가 높아질수록, 비트당 가격도 높아진다.
  • 용량이 커질수록, 비트당 가격은 낮아진다.
  • 용량이 커질수록, 액세스 속도는 낮아진다.

컴퓨터 설계의 목표가 성능을 높이는 것이라면, 가격이 비싸고 용량은 적더라도 액세스 속도가 높은 기억장치를 사용해야 할 것이다. 그러나 만약 용량도 증가시키고 동시에 비용도 낮추기를 원한다면, 액세스 속도가 낮은 기억장치도 사용할 수 박에 없을 것이다. 

이러한 어려움을 해결할 수 있는 방법은 어떤 한 가지 기억장치나 제조 기술에 의존하는 것이 아니라, 여러 종류의 기억장치들을 이용하여 계층적 기억장치시스템을 구성하는 것이다.

기억장치를 계층적으로 구성함으로써 얻을 수 있는 효과

  • CPU가 두 계층의 기억장치들을 사용한다고 가정
  • 첫 번째 계층의 기억장치(ML1)는 액세스 시간이 10ns이다.
  • 두 번째 계층의 기억장치(ML2)는 용량이 더 크지만, 액세스 시간은 100ns이다.

2-단계 기억장치 계층

  • 만약 액세스할 데이터가 첫 번째 계층에 있다면, CPU는 그 데이터를 신속히 읽어올 수 있다. 그러나 그 데이터가 첫 번째 계층에 없다면, 두 번째 계층의 기억장치로부터 읽어와야 한다. 
  • 이 과정에서 그 데이터를 첫 번째 계층의 기억장치에도 적재해 둔다면, 이후에는 더 신속히 읽어올 수 있게 된다. 만약 CPU가 액세스할 데이터들의 50%가 첫 번째 계층에 있고 나머지 50%는 두 번째 계층에 있다면,
    평균 액세스 시간은(0.5 x 10ns) + (0.5 x 100ns) + (0.5 x 100ns) = 55ns가 된다. 

같은 방법으로, 첫 번째 계층에 원하는 데이터가 있는 비율을 20%부터 100%까지 변화시키면서 평균 액세스 시간을 구해보면 다음과 같아진다.

설명 단순화를 위해 그 데이터가 첫 번째 계층에 있는지 검사하는 데 걸리는 시간은 무시한다.

  • 원하는 데이터가 첫 번째 계층의 기억장치에 있는 비율이 높아질수록 평균 액세스 시간이 그 기억장치의 액세스 시간에 접근하게 되어, 두 가지 유형의 기억장치들을 계층적으로 사용한 효과를 더 크게 얻을 수 있다.
  • 일반적으로 두 번째 계층의 기억장치는 속도가 느린 대신에 비트당 가격이 저렴하기 때문에, 이와 같이 두 가지 기억장치를 계층적으로 사용한다면, 속도와 용량 및 가격 면에서 더 개선된 기억장치 시스템을 구성할 수 있게 된다.

프로그램 수행이 진행되는 동안 CPU가 명령어와 데이터를 읽기 위하여 기억장치를 액세스하는 위치를 조사해보면 몇몇 특정 영역에 집중되는 경향이 있다는 것을 알 수 있다.

  • 그 이유는 일반적으로 프로그램이 반복 루프들과 서브루틴들을 포함하고 있기 때문이다. 
  • 반복 루프가 수행되거나 빈번히 호출되는 서브루틴이 있다면, 그들이 저장되어 있는 작은 영역으로 액세스들이 집중될 것 이다. 그런데 이 프로그램 코드들을 처음에는 두 번째 계층의 기억장치로부터 인출하지만, 그 과정에서 첫 번째 계층의 기억장치에도 인출한 내용을 저장해두기 때문에 그 이후에는 더욱 신속하게 읽어올 수 있게 된다. 
  • 이와 유사한 경우로서, 표(table)나 배열 데이터(array data)에 대한 연산들은 하나의 집단을 이루고 있는 데이터들을 집중적으로 액세스 한다.

지성역의 원리(principle of locality)

  • CPU가 기억장치의 한정된 몇몇 영역들을 집중적으로 액세스하면서 작업을 수행한다는 원리이다.

오랜 시간이 지나면 액세스가 집중되는 위치도 바뀌게 되지만, 짧은 시간을 기준으로 보면 CPU가 기억장치의 한정된 몇몇 영역들을 주로 액세스하면서 작업을 수행한다는 것을 알 수 있다. 이와 같은 현상은 지역성의 원리라 한다. 실제 프로그램 실행 과정에서 이 원리가 적용되는 경우가 많기 때문에, 속도가 더 빠른 첫 번째 계층의 기억장치에 대한 액세스 횟수가 두 번째 계층의 기억장치에 대한 액세스보다 훨씬 더 많아지게 되며, 결과적으로 평균 액세스 시간을 크게 단축시킬 수 있게 된다.

기억장치 계층

기억장치 계층

상위 계층으로 올라갈수록 다음과 같은 현상들이 나타난다.

  • 비트당 가격이 높아진다.
  • 용량이 감소한다.
  • 액세스 시간은 짧아진다.
  • CPU에 의한 액세스 빈도는 높아진다.

계층 구조에서 최상위 계층의 기억장치, 즉 가장 빠르고, 가장 용량이 적으며, 비트당 가격이 가장 높은 기억장치는 프로세서 내부에 있는 레지스터들이다.

어떤 CPU는 수백 개의 레지스터를 가지고 있기도 하지만, 일반적으로는 수십 개 정도의 레지스터들을 가지고 있다.

대부분의 경우에 CPU 클록 신호의 한 주기 내에 데이터를 레지스터에 쓰거나 읽는 것이 가능하다.

ex) 1GHz의 클록으로 동작하는 CPU에서 내부 레지스터에 대한 읽기/쓰기 동작에 걸리는 시간은 1ns 이하이다.

  • 기억장치 계층에서 세 번째에 위치한 주기억장치는 반도체 기억장치 칩들로 구성되지만, 액세스 시간은 대략 수십 내지 수백ns 정도로서 레지스터 액세스 시간보다 훨씬 더 길다.
  • 따라서 프로그램 실행 중에 CPU가 필요로 하는 데이터가 레지스터에 없는  경우에 주기억장치로부터 읽어오기 위하여 상당히 긴 시간을 기다려야 한다.
  • 대규모 컴퓨터시스템에서와 같이 CPU와 주기억장치가 서로 다른 보드 상에 위치하는 경우에는 데이터 전송 시간도 길어지기 때문에 더욱 심각한 문제가 발생하게 된다.

그러한 문제를 해결하기 위한 방안

  • 대부분의 컴퓨터시스템에서는 CPU와 주기억장치 사이에 속도가 빠르지만 용량은 작은 캐시 메모리(cache memory)를 설치한다.
    - 캐시는 프로그래머에게는 보이지 않는다.(프로그램을 통하여 직접 읽거나 쓸 수 없다.) 
    - CPU와 주기억장치 간의 속도 차이를 보완해주기 위하여 데이터를 일시 저장해주는 중간 버퍼 기능을 수행한다.
    - 캐시로는 고속의 반도체 기억장치 칩들이 사용되며, 2~10ns 정도의 액세스 시간을 가진다.

위의 세 가지 기억장치들은 CPU가 직접 액세스할 수 있는 내부기억장치(internal memory)들이다.

즉, CPU가 주소를 발생하고, 그 주소에 의해 지정된 기억장치로부터 데이터를 읽거나 쓰는 동작을 CPU가 직접 수행할 수 있다. 반면에 CPU가 직접 액세스 하지 못하고 반드시 장치 제어기를 통해야 액세스할 수 있는 기억장치를 외부 기억장치(external memory)라고 하는데, 다음과 같은 종류들이 있다.

  • 대규모 정보를 영구적으로 저장하기 위한 외부 기억장치로 가장 널리 사용되는 것은 하드디스크, SSD, CD-ROM등이 있다.
  • 이러한 저장장치들은 CPU가 직접 액세스할 수 는 없으며, 각 저장장치의 제어기 혹은 I/O 프로세서를 통해서만 데이터 저장 및 검색이 가능하다.
  • 이와 같은 장치들을 2차 기억장치(secondary memory) 또는 보조저장장치(auxiliary storage device)라고 부른다. 이 저장장치들에는 주로 프로그램 파일들과 데이터 파일들이 저장되며, 바이트나 단어 단위가 아닌, 블록(block)이나, 페이지(page)단위로만 액세스할 수 있다.

즉, 계층적 기억장치시스템을 구성하면 다음과 같은 특징을 가지게 된다.

  • 하위 계층으로 내려갈수록 용량이 더 커지고 비트당 가격은 떨어지는 반면에, 지역성의 원리로 인하여 액세스 빈도가 더 낮아진다.
  • 하위 계층의 기억장치들은 속도가 느리지만 액세스 빈도는 낮으며, 더 많이 액세스되는 상위 계층의 기억장치들은 속도가 빠르기 때문에, 전체적으로 평균 기억장치 액세스 시간은 더 짧아지게 된다.
  • 결과적으로 계층적 방식을 이용함으로써 더 적은 비용으로, 더 빠르고, 더 큰 용량의 기억장치시스템을 구성할 수 있게 되는 것이다.

Reference

컴퓨터 구조론 개정 5판

https://yz-zone.tistory.com/83

 

[ 컴퓨터구조 ] 5.2 계층적 기억장치시스템

계층적 기억장치시스템 ▣ CPU와 기억장치 사이의 속도 격차 문제 ▪ 컴퓨터시스템의 성능에 가장 중요한 영향일 미치는 요소는 CPU 임 ▪ CPU가 아무리 빠르더라도 기억창지가 느리다면, CPU는 명

yz-zone.tistory.com