---
schema_version: 1
exam_id: "sose26-probeklausur"
aufgabe: 8
unit_id: "8c-1"
source_group_id: "8c"
official_exam: true
official_solution: true
language: "ko"
---

# 8c-1 — 4-way Cache Zugriff #1

> **학습 목표:** 주소 0x0080을 8-byte block과 4-set cache 규칙으로 분해하고, 빈 Set 0에 Tag 0x004를 처음 적재하는 전 과정을 재현할 수 있다.
>
> **왜 따로 배우는가:** 8c trace의 첫 접근은 address field 계산과 4-way set 상태의 출발점입니다. Block 0x0010과 Tag 0x004를 정확히 기록해야 바로 다음 0x0084가 같은 block의 Hit임을 설명할 수 있습니다.
>
> **범위:** Aufgabe 8 · 16점 Aufgabe의 최소 학습 단위 · 시험 p16–18 · 공식 해설 p41–44

## 1. 문제 원문 (Deutsch)

이 unit은 공식 Teilaufgabe 또는 표의 한 행·한 access를 학습 가능한 최소 단위로 다시 나눈 것입니다. 아래 전사는 source group `8c`의 공식 독일어 문제 원문이며, 페이지 이미지를 바로 뒤에 함께 두어 코드·표·도식을 대조할 수 있게 했습니다.

~~~text
8c)

Betrachten Sie folgenden RISC-V Assembler Code:

```asm
li t0, 0x0080      # Basisadresse Array A
li t1, 0x0100      # Basisadresse Array B
li t2, 4           # Anzahl an Iterationen

loop:
    lw t3, 0x0(t0)
    lw t4, 0x4(t0)
    lw t5, 0x0(t1)
    addi t0, t0, 8
    addi t1, t1, 4
    addi t2, t2, -1
    bne t2, zero, loop
```

Die Daten werden in einem 4-way set associative Cache mit 4 Sets, einer Blockgröße von 8 Bytes (2 Wörter) und einer Adressbreite von 16 Bit gespeichert. Tragen Sie für jeden Speicherzugriff jeweils Adresse, Tag, Set und Offset ein. Bestimmen Sie für jeden Zugriff in der Zeile „Type“, ob es sich um einen Hit oder einen Miss handelt. Geben Sie für jeden Miss den genauen Typ an.

| Zugriff | #1 | #2 | #3 | #4 |
|---|---:|---:|---:|---:|
| Adresse | | | | |
| Offset | | | | |
| Tag | | | | |
| Set | | | | |
| Type | | | | |

| Zugriff | #5 | #6 | #7 | #8 |
|---|---:|---:|---:|---:|
| Adresse | | | | |
| Offset | | | | |
| Tag | | | | |
| Set | | | | |
| Type | | | | |

| Zugriff | #9 | #10 | #11 | #12 |
|---|---:|---:|---:|---:|
| Adresse | | | | |
| Offset | | | | |
| Tag | | | | |
| Set | | | | |
| Type | | | | |
~~~

![공식 시험 원문 — exam-p18.png](../../assets/exam-p18.png)

*공식 시험 원문: `exam-p18.png` · Probeklausur.pdf · PDF p.18*

### 이 unit에서 풀 항목

주소 0x0080의 Offset/Set/Tag와 Hit/Miss를 구하세요.

## 2. 쉬운 한국어 해석

8c)

다음 RISC-V Assembly code를 살펴보시오.

```asm
li t0, 0x0080      # Array A의 base address
li t1, 0x0100      # Array B의 base address
li t2, 4           # 반복 횟수

loop:
    lw t3, 0x0(t0)
    lw t4, 0x4(t0)
    lw t5, 0x0(t1)
    addi t0, t0, 8
    addi t1, t1, 4
    addi t2, t2, -1
    bne t2, zero, loop
```

데이터는 4개의 Set을 가진 4-way set associative Cache에 저장된다. Block 크기는 8 Byte, 즉 2 Word이고 address width는 16 Bit이다. 각 memory access에 대해 주소, Tag, Set, Offset을 표에 기입하시오. 각 access의 Type 행에는 Hit인지 Miss인지 적고, 모든 Miss에 대해 정확한 유형을 제시하시오.

| 접근 | #1 | #2 | #3 | #4 |
|---|---:|---:|---:|---:|
| 주소 | | | | |
| Offset | | | | |
| Tag | | | | |
| Set | | | | |
| Type | | | | |

| 접근 | #5 | #6 | #7 | #8 |
|---|---:|---:|---:|---:|
| 주소 | | | | |
| Offset | | | | |
| Tag | | | | |
| Set | | | | |
| Type | | | | |

| 접근 | #9 | #10 | #11 | #12 |
|---|---:|---:|---:|---:|
| 주소 | | | | |
| Offset | | | | |
| Tag | | | | |
| Set | | | | |
| Type | | | | |

### 이 unit에 해당하는 최소 작업

주소 0x0080의 Offset/Set/Tag와 Hit/Miss를 구하세요.

이 문제에서 최종 결과만 맞히는 것보다 중요한 것은 `8c-1`에 필요한 중간 판단을 답안지에 남기는 것입니다.

## 3. 무엇을 묻는 문제인가

### 공식 문제의 요구사항

- 4회 loop를 전개하여 세 번씩 발생하는 총 12개의 lw memory access 주소를 실행 순서대로 구한다.
- 각 16-bit 주소를 8-Byte Block 기준 Offset, 4개 Set 기준 Set index, 나머지 Tag로 분해한다.
- 각 access 직전의 4-way set associative Cache 상태를 추적해 Hit 또는 Miss를 판정한다.
- 각 Miss에 대해 Compulsory, Conflict 또는 판정 가능한 정확한 Miss 유형을 적는다.
- 표의 #1부터 #12까지 Adresse, Offset, Tag, Set, Type 행을 모두 채운다.

### 조건과 제약

- Array A의 시작 주소는 0x0080이고 각 iteration 뒤 t0가 8 증가한다.
- Array B의 시작 주소는 0x0100이고 각 iteration 뒤 t1이 4 증가한다.
- iteration 수는 4이고 각 iteration에는 lw가 3개 있으므로 memory access는 총 12개이다.
- Cache는 4-way set associative이다.
- Set 수는 4개이다.
- Block 크기는 8 Byte, 즉 2 Word이다.
- Address width는 16 Bit이다.
- Block offset은 address의 하위 3 Bit, Set index는 그다음 2 Bit, Tag는 상위 11 Bit로 해석된다.
- 공식 해설은 처음 등장하는 Block을 Compulsory Miss로 판정하는 cold/empty 초기 상태를 사용한다.

### 원문 오탈자·도식 관련 주의

- 원문은 Cache가 처음에 비어 있는지 또는 초기 Tag/valid 상태가 무엇인지 명시하지 않는다. 공식 해설 p43–44는 cold/empty Cache로 해석한다.
- Replacement policy는 명시되지 않는다. 다만 공식 access sequence에서는 어느 Set도 4개 way를 모두 채우지 않아 replacement가 발생하지 않는다.
- 인쇄된 시험 p18의 제목은 시각적으로 'c)'만 표시되지만 Aufgabe 8의 연속 구조와 PDF 텍스트 추출에서는 8c로 식별된다.
- 원문의 'genauen Typ'이 허용하는 Miss 분류 목록은 명시되지 않는다. 공식 해설은 표에서 Compulsory Miss와 Hit만 사용한다.

### 도식 시각 확인 상태

- **도식 의존 여부:** 이 최소 unit의 핵심 판정은 텍스트·수식·코드로 재현할 수 있습니다.
- **공식 페이지 상태:** exam-p18.png, solution-p43.png, solution-p44.png가 원문 대조용으로 렌더되어 연결되어 있습니다.

### 이 unit의 학습 목표

- **관찰 가능한 목표:** 주소 0x0080을 8-byte block과 4-set cache 규칙으로 분해하고, 빈 Set 0에 Tag 0x004를 처음 적재하는 전 과정을 재현할 수 있다.
- **출제 의도:** 8c trace의 첫 접근은 address field 계산과 4-way set 상태의 출발점입니다. Block 0x0010과 Tag 0x004를 정확히 기록해야 바로 다음 0x0084가 같은 block의 Hit임을 설명할 수 있습니다.
- **공식 근거 범위:** Probeklausur.pdf p18 Aufgabe 8c 접근 #1과 공식 해설 p43–44: Block 0x0010, Offset 0, Set 0, Tag 0x004, first visit Compulsory Miss, after ways [0x004].
- **Aufgabe 공통 선수지식:** Hit rate를 miss rate로 바꾸고, 여러 cache level의 AMAT를 안쪽부터 계산합니다. Cache simulation에서는 `(set, tag)`와 ‘이 block을 과거에 본 적 있는가’를 매 접근마다 기록합니다.

## 4. 선수 개념과 핵심 용어

### 8-byte Block

- **뜻:** 한 번의 miss에서 함께 cache로 가져오는 연속 8 Byte 범위입니다.
- **이 문제에서:** 0x0080~0x0087이 하나의 block이며 0x0080은 그 base입니다.

### Block Number

- **뜻:** byte address를 block size로 나눈 정수값입니다.
- **이 문제에서:** 0x0080/8=0x0010이며 Set과 Tag 계산의 입력입니다.

### 4-way Set

- **뜻:** 한 set이 서로 다른 tag를 최대 네 개까지 동시에 보유할 수 있는 구조입니다.
- **이 문제에서:** 비어 있는 Set 0의 첫 way에 0x004가 들어갑니다.

### 이 문제에 적용할 풀이 규칙

### 규칙 1. 주소를 block number로 먼저 축약

Block size가 8=2^3 Byte이므로 address의 하위 3 bit는 Offset이고 나머지가 block number입니다.

- **시험지에 남길 것:** `block=0x0080//8=0x0010`, `offset=0`을 먼저 적습니다.

### 규칙 2. Block number를 Set과 Tag로 분해

4 sets이므로 Set=block mod 4이고 Tag=block//4, 즉 address//32입니다.

- **시험지에 남길 것:** `Set=0x10 mod 4=0`, `Tag=0x10//4=0x004`를 적습니다.

### 공식 문제 전에 푸는 작은 유사 예제

**문제:** 같은 8-byte, 4-set, 4-way cache가 비어 있을 때 주소 0x00A0을 접근합니다.

**주어진 것**

- Block size=8 Byte
- Set count=4
- Set 0=empty

### 예제 단계 1. block base, number, offset을 계산합니다.

- **왜:** 0x00A0은 8의 배수라 block의 첫 byte입니다.
- **종이에:** base=0x00A0, block=0x0014, offset=0

### 예제 단계 2. Set과 Tag를 계산합니다.

- **왜:** block 0x14를 4 sets로 나눈 나머지와 몫을 사용합니다.
- **종이에:** Set=0, Tag=0x005

### 예제 단계 3. 빈 way를 확인하고 적재합니다.

- **왜:** first visit block이며 matching tag가 없습니다.
- **종이에:** Compulsory Miss; Set 0 ways=[0x005]

**예제 정답:** Offset=0, Set=0, Tag=0x005이고 Compulsory Miss입니다.

**독립 검산:** 0x00A0//32=0x005와 block 0x0014//4=0x005가 같은지 교차검사합니다.

## 5. 공식 정답 요약

**공식 결론:** Adresse=0x0080, Offset=0, Set=0, Tag=0x004, Type=Compulsory Miss.

### 시험지 문장별 정답 해설

아래는 시험지의 항목 순서를 그대로 유지합니다. 각 항목에서 원문 → 한국어 번역 → 정답 → 판단 근거 → 실제로 쓸 답을 바로 이어서 읽으세요.



### 현재 소문제의 요구·판단·답을 한 흐름으로 연결

### `8c-1`에서 정확히 답할 대상

- **시험지가 요구하는 답:** 주소 0x0080의 Offset/Set/Tag와 Hit/Miss를 구하세요.
- **이 소문제의 공식 답:** Adresse=0x0080, Offset=0, Set=0, Tag=0x004, Type=Compulsory Miss.

### 판단 1. 0x0080을 8-byte 경계로 내림해 block base와 number를 구합니다.

- **왜:** 같은 block 여부와 이후 field 계산의 공통 입력을 먼저 고정해야 합니다.
- **이 판단에서 답안지에 남길 것:** block base=0x0080; block number=0x0010

### 판단 2. block 내부 byte Offset을 계산합니다.

- **왜:** 8-byte block의 어느 byte를 요청하는지 하위 3 bit가 나타냅니다.
- **이 판단에서 답안지에 남길 것:** Offset=0x0080 mod 8=0

### 판단 3. block number 0x0010이 mapping되는 Set을 계산합니다.

- **왜:** 4 sets 중 lookup할 한 set을 정해야 way의 tag를 비교할 수 있습니다.
- **이 판단에서 답안지에 남길 것:** Set=0x0010 mod 4=0

### 판단 4. 상위 block bits로 Tag를 계산합니다.

- **왜:** Set 0 안의 여러 way 중 요청 block을 식별하려면 Tag가 필요합니다.
- **이 판단에서 답안지에 남길 것:** Tag=0x0080//32=0x004

### 판단 5. Set 0 ways와 history를 조회해 판정하고 상태를 갱신합니다.

- **왜:** Set 0이 empty이고 Block 0x0010이 first visit이므로 처음 가져오는 miss입니다.
- **이 판단에서 답안지에 남길 것:** before: Set 0 ways=['empty']; history=first visit; Offset=0, Set=0, Tag=0x004, Type=Compulsory Miss.; after: Set 0 ways=['0x004']

### 위 판단이 최종 답으로 이어지는 이유

Block size 8 Byte이므로 하위 3 bit가 block offset입니다. 4 sets이므로 다음 2 bit가 set index, 나머지 상위 bit가 tag입니다. 같은 8-byte block의 두 word는 offset 0과 4로 함께 cache에 들어옵니다.

### 답안 작성 시 주의

Word 주소가 달라도 같은 8-byte block이면 두 번째 word는 Hit일 수 있습니다.

![공식 Musterlösung/Hinweise — solution-p43.png](../../assets/solution-p43.png)

*공식 Musterlösung/Hinweise: `solution-p43.png` · Probeklausur Musterlösung und Hinweise.pdf · PDF p.43*

![공식 Musterlösung/Hinweise — solution-p44.png](../../assets/solution-p44.png)

*공식 Musterlösung/Hinweise: `solution-p44.png` · Probeklausur Musterlösung und Hinweise.pdf · PDF p.44*

## 6. 풀이 전략

1. 0x0080를 8-byte block base로 내림합니다.
2. offset=address mod 8을 구합니다.
3. set=(address//8) mod 4를 구합니다.
4. tag=address//32를 구합니다.
5. 해당 set의 최대 4 way에서 같은 tag를 찾고 없으면 처음 방문 여부로 miss type을 정합니다.

## 7. 단계별 상세 풀이

### 단계 1. 0x0080을 8-byte 경계로 내림해 block base와 number를 구합니다.

- **이유:** 같은 block 여부와 이후 field 계산의 공통 입력을 먼저 고정해야 합니다.
- **종이에 남길 것:** block base=0x0080; block number=0x0010
- **완료 기준:** 0x0080~0x0087 범위를 같은 block으로 표시했습니다.
- **막힐 때 힌트:** 주소의 하위 3 bit를 0으로 만드세요.
- **가장 흔한 첫 오류:** 4-byte word 크기로 나눠 block number를 0x0020으로 만듭니다.

### 단계 2. block 내부 byte Offset을 계산합니다.

- **이유:** 8-byte block의 어느 byte를 요청하는지 하위 3 bit가 나타냅니다.
- **종이에 남길 것:** Offset=0x0080 mod 8=0
- **완료 기준:** Offset이 0~7 범위이고 단위가 Byte임을 적었습니다.
- **막힐 때 힌트:** 0x80은 8의 배수입니다.
- **가장 흔한 첫 오류:** word index를 사용해 Offset을 word 단위 0으로만 적고 byte 기준임을 놓칩니다.

### 단계 3. block number 0x0010이 mapping되는 Set을 계산합니다.

- **이유:** 4 sets 중 lookup할 한 set을 정해야 way의 tag를 비교할 수 있습니다.
- **종이에 남길 것:** Set=0x0010 mod 4=0
- **완료 기준:** Set=0이 cache 표의 정확한 행과 연결됩니다.
- **막힐 때 힌트:** block number의 하위 2 bit가 set index입니다.
- **가장 흔한 첫 오류:** byte address 0x0080 mod 4만 쓰면서 offset bit를 제거한 이유를 설명하지 못합니다.

### 단계 4. 상위 block bits로 Tag를 계산합니다.

- **이유:** Set 0 안의 여러 way 중 요청 block을 식별하려면 Tag가 필요합니다.
- **종이에 남길 것:** Tag=0x0080//32=0x004
- **완료 기준:** Tag 0x004와 Set 0, Offset 0의 합이 원주소를 재구성합니다.
- **막힐 때 힌트:** 32=8-byte block×4 sets입니다.
- **가장 흔한 첫 오류:** block number 0x0010을 그대로 Tag라고 씁니다.

### 단계 5. Set 0 ways와 history를 조회해 판정하고 상태를 갱신합니다.

- **이유:** Set 0이 empty이고 Block 0x0010이 first visit이므로 처음 가져오는 miss입니다.
- **종이에 남길 것:** before: Set 0 ways=['empty']; history=first visit; Offset=0, Set=0, Tag=0x004, Type=Compulsory Miss.; after: Set 0 ways=['0x004']
- **완료 기준:** 공식 field/result와 after way 목록이 모두 적혀 있습니다.
- **막힐 때 힌트:** 빈 4-way set에는 replacement 없이 첫 way를 사용합니다.
- **가장 흔한 첫 오류:** 빈 way가 있다는 이유로 memory access가 필요 없다고 생각해 Hit라고 합니다.

### Cache 접근 전후 상태

- **접근 전:** Set 0 ways: ['empty']
- **주소 분해:** Adresse 0x0080, Block 0x0010, Offset 0, Set 0, Tag 0x004
- **이전 방문 기록:** first visit
- **판정:** Compulsory Miss
- **접근 후:** Set 0 ways: ['0x004']

### 12개 실제 주소와 이 접근의 유도

- **전체 순서:** `0x0080, 0x0084, 0x0100, 0x0088, 0x008C, 0x0104, 0x0090, 0x0094, 0x0108, 0x0098, 0x009C, 0x010C`
- **이 접근:** Iteration 0: A 첫 word = 0x0080 + 8×0 = 0x0080

## 8. 문제와 공식 해설의 비교·검증

- **문제가 요구하는 것:** 주소 0x0080의 Offset/Set/Tag와 Hit/Miss를 구하세요.
- **공식 해설이 제시하는 결론:** Adresse=0x0080, Offset=0, Set=0, Tag=0x004, Type=Compulsory Miss.
- **결론을 재현하는 핵심 논리:** Block size 8 Byte이므로 하위 3 bit가 block offset입니다. 4 sets이므로 다음 2 bit가 set index, 나머지 상위 bit가 tag입니다. 같은 8-byte block의 두 word는 offset 0과 4로 함께 cache에 들어옵니다.
- **검증 방법:** 위 micro-step의 `종이에 남길 것`을 순서대로 만들고 각 `완료 기준`을 확인합니다. 최종 산출물이 공식 결론과 같은지 대조합니다.
- **전제와 주의 범위:** Word 주소가 달라도 같은 8-byte block이면 두 번째 word는 Hit일 수 있습니다.
- **채택할 시험 답:** 이 가이드에서는 공식 Musterlösung의 결론을 시험 답으로 유지하며, 일반 ISA 또는 다른 구현과 달라질 수 있는 부분은 위 전제와 주의 범위에서 분리합니다.

## 9. 시험장에서 쓸 최종 답안

Adresse=0x0080, Offset=0, Set=0, Tag=0x004, Type=Compulsory Miss.

답안지에는 결과만 쓰지 말고, 7절의 중간 산출물 가운데 판정을 증명하는 식·bit field·register 상태·cycle·cache 상태를 함께 남기세요.

## 10. 자주 하는 실수와 검산 체크리스트

### 대표 실수

- Word 주소가 달라도 같은 8-byte block이면 두 번째 word는 Hit일 수 있습니다.
- 4-byte word 크기로 나눠 block number를 0x0020으로 만듭니다.
- word index를 사용해 Offset을 word 단위 0으로만 적고 byte 기준임을 놓칩니다.
- byte address 0x0080 mod 4만 쓰면서 offset bit를 제거한 이유를 설명하지 못합니다.
- block number 0x0010을 그대로 Tag라고 씁니다.
- 빈 way가 있다는 이유로 memory access가 필요 없다고 생각해 Hit라고 합니다.

### 빠른 self-check

- **회상 질문:** 0x0080와 같은 block에 속하는 다른 4-byte word 주소는 무엇인가요?
- [ ] 0x0080에서 0x0010, Offset 0, Set 0, Tag 0x004를 계산기 없이 복원한다.
- [ ] 접근 후 Set 0 ways와 seen block 목록을 각각 적는다.

## 11. 짧은 확인 문제와 전이 연습

### 개념 재구성

**문제:** 8-byte block과 4 sets에서 address로부터 Offset, Set, Tag를 얻는 정수 연산 세 개를 복원하세요.

**힌트:** mod 8, 나눈 뒤 mod 4, 전체를 32로 나눕니다.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** Offset=address mod 8, Set=(address//8) mod 4, Tag=address//32입니다.

**채점 기준**
  - mod 8
  - address//8
  - mod 4
  - address//32

</details>

### 변형 문제

**문제:** 빈 cache에서 주소 0x00A0을 접근할 때 block number, Offset, Set, Tag, Type을 모두 구하세요.

**힌트:** 0x00A0//8=0x0014입니다.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** Block=0x0014, Offset=0, Set=0, Tag=0x005, Type=Compulsory Miss입니다.

**채점 기준**
  - 0x0014
  - offset=0
  - set=0
  - tag=0x005
  - compulsory miss

</details>

### 오답 진단

**문제:** 학생이 0x0080/4=0x0020을 block number로 사용해 Tag=0x008이라고 했습니다. 최초 오류와 수정값을 쓰세요.

**힌트:** Cache block은 word가 아니라 8 Byte입니다.

<details>
<summary>정답과 채점 기준 보기</summary>

**모범 답:** Block size 8 대신 word size 4로 나눈 것이 최초 오류입니다. 올바른 block number는 0x0010이고 Tag는 0x004입니다.

**채점 기준**
  - block size 8|8 byte
  - 0x0010
  - 0x004

</details>

## 12. 근거 자료

- `[문제 출처] current:Probeklausur.pdf` — 시험 p16–18 · 공식 해설 p41–44
- `[공식 해설] current:Probeklausur Musterlösung und Hinweise.pdf` — 시험 p16–18 · 공식 해설 p41–44
- `[정확한 원문 group] 8c` — 시험 p.18 · 공식 해설 p.43, p.44
- `[소문항 범위] Probeklausur.pdf p18 Aufgabe 8c 접근 #1과 공식 해설 p43–44: Block 0x0010, Offset 0, Set 0, Tag 0x004, first visit Compulsory Miss, after ways [0x004].`
- `[개념 근거 · file-level] current:Vorlesung/Rechnerorganisation - Teil 3.pdf` — Cache, AMAT, memory hierarchy
- `[개념 근거 · file-level] current:Uebung/Lösung 11.pdf` — Cache address field와 AMAT
- `[개념 근거 · file-level] current:Uebung/Lösung 12.pdf` — miss 유형, replacement, set-associative trace

### 이 파일에서 직접 대조한 공식 이미지

- `exam-p18.png` — Probeklausur.pdf · PDF p.18
- `solution-p43.png` — Probeklausur Musterlösung und Hinweise.pdf · PDF p.43
- `solution-p44.png` — Probeklausur Musterlösung und Hinweise.pdf · PDF p.44

정확한 강의 슬라이드 한 페이지를 확정하지 못한 개념 자료는 `file-level`로 표시했습니다. 페이지 번호를 추측해서 만들지 않았습니다.
