[CS : OS] 메모리

2021. 5. 24. 11:37CS 스터디

메모리

: 운영체제에서 메모리 관리란 컴퓨터의 메인 메모리 관리를 담당하는 기능이다. 이 역할을 담당하는 장치가 MMU이다. MMUCPU 코어 안에 탑재되어 가상 주소를 실제 메모리 주소로 변환해주는 장치이다.

 

가상 주소(논리 주소)

- 프로세스마다 독립적으로 가지는 주소 공간

- 각 프로세스마다 0번지부터 시작

- CPU가 보는 주소는 logical address

 

물리 주소

- 메모리에 실제 올라가는 위치

 

MMU 동작 원리

1) CPU가 프로세스 P1의 논리 주소 346을 요청

2) P1은 물리 주소 14000 – 17000에 올라가 있음

3) P1이 자신의 메모리 범위(3000)를 벗어나는 주소를 요청할 경우를 막기 위해 limit register의 값과 비교를 한다.

3-1) limit register보다 요청 주소가 크다면 trap interrupt 발생 후 운영체제로 제어 권한을 이전한다. (안정성을 위해서 baselimit레지스터는 kernel level에서만 수정 가능하도록 설계한다.)

4) 시작 위치 물리 주소인 base register에 논리 주소를 더해서 돌려줌(14000 + 346)

 

메모리 과할당 (Memory Over Allocating)

: 실제 메모리 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황

 

페이지 기법과 같은 메모리 관리 기법은 사용자가 눈치 채지 못하도록 눈속임을 통해 메모리를 할당해준다.

 

메모리 과할당 발생 상황

- 프로세스 실행 도중 페이지 폴트 발생

- 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾음

- 메모리의 빈 프레임에 페이지를 올려야 하는데, 모든 메모리가 사용 중이라 빈 프레임이 없음

 

이러한 과할당을 해결하기 위해선, 빈 프레임을 확보할 수 있어야 한다.

 

- 메모리에 올라와 있는 한 프로세스를 종료시켜 빈 프레임을 얻음

- 프로세스 하나를 swap out 하고,하고, 이 공간을 빈 프레임으로 활용

 

swapping 기법을 통해 공간을 바꾸는 2번 방법과는 달리 1번은 사용자에게 Paging 시스템을 들킬 가능성이 매우 높아서 하면 안 된다.

 

(Paging 기법은 사용자 모르게 시스템 능률을 높이기 위해 선택한 일이므로 들키지 않게 처리해야 함)

 

따라서, 2번과 같은 해결책을 통해 페이지 교체가 이루어져야 한다.

 

Swapping

: 프로세스를 일시적으로 메모리에서 backing store로 쫓아내는 것

 

backing store(=swap area)

: 디스크 (많은 사용자의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장 공간

 

Paging 시스템에서 일부 페이지가 메모리에서 쫓겨날 때도 swap out이라고이라고 표현하지만 원칙적으로 swap out은 프로그램을 구성하는 메모리 전부가 쫓겨남을 의미

 

페이지 교체

- 메모리 과할당 상태일 경우 빈 프레임이 있으면 빈 프레임을 사용

- 빈 프레임이 없으면 victim 프레임을 선정해 디스크에 기록하고 페이지 테이블을 업데이트함

- 이 때 사용자가 페이지 교체를 알 수 없게 하기 위해 오버헤드를 최소화해야 한다.

 

오버헤드를 감소시키는 해결법

이처럼 빈 프레임이 없는 상황에서 victim 프레임을 비울 때와 원하는 페이지를 프레임으로 올릴 때 두 번의 디스크 접근이 이루어진다.

 

페이지 교체가 많이 이루어지면, 이처럼 입출력 연산이 많이 발생하게 되면서 오버헤드 문제가 발생한다.

 

(1) 변경 비트를 모든 페이지마다 둬서, victim 페이지가 정해지면 해당 페이지의 비트를 확인(인덱싱 or flag)

 

해당 비트가 set 상태

: 해당 페이지 내용이 디스크 상의 페이지 내용과 달라졌다는 뜻 (페이지가 메모리 올라온 이후 한 번이라도 수정이 일어났던 것. 따라서 이건 디스크에 기록해야 함)

 

해당 비트가 clear 상태

: 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황 (디스크와 내용이 같아서 기록할 필요가 없음)

 

비트를 활용해 디스크에 기록하는 횟수를 줄이면서 오버헤드에 대한 수를 최대 절반으로 감소시키는 방법이다.

 

(2) 페이지 교체 알고리즘을 상황에 따라 잘 선택해야 한다.

 

현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여줄 수 있는 교체 알고리즘을 사용

 

FIFO(First In First Out), OPT(Optimal Replacement), LRU(Least Recently Used), NUR(Not Used Recently), LFU(Least Frequently Used)

 

OPT (Optimal replacement, 최적 교체)

: 미래를 보고 앞으로 가장 사용되지 않을 페이지를 교체해준다. 앞으로 사용되지 않을 페이지에 대해 알 수 없으므로 비현실적인 방법이다.

5라는 페이지를 참조할 페이지 프레임의 상태는 (2, 3, 1)이다. 여기서 1 내보내고 5 넣었다. 이렇게 이유는 앞으로 2,3,5 사용되지만 1 사용되지 않으므로 1 내보낸 것이다.

 

캐시 메모리

: 주기억장치에 저장된 내용의 일부를 임시로 저장해두는 기억장치, CPU와 주기억장치의 속도 차이로 성능 저하를 방지하기 위한 방법

 

CPU가 이미 봤던걸 다시 재접근할 때, 메모리 참조 및 인출 과정에 대한 비용을 줄이기 위해 캐시에 저장해둔 데이터를 활용한다

 

캐시는 flip flop(1비트 소자 ) 소자로 구성되어 SRAM으로 되어있어서 DRAM보다 빠른 장점을 지녔다.

 

CPU와 기억장치의 상호작용

CPU에서 주소를 전달캐시 기억장치에 명령이 존재하는지 확인

 

1) 존재(Hit)하면 해당 명령어를 CPU로 전송

2) 존재하지 않으면(Miss) 명령어를 갖고 주기억장치로 접근

해당 명령어를 가진 데이터 인출

해당 명령어 데이터를 캐시에 저장

해당 명령어를 CPU로 전송

 

따라서 CPU가 어떤 데이터를 원할지 어느 정도 예측할 수 있어야 한다. (캐시에 많이 활용되는 쓸모 있는 정보가 들어있어야 성능이 높아짐)

 

 

지역성

: 기억 장치 내의 정보를 균일하게 액세스 하는 것이 아니라 한 순간에 특정 부분을 집중적으로 참조하는 특성, 캐시의 효율성을 위해서 사용된다.

 

시간 지역성: 최근에 참조된 주소의 내용은 곧 다음에도 참조되는 특성

공간 지역성: 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성

 

 

캐싱 라인

: 빈번하게 사용되는 데이터들을 캐시에 저장했더라도, 내가 필요한 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 시간 낭비다. , 캐시에 목적 데이터가 저장되어있을 때 바로 접근하여 출력할 수 있어야 캐시 활용이 의미 있어진다.

 

따라서 캐시에 데이터를 저장할 시 특정 자료구조를 사용하여 묶음으로 저장하는데 이를 캐싱 라인이라고 부른다.

 

1) Direct Map

가장 기본적인 구조로, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식. 간단하고 빠르지만 conflict Miss 발생

2) Full Associative

비어있는 캐시 메모리가 있으면, 마음대로 주소를 저장하는 방식. 저장할 때는 매우 간단하지만, 찾을 때가 복잡함.

 

3) Set Associative

Direct + Full 방식이다. 특정 행을 지정하고, 그 행 안의 어떤 열이든 비어있을 때 저장하는 방식. Direct에 비해 검색 속도는 느리지만 저장이 빠르고, Full에 비해 저장 속도는 느리지만 검색은 빠르다.


플립플롭은 내부가 논리 회로로 구성되어 있기 때문에 논리 회로에 준하는 빠른 동작속도를 얻을 있다. 예를 들어 컴퓨터의 기억장치 구성하는 회로에서 주로 사용되는 방식인 디램 (DRAM) 기억 소자와 비교했을때 기억내용의 변경에서 축전기 (캐패시터라고도 ) 충전/방전을 기다릴 필요가 없고 기억내용의 읽기에서 내용에 영향을 주지 않아서 비파괴 읽기이며 정기적인 리프레시 동작도 필요하지 않는다.

 

1) Cold miss

해당 메모리 주소를 처음 불러서 나는 미스

 

2) Conflict miss

캐시 메모리에 A B 데이터를 저장해야 하는데, A B가 같은 캐시 메모리 주소에 할당되어 있어서 나는 미스

 

Direct mapped cache에서 많이 발생한다.

 

3) Capacity miss

캐시 메모리의 공간이 부족해서 나는 미스

 

Conflict 주소 할당 문제, Capacity 공간 문제