cs/운영체제

명품 운영체제 8장 메모리 관리 - 메모리 계층 구조와 메모리 관리 핵심

보름달빵 2024. 11. 18. 17:43

메모리 계층 구조 

메모리

 

CPU가 실행할 코드와 데이터를 저장하는 장치를 메모리 라고 한다.

포괄적으로 컴퓨터 시스템 내에 모든 기억 공간들을 지칭한다. 

 

 

메모리 계층 구조 

 

컴퓨터 시스템 내에서 메모리는 매우 다양한 곳에 존재한다. cpu레지스터, 메인 메모리, 보조 기억 장치, 캐시 메모리등의 기억 장치들은 읽기 쓰기의 속도와 용량에 따라 계층 구조를 이루고 있는데 이것을 " 메모리 계층 구조 "라고 한다. 

 

 

 

출처: https://namu.wiki/w/%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EA%B3%84%EC%B8%B5%20%EA%B5%AC%EC%A1%B0

 

 

레지스터에서 하드 디스크로 갈수록 용량은 커지고,  가격은 싸지며, 읽기쓰기 속도는 느려진다. 

 

  • 캐시메모리 

이미지 출처: https://kyungtaek.tistory.com/100

 

  • 캐시 메모리는 더 빠른 cpu의 작업 처리를 위해 도입된 저장장치이다. 
  • 캐시 메모리가 있는 컴퓨터에서 cpu는 캐시로부터만  코드와 데이터를 읽어서 실행하기 때문에, 코드와 데이터들은 메인 메모리에서 캐시로 복사 되어야한다.  
  • 캐시 메모리는 메인 메모리로 부터 "당장 실행" 을 위해 필요한 코드와 데이터를 복사하여 저장해두는데, 사용자 프로그램과 운영체제 커널을 구분하지 않고 복사한다. 
  • 캐시 메모리는 응답 속도와 위치에 따라 여러 레벨로 나누어 사용된다. 
  • 멀티 코어환경의 경우, cpu에는 코어별로 내부에 L1,L2 캐시를 두고 모든 코어들이 공유하는 L3 캐시를 가지고 있다. 

 

메모리 계층 구조의 필요성 

 

 cpu의 명령 처리 속도에 비해, 메모리의 읽기쓰기 작업은 매우 느리다. 따라서 cpu는 메모리로 부터 명령과 데이터를 가져오는 메모리 엑세스 시간을 단축 시키기 위해 메인 메모리 보다 더 빠른 캐시 메모리를 cpu와 메인 메모리 사이에 설치하여 사용하였다. (off-chip 캐시) 

 

그런데 cpu의 처리 속도가 더욱 빨라지며 더 빠른 메모리가 필요하였고, 그 결과 캐시 메모리를 cpu 내부에 넣어 cpu의 메모리 엑세스 시간을 단축하였다. (on-chip 캐시) 

 

 

 

메모리 계층구조와 프로그램 실행과정 

 

 

응용 프로그램의 실행은 보조기억장치(하드디스크)에서 메인 메모리로 실행파일(또는 필요한 코드나 데이터)를 적재하는것으로 시작한다. 

 

  • 응용프로그램 실행을 위한 코드와 데이터가 복사되는 경로 

       CPU ← L1/L2 ←  L3  ←  메인 메모리 ← 하드디스크  

 

 

캐시가 없는 컴퓨터에서 cpu는 메인 메모리로 부터 실행을 위해 필요한 코드와 데이터를 가져오지만, 

캐시가 있는 컴퓨터에서 cpu는 실행을 위한 코드와 데이터를 캐시메모리에서만 확인하기 때문에 반드시 메인 메모리에서 캐시 메모리로 필요한것들을 복사해두어야한다. 

 

 

메인 메모리와 캐시

 

캐시가 있는 컴퓨터에서 CPU는 캐시 메모리로부터만 프로그램의 코드와 데이터를 읽고 실행한다고 했다. 

하지만 캐시는 속도가 빠른 만큼 가격이 비싸고, CPU 내부에 위치하기 위해 크기에 제한이 있다. 따라서 저장용량은 몇KB 밖에 되지 않기 때문에, 당장 필요한 코드와 데이터만을 저장할 수 있다. 

 

그런데 지금 당장 cpu가 실행해야할 코드와 데이터가 캐시 메모리에 없는 것을 " 캐시 미스 " 라고 한다. 

 

캐시 미스 상황이 발생하면 캐시메모리의 단계를 내려가며 아래에 있는 캐시에서 원하는 데이터값이 있는지 확인한다. 

L1/L2 그리고 L3 캐시에도 값이 없다면 메인 메모리로 부터 다시 복사하는 과정이 필요하다. 

 

또한, 실행중인 스레드에서 수정된 데이터는 다시 L3캐시나 메인 메모리에 기록 되어야한다.

 

 

메인 메모리와 보조기억장치 

 

메인 메모리의 용량이 부족해지는 경우, 메인 메모리에 적재된 코드나 데이터의 일부분을 하드디스트나 SSD에 저장하고 메인 메모리에 빈 공간을 확보한다. 

이런식으로 메인 메모리 영역을 보조 기억 장치까지 확장하는 기법을 " 가상 메모리 " 라고 한다. 

 

 

 

 

메모리 계층화의 성공 이유, 참조 지역성 

캐시는 저장공간이 적기때문에 당장 실행할 코드와 데이터 만을 저장할수 있다. 캐시 미스가 발생하면, 다음 코드나 데이터가 캐시로 복사되는 시간동안 CPU는 기다려야한다. 

그렇다면 캐시가 아무리 빠르더라도 잦은 캐시 미스로 인하여 오히려 프로그램의 성능이 나빠지진 않을까? 

 

" 메모리를 계층화 하는것이 정말 효율적일까? " 

 

결론부터 말하자면, 메모리 계층화는 효율적이다

 

그 이유는" 참조 지역성  "이라는 일반적인 프로그램의 실행 특성에 있다. 

 

참조 지역성이란 코드나 데이터등이 아주 짧은 시간 내에 다시 사용되는 것을 말한다. 예를들어 반복문의 경우, 짧은 시간내에 동일한 변수들이 반복적으로 사용된다. 이런 코드나 데이터를 캐시에 저장하여 반복문을 수행한다면 매우 빠른 속도로 실행결과를 얻을 수 있다. 이러한 참조 지역성의 종류에는 공간 지역성과 시간 지역성이 있다. 

 

  • 공간 지역성

CPU가  접근한 메모리 공간 근처를 접근하려는 경향 

ex) 프로그램이 실행될때 관련있는 데이터들은 서로 근처에 모여있다. 

 

  • 시간 지역성 

CPU가  최근에 접근했던 메모리 공간에 다시 접근하려는 경향 

ex) 프로그램 내에서 선언된 변수는 한번만 사용되는 경우 보단, 여러번 사용되는 경우가 더 많다 

 

 

✔️ 결론적으로 빠른 캐시를 사용함으로써 얻는 이득이,  캐시미스로 인한 오버헤드보다 훨씬 크다 

 

 

 

 

 

 

 


 

 

🚨 참고한 사이트

메모리 계층 구조 이미지

https://namu.wiki/w/%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EA%B3%84%EC%B8%B5%20%EA%B5%AC%EC%A1%B0

캐시 메모리 이미지 참고

https://kyungtaek.tistory.com/100