크래프톤 정글 4DAY 파이썬의 시선 및 cs 깊이 다지기
함께 보면 좋을 링크
- 파이썬의 참조 방식은 이상하다?
객체로 바라보는 세상 이야기 - 캐시 메모리 설계의 기초
캐시 메모리와구조값을 참조하는 방식에 대해
c언어나 cs를 깔짝거린 사람이라면, 아마 call by reference와 call by value를 한번 즈음 들어봤을 것이다.
이 두개는 어떻게 참조를 할 것인가에 대한 이야기인데, call by value는 말 그대로 값을 통해서 무언가를 읽어오겠다는 뜻이고 reference는 주소값을 통해 그 안에 있는 무언가(데이터)를 꺼내온다는 것이다.call by object ref
나처럼 c계통의 언어를 배운 사람들이라면 파이썬 문법 중 일부가 말이 안된다고 여겨진다거나, 왜 이 기능이 없는가에 대한 의문이 들 수 있다
예를 들어 python에는 void def가 없고 정 void def를 쓰고 싶다면 자기 자신을 호출하는 방식으로 진행이 되어야한다는 게 상당히 이상하게 느껴진다.
바로 그것이 파이썬은 call by object ref 즉 주소마저 object화 사물화 하여 해석하고 바라보기 때문이다.캐시 메모리와 구조
팀원 중에 한분이신 나한님께서 신선한 질문을 올려주신 덕에 니나농님의 지식을 1만큼 get해왔다.
저 게시물이 니나농님이 추천해주신 게시물인데 대충 cache가 어떻게 발달했는지와 더불어 왜 저딴 식으로 캐쉬를 설계해야만 하는지에 대해 설명을 해주는 글이다.
당연한 말인데 솔직히 저걸 다 이해하려면 아마 정글 끝날 때 즈음은 최소한 되어야할 거 같고, 지금은 대충 아 캐시가 이따위로 생겨서 이렇게 굴러가는구나 정도를 가져가기로 했다.cpu의 병목현상의 원인
3일차 til에서도 언급하였지만, 병목은
dram
이나하드디스크
와 같은 입출력장치를 쓰는 동안 cpu는 하나의 일 밖에 처리하지 못한다는 기본적인 원리에서부터 출발한다.
그래서 사람들은 이러한 문제를 해결하기 위하여 임시적이고 지역적인 메모리인 캐시를 탄생시켰고, 점점 컴퓨터의 성능이 발달함에 따라 캐시 역시 세분화 되어 현재에는 l1,l2,l3를 기본으로 하고 스마트 캐시와 같은 개념들까지 끌어오게 되었다.캐시 설계에 필요한 정보
기본적으로 캐시는 경제적으로 개개개개개비싸고 작다.
그래서 자주 쓰여야할 정보들을 걸러서 놓아야만 하는데, 그런 필터링의 기준이 바로 지역성이다.캐시 인터페이스 설계시 필요한 자료
우리가 함수를 만들 때에도 이 함수에게 어떤 매개변수를 전달해주냐 그리고 반환 값을 어떻게 설정해주냐에 따라 속성이 완전히 뒤바뀌듯이, 인터페이스를 설계할 때에도 무엇을 전달해야하는지가 굉장히 중요하다.
캐시는 위에서 언급하였듯 굉장히 작은 크기를 가지고 있으면서, 나름대로 빠르다는 특징을 가지고 있기 때문에 이것을 설계할 때에도 데이터를 찾고 추가하는 것 외에도 과연 공간이 다 차버렸을 떄 어떤 데이터로 대체할지에 대한 고민도 더해야하는 것이다.캐시의 위치
캐시 라인을 처음 들었을 때 제일 이해가 안갔던 부분은
내가 본 책에서는 분명히 캐시가 cpu와 dram의 속도간 차이를 메꾸어주기 위해 존재한다고 했는데
왜 자료들을 찾아보면 캐시의 위치가 내가 생각하는 곳에 없는 것 같은 느낌이 들지라는 것이었다.
만약 나처럼 생각한 사람이 있다면, 책을 잘 쫓아왔다는 증거다.
책에서는 캐시가 cpu와 dram사이 어딘가에 있어야할 것 같지만, 사실 그건 하나의 예시일뿐 병목현상이 일어날 가능성이 있는 곳이라면 어디든지 캐시는 존재할 수 있다.캐시 라인과 캐시 블록
캐시 라인에는 주기억장치 단어에 대한 부분 이외에도 태그와 제어비트에 대한 정보들도 담고있다.
또한, 제어 비트라고 한다면 캐시가 적재된 이후 수정된 적 있는지 등의 내용이 실리게 된다.캐시 블록
캐시 블록에는 제어비트와 태그 즉 이 정보가 어떻게 분류된 것인가와 캐시의 적재 이후 수정 여부가 들어가지 않는다.
대신 캐시 블록에는 주소지정과 관련된 정보들이 들어가며, 이것들이 모여 라인이 된다.캐시 라인
캐시 블록의 정보 및 제어비트와 태그의 내용 역시 함께 들어간다는 차이가 있다.
캐시 컨트롤러
만약 정보가 들어왔을 때 정보를 삭제하거나 무언가 정보에 대한 변경을 시도해야하는 상황(메모리 꽉참)이라면 lru알고리즘과 같은 페이지 교체 알고리즘을 사용해야한다.
그리고 이러한 부분을 담당하는 주체는 캐시 컨트롤러라는 하드웨어이다.
그러나 프로그램의 복잡도에 따라 간혹 소프트웨어도 함께 작업을 도울 수 있다.
댓글남기기