컴공생의 발자취

컴퓨터 구조론 5판 5장 연습 문제 정답 본문

📖 이론/컴퓨터구조론

컴퓨터 구조론 5판 5장 연습 문제 정답

MNY 2023. 6. 6. 15:44
728x90
반응형

5.1 평균 기억장치 액세스 시간 = ML1의 액세스 시간 × ML1의 적중률 + ML2의 액세스 시간 × (100 - ML1의 적중률) = 20ns × 90% + 200ns × 10% = 20ns × 0.9 + 200ns × 0.1 = 18ns + 20ns = 38ns 

 

5.2 식 = ML1의 액세스 시간 × ML1의 적중률 + ML2의 액세스 시간 × (100 - ML1의 적중률)

ML1에 대한 적중률 평균 기억장치 액세스 시간
0% 10ns × 0 + 100ns × 1 100ns
20% 10ns × 0.2 + 100ns × 0.8 82ns
40% 10ns × 0.4 + 100ns × 0.6 64ns
60% 10ns × 0.6 + 100ns × 0.4 46ns
80% 10ns × 0.8 + 100ns × 0.2 28ns
100% 10ns × 1 + 100ns × 0 10ns

 

5.3 2진수를 16진수로 표기하는 방법은 A0부터 네 자리씩 끊어서 0~E까지 변경 후, 맨 끝에 16진수 표기임을 알려주는 H를 붙이면 된다.

  주소 16진수 표기
A11 A10 A9 A8   A7 A6 A5 A4   A3 A2 A1 A0
(1)       0   0 0 0 0   0 0 0 0 000H
      1   1 1 1 1   1 1 1 1 1FFH
(2)     0 0   0 0 0 0   0 0 0 0 000H
    1 1   1 1 1 1   1 1 1 1 3FFH
(3) 0 0 0 0   0 0 0 0   0 0 0 0 000H
1 1 1 1   1 1 1 1   1 1 1 1 FFFH

 

5.4 필요한 칩의 수는 주소 비트와 데이터 비트의 크기를 맞추기 위해서 직렬 연결과 병렬 연결을 한 개수에 의해 정해진다.

 

(1) 주소 비트 : 512 × 2 = 1024 (2개의 칩을 직렬로 연결) 

    데이터 비트 : 1 × 32 (32개의 칩을 병렬로 연결) 

    필요한 칩의 수 : 2 × 32 = 64개

 

(2) 주소 비트 : 128 × 8 = 1024 (8개의 칩을 직렬로 연결) 

    데이터 비트 : 4 × 8 (8개의 칩을 병렬로 연결) 

    필요한 칩의 수 : 8 × 8 = 64개

 

(3) 주소 비트 : 64 × 16 = 1024 (16개의 칩을 직렬로 연결)

    데이터 비트 : 8 × 4 (4개의 칩을 병렬로 연결)

    필요한 칩의 수 : 16 × 4 = 64개

 

5.5 단어의 길이가 32비트이므로 병렬로 연결하여 데이터 비트의 수를 32비트로 맞춰줘야 한다. 또한 직렬 연결을 해서 기억장치의 용량을 맞춰준다.

 

(1) 데이터 비트 : 1 × 32 (32개의 칩을 병렬로 연결) 

    주소 비트 : 4Mword × 16 = 64Mword (16개의 칩을 직렬로 연결) 

    필요한 칩의 수 : 32 × 16 = 512개

(2) 데이터 비트 : 4 × 8 (8개의 칩을 병렬로 연결)

    주소 비트 : 1Mword × 64 = 64Mword (64개의 칩을 직렬로 연결) 

    필요한 칩의 수 : 8 × 64 = 512개

 

5.6 32×4비트 RAM칩 4개를 병렬로 연결하여 32×16비트 기억장치 모듈을 구성할 수 있다. 또한 주소 비트가 5비트이므로 2진수로 표현한 첫 번째 주소는 00000이고 마지막 주소는 11111이다.

 

5.7 2K×8비트 RAM칩 8개를 병렬로 연결하여 2K×64비트 기억장치 모듈을 구성할 수 있다. 또한 주소 비트가 11비트이므로 16진수로 표현한 첫 번째 주소는 000H(000 0000 0000(2))이고 마지막 주소는 7FFH(111 1111 1111(2))이다.

 

5.8 32×8비트 RAM칩 2개를 직렬로 연결하여 64×8비트 기억장치 모듈을 구성할 수 있다. 또한 주소 비트가 6비트이므로 2진수로 표현한 첫 번째 주소는 000000이고 마지막 주소는 111111이다.

 

5.9 2K×8비트 RAM칩 4개를 직렬로 연결하여 8K×8비트 기억장치 모듈을 구성할 수 있다. 또한 주소 비트가 13(비트이므로 16진수로 표현한 첫 번째 주소는 0000H(0 0000 0000 0000(2))이고 마지막 주소는 1FFFH(1 1111 1111 1111(2))이다.

 

5.10 16×4비트 RAM칩 2개를 직렬, 2개를 병렬로 연결하여 32×8비트 기억장치 모듈을 구성할 수 있다. 또한 주소 비트가 5비트이므로 2진수로 표현한 RAM1과 RAM2의 시작 주소는 00000이고 마지막 주소는 01111이고 RAM3와 RAM4의 시작 주소는 10000이고 마지막 주소는 11111이다.

 

5.11 1K×8비트 RAM칩 2개를 직렬, 2개를 병렬로 연결하여 2K×16비트 기억장치 모듈을 구성할 수 있다. 또한 주소 비트가 12비트이므로 2진수로 표현한 RAM1과 RAM2의 시작 주소는 0000 0000 0000이고 마지막 주소는 0111 1111 1111이고 RAM3와 RAM4의 시작 주소는 1000 0000 0000이고 마지막 주소는 1111 1111 1111이다.

 

5.12 

 

5.13 8-비트 CPU를 사용하므로 ROM과 RAM칩은 각각 직렬로 연결된다. 또한 주소 비트는 두 개의 ROM칩 13비트(4K × 2 = 8K = 2^13), 네 개의 RAM칩 13비트(2K × 4 = 8K = 2^13)가 각각 사용되고 ROM칩과 RAM칩을 구분하기 위해서 1비트를 사용되며, RAM칩의 시작 주소가 8000H번지이므로 총 주소 비트는 16비트이다.

주소 영역 16진수 표기
A15 A14 A13 A12   A11 A10 A9 A8   A7 A6 A5 A4   A3 A2 A1 A0
RAM1 0 0 0 0   x x x x   x x x x   x x x x 0000H ~ 0FFFH
RAM2 0 0 0 1   x x x x   x x x x   x x x x 1000H ~ 1FFFH
ROM1 1 0 0 0   0 x x x   x x x x   x x x x 8000H ~ 87FFH
ROM2 1 0 0 0   1 x x x   x x x x   x x x x 8800H ~ 8FFFH
ROM3 1 0 0 1   0 x x x   x x x x   x x x x 9000H ~ 97FFH
ROM4 1 0 0 1   1 x x x   x x x x   x x x x 9800H ~ 9FFFH

 

5.14.

 

(1) 16비트 CPU를 사용하므로 1M×4비트 RAM칩을 사용하여 1M×16비트 RAM을 만들어야 하므로 4개가 필요하다. (1M×16비트 = 1M×2바이트 = 2MByte) 또한 512K×8비트 ROM 칩을 사용하여 512K×16비트 ROM을 만들어야 하므로 2개가 필요하다. (512K×16비트 = 512K×2바이트 = 1MByte)

 

(2) 주기억장치의 전체 용량은 RAM의 용량 + ROM의 용량이고 1word = 16비트 = 2바이트이므로 2MByte + 1MByte = 3MByte = 1.5MWord이다.

 

(3) RAM의 주소 비트는 20비트(1M = 2^20), ROM의 주소 비트는 19비트(512K = 2^19)이고 RAM과 ROM을 구분하기 위해서 1비트를 사용하므로 총 주소 비트는 21비트이다.

 

5.15 캐시 적중률 = (원하는 명령어 혹은 데이터가 캐시에 있었던 횟수) / (기억장치 액세스한 전체 횟수)

(1) 7500 / 15000 = 0.5

(2) 12000 / 15000 = 0.8

(3) 13500 / 15000 = 0.9

 

5.16 평균 기억장치 액세스 시간 = (캐시 액세스 시간 × 캐시 적중률) + {주기억장치 액세스 시간 × (1  캐시 적중률)} = (8ns × 0.85) + (100ns × 0.15) = 21.8ns+

 

 

5.17 검사 시간(TK)은 캐시 미스인 경우, 즉 주기억장치 액세스 시간에 포함되므로 TK = 2ns라면 (캐시 액세스 시간 × 캐시 적중률) + {(주기억장치 액세스 시간 + 검사 시간) × (1  캐시 적중률)} = (8ns × 0.85) + (102ns × 0.15) = 22.1ns

 

5.18 캐시의 적중률을 H라고 하면, 평균 기억장치 액세스 시간 = (캐시 액세스 시간 × 캐시 적중률) + {주기억장치 액세스 시간 × (1  캐시 적중률)} = (10ns × H) + {100ns × (1  H)} = 100ns  (90ns × H)  19ns  81ns / 90ns  H이므로 H즉 캐시 적중률은 0.9이상 이어야 한다.

 

5.19 라인의 크기는 블록의 크기와 같아야 한다. 그러므로 캐시 라인의 수 = 캐시의 크기 / 블록의 크기이다.

(1) 요구 인출 방식은 블록의 크기가 단어의 길이와 같으므로 2^14 / 2^2 = 2^12

(2) 2^14 / (2^2 × 2) = 2^11

(3) 2^14 / (2^2 × 2^2) = 2^10

 

5.20 

 

(1) 캐시의 용량이 16KByte이고 캐시 라인의 크기가 4Byte이므로 캐시 라인의 수 = 16KByte / 4 Byte = 4K = 2^12개이다.

 

(2) 라인의 크기와 블록의 크기는 같으므로 블록의 크기도 4바이트이다. 그러므로 주기억장치 블록의 수 = 주기억장치 용량 / 블록의 크기 = 1MByte / 4Byte = 2^20 / 2^2 = 2^18개이다.

 

(3) 주기억장치의 블록의 수가 2^18개이고 캐시 라인의 수가 2^12개이므로 한 라인을 공유하는 주기억장치 블록들의 수 = 주기억장치의 블록의 수 / 캐시 라인의 수 = 2^18 / 2^12 = 2^6개이다.

 

(4) 주기억장치 용량이 1MByte = 2^20Byte이고 주기억장치의 주소가 바이트 단위로 지정된다면 주기억장치의 주소 비트는 20비트이다. 태그 필드는 라인을 공유하는 주기억장치 블록들의 수가 2^6개이므로 6비트이고, 라인 필드는 캐시 라인의 수가 2^12개이므로 12비트이며 단어 필드는 단어의 길이가 한 바이트인 것으로 가정하면 블록의 크기가 4바이트 = 2^2바이트이므로 2비트이다.

 

5.21 주기억장치 용량 = 블록의 개수 × 블록의 크기 = 4096 × 16바이트 = 2^16바이트이다. 주기억장치의 주소가 바이트 단위로 지정된다면 주기억장치의 주소 비트는 16비트이다. 캐시가 64개의 라인들을 가지고 있고 각 세트가 4개의 라인들로 구성되어 있으므로 세트의 개수 = 64 / 4 = 16 = 2^4개이므로 세트 필드는 4비트이고, 태그 필드는 세트를 공유하는 주기억장치 블록들의 수가 4096 / 16 = 2^8개이므로 8비트이다. 또한, 단어필드는 단어의 길이가 한 바이트인 것으로 가정하면 블록의 크기가 16바이트 = 2^4바이트이므로 4비트이다.

 

5.22 직접-사상방식은 하드웨어가 간단하고, 구현하는 비용이 적게 들지만, 주어진 주기억장치의 블록이 저장되는 캐시 라인이 한 개 밖에 없고, 같은 라인에 사상되는 두 개의 블록들로부터 데이터들을 번갈아 읽어와야 한다면, 그 블록들은 캐시에서 반복적으로 교체되며, 결과적으로 적중률이 낮아진다. 
완전-연관 사상 방식은 새로운 블록이 캐시로 적재될 때, 라인의 선택이 자유로워 프로그램 세그먼트나 데이터 배열 전체가 캐시로 적재될 수도 있다. 이 경우 지역성이 높다면, 적중률이 매우 높아질 것이다. 그러나 모든 태그들을 병렬로 검사하기 위하여 복잡하고 비용이 높은 하드웨어를 포함해야 한다.

 

5.23 

 

(1) 캐시 적중

(2) 캐시 미스, 3번 라인의 태그는 11로 교체되고, 데이터는 elec로 교체된다.

(3) 캐시 미스, 5번 라인의 태그는 00으로 세트되고, 데이터는 assm이 적재된다.

(4) 캐시 적중, 이때 단어필드의 값이 ‘11’이므로 만약 읽기 동작이 수행되고 있다면, 데이터 move 중에서 네 번째 단어인 e’가 CPU로 읽혀진다.

 

5.24

(1) 캐시 미스, 캐시 교체 알고리즘에 따라서 2번 세트의 두 라인 중 하나의 라인의 태그는 110으로 교체되고, 데이터는 comp’로 교체된다.

(2) 캐시 미스, 3번 세트의 비어있는 라인에 태그가 011로 세트되고, 데이터는 move가 적재된다.

(3) 캐시 적중

(4) 캐시 미스, 1번 세트의 비어있는 라인에 태그가 ‘000으로 세트되고, 데이터는 hand가 적재된다.

 

5.25

(a) 적중률 = 2 / 11

0 1 2 0 2 3 7 3 1 3 2
0 0 1 2 2 0 3 3 7 1 3
  1 2 0 0 3 7 7 1 3 2

(b) 적중률 = 6 / 11

0 1 2 0 2 3 7 3 1 3 2
0 0 0 0 0 0 1 1 1 1 1
  1 1 1 1 1 2 2 2 2 2
    2 2 2 2 3 3 3 3 3
          3 7 7 7 7 7

 

5.26 

(1) 적중률 = 3 / 12

1 2 2 1 3 1 4 5 4 7 4 1
1 1 1 1 2 3 1 4 4 5 7 4
  2 2 2 3 1 4 5 5 7 4 1

(2) 적중률 = 5 / 12

1 2 2 1 3 1 4 5 4 7 4 1
1 1 1 1 1 1 1 2 2 3 3 4
  2 2 2 2 2 2 3 3 4 4 5
        3 3 3 4 4 5 5 7
            4 5 5 7 7 1

(3) 적중률 = 5 / 12, 숫자 옆의 괄호는 USE비트의 값이며 액세스된 라인의 USE비트는 1로 세트되고, 다른 라인의 USE비트는 0으로 세트된다.

1 2 2 1 3 1 4 5 4 7 4 1
1(1) 1(0) 1(0) 1(1) 1(0) 1(1) 1(0) 5(1) 5(0) 7(1) 7(0) 1(1)
  2(1) 2(1) 2(0) 3(1) 3(0) 4(1) 4(0) 4(1) 4(0) 4(1) 4(0)

(4) 적중률 = 6 / 12, 숫자 옆의 괄호는 2비트의 카운터 비트이며 액세스된 라인의 카운터 비트는 0으로 세트되며, 나머지 라인의 카운터 비트는 1씩 증가한다.

1 2 2 1 3 1 4 5 4 7 4 1
1(0) 1(1) 1(2) 1(0) 1(1) 1(0) 1(1) 1(2) 1(3) 1(4) 1(5) 1(0)
  2(0) 2(0) 2(1) 2(2) 2(3) 2(4) 5(0) 5(1) 5(2) 5(3) 5(4)
        3(0) 3(1) 3(2) 3(3) 3(4) 7(0) 7(1) 7(2)
            4(0) 4(1) 4(0) 4(1) 4(0) 4(1)

 

5.27 


(1) Write-through 방식에서 모든 쓰기 동작은 주기억장치를 액세스하므로 주기억장치 액세스 시간과 같다.

읽기 동작의 평균 시간 = 0.8 × 20ns + 0.2 × 200ns = 56ns

쓰기 동작의 평균 시간 = 200ns

평균 기억장치 액세스 시간 = 0.6 × 56ns + 0.4 × 200ns = 113.6ns


(2) Write-back 방식에서는 일기 동작과 쓰기 동작에 같은 시간이 걸리고 캐시 미스가 발생한 경우 변경된 상태의 라인만 쓰기를 하면 된다.

평균 기억장치 액세스 시간 = 0.8 × 20ns + 0.2 × (200ns + 0.3 × 200ns) = 68ns

 

5.28 평균 기억장치 액세스 시간 = 0.6 × 2ns + (0.85  0.6) × 20ns + (1  0.85) × 200ns = 1.2ns + 5ns + 30ns = 36.2ns

 

5.29 평균 기억장치 액세스 시간 = 0.6 × 2ns + (1 - 0.6) × 0.85 × 20ns + {1  0.6  (1 - 0.6) × 0.85} × 200ns = 1.2ns + 0.34 × 20ns + 0.06 × 200ns = 20ns

 

5.30 클록 주파수가 400MHz이므로 클록 주기는 1 / 400MHz = 1 / (4 × 10^8Hz) = 2.5ns이다. 또한 버스트 길이가 8이고 DDR2방식을 사용하므로 DDR방식에서 주파수만 2배로 높여 데이터 전송률을 그만큼 증가시킨 것과 같다. 따라서, 버스트 읽기 동작이 모두 수행되는데 걸리는 전체 시간 = CAS지연 × 클록 주기 + (버스트 길이 / 2) × (클록 주기 / 2) = 4 × 2.5ns + (8 / 2) × (2.5ns / 2) = 15ns이다.

 

5.31 클록 주파수가 1600MHz이므로 클록 주기는 1 / 1600MHz = 1 / (16 × 10^8Hz) = 0.625ns이다. CAS지연이 10ns이므로 CAS지연의 클록 주기는 10ns / 0.625ns = 16클록 주기이고 버스트 길이가 8이고 DDR4 방식을 사용하므로 DDR 방식에서 주파수를 8배 높인 것과 같다. 따라서 읽기 동작이 수행되기 위해서는 CAS지연 + (버스트 길이 / 2) = 16 + 4 = 20클록 주기가 필요하다.

 

5.32 기억장치 랭크는 데이터 입출력 폭이 64비트가 되어야 하므로 X8 조직의 칩들을 사용하면 8개의 칩들이 필요하다. 또한, 양면 2중-랭크 모듈로 구성하는 경우에는 DIMM에 2개의 칩을 장착해야 하므로 총 용량은 (512M X 8bit) X 8 X 2 = 2^33Byte = 8GByte이다.

 

5.33 

 

(1) 양면 단일-랭크로 구성되는 DDR4모듈은 ×4 조직의 칩들을 사용해야 한다. 따라서 2G X 4비트의 내부 조직을 가진 SDRAM 칩들을 사용해야 한다.

(2) 양면 단일-랭크로 구성되는 DDR4모듈은 기억장치 랭크는 데이터 입출력 폭이 64비트가 되어야 하므로 X4 조직의 칩들을 사용하여 16개의 칩들이 필요하다. 따라서 (2G X 4bit) × 16 = 2^34Byte = 16GByte이다.

728x90
반응형