관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] iOS 메모리 기초 개념 - virtual memory, dirty memory, clean memory, compressed memory, swapped memory, resident memory 이해하기 본문

iOS 응용 (swift)

[iOS - swift] iOS 메모리 기초 개념 - virtual memory, dirty memory, clean memory, compressed memory, swapped memory, resident memory 이해하기

jake-kim 2023. 12. 27. 00:22

virtual memory 개념

  • 운영체제에서의 가상메모리를 의미
  • 하드웨어 RAM (맥북에서의 16G 등)을 물리적 RAM이라고 한다면, 이 16G의 부족한 공간을 위해서 디스크 공간도 같이 사용하는 방법
    • process가 계산을 하다가 메모리에서 데이터를 찾는데, 이 때 virtual memory라는것을 두고 virutal memory에서는 RAM과 disk공간을 바라보는 것
    • virtual memory 부분을 적절한 단위로 나누는데, 그것을 page라고 명칭

https://en.wikipedia.org/wiki/Virtual_memory

  • 중요한 용어
    • page out: physical메모리에 page에 대응하는 데이터가 없어서, physical메모리에 있는 어느 한 page와 disk에 있는 page랑 swap해야하는데, 이 때 physical memory에서 사용하지 않은 공간을 내준다는 의미로 page out이라 명명
    • page in: 위에서 page out되면서 반대로 디스크 입장에서는 swap 될때 보내는 page를 의미

https://core.ewha.ac.kr/publicview/C0101020140509151648408460?vmode=f

dirty memory, clean memory 개념

  • clean memory: page out 될 수 있는 공간을 의미
    • 아직 physical memory에서 사용되지 않아서 디스크로 언제든지 보낼 수 있어 여유공간을 의미
  • dirty memory: page out 될 수 없는 이미 수정된 데이터 영역

ex) 배열을 선언하고 특정 인덱스에 값을 할당하면, 그 인덱스 영역은 이미 사용했으므로 page out이 불가능한 영역

https://developer.apple.com/documentation/xcode/reducing-your-app-s-memory-use

Compressed memory 개념

  • virtual memory를 사용하면 결국 디스크까지 가느라 I/O 작업으로 인하여 속도가 저하될 수 있는데, WWDC 2013에서 발표한 compressed memory는 디스크까지 굳이 가지 않고 RAM을 먼저 최적화한것
    • 하드웨어의 제한 없이 소프트웨어로 접근한 애플
  • 메모리 압축을 위해 WKdm 알고리즘을 사용
    • WKdm 알고리즘은 32-bit data 16개로 이루어진 디렉토리와 압축된 결과를 쓸 메모리 공간만 있으면 압축할 대상의 크기에 상관없이 압축을 수행
  • swap기준은 LRU 사용
  • 압축률은 50% 이상이며 하나의 페이지를 압축하는데, 백만분의 초 수요
  • 구체적인 내용은 애플에서 제공한 pdf 참고 - https://www.apple.com/media/us/osx/2013/docs/OSX_Mavericks_Core_Technology_Overview.pdf

swapped memory

  • physical memory가 가득 찼지만 더 많은 공간이 필요한 경우, 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간

resident memory (resident size)

  • RAM에 올라온 데이터들을 의미하여, 실제로 사용되어지고 있는 데이터들을 의미

추천할 다음 글) virtual size, dirty size, swapped size 등에 관해 분석해보고 싶은 경우, Instrument의 VM Tracker를 사용하면 되는데, 이 방법은 다음 포스팅 글 참고

 

* 참고

- https://stackoverflow.com/questions/5176074/what-do-dirty-and-resident-mean-in-relation-to-virtual-memory?rq=4

- https://www.donghyun53.net/os-x-mavericks%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%95%95%EC%B6%95-compressed-memory/

- https://www.apple.com/media/us/osx/2013/docs/OSX_Mavericks_Core_Technology_Overview.pdf

- https://developer.apple.com/documentation/xcode/reducing-your-app-s-memory-use

- https://core.ewha.ac.kr/publicview/C0101020140509151648408460?vmode=f

- https://en.wikipedia.org/wiki/Virtual_memory

Comments