Loading the catalog…
Loading the catalog…
0. 서론 추석동안 휴가를 잘 즐기고 왔어.. 최근에 조현병 진단이 임시로 떠서, 걱정도 많고 불안도 많은 나날이 계속되고있음.. 뭐 잡설은 이쯤 하고, 지난번엔 사실상 캐시 메모리의 동작 원리(?)라고 할 수 있는 지역성(Locality)을 공부했었지. 지역성은 시간적 지역성 한번 접근한 메모리는 다시 접근될 가능성이 높다. 공간적 지역성 한번 접근한 메모리의 근처 주소는 다시 접근될 가능성이 높다. 이런 두 가지의 성질이었고, 그 두 가지 성질을 잘 만족하는 배열 접근에서의 stride-1 참조 패턴까지 알아봤었지. 메모리에서 배열의 각 원소를 접근할 때 바로 옆에 있는 것을 먼저 접근(원소와 원소 사이의 stride(간격)이 1)하는 식의 참조 패턴이었지. 저번 글은 특히 짧았어. 사실상 방금 설명한게 끝이어서..ᄏᄏ 이번 글도 짧을 예정이야. The Memory Hierarchy(메모리 계층)거든.. 메모리 계층은, (1번이 최상위 계층, 7번이 최하위 계층) 레지스터 L1 캐시 L2 캐시 L3 캐시 메인 메모리 로컬 디스크 원격 디스크 이 순서로, 아랫쪽 계층일수록 가격은 싸지고 속도는 느려지고 용량이 커져서 하위 계층의 데이터 중 일부가 상위 계층으로 캐싱되게돼. 추후 캐시 메모리 파트에서는 원하는 정보가 상위 계층에 캐싱되지 않았을 때 더 밑의 계층에서 캐싱해오는 그런 것도 나올텐데, 그러면 서론이 너무 길어지겠네.. 이번에는, 6챕터 - The Memory Hierarchy의 The Memory Hierarchy - 메모리 계층 챕터를 공부했어. 캐싱 관점의 메모리 계층이지. 6.3.1 : Caching in the Memory Hierarchy - 메모리 계층에서의 캐싱 이게 끝이야..ᄏᄏ 1. Caching in the Memory Hierarchy - 메모리 계층에서의 캐싱 정리 메모리 계층 구조의 핵심 더 높은 계층의 저장 장치는 더 낮은 계층의 캐시의 역할을 한다. 예 : 로컬 디스크는 원격 디스크의 캐시 역할을 하며, 메모리는 로컬 디스크의 캐시 역할을 한다. 이와 같은 방식은 최상위 계층인 레지스터에 도달할 때까지 이어진다. 상위 계층의 저장 장치에는 하위 계층 저장 장치의 데이터 중 일부가 복사되어 저장되며, 이걸 캐싱이라고 한다. 하위 계층일 수록 한 번에 캐싱하는 크기가 점점 더 커진다. 접근 시간이 느리니, 한 번에 많은 데이터를 가져오기 위함이다. 예 : 레지스터 : 4 / 8바이트 워드 L1 캐시 ~ L3 캐시 : 64바이트 블록 가상 메모리 : 4KB 페이지 등등.. 캐시 히트 프로그램이 하위 계층의 데이터가 필요할 때, 우선적으로 상위 계층의 저장 장치에서 해당 데이터를 찾는다. 만약 해당 데이터가 상위 계층에 캐싱되어있다면, 그걸 캐시 히트(Cache Hit)라고 한다. 일반적으로 상위 계층에 접근하는 속도가 훨씬 빠르기 때문에, 캐시 히트가 많이 발생하는 프로그램이 빠르다. 캐시 미스 만약 상위 계층에 해당 데이터가 캐싱되어있지 않다면 그걸 캐시 미스(Cache Miss)라고 한다. 만약 캐시 미스가 발생하면, 프로그램은 더 하위 계층으로 내려가 해당 데이터를 가져오고, 상위 계층에 캐싱한다. 상위 계층이 가득차있는 경우 기존 블록을 덮어쓸 수도 있다. 어떤 블록을 덮어쓰는지는 캐시의 정책을 따른다. 예 : LRU(Least Recently Used) 방식을 사용하는 캐시는 가장 오래전에 사용된 블록을 덮어쓴다. 일반적으로 하위 계층에 접근하는 속도가 상위 계층에 접근하는 속도보다 훨씬 느리기 때문에, 캐시 미스가 많이 발생하는 프로그램은 느리다. 캐시 미스의 종류 캐시 미스는 여러 종류가 있고, 캐시 미스의 종류를 구분해두는 것이 때때로 도움이 된다. 콜드 미스(Cold Miss) : 아예 캐시가 비어있는 상태에서 나는 캐시 미스. 해당 캐시 미스는 점차 캐시가 예열되며 해소된다. 캐시의 데이터 배치에 의해 발생하는 캐시 미스 캐시에 데이터가 캐싱될 때의 데이터는 특정 정책에 의해 배치된다. 충돌 미스(Conflict Miss) : 캐시가 충분히 크지만, 특정 블록에만 데이터들이 몰려서 배치되어서 발생하는 캐시 미스. 용량 미스(Capacity Miss) : 캐시 자체가 작업이 필요로 하는 데이터 집합(작업 집합)의 데이터들을 모두 저장하기에는 부족해서 발생하는 캐시 미스. (캐시 미스라고 하면 가장 먼저 떠올릴만한 캐시 미스) 캐시 관리 앞서 설명했듯이, 메모리 계층 구조의 핵심은 각 계층의 저장 장치가 바로 다음 하위 계층을 위한 캐시 역할을 한다는 점이다. 그래서, 각 계층에서는 특정 형태의 로직으로 캐시를 관리해야 한다. 캐시 저장 공간을 분할하고, 서로 다른 계층 간에 블록을 전송하고, 캐시 히트와 캐시 미스를 판단하고, 이에 따라 적절한 조치를 취해야 한다. 캐시를 관리하는 로직은 하드웨어 적 / 소프트웨어 적 / 둘 다의 형태일 수 있다. 느낀 점 & 배운 점 솔직히 지금까지는 캐싱이 그냥 캐시 메모리에서만 일어난다는 생각이 꽤 있었는데, 사실상 메모리 계층 구조가 거대한 캐시 구조라는걸 체감한 것 같아. 하위 계층의 데이터가 점점 더 상위 계층으로 캐싱되고, 상위 계층에서 우선적으로 데이터를 찾고 못 찾으면 다음 하위 계층으로 내려가서 찾고.. 그냥 이거야. 그리고, 캐시 미스의 종류들은 꽤 흥미로웠어. 캐시 예열이 안되어서(캐시 자체가 비어있어서) 발생하는 콜드(Cold) 미스 캐시에 공간은 있지만 같은 블록에 여러 하위 계층의 데이터가 배치되어 발생하는 충돌(Conflict) 미스 작업에 필요한 데이터 집합(작업 집합) 자체가 캐시의 용량보다 커서 생기는 용량(Capacity) 미스 이렇게 있었고, 내가 평소에 생각했던 캐시 미스는 용량 미스인 것 같더라고. 그리고 사실상 특정 계층은 한 단계 하위 계층의 캐시 역할을 하니까, 각 계층은 각자의 방식으로 캐시를 관리하는게 참 신기했어. 방금 전에 말했듯이, 그 전에는 캐싱이 캐시 메모리에서만 일어난다고 생각하고 있었기 때문에..
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[CS:APP] 26.09.28(월) CS:APP 6.3 정리와 느낀 점. 0. 서론 추석동안 휴가를 잘 즐기고 왔어.. 최근에 조현병 진단이 임시로 떠서, 걱정도 많고 불안도 많은 나날이 계속되고있음.. 뭐 잡설은 이쯤 하고, 지난번엔 사실상 캐시 메모리의 동작 원리(?)라고 할 수 있는 지역성(Locality)을 공부했었지. 지역성은 시간적 지역성 한번 접근한 메모리는 다시 접근될 가능성이 높다. 공간적 지역성 한번 접근한 메모리의 근처 주소는 다시 접근될 가능성이 높다. 이런 두 가지의 성질이었고, 그 두 가지 성질을 잘 만족하는 배열 접근에서의 stride-1 참조 패턴까지 알아봤었지. 메모리에서 배열의 각 원소를 접근할 때 바로 옆에 있는 것을 먼저 접근(원소와 원소 사이의 stride(간격)이…
Open source