8월 25일 TIL

·2023년 8월 25일
0

CS 공부

▶ 메모리

▷ 메모리 계층
존재 이유: 경제성과 캐시
구성: 레즈스터(CPU), 캐시, 메모리, 저장장치
위로 올라갈수록 가격↑ 속도↑ 용량↓

▷ 캐시란?
메인 메모리의 데이터를 미리 복사해 놓는 임시 저장소
데이터 흐름: 디스크→메인메모리→캐시→MMU→컴퓨터 메모리
MMU에서 메인메모리가 아닌 캐시의 데이터를 읽어오거나 사용하게 되면 속도 향상, 병목 현상을 줄일 수 있음
계층과 계층사이에서 속도 차이를 해결한다.

레지스터는 메모리와 CPU사이의 속도 차이 해결을 위한 캐시이고
주기억장치는 캐시메모리와 보조기억장치 사이의 속도 차이를 해결하기 위한 캐시인데
왜 SLAM만 캐시라고 부를까? → 레지스터는 CPU 연산 저장소이고 메인메모리는 실제 프로그램 실행 저장소인데
실제로 임시 저장소 역할만 하는 것은 SRAM이다. SRAM은 용량은 작지만 속도가 매우 빠른 정적 메모리로써 캐시 전용으로 많이 쓰인다.

지역성이란?
자주 사용되는 데이터의 특성
캐시 직접 설정 시 자주 사용되는 데이터를 기반으로 설정해야 하는 특성
1. 시간 지역성 : 최근 사용한 데이터에 다시 접근하려는 특성
2. 공간 지역성 : 최근 접근한 데이터를 이루고 있는 공간 또는 그 가까운 공간에 접근하려는 특성

▷ 캐시히트
제어장치가 캐시에서 원하는 데이터를 찾은 것
CPU 내부버스를 기반으로 작동한다. 속도↑
캐시 히트율을 높일수록 동작이 빠르다.

▷ 캐시미스
제어장치가 원하는 데이터가 캐시에 없어서 주메모리에서 찾아오는 것
시스템 버스를 기반으로 작동한다. 속도↓

▷ 캐시 매핑
캐시 히트 = 매핑 잘 된 것
1. 직접 매핑 : 직접적으로 주소값으로 매핑, 처리가 빠르지만 충돌 발생이 잦다
ex) 메모리 1~100이 있고 캐시가 1~10이 있다면 1:1~10, 2:1~20...와 같이 매핑
2. 연관 매핑 : 순서 일치X, 관련 있는 캐시와 메모리 매핑
충돌은 적지만 원하는 데이터를 찾기위해 모든 블록을 탐색하기 때문에 속도가 느리다.
3. 집합 연관 매핑 : 직접 매핑 + 연관 매핑
순서는 일치하지만 집합을 둬서 저장, 블록화 되어있기 때문에 검색하기 좋다.

▷ 메모리 할당
메모리에 프로그램 할당 시 메모리의 시작 위치, 할당 크기를 기반으로 할당
1. 연속 할당 : 메모리에 연속적으로 공간 할당

1-1. 고정 분할 방식 : 메모리를 미리 나누어놓고 관리 및 할당한다. 내부 단편화가 발생한다.
1.-2. 가변 분할 방식 : 매 시점 프로그램 크기에 맞게 동적으로 메모리를 나누고 관리 및 할당한다, 외부 단편화 발생
1-2-1. 최초 적합 : 위에서부터 보이는 공간에 할당
1-2-2. 최적 적합 : 가장 크기에 맞는 공간부터 채우고 나머지 할당
1-2-3. 최악 적합 : 가장 크기가 큰 공간부터 채우고 나머지 할당

· 내부 단편화
메모리를 나눠 놓은 크기보다 프로그램이 작아서 공간이 남아버린 현상
내부에서 사용하지 않는 공간이 발생한다는 뜻
· 외부 단편화 :
메모리를 나눠 놓은 크기보다 프로그램이 커서 들어가지 못하는 공간이 발생

  1. 불연속 할당
    여러 가지 작업의 효율적 수행을 위해 운영체제에서 사용하는 방법
    단점 ↓
    메모리 공간 할당 및 해제 시 오버헤드 발생 할 수 있음(불필요 할당)
    메모리 공간 분산으로 인해 프로세스가 불연속 공간에 할당 될 시 페이지 교체 등의 작업이 복잡해진다.(교체 알고리즘 최적화 필요)

운영체제에서 불연속 할당을 사용하는 3가지 방법
1. Linked List : 할당된 공간의 주소를 연결리스트에 저장
2. Bitmap : 메모리 공간의 블록을 각각 0 or 1로 표시 → 사용 가능한 블록과 사용 중인 블록 구분
3. Page Table : 가상 메모리 시스템에서 사용, 메모리를 동일한 크기의 페이지로 나눈 후
프로그램마다 페이지 테이블을 두고 이를 통해서 메모리에 프로그램 할당
3-1. 페이징 : 동일한 크기의 페이지로 나눠서 메모리의 서로 다른 위치에 프로세스 할당
빈 데이터의 크기가 균일하지 않은 문제는 해소가 되지만 주소 변환이 복잡해진다.
3-2. 세그멘테이션 : 의미 단위로 나누는 방식, 코드와 데이터 또는 함수 단위로도 나눌 수 있다.
공유와 보안 측면에서 좋다. 빈 데이터의 크기가 균일하지 않는 문제 발생
3-3. 페이지드 세그멘테이션 : 페이징과 세그멘테이션의 장점을 모은것
공유나 보안은 세그멘테이션, 물리적 메모리를 페이지로 나누는 방식은 페이징

페이지 교체 알고리즘
메모리 내에서 저장된 페이지 중 어떤 페이지를 교체할지 결정
페이지 부재가 발생할 시 새로운 페이지를 적재하기 위해 기존 페이지 중 어떤 페이지를 제거할지 결정
알고리즘에 따라 페이지 부재율, 페이지 교체 오버헤드 등 성능이 달라진다.

  1. 오프라인 알고리즘
    실제 페이지 알고리즘이 사용되진 않는다.
    입력 데이터가 모두 주어진 상태에서 실행되기 때문에 실행중에 새로운 입력이 들어오지 않는다.
    실제로 메모리 할당에는 사용할 수 없지만 다른 알고리즘과의 성능 비교에 대한 기준 제공 용도로 사용
    대표적인 오프라인 알고리즘 : 정렬 알고리즘
  2. 시간기반 알고리즘
    2-1. FIFO : 가장 먼저 온 페이지를 가장 먼저 교체 영역에 놓는다.
    데이터가 새로오면 가장 오래된 데이터 제거, 오래된 데이터가 최근 사용된 데이터와 비슷하면 성능이 저하될 수 있다.
    2-2. LRU : 참조가 가장 오래된 페이지를 교체, 가장 최근에 사용한 데이터를 먼저 사용할 가능성이 높기 때문에 캐시 히트율↑
    단점 : 데이터 저장하는데 추가적인 비용 발생,
    데이터 사용 시 최근 사용 시간 갱신 / 시간 값 저장
    2-3. NUR : 최근 사용 여부를 0(참조되지 않음) 또는 1(최근 참조)로 표시하여 교체하는 clock 알고리즘
    사용하지 않는 데이터를 주기적 스캔하여 최근 사용 여부를 판단
  3. 빈도기반 알고리즘
    3-1. LFU : 참조 횟수가 가장 적은, 많이 사용하지 않는 페이지 교체, 캐시 히트율↑
    단점 : 일부 데이터가 빈번하게 사용되면 성능 저하 발생 / 조회 횟수 저장

최종 프로젝트 진행 중..

profile
코린한별

0개의 댓글