메모리 관리

Solf·2023년 7월 1일
0

운영체제

목록 보기
11/13

메모리 주소


메모리의 주소는 1바이트(B, byte = 8bit) 크기로 나뉜다. 이 영역은 각각 주소(address)로 구분되며 보통 0번지부터 시작한다.

메모리 관리


메모리 관리는 메모리 관리 시스템(MMS, Memory Management System)이 담당한다.

이때 메모리 관리는 매우 복잡한데 프로세스는 최대한 많은 메모리 공간을 요구하고 메모리 관리자는 이를 효율적으로 하고 싶어하는 이중성이 발생한다.

메모리 관리 작업은 크게 '가져오기(fetch) - 배치(placement) - 재배치(replacement)'로 구분된다.

메모리 배치

가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업이다.

메모리에 여러 프로세스를 배치하는 방법은 크게 가변분할방식과 고정분할방식이있다.

매핑 테이블

위에서 가변분할방식고 고정분할방식을 알아보았는데 이를 조작하기 위해서는 각 페이지나 세그먼트의 주소가 필요할 것이다. 이를 테이블에 적은 것을 각각 페이지 매핑 테이블, 세그먼테이션 매핑 테이블 이라고 한다.

가변분할 방식

가변분할방식(세그먼테이션 segmentation): 프로세스의 크기에 따라 메모리를 나누는 방식
가변분할방식의 경우 외부단편화(바깥쪽에 메모리가 빈공간이 생기는)가 발생한다.

외부단편화 해결 방법: 메모리배치방식/조각모음
완화 방법: 버디 시스템

메모리 배치 방식(전처리)

메모리 배치 방식에는 first fit, best fit, worst fit 3가지 종류가 있다.
first fit: 첫번쨰로 발견한 공간에 프로세스 배치
best fit: 크기가 가장 비슷한 공간에 프로세스 배치
worst fit: 가장 큰 공간에 프로세스를 배치

조각모음(후처리)


필요 없어진 단편화 공간을 모아 정리해주는 작업

버디 시스템

가변분할방식의 외부 단편화를 완화하는 방법이다.
이진트리의 형태로 메모리를 분할하여 적당한 크기를 만들어 프로세스에게 할당하는 방법이다.
단편화는 외부 내부 모두 생기지만 비슷한 크기의 덩어리로 메모리가 모여있어 통합하기 쉽다는 장점이 있다.

세그먼테이션 테이블


limit는 프로세스의 크기를 address는 시작주소를 의미한다. 이를 가지고 만약 가상주소의 길이가 limit보다 크다면 트랩(주소 오류)로 예외처리를 하며 물리주소를 찾을 수 있다.

고정분할 방식

고정분할방식(페이징 paging): 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 방식
고정분할방식의 경우 내부단편화 발생

페이지 교체 알고리즘(page replacement algorithm)

가상메모리의 페이지와 구분하기 위해 실제 메모리에 올라오면 프레임(frame)이라고 부른다.

페이지 테이블의 경우 프레임의 주소만이 담겨있는 배열인데 각 열이 페이지의 번호를 의미한다. 이를 PTE(페이지 테이블 엔트리)라고 한다. 이것만을 보고 가상주소를 실제 주소로 변환할 수 있다.

페이지 테이블의 문제는 테이블의 크기가 작지 않다는 것이다. 따라서 페이지 테이블 일부도 스왑영역으로 옮겨진다. 페이지 테이블은 운영체제 영역에 저장되며 PCB가 페이지 테이블 기준 레지스터(PTBR, Page Table Base Register)에 보관한다.

프레임 공유

페이지 테이블이 공통인 값을 가질 경우(ex 크롬 멀티탭) 동일한 프레임을 두번 저장하는 것이 아닌 공유하는 형태로 메모리를 아낄 수 있다. 이후 차이점이 발생하면 그 시점에 복사하여 다른 프레임으로 분리해준다. 이를 쓰기 시점 복사(copy on write)라고 한다.

변환 색인 버퍼(TLB, Translation Look-ahead Buffer)

CPU가 페이지 테이블 일부를 캐쉬의 형태로 가져온다. 이를 변환 색인 버퍼(TLB)라고 한다. 캐쉬와 마찬가지로 TLB 히트시 바로 물리주소로 변환하고 TLB 미스시 직접 메모리에 있는 페이지 테이블을 조회한다.

역페이지 테이블

기존의 페이지 테이블이 테이블 -> 프레임으로 찾아주는 테이블이였다면 반대로 역페이지 테이블은 프레임 -> 테이블을 찾아주는 테이블이다. 이는 물리 메모리를 기준으로 하기에 테이블 수가 전체 시스템에 단 1개라 크기가 작다는 장점이 있다. 그러나 탐색시간이 매우 길어지는 단점이 있다.

다단계 페이지 테이블

n차의 형태로 페이지 테이블을 구성하는 방법이다.

메모리 가져오기

실행할 프로세스와 데이터를 메모리로 가져오는 작업

메모리 오버레이

프로그램의 크기가 실제 메모리(물리 메모리)보다 클때 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라 가져오는 기법이다. overlay: 겹겹히 쌓다

요구 페이징

사용자가 페이지를 요구할때 가져오는 정책

간단하게 살펴보았던 PTE(페이지 테이블 엔트리)는 위와 같은 구성을 가지고 있다.
access bit: 메모리에 올라온 후 사용한 적이 있는지 알려주는 비트(참조비트(reference bit)라고도 함)
modified bit: 메모리에 올라온 후 데이터 변경이 있었는지 알려주는 문제
valid bit: 페이지가 실제 메모리에 있는지를 나타냄(스왑영역에 있는지 메모리에 있는지)
read bit, write bit, execute bit: 읽기 권한, 쓰기 권한, 실행권한을 나타냄

이때 페이지를 요구했는데 페이지가 존재하지 않는다면 이를 page fault라고 하며 스왑영역에서 페이지를 가져오게 된다. 이때 이 자리를 메모리에 마련하기 위해 어떤 페이지를 교체할지 결정하는 알고리즘을 페이지 교체 알고리즘 이라고 한다.

페이지 교체 알고리즘

다양한 종류가 있다

  • 무작위 알고리즘
  • FIFO 알고리즘
  • 최적 알고리즘
  • LRU(Least Recently Used page) 알고리즘
  • LFU(Least Frequently Used page) 알고리즘
  • NUR(Not Used Recently) 알고리즘
  • FIFO변형 알고리즘

메모리 재배치

새로운 프로세스를 가져와야 하는데 메모리가 꽉 찼다면 메모리에 있는 프로세스를 하드디스크로 옮겨 놓아야 새로운 프로세스를 메모리에 가져올 수 있다. 이처럼 꽉 찬 메모리에 새로운 프로세스를 가져오기 위해 교체하는 과정을 재배치 작업이라고 한다.

스왑영역(swap area)

메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는데 이 영역을 스왑 영역이라고 한다. 메모리로 데이터를 가져오는 작업을 스왑인(swap in), 메모리에서 스왑영역으로 데이터를 내보내는 작업을 스왑 아웃(swap out)이라고 한다.

스레싱


스레싱: 페이지 부재로 인해 작업이 멈춘 것 같은 상태
멀티프로그래밍: 동시에 실행하는 프로그램 수
스레싱 발생지점부터는 CPU효율이 떨어지며 물리메모리의 크기를 키우면 스레싱 발생지점을 줄일 수 있다. 그러나 충분한 크기에서는 그 이후 크기를 늘려도 속도에 영향이 없다.

따라서 어떤 프로세스에는 너무 적은 프레임을 할당해 페이지 부제가 번번히 일어나고 어떤 프로세스는 너무 많은 프레임을 할당해 부재는 없으나 메모리를 낭비한다. 이를 적당히 나눠주는 정책이 필요하며 이 할당방식은 두가지 정적할당과 동적할당이 있다.

참고로 위에서 다루었던 페이지 교체 알고리즘이 운영체제로 부터 할당받은 프레임을 어떻게 효율적으로 사용할까를 고민하는 알고리즘이였다면, 이는 운영체제가 페이지에게 얼마만큼의 프레임을 전달해야 효율적인가를 고민한다.

정적할당

프로세스 실행초기에 프레임을 나눠준 후 크기를 고정하는 것.

균등할당

프로세스의 크기와 상관없이 사용가능한 프레임을 모든 프로세스에게 동등히 할당하는 방법.

비례할당

프로세스의 크기에 비례하여 할당하는 방법

동적할당

프로세스에게 할당한 프레임 크기를 유동적으로 할당하는 것.

작업집합 모델

지역성이론을 바탕으로 가장 최근에 접근한 프레임이 이후 참조될 가능성이 가장 높다는 가정에서 만들어진 모델이다. 최근에 사용한 일정범위의 페이지를 가지고 메모리에 남긴다. 나머지는 스왑영역으로 옮긴다. 이는 프로세스의 성능을 높이는 방법이다.

페이지 부재 빈도

프로세스가 필요로 하는 페이지 양을 동적으로 결정하는 방법 중 하나이다.

페이지 부재 빈도를 바탕으로 프레임을 할당한다.

논리(가상)주소 물리주소



논리주소(VA, Virtual Address) : 사용자를 위한 주소로서 시작점을 0으로 고정해준 것이다. (프로그래머는 덕분에 0부터 주소를 사용한다)
물리주소(PA, Physic Address) : 메모리의 입장에서 바라본 주소로서 실제 메모리의 주소이다.

이를 상호변환해주는 것은 메모리 관리 유닛(MMU, Memory Management Unit)이 담당한다.
메모리 관리자 는 재배치 레지스터에 따라 논리주소를 물리주소로 변환해준다. 이러한 작업을 동적 주소 변환(DAT, Dynamic Address Translation)이라고 한다.

페이지테이블에 의한 변환과 세그먼테이션에 의한 변환을 기호로 표기하면 밑과 같다.
VA=<P, D> -> PA=<F, D>
P: page(가상주소/한 페이지의 크기) D: offset(가상주소%한 페이지의 크기) 변위 F: frame (이때 둘다 D를 쓰는 이유는 페이지와 프레임의 크기를 같게 나누었기 때문이다.)
VA=<S, D> -> PA=<address + distance>
S: segment D: distance 세그먼트 시작 지점해서 해당 주소까지의 거리

가상메모리 크기


가상메모리의 크기 = 실제 물리메모리 크기 + 스왑영역 크기

참고


지역성 이론: 지역성(locality)은 기억장치에 접근하는 패턴이 메모리 전체에 고루 분포되는 것이 아니라 특정 영역에 집중되는 성질을 말한다. (대표하는 장치로 캐쉬가 있다.)

  • 공간의 지역성: 현재 위치에서 가까운 데이터에 접근할 확률보다 높음을 의미한다.
  • 시간의 지역성: 현재를 기준으로 가장 가까운 시간에 접근한 데이터가 더 먼 시간에 접근한 데이터보다 사용될 확률이 높음을 의미한다.
  • 순차적 지역성: 작업이 순서대로 진행되는 것을 의미
profile
CS/Back-End

0개의 댓글