바이트 주소 지정과 워드 주소 지정 가능

바이트 주소 지정과 워드 주소 지정의 차이를 이해하려고합니다.

16KB 용량의 4 방향 집합 연관 캐시 메모리 유닛은 8 워드의 블록 크기를 사용하여 구축됩니다. 워드 길이는 32 비트입니다. 물리적 주소 공간의 크기는 4GB입니다.

캐시의 세트 수 $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $

단어 주소 지정이 사용되는 경우 :

블록 오프셋 $ = 3 \ bits $

PAS가 $ 4 \ GB $ 이므로 총 주소 수 = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $

따라서 총 주소 비트 $ = 30 \ bits $

주소 구조 :

태그 비트 : $ 20 \ bits $
세트 비트 : $ 7 \ bits $
블록 오프셋 비트 : $ 3 \ bits $

이제 CPU가 특정 단어의 세 번째 바이트입니다.

  1. 캐시 컨트롤러는 $ 7 \ bits $ set-field를 사용하여 집합으로 인덱싱하고 그런 다음 상위 $ 20 \ bits $ 태그 필드를 모든 $ 4 $ 블록입니다. 일치하는 항목이 있으면 캐시 적중이 발생하고 $ 3 \ bits $ 블록 오프셋이 낮아져 $ 8 $ 단어. 그런 다음 CPU는 단어에서 세 번째 바이트를 추출하고 작업을 수행합니다.
  2. 태그가 일치하지 않으면 캐시 미스가 발생하고 메모리 읽기 신호가 전송되고 참조의 공간적 지역성으로 인해 단어가 캐시로 전송됩니다.

CPU가 바이트 주소 지정이 가능한 경우 :

총 주소 비트 $ = 32 $

주소 구조 : 태그 비트 : $ 20 \ bits $
세트 비트 : $ 7 \ bits $
블록 오프셋 비트 : $ 5 \ bits $

CPU가 3 번째 바이트에 액세스하려는 경우 단어 :

  1. 어 드레서 블 단어의 1 단계와 동일하지만 이제 CPU는 하위 $ 2 \를 사용하여 단어의 세 번째 바이트를 직접 지정할 수 있습니다. bits $ 바이트 오프셋. 하지만 어떻게 될지 혼란 스럽습니다. CPU 레지스터 크기는 워드 주소 지정과 유사하게 1 워드의 너비를 가지므로 블록의 8 개 워드 중 한 워드가 레지스터로 전송됩니다. 그러나 어떻게 될까요? 여기서 “바이트 추출”단계가 더 쉬울까요? 그리고 실제로 단어 주소를 지정하는 경우 왜 바이트 주소 지정이라고 부르나요?
  2. 단어 주소 지정의 2 단계와 동일합니다. 데이터 블록이 전송됩니다. 캐시 누락시 메모리에서 캐시로.

또한이 answer 는 실제 메모리가 항상 바이트임을 나타냅니다. 이제 메모리의 주소와 CPU 아키텍처의 주소의 차이는 무엇입니까?

답변

단어 주소 지정 즉, 프로세서의 주소 버스에있는 라인 수가 단어 자체의 비트 수보다 적습니다.

4 바이트 단어가 있다고 가정하겠습니다 (32 비트 주소 공간)

이 머신이 바이트 주소 인 경우 ab le, CPU의 주소 버스는 메모리의 각 바이트에 액세스 할 수있는 32 개의 라인을 갖게됩니다.

이 머신이 워드 주소 지정이 가능한 경우 CPU의 주소 버스는 30 개의 라인 ( $ 32-log_ {2} 4 = 30 $ ), 메모리 만 4 바이트의 단어 / 덩어리로 표시되며 단어 크기의 배수 인 주소에서도 사용됩니다.

이제 CPU에 특정 주소에서 바이트를 가져 오도록 요청하면 먼저 주소의 최하위 비트 2 개를 삭제하고 (0 “s로 덮어 쓰는 것을 의미합니다.) 단어를 가져옵니다. 결과 주소에서 2 개의 최하위 비트를 오프셋으로 사용하여 바이트를 반환합니다.

이로 인해 CPU가 주소를 수정하고 처리하는 데 더 많은 시간을 소비해야하기 때문에 메모리 액세스 시간이 증가합니다. 하지만 주소 버스 라인의 감소로 인해 회로의 복잡성이 줄어들 기 때문에 하드웨어 비용을 줄이는 데에도 도움이됩니다.

그러나이 오버 헤드는 바이트 주소 지정이 가능한 시스템에서 발생하지 않으므로 “바이트 추출 “이 더 쉽습니다.

댓글

  • 저는 ' 당신이 말하는 것을 이해합니다.하지만 무엇을 ' 바이트 주소 지정의 경우 발생합니까? CPU에 워드의 3 번째 바이트가 필요하다고 가정합니다. 최소 2 개의 중요한 비트가 10으로 설정된 32 비트 주소를 전송합니다. 티?하지만 1 워드 너비의 레지스터를 사용한다는 점에서 바이트를 어떻게 저장할까요? 이 경우 CPU도 ' 캐시에서 단어를 가져 와서 여기에 저장하지 '의 레지스터에 저장하지 않습니까?
  • 첫 번째 질문 : 바이트 주소 지정 CPU에는 기록 할 데이터의 크기에 따라 별도의 쓰기 명령어가 있습니다. 하나는 바이트 용, 하나는 더블 바이트 용, 하나는 쿼드 바이트 용, 다른 하나는 워드 용 등 (실제로 모든 CPU에는 지원되는 다양한 데이터 크기에 대해 각각 별도의 쓰기 명령이 있습니다) 바이트 쓰기와 관련하여 쓸 바이트는 일반적으로 레지스터의 8 LSB에 저장되고 바이트에 대한 쓰기 명령이 실행됩니다. 이로 인해 레지스터의 8LSB 비트 만 오직 데이터 버스에로드되고 메모리 주소의 1 바이트 만 수정됩니다.
  • 나는 ' 두 번째 질문을 이해하지 못합니다. 자세히 설명해 주시겠습니까?
  • 바이트 주소 지정이 가능한 머신에서 바이트를 읽는 경우에도 똑같은 일이 발생한다고 생각합니다. 예를 들어, '는 ' 문자 배열 char arr[10] 및 CPU가 있다고 가정합니다. 세 번째 문자, 즉 arr[2]를 읽으려고합니다. 그런 다음 32 비트 주소를 사용하여 바이트에 액세스 한 후 레지스터의 8LSB에 저장합니다. 그러나 주소 지정이 가능한 단어의 경우 CPU는 먼저 3 번째 바이트가 속한 단어의 주소를 계산하고 (즉, 2 개의 LSB를 0으로 덮어 쓰기) 그 안에있는 단어를 가져옵니다. ' s 등록. 그 후 필요한 바이트를 얻기 위해 바이트 오프셋을 사용합니다. 맞습니까?
  • 감사합니다. 미래의 독자에게 도움이 될 수 있도록이 모든 것을 원래 답변에 모아 두시기 바랍니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다