[Jungle][TIL]240402 캐시 메모리와 지역성(locality) | 프로세스와 쓰레드 등등

somi·2024년 4월 2일
0

[Krafton Jungle]

목록 보기
15/68

캐시 메모리를 사용하면 컴퓨터 시스템의 성능이 왜 향상되는지 지역성(Locality)의 개념을 포함하여 설명하시오

캐시 메모리 => CPU와 메모리의 속도 차이로 인한 병목 현상을 완화하기 위해 사용


캐시 메모리(Cache memory)


= 주기억장치와 CPU 사이에 위치. 메모리 계층 구조에서 가장 빠름. 캐시 메모리를 사용하면 주 기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리 속도가 향상된다.

지역성(Locality): 데이터의 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것
짧은 시간 동안 제한된 주소 공간의 일부만 참조되는 현상

=> 기억장치 내의 정보를 균일하게 접근하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성
CPU가 기억 장치의 특정 부분에 위치한 데이터나 프로그램 코드를 직접적으로 액세스하는 것
-> 빠른 접근 시간

  • 시간적 지역성(Temporal Locality): 한 번 접근된 데이터는 가까운 미래에 다시 접근될 가능성이 높다.
    예) 루프 내에서 반복적으로 사용되는 변수

  • 공간적 지역성(Spatial Locality): 메모리의 특정 주소에 접근한 후 그 주변 주소에 있는 데이터에 접근될 가능성이 높다. -> 배열, 연속적인 메모리 블록에 접근할 때 종종 발생

  • 순차적 지역성(Sequential Locality): 분기가 발생하지 않는 한 명령어는 메모리에 저장된 순서대로 인출/실행된다.

    *** 부정확할 수도 있음. 틀렸으면 댓글로 알려주세요)

  • no locality: 프로그램이 메모리에 접근할 때 데이터가 무작위로 분포되어 있음 -> cache에 저장된 데이터를 활용하기 어려움 -> cache hit ratio가 낮을 것

  • moderate locality: 프로그램이 메모리에 접근할 때 특정한 데이터 집합에 반복적으로 접근하는 경향.

  • strong locality: 프로그램이 메모리에 접근할 때 특정한 데이터 집합에 대해 강하게 반복적으로 접근 -> 대부분의 데이터가 cache에 저장되어 있을 가능성 -> hit ratio가 매우 높음


간단) 캐시 메모리의 매핑 프로세스 (Mapping process)

  • 직접 매핑 (Direct mapping)
    메모리 주소와 캐시의 순서를 일치시킨다. 지정된 캐싱 라인으로만 매핑. 메모리의 특정 블럭은 특정 캐싱 라인에만 저장. 구현이 빠르지만, 충돌로 인한 잦은 스와핑 발생할 가능성이 높아 성능이 제한될 가능성

  • 연관 매핑 (Associative mapping)
    순서를 일치시키지 않는다.
    필요한 메모리 값을 캐시의 어디든지 저장
    찾는 과정이 복잡하고 느리지만 충돌이 적고 필요한 캐시 위주로 저장하기에 적중률은 높음

  • 집합 연관 매핑(Set-Associative Mapping)
    직접 매핑과 연관 매핑의 장점만 취함
    순서를 일치시키고 편하게 저장하되 일정 그룹을 두어 그 그룹 내에서 편하게 저장시킴


프로세스와 쓰레드


  • 프로세스(Process):
    프로그램이 실행되서 돌아가고 있는 상태, OS가 메모리 등의 필요한 자원을 할당해준 실행중인 프로그램
  • 쓰레드(Thread)
    프로세스가 할당 받은 자원을 이용하는 실행의 단위
  • 프로세스: 독립적으로 실행되는 프로그램의 인스턴스, 자체적인 주소 공간, 메모리, 데이터 스택 및 다른 시스템 자원을 갖는다.
  • 쓰레드: 프로세스 내부의 실행 흐름 단위, 프로세스의 자원과 주소 공간을 공유하면서 실행된다
  • 각 쓰레드는 독자적인 스택 메모리를 갖고, 쓰레드는 프로세스 내에서 각각 스택만 할당받고 Code, data, heap 영역은 공유한다.
    -> 프로세스 내의 주소 공간이나 자원들은 같은 프로세스 내의 쓰레드끼리 공유하며 실행된다.

자원 공유)

  • 프로세스: 각 프로세스는 독립적인 메모리 공간과 시스템 자원을 가지므로, 프로세스 간 자원 공유는 IPC(Inter-Process Communication) 매커니즘을 통해 이뤄진다.
  • 쓰레드: 같은 프로세스 내의 쓰레드들은 코드, 데이터 및 시스템 자원을 공유한다.

Inter-Process Communication(IPC)

프로세스들 간의 의사소통. 서로 데이터를 주고 받는 행위/ 방법/ 경로 -> shared memory / message passing / semaphore




Single Thread

프로세스 내에서 하나의 메인 스레드 작업만 처리 -> 작업을 차례대로 진행할 수 밖에 없음

Multi Thread



둘 이상 쓰레드를 동시에 실행시키는 기술
문맥 교환(context switching) 을 통해서 각 스레드의 작업을 조금씩 처리하는 방식

single thread vs. multi thread

  • single thread
    장점) -> context switching 작업 x, 공용 자원에 대한 접근 제어/자원 접근에 대한 동기화 신경 안써도 됨.
    단점) 연산량이 많으면 그 작업이 끝나야 다른 작업을 수행할 수 있음

  • Multi thread
    장점) 사용자에 대한 응답성이 증가 -> 프로그램의 일부분이 중단되거나 긴 작업을 수행해도 프로그램이 계속 수행되어 사용자에 대한 응답성 증가!
    프로세스 내 자원/메모리 공유 -> 메모리와 시스템 자원 소모 감소
    프로세스의 context switching과 달리 Thread의 context switching은 캐시 메모리 비울 필요가 없어 빠르다.
    다중 cpu -> 병렬성 증가
    단점) 오버헤드가 클 수 있다.
    동기화가 필수적 -> 쓰레드는 데이터와 힙 영역 공유함


참고)
https://blog.skby.net/%EC%A7%80%EC%97%AD%EC%84%B1-locality/
https://zu-techlog.tistory.com/135
https://dar0m.tistory.com/233
https://velog.io/@gparkkii/ProgramProcessThread

profile
📝 It's been waiting for you

0개의 댓글