ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SW 정글 16일차] Locality는 무엇일까
    기타/SW 사관학교 정글 2021. 8. 17. 23:19

    오늘은 컴퓨터 시스템 3판을 읽으면서 Locality라는 말을 접하게 되었고 설명이 없어 구글링을 하며 찾아본 내용들을 정리하려고 한다.

    1 ~ 4주차는 알고리즘과 자료구조 공부기간이지만 1주일마다 컴퓨터 시스템 3판 읽을 분량을 정해준다.

    엄청 어렵거나 세부적으로 파고드는 부분들이 아니여서 내가 이전에 배운 OS 지식을 리마인드하고 locality같은 개념이 확실히 잡히지 않은 용어를 정리해보는 시간으로 생각하며 책을 읽었다.

     

     

    1. Locality란?

    프로그램은 항상 메모리의 특정 주소를 찾아가서 데이터를 읽어오고 특정 주소로 찾아가서 데이터를 쓰는 행위들이 기본이다.

    여기서 locality라는 개념이 적용되는데 locality는 프로그램이 data나 instructions를 사용하려고 할 때, 이전에 해당 data나 instructions에 접근하기 위해 사용했었던 비슷하거나 동등한 주소를 이용한다는 것이다.

     

    어떠한 블로그에서 locality를 조금 쉽게 이해할 수 있는 좋은 예시가 있어 나만의 예시로 설명해보려고 한다.

    토요일 오후, 오랜만에 친구 A를 만나려고 약속을 잡았다.

    친구 A는 oo공원을 가고싶다는 말을 했고 나는 그에 맞춰 계획을 세웠다.

     

    - oo 공원 근처 맛집에서 밥 먹기

    - oo 공원 근처 카페에서 커피 테이크 아웃하기

    - oo 공원 가기

    ...

     

    이러한 실생활 예시를 다시 컴퓨터 구조에 가져오면  CPU가 Memory로부터 Data나 instructions를 가져오는 데 있어서 가장 최근 영역이나 가장 접근하기 가까운 영역에 Data나 instructions를 저장하면 효과적일 수 있다는 것이고 이것이 locality 개념이다.

    출처: https://nali21c.github.io/2018/09/03/locality/

     

     

     

    2. Locality의 종류

    locality에는 Temporal localityspatial locality가 있다.

    1) Temporal locality

    temporal locality는 최근에 참조되었던 것(data, instructions, ...)은 가까운 미래에 다시 참조될 가능성이 있다는 것이다.

    프로그램 실행시 한번 접근이 이루어진 주소의 메모리 영역은 자주 접하게 된다는 프로그램 성격을 표현한 것이라고 볼 수 있다.

    temporal locality에는 순환(알고리즘이나 함수가 수행도중에 자기 자신을 다시 호출하여 문제를 해결하는 것), Sub program, Stack 등이 있다.

     

    2) Spatical locality

    spatical locality는 근처 주소들을 참조하는 것들(data, instructions..)은 비슷한 시간대에 같이 참조되는 경향이 있다는 것이다.

    위 그림이 메모리를 의미하고 숫자가 주소를 의마한다고 생각하고 현재 4번 주소값이 참조되었다.

    그러면 spatical locality에 따르면 4번 근처 주소인 3번과 5번이 비슷한 시간대에 참조될 확률이 높다는 것이다.

    프로그램 실행시 접근하는 메모리의 영역은 이미 접근이 이루어진 영역의 근처일 확률이 높다는 프로그램 성격을 표현한 것이라고 볼 수 있다.

    patical locality에는 Sequential processing, Array 등이 있다.

     

     


    [오늘의 나는 어땠을까?]

    오늘은 동료들의 도움을 가장 많이 받은 날인듯 싶다.

    알고리즘 문제를 풀면서 도저히 접근방법이 떠오르지 않으면 인터넷에서 풀이코드가 아닌 해석을 보며 코드를 직접 짜보고 되지 않으면 풀이 코드를 본다.

    하지만, 풀이 코드까지 보고도 이해가 되지 않는 문제들이 이번 주에 3~4문제 정도됐다.

    그래서 문제를 푼 동료들을 찾았고 동료들은 자신의 시간이 부족할 수도 있지만 나에게 친절히 알려줬다.

    알려준 방식대로 코드를 짜고 틀렸을 때 다시 물어봐도 어떠한 점이 문제인지 잘 알려주었다.

     

    이러한 점이 내가 정글에 들어온 이유 중 하나이고 정글의 장점이라고 생각한다.

    나 또한 동료들에게 도움을 주며 성장을 할 수 있고 내가 모르는 부분은 동료에게 도움을 받으며 성장을 할 수 있다.

    성장의 기회가 무한히 제공되고 나는 그 기회를 잡아 어제의 나보다 성장해나가려고 한다.

    '오늘 뭐 했지?'라는 느낌을 받은 날들이 있었지만 돌이켜 보면 그 날에도 어제의 나에 비교해서 얻은 것이 있다.

     

    너무 낙관적이지도 않고 너무 부정적이지도 않은, 어느정도 나에게 자극과 힘을 줄 수 있는 생각을 하는 것이 중요한 것 같다.


    <참고 자료>

    컴퓨터 시스템 3판 (Randal E. Bryan, David R. O'Hallaron 지음 | 김형신 옮김)

    https://nali21c.github.io/2018/09/03/locality/

    https://programming119.tistory.com/84

    https://www.youtube.com/watch?v=3XmALGPW0zA 

     

    댓글

Designed by Tistory.