CPU는 그저 메모리에 올라와 있는 프로그램의 명령어들을 실행할 뿐.
레지스터, 캐시, 메모리, 저장장치로 구성되어있음
위로 갈 수록 속도가 빨라지고 용량은 적어지기에 비싸진다. 경제성과 캐시때문에 계층을 구분시켰다.
데이터를 미리 복사해 놓는 임시 저장소
빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
→ 데이터 접근 시간이 오래걸리는 경우 해결, 다시 계산하는 시간 절약 가능
실제로 메모리와 CPU 사이의 속도 차이가 크기에, 중간에 레지스터 계층을 두어 속도 차이를 해결한다.
캐시 계층
: 속도 차이를 해결하기 위해, 계층사이에 있는 계층
캐시히트
: 캐시에서 원하는 데이터를 찾음
캐시미스
: 원하는 데이터가 캐시에 없다면 주 메모리로 가서 데이터를 찾아옴 → 시스템 버스를 기반으로 작동하기에 느림
매핑 유형 | 설명 |
---|---|
직접 매핑 (directed mapping) | - 메인메모리와 캐시를 똑같은 크기로 나누고 순서대로 매핑하는 것 - 처리가 빠름 - 충돌 발생이 잦음 |
연관 매핑 (associative mapping) | - 순서를 일치시키지 않고 관련있는 캐시와 메모리를 매핑하는 것 - 처리가 느림 - 충돌 적음 |
집합 연관 매핑 (set associative mapping) | - 직접 매핑 + 연관 매핑 - 순서는 일치시키지만 집합을 둬서 저장 - 효율적인 매핑 |
참고
메인 데이터베이스 위에레디스(redis)
를 캐싱 계층으로 둬서 성능을 향상시키기도 함
운영체제의 대표적인 할 일 중 하나가 메모리 관리이다. 한정된 메모리를 극한으로 활용해야함
메모리 관리 방법 중 하나로, 메모리 자원을 추상화해 사용자들에게 매우 큰 메모리로 보이게 만드는 것
가상 주소
: 가상적으로 주어진 주소실제 주소
: 실제 메모리상에 있는 주소가상 메모리
: 페이지 테이블로 관리됨페이지 테이블
: 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어있다.TLB
: 메모리와 CPU사이에 있는 주소 변환을 위한 캐시가상 메모리엔 존재하지만 실제 메모리(RAM)엔 없는 데이터나 코드에 접근하면 페이지 폴트가 발생한다.
이때 메모리에서 사용하지 않는 영역을 하드디스크로 옮긴다.
이후 하드디스크의 일부분을 마치 메모리처럼 불러와 사용하는데, 이를 스와핑이라고 한다.
→ 마치 페이지폴트가 일어나지 않은 것처럼 만든다.
페이지
: 가상 메모리를 사용하는 최소 크기 단위프레임
: 실제 메모리를 사용하는 최소 크기 단위
메모리에 너무 많은 프로세스가 동시에 올라가면 메모리의 페이지 폴트율이 높아져 스와핑이 많이 일어나서 발생하는 심각한 성능 저하 초래 현상
작업 세트
: 지역성을 통해 결정된 페이지 집합을 만들어 미리 메모리에 로드한다.메모리에 프로그램을 할당할 때, 시작 메모리 위치와 메모리의 할당 크기를 기반으로 할당한다. 이는 두가지로 나뉜다.
메모리에 연속적으로 공간을 할당하는 것을 말한다.
고정 분할 방식(fixed partition allocation)
: 메모리를 미리 나누어 관리하는 방식가변 분할 방식(variable partition allocation)
: 동적으로 프로그램에 맞게 메모리를 나눠 사용한다.할당 전략 | 설명 |
---|---|
최초 적합 | 위쪽이나 아래쪽부터 시작해서 홀을 찾으면 바로 할당한다. |
최적 적합 | 프로세스의 크기 이상인 공간 중 가장 작은 홀부터 할당한다. |
최악 적합 | 프로세스의 크기와 가장 차이가 많이 나는 홀에 할당한다. |
내부 단편화(internal fragmentation)
: 메모리를 나눈 크기보다 프로그램이 작아서 공간이 남는 현상
외부 단편화(external fragmentation)
: 메모리를 나눈 크기보다 프로그램이 커서 못들어가는 공간이 발생하는 현상
메모리를 연속적으로 할당하지 않는다.
페이징(paging)
: 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당한다.세그멘테이션(segmentation)
: 세그먼트로 나누는 방식페이지드 세그멘테이션(paged segmentation)
: 두 장점을 결합한 방식메모리는 한정되어 있기에 스와핑이 자주 일어난다. 스와핑이 많이 일어나지 않도록 설계해야한다.
오프라인 알고리즘(offline algorithm)
: 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘FIFO(First In First Out)
: 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법LRU(Least Recently Used)
: 참조가 가장 오래된 페이지를 교체NUR(Not Used Recently)
: LRU를 개선한 clock이라고도 불리는 알고리즘LFU(Least Frequently Used)
: 가장 참조 횟수가 적은 페이지를 교체한다.