램 디스크는 RAM을 디스크처럼 사용하는것을 말한다. 

램 디스크의 성능은 일반적으로 SSD, 하드 드라이브 등 모든 보조 기억장치보다 훨씬 빠르다.
이는 액세스 시간, 최대 처리량 및 파일 시스템 유형을 비롯한 여러 요인으로 인해 발생한다.

RAM에 저장되기 때문에 이는 휘발성 메모리임을 뜻하고, 의도적이든 우발적이든 컴퓨터를 끄면 데이터가 손실된다.

이는 일반적으로는 약점이지만, 암호화 된 파일의 해독된 사본 등을 작업할때는 장점으로 작용한다.

보통 램 디스크에 저장된 데이터는 영구적으로 다른 곳에 저장되어있다가 시스템이 재부팅 될 때 램 디스크에 다시 저장된다.

 

'잡다한 이야기' 카테고리의 다른 글

HTML을 공부해보자  (0) 2019.02.02
블로그 개시!  (0) 2018.12.31

가상 메모리는 사용자와 논리적 주소를 물리적으로 분리한 후 사용자가 메인 메모리 용량을 초과한 프로세스에 주소를 지정하여 메모리를 제한 없이 사용할 수 있도록 하는 개념이다. 각 프로세스에 균일한 주소 공간을 제공하여 메모리 관리가 단순하며, 메인 메모리를 더 효율적으로 사용할 수 있다.

간단히 말하면, 가격이 비싼 RAM의 용량부족을 대체하기 위해 보조기억장치의 일부를 메인메모리처럼 사용하는것이다.

하지만 최근 메인메모리의 값이 내려간 만큼, 메인메모리의 용량을 충당하기 쉬워져 예전보다 가상메모리의 필요성이 낮은 편이다.

세그먼테이션은 메모리를 프로세스 관점으로 지원하는 메모리 관리 방법이다.

페이징과는 달리 세그먼테이션은 물리적인 크기의 단위가 아닌 논리적 내용의 단위로 분할하기때문에 각 크기가 일반적으로 같지 않다.

세그먼테이션은 프로세스를 자르는 방법을 제외하고 메모리에 할당하는 방법에 있어서 페이징과 유사하다.

세그먼테이션은 프로세스에 따라 세그먼트 크기가 다르기 때문에 메모리를 크기가 일정한 페이지 프레임으로 나누지 않고 가변 분할 방법으로 할당한다. 이 때문에 외부 단편화가 일어난다.

외부 단편화를 해결하기 위해 세그먼테이션은 충분한 공간이 생길때까지 기다리거나 압축을 해 큰 공간을 만든다. 세그먼테이션은 동적 대치 알고리즘이기 떄문에 원할 때마다 메모리를 압축할 수 있다. 외부 단편화의 정도는 세그먼트의 크기에 따라 결정된다. 세그먼트의 크기가 클 수록 단편화가 심해지고, 작을 수록 완화된다.

  페이징 세그먼테이션
프로그래머의 기술 인식 아니오
선형 주소 공간 1 많음
물리적 주소를 초과하는 총 주소 공간
프로시저와 데이터 분리, 보호 여부 아니오
수용할 수 있는 테이블 크기가 심하게 변화 아니오
사용자 공유가 용이 아니오

 

페이지화된 세그먼테이션

페이징은 내부 단편화가 발생할 수 있지만, 메모리를 효율적으로 사용할 수 있다.

반면에 세그먼테이션은 외부 단편화가 발생할 수 있지만, 가변적인 데이터 구조와 모듈 처리, 공유와 보호의 지원이 편리하다.

이러한 장단점을 취합한 방법이 페이지화된 세그먼테이션이다.

프로세스를 일단 세그먼트 단위로 분할한다. 이는 보호와 공유를 하는 측면에 이점을 가진다. 하지만 외부 단편화가 발생할 수 있기 때문에 분할한 세그먼트를 다시 고정된 간격인 페이지 단위로 자르는 페이징을 한다. 그래서 메모리에 적재하면 페이징의 일정 단위로 다시 분할되었기 때문에 외부 단편화가 발생하지 않는다. 하지만 이 경우에는 두 가지 테이블을 거쳐야 하므로 속도가 비교적 느리다.

 

페이징 세그먼테이션 하드웨어 시스템의 구조

프로세서는 논리적 주소의 세그먼트 번호와 STBR(세그먼트 테이블 기준 레지스터)을 이용해 세그먼트 테이블을 확인한다. 그리고 해당 세그먼트 페이지 테이블에서 페이지 번호를 찾아 이에 대응하는 페이지 프레임을 찾는다. 그런 다음 페이지 프레임을 오프셋과 결합하여 메모리 주소를 생성한다.

각 프로세스에는 세그먼트 테이블이 하나 있고, 세그먼트에는 자신의 페이지 테이블이 있다. 그러므로 특정 프로세스가 실행중일 때 레지스터 하나는 프로세스 세크먼트 테이블의 시작 주소를 갖는다. 특히 각 세그먼트의 마지막 페이지는 완전히 차지 않아서 내부 단편화를 가져올 수 있다.

페이지화된 세그멘테이션은 세그먼트와 페이지를 함께 사용해 복잡하지만, 세그먼트를 페이징하여 외부 단편화 문제를 제거하면서 할당 과정을 쉽게 해결한다는 장점이 있다.

 

페이지 테이블을 통해 논리적 주소와 물리적 주소가 매칭된다.

페이징은 작업을 크기가 동일한 페이지로 나누어 처리하는 방법이다.

프로세스를 동일한 크기의 페이지로 나누고, 메인 메모리도 프레임이라는 고정 크기 블록으로 나누어 프레임에 페이지를 적재한다.

장점 빈 프레임에 어떤 페이지든 적재할 수 있어 메모리를 효율적으로 사용할 수 있고, 외부 단편화가 발생하지 않는다.
단점 운영체제의 페이지 관리 부담이 크고, 내부 단편화가 발생할 수 있다.

페이지의 크기가 작을 수록 내부 단편화로 인한 용량 낭비를 줄일 수 있지만, 페이지 테이블을 유지하는데 부담이 커진다.

페이지 테이블은 논리적 주소를 물리적 주소로 변환한다. 페이지 테이블은 페이지의 논리적 주소인 페이지 번호와 이에 대응하는 물리적 주소인 페이지 프레임 주소를 포함한다.

페이지 테이블에서 연관 레지스터를 이용해 주소를 변환하는 방법은 세가지가 있다.

  1. 직접 매핑
  2. 연관 매핑
  3. 연관-직접 매핑

직접 매핑

 

연관 매핑

 

연관-직접 매핑

메모리에 프로세스를 적재할 때 연속적으로 적재하는 방법이 연속 메모리 할당이다.

이는 초기 컴퓨터 시스템에서 많이 사용하던 방법으로, 단일 프로그래밍 환경과 다중 프로그래밍 환경으로 구분할 수 있다.

 

단일 프로그래밍 환경에서의 연속 메모리 할당

초기 컴퓨터 시스템에서는 한명의 사용자만 컴퓨터를 사용할 수 있었고, 자원도 한명의 사용자만 사용 가능했다.

프로그램은 메모리보다 클 수 없고 직접 배치 과정을 수행하여 항상 같은 메모리 위치에 적재되었다.

단일 프로그래밍 환경에서 연속 메모리 할당은 메모리를 사용자 영역과 운영체제 상주 영역으로 나눈다. 크게 모니터(운영체제의 상주 영역), 사용자 영역, 미사용 영역으로 나눌 수 있다. 메모리를 제어하는 모든 권한이 사용자에게 있기 때문에 사용자가 주소를 잘못 지정하면 운영체제가 손상될 수 있다. 그래서 프로세서에 경계 레지스터를 두어 이를 방지한다.

이런 메모리 할당 시스템의 문제는 사용자 프로그램의 적재이다. 컴퓨터 주소 공간이 0000부터 시작하더라도 사용자 프로그램의 시작 주소는 기준 레지스터 값의 이후가 된다. 그러므로 기준 주소가 변하면 다시 적재해야 한다. 다음 두 가지 방법을 고려하여 이런 운영체제의 동적 변화에 대비할 수 있다.

첫 번째 방법은 사용자 프로그램을 기준 레지스터보다 상위 메모리에 적재하는 것,

두 번째 방법은 주소 바인딩을 연기하는 것이다.

단일 프로그래밍 환경에서 연속 메모리 할당은 메모리의 효율성이 떨어진다. 또한 자원 낭비가 심하고 프로세스 스와핑 비용이 많이 든다.

 

다중 프로그래밍 환경에서의 연속 메모리 할당

1) 고정 분할 방법

고정 분할 방법에서는 메모리를 여러 개의 고정된 크기로 분할하고 분할된 각 메모리는 프로세스 하나를 실행하는 방식이다.

고정 분할 방법에서는 논리적 주소가 분할된 메모리보다 크면 오류가 발생하고, 작으면 내부 단편화가 발생한다.

내부 단편화란 분할된 메모리 공간보다 용량이 작은 작업이 들어갔을 때, 사용할 수 없게 되는 공간이 생기는것을 말한다.

2) 가변 분할 방법 

가변 분할 방법은 고정된 경계를 없애고 각 프로세스가 필요한 만큼 메모리를 할당하는 방법이다.

프로세스가 할당되고 해제되다보면 사용 가능한 메모리 공간이 흩어져있게 되는데, 새로 들어갈 작업이 어느 공간에 할당되어야 할 지 결정하는 방법으로는 최초 적합, 최적 적합, 최악 적합 방법이 있다.

최초 적합 최초 적합 방법은 프로세스를 사용 가능 공간 중 충분히 큰 첫 번째 공간에 할당한다.
최적 적합 최적 적합 방법은 프로세스를 충분히 큰 사용 가능 공간 중에서 들어갈 수 있는 가장 작은 공간에 할당한다. 이 방법을 사용하기 위해선 사용 가능 공간이 크기 순으로 정렬되어있어야 한다.
최악 적합 프로세스를 가장 큰 사용 가능 공간에 할당한다. 최적 적합과 같이 공간이 크기 순으로 정렬되어있어야 한다.

가변 분할 방법에서는 외부 단편화가 일어난다.

외부 단편화는 사용 가능한 공간의 총량은 100MB인데, 메모리공간이 연속적이지 않고 흩어져 있어 총량보다 용량이 작은 작업도 할당할 수 없게 되는것을 말한다.

외부 단편화를 해결할 방안으로 메모리 통합과 메모리 압축 방법이 있다.

메모리 통합 메모리 통합 방법은 하나의 작업이 끝났을 때 다른 빈 공간과 인접해 있는지 점검하여 하나로 합치는 것이다.
메모리 압축 메모리 압축 방법은 메모리의 내용을 움직여 사용 가능 공간을 큰 블록 하나로 합치는 것이다.

 

3) 버디 시스템

위 두 가지 방법 모두 단편화 문제가 있었다. 이를 해결하는 방법으로 버디 시스템이 제안되었다.

버디 시스템은 큰 버퍼들을 반복적으로 이등분하여 작은 버퍼들을 만들고, 가능할 때마다 인접한 빈 버퍼들을 합치는 과정을 반복한다. 나뉜 버퍼들 각각을 서로의 버디라고 칭한다.

할당 요청이 들어오면, 메모리를 요청한 메모리보다 크거나 같아질때까지 이등분하기를 반복한다.

예를 들면, 전체 메모리가 64KB고 들어온 요청은 8KB라면, 64KB를 32KB두개로, 32KB를 16KB 두개로, 16KB를 8KB 두개로 쪼개어 알맞은 크기로 생성된 8KB의 버디에 들어온 요청을 할당한다. 

메모리는 주소의 연속으로, 주소는 크게 두 가지 관점에서 해석 가능하다.

프로그래머가 프로그래밍에 사용하는 공간으로 보는 논리적 관점의 논리적 주소

그리고 실제 데이터나 프로그램을 저장하는 공간으로 보는 물리적 관점의 물리적 주소이다.

논리적 주소는 C/C++같은 언어에서 변수의 주소값을 출력해보면 나오는 주소를 생각하면 이해하기 쉽다.

 

실제로 프로그래머가 사용하는 논리적 주소

 

메모리 관리 장치

논리적 주소와 물리적 주소의 변환은 메모리관리장치가 처리한다.

메모리관리장치가 논리적 주소를 물리적 주소로 변환할 때 다음과 같은 방법을 사용한다.

  1. 고정 분할
  2. 동적 분할
  3. 페이징
  4. 세그먼테이션
  5. 페이지화된 세그먼테이션

프로세스의 논리적 주소에 대응하는 물리적 주소를 알아야 프로세스를 실행할 수 있는데, 두 주소를 매핑 시켜주는 작업을 바인딩이라고 한다.

바인딩은 컴파일 시간, 적재 시간, 실행 시간으로 구분할 수 있다.

 

 

+ Recent posts