CS

3.2 메모리

gogi masidda 2024. 9. 15. 16:17

'면접을 위한 CS 전공지식 노트' 책을 보며 공부한 내용입니다.

CPU는 그저 메모리에 올라가 있는 것을 실행할 분이다. 

 

메모리 계층

  • 레지스터: CPU 안에 있는 작은 메모리, 휘발성이며 속도가 가장 빠르고, 기억 용량이 가장 작음.
  • 캐시: L1, L2, L3 캐시. 휘발성이며 속도가 빠르고 기억 용량이 작다. 
  • 주 기억 장치: RAM. 휘발성이며 속도와 기억 용량이 보통이다.
  • 보조 기억 장치: SSD, HDD. 비휘발성이며, 속도가 느리고, 기억 용량이 크다.

메모리는 디스크로부터 일정량의 데이터를 복사하고 임시 저장한다. 이를 필요시마다 CPU에 전달한다.

 

캐시

  • 데이터를 미리 복사해놓는 저장소이자 병목 현상을 줄이기 위한 것이다.
    • => 메모리와 CPU 사이 속도가 차이가 많이 나서 캐시로 문제를 해결한다.
  • 계층과 계층 사이에 있는 계층을 캐싱 계층이라고 한다. 캐시 계층과 하드 디스크 계층 사이에 있는 주 기억 장치를 보조 기억 장치 캐싱 계층이라고 한다. 
  • 캐싱 계층을 직접 두는 것 말고 직접 캐시를 설정할 때는 시간 지역성(temporal locality)와 공간 지역성(spatial locality)를 따라야 한다.
    • 시간 지역성: 최근 사용한 데이터에 다시 접근하려는 특성
    • 공간 지역성: 최근 접근한 데이터를 이루고 있는 공간이나 그 가까운 공간에 접근하는 특성
      • 배열에 있는 각 요소를 접근하는데, 그 배열에 또 접근하려고 할 때. 

캐시 히트와 캐시 미스

 

캐시 매핑

  • 캐시가 히트되기 위해 매핑하는 방법
  • 직접 매핑
    • 메모리가 1~100이고, 캐시가 1~10이면, 1:1~10, 2:11:20. 이렇게 매핑 => 처리가 빠르지만 충돌이 잦음.
  • 연관 매핑
    • 순서를 일치시키지 않고, 관련있는 캐시와 메모리 매핑. => 충돌이 적지만, 처리 속도가 느림.
  • 집합 연관 매핑
    • 직접 매핑과 연관 매핑을 합친것.
    • 순서는 일치시키지만, 집합을 둬서 저장하며 블록화되어 있어서 검색이 효율적임.
    • 메모리가 1~100, 캐시가 1~10이면, 캐시 1~5에는 1~50 무작위 저장.

 

웹 브라우저의 캐시

  • 쿠키: 만료 기한이 있는 키-값 저장소. 4kB 제한
  • 로컬 스토리지: 만료 기한이 없음. 키-값 저장소. 5MB 제한. 브라우저를 닫아도 유지.
  • 세션 스토리지: 만료 기한이 없음. 키-값 저장소. 탭 단위로 세션 스토리지 생성. 탭을 닫을 때 삭제됨. 5MB 제한.

데이터베이스 캐싱 계층

  • DB 위에 redis DB 계층을 캐싱 계층으로 둘 수 있음. 

 

메모리 관리

컴퓨터의 한정된 메모리를 극한으로 활용

 

⭐가상 메모리

  • 실제로 이용 가능한 메모리 자원을 추상화해서 이를 사용하는 사용자에게 매우 큰 메모리로 보이게 함.
  • CPU가 사용하는 virtual address와 메모리가 사용하는 physical address. CPU 내부의 MMU가 translate
  • 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고, 프로세스의 주소 정보가 들어있는 페이지 테이블로 관리됨.
  • 속도 향상을 위해 TLB를 사용함. CPU와 메모리 사이에 있는 주소 변환을 위한 캐시.

⭐스와핑

  • 가상 메모리에는 있지만, 실제 메모리에는 없을 때, 페이지 폴트가 발생함. 이럴 땐, 실제 메모리에서 필요없는 것을 내리고 가상 메모리와 매핑된 실제 메모리를 올리는 스와핑이 필요함.
  • 페이지 폴트: 프로세스의 주소 공간(가상 메모리)에는 있지만, 실제 메모리에는 올라가 있지 않은 것을 접근할 경우.
  • Demand Paging: 필요한 페이지만 올리기.

(페이지: 가상 메모리에서 사용하는 단위. 프레임: 실제 메모리에서 사용하는 단위)

 

스레싱(Thrashing)

  • 페이지 폴트율이 높음 => 심각한 성능 저하 발생
  • 메모리에 너무 많은 프로세스가 오르면 스와핑이 많이 일어남. => 스와핑이 많이 일어나면 CPU 사용률이 저하됨. => CPU 사용률이 저하되면 CPU는 여유로운 줄 알고 프로세스를 더 올림 => 악순환 발생
  • 해결 방법
    • 메모리 크기 큰 것으로 교체. HDD를 SSD로 교체
    • 작업 세트, PFF
      • 작업 세트: 프로세스의 과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것이다. 
      • PFF(Page Fault Frequency): 페이지 폴트 빈도를 조절하는 것. 상한선에 조절하면 프레임 개수를 늘리고, 하한선에 도달하면 프레임 개수를 줄인다.

메모리 할당

  • 연속 할당
    • Fixed Partition Allocation: 내부 단편화 발생
    • Variable Partition Allocation: 내부 단편화는 발생하지 않지만, 외부 단편화는 발생함.
      • First-fit, Best-fit, Worst-fit
  • 불연속 할당
    • Paging: 동일한 크기의 페이지로 나눠 메모리의 서로 다른 위치에 프로세스를 할당함.
    • Segmentation: 세그먼트 단위로 나눔. 코드와 데이터 영역으로 나누거나, 코드 내의 작은 함수를 세그먼트로 놓고 나눌 수 있음.
    • Paged Segmentation: 프로그램을 의미 단위인 세그먼트로 나눠 공유나 보안 측면에 강점을 두고, 임의의 길이가 아닌 동일한 크기의 페이지로 나눔. 

페이지 교체 알고리즘

  • 오프라인 알고리즘
    • 먼 미래에 참조되는 페이지와 교체. 하지만 미래를 알 수 없기 때문에 사용할 수 없는 알고리즘이다.
    • 다른 알고리즘과 비교할 때 상한으로 쓰인다.
  • FIFO
  • LRU(Least Recently Used)
    • 참조가 가장 오래된 것과 교체. => 스택과 counter가 필요하다.
  • NUR(Not Used Recently)
    • LRU에서 발전한 것.
    • clock 알고리즘이라고도 함.
    • 먼저 0과 1을 가진 비트를 두고, 1은 최근에 참조 되었고, 0은 참조되지 않았음을 의미.
    • 시계 방향으로 돌면서 0을 찾고, 0을 찾으면, 해당 프로세스와 교체하고 1로 바꾼다.
  • LFU(Least Frequently Used)
    • 가장 참조 횟수가 적은 것과 바꾼다. 

 

728x90

'CS' 카테고리의 다른 글

3.4 CPU 스케줄링 알고리즘  (0) 2024.09.19
3.3 프로세스와 쓰레드  (1) 2024.09.17
3.1 운영체제와 컴퓨터  (0) 2024.09.12
2.5 HTTP  (1) 2024.09.07
2.4 IP 주소  (0) 2024.09.06