LISTORY

[윈도우즈 시스템 프로그래밍] 메모리 계층 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 메모리 계층

LiStoryTeller 2018. 10. 12. 16:12


뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 내용 정리이다.


이번에 정리할 내용은 메모리 계층 부분이다.


YouTube 주소 : 16장. 메모리 계층



메모리 계층


컴퓨터 구조에 대한 마지막 강의이다.


이번 시간에는 메모리 계층에 대해 공부하겠다.


메모리의 종류는 어떤게 있을까? 


하드디스크 메인메모리 캐시 레지스터 등 다양하다.


우리는 이 각각의 메모리에 대한 역할을 굉장히 다르게 생각하는 경향이 있다.





메인메모리는 a기능 있다.

하드디스크는 a기능 , b 기능이 있다.


그럼 우리는 메인메모리의 a기능과 하드디스크의 a기능이 아닌, b기능을 비교하는 경향이 있다.


예를들어 하드디스크에 저장 기능이 있고, 이건 비휘발적 특성이 있다.


그럼 사람들은 메인메모리 프로그램의 실행을 담당하고, 하드디스크는 저장기능만 담당한다고 생각한다.


하지만 하드디스크도 저장 뿐만이 아니라 프로그램의 실행을 돕는 기능도 한다.


즉, 메인메모리의 실행, 하드디스크의 실행을 비교해야 하는데 메인메모리의 실행과 하드디스크의 저장을 비교하곤 한다.


우리는 지금 메모리를 관리하는 것을 공부하고자 한다.


하드디스크에서 보면 실행이라는 관점은 메모리 메니지먼트의 관점이다.


그러므로 저장이라는 관점에 너무 포커스 맞추지 말고 실행의 관점에서도 볼 필요성이 있다.



프로그램의 특성


프로그램은 실행하고 있는 곳 주변을 실행하는 경향이 있다.


그러다가 다른 번지로 점프를 하게 되면, 또 그 주변을 실행한다.


이렇게 프로그램은 지역적인 특성을 지닌다.


일단, 프로그램은 이러한 특성을 지닌다는 것을 기억해 두고, 캐시에 대해 설명해보겠다.


앞서 말한 것처럼 캐시도 하나의 메모리이다.


캐시는 다른 메모리와 비슷한 기능을 갖지만, 속도가 빠르고 비싸다는 특징이 있다.


즉, 캐시를 메인메모리로 쓰기에는 부담이 너무 크다.. 그래서 생각한 것이 캐시를 메인메모리와 CPU 중간에 두는 것이다.


캐시는 연산이 빠르므로  메인메모리에서 현재 실행중인 블럭을 캐시에 올린 뒤, CPU 에서 캐시를 통해 연산하도록 하였다.


이렇게 하니 성능이 굉장히 좋아졌다.


즉, 중간에 좀 더 성능좋은 메모리를 넣어 계층을 만들었다.


그 후 수퍼캐시가 나왔다. (이런거 없다. 그냥 가정) 이건 캐시보다 더 비싸다.


그래서 얘는 캐시보다 더 적은 양밖에 살 수 없다.


그래서 이번엔 캐시와 CPU 사이에 수퍼캐시를 두고, 현재 실행중인 영역 일부를 올리도록 하였다.


즉, 계층이 하나 더 늘어났다.


다시 말하자면 메모리들의 역할이 크게 다르지 않다.


캐시를 쓸 때엔 하드디스크 입장에서는 메인 메모리가 캐시이다. 실제로 메모리의 역할은 동일하다.


메인메모리와 하드디스크의 관계처럼 캐시와 메인메모리 등 기타 관계가 모두 동일하다.



메모리의 계층구조


CPU에서 데이터가 필요하여 메인메모리에 요청한다. 만일 메인메모리가 없을 경우 하드디스크에게 요청해서 가져온다.


이 관계를 계층구조에서 보자면 이렇다.


ALU가 캐시에게 데이터 요청한다. 없을 경우, L2 캐시에게 요청하고 또 없을 경우엔 메인메모리에게 요청한다.


그것조차 없을 경우엔 하드디스크에게 요청하여 가져온다.


그럼 하드디스크가 다시 메인메모리에게 전달.. L2에게 전달.. L1을 거쳐 결국 ALU에게 전달된다.


이런 것이 바로 계층구조이다.


만약 프로그램이 산발적이라면 이런 계층 구조가 더 부담이 될 것이다.


하지만 프로그램은 지역적인 특성을 갖기 때문에 이런식으로 계층 구조를 두는 것이 더 효과적이다.

















Comments