3. 메모리 관리

메모리의 역할

메모리에는 크게 정보 기록(쓰기)이 가능한 RAM(Random Access Memory)과 읽기만 가능한 ROM(Read Only Memory)이 있다. USB나 SD카드는 통상 ROM으로 분류되며 쓰기도 가능하다.

일반적으로 말하는 메모리는 RAM을 말한다. 메인메모리(주기억장치)라고도 한다.

메인 메모리는 실행하는 프로그램이 로드되는 장소이며 프로그램의 작업장소이다. 하드디스크와 같은 보조기억장치는 읽고 쓰는 처리가 매우 느리므로 메모리로 읽어들이는 것이 효율적이다. 속도가 느린 하드디스크에 대한 엑세스를 극도로 줄이기 위해 하드디스크를 자주 참조하는 프로그램이나 데이터를 미리 읽어들이기 위한 메모리가 있는데 이를 캐시메모리라고 한다. cache(저장고)

메모리주소

메모리에는 'Ox12E4'와 같은 주소가 붙어있다. 주소를 지정하면 해당 주소에 저장된 데이터나 명령을 호출하거나 변경할 수 있다. Ox란 C언어식으로 16진수를 나타내는 기호이다. 실제 주소는 12E4가 된다. 16진수는 수를 0~9와 A~F까지의 16개의 문자를 사용해서 16에서 자리가 올라가는 형식으로 나타낸다.

CPU는 해당비트수만큼의 데이터를 한단위로 취급하기 때문에 표현할 수 있는 주소의 크기는 비트수에 의존한다.

32비트 CPU는 0x00000000~0xFFFFFFFF(4GB)까지 주소를 표현할 수 있다. 64비트 CPU는 자릿수가 배가 된다. 16EB(Exa Byte)까지 표현할 수 있다.

실제로 OS가 그 주소를 모두 이용할 수 있는건 아니다.

물리 메모리와 가상 메모리(하드디스크로 대피시킨 부분까지 포함한 논리적 메모리) , 그 사이의 데이터 주고받기, 메모리 확보, 정리, 재배치 등의 관리 기능이 있다.

  • 보조 기억 장치 : 하드디스크와 같이 프로그램이나 데이터를 저장하는 외부기억장치이다. 메모리에 비해 속도가 느리다.

  • 캐시 메모리(Cache memory) 속도가 느린 하드디스크의 결점을 보완하기 위해 자주 참조하는 프로그램이나 데이터를 일시적으로 읽어들이기 위한 메모리이다.

  • 가상 메모리(Virtual memory) 하드디스크 안에 페이징 파일을 작성한 후 이 파일과 메인 메모리를 합쳐 가상의ㅏ 메모리 영역으로 간주하는 것이다.

메모리의 종류

메모리 특성에 따른 종류

  • RAM 주로 프로그램의 작업 영역으로 사용된다.

    | 종류| 설명| |-----|-----| |DRAM(Dynamic RAM) 메인 메모리나 VRAM(Video, 화면 표시용 메모리)로 사용 | 리프레시 동작(정보를 보존 및 유지하기 위해 기억 내용을 다시쓰는 것)이 필요함. 소비 전력이 작다. 대용량이다. 처리가 비교적 느리다. | |SRAM(Static RAM) 캐시 메모리로 사용된다 | FlipFlop 회로(리프레시가 불필요한 회로)구조. 소비전력이 큼. 저용량. 처리 속도가 빠름|

  • ROM ROM은 기동시 시스템 체크나 BIOS 정보를 저장하는데 사용된다. 주로 기록내용을 읽어들이는 용도로 사용되지만 쓰기가 가능한 것도 있다. (단, 횟수 제한이 있다)

    • 마스크 ROM : ROM의 제조 공정에서 마이크로 프로그램등을 기록한다. 기록 내용은 변경할 수 없다.
    • PROM (Programmable ROM)
      • EPROM(Erasable Programmable ROM) : 자외선으로 다시 쓸 수 있는 ROM
      • EEPROM(Electrically Erasable Programmable ROM) : 전기적으로 다시 쓸 수 있는 ROM이다. BIOS를 저장하는데 사용한다.
      • 플래시 메모리 : 전기적으로다시 쓸 수 있는 ROM. 일괄 또는 부분적으로 삭제하거나 다시 쓰기가 가능하다. USB, SD card, SSD 에 사용된다.

메모리 공간

메모리는 목적에 따라 사용되는 영역이 다르다.

메모리 공간은 주소라 불리는 번지를 붙여서 각 영역을 식별한다.

현재 컴퓨터의 CPU에는 32비트와 64비트가 있는데 이 둘은 표현할 수 있는 주소크기가 다르므로 취급할 수 있는 메모리의 용량도 다르다.

  • 32비트 : 최대 메모리 용량 4GB(2의 32승 byte)
  • 64비트 : 최대 메모리 용량 16EB(2의 64승 byte)

    메인 메모리의 용도

    CPU가 계산을 할 때 데이터를 기억해 두기 위해 메인 메모리에는 많은 데이터를 기억할 수 있도록 되어있다. 메모리는 책상에 비유할 수 있으며 책상이 크면 많은 서류를 동시에 펼쳐놓고 작업할 수 있다.

    <메인 메모리의 용도별 종류>

    • 힙 (Heap) 파일로부터 읽어들인 데이터나 네트워크 상에서 수신한 데이터를 저장할 때와 같이 필요한 만큼만 확보하여 사용하는 메모리 영역이다. 필요가 없어지면 해제한다.

    • 스택 (Stack) 프로그램 실행 중에 이용하는 변수의 내용을 일시적으로 저장하는 메모리 영역이다. 스택은 프로그램의 한단위(C 언어의 함수)가 시작될 때 자동적으로 확보되고 처리가 종료되면 자동으로 해제된다. 스택영역의 변수는 LIFO형식으로 저장된다.

    사용할 수 있는 스택영역의 용량은 정해져 있으므로 너무 많이 사용하면 오버플로가 발생한다.

가상 기억

메인 메모리보다 큰 기억 영역을 제공하는 장치.

물리 메모리

컴퓨터에 실제로 장착되어있는 메모리를 물리 메모리라고 한다. OS가 다룰 수 있는 메모리의 용량은 정해져 있는데, 물리 메모리가 그 최대 용량을 모두 갖고 있다고 말할 수 없다.

가상 메모리

최근의 OS는 하드디스크 안에 페이징 파일(스왑파일)이라는 파일을 작성한다. 이 파일과 물리 메모리를 합쳐서 가상의 메모리 영역으로 간주함으로써 물리 메모리의 용량을 초과한 메모리를 다룰 수 있다. 가상메모리 공간을 물리적인 메모리 공간이라고도 한다.

스왑

메모리 용량이 부족할 때 물리 메모리와 페이징 파일 사이에서 메모리상의 프로세스를 일시적으로 교환하는 것을 스왑이라고 한다. 스왑은 하드디스크에 자주 액세스하므로 퍼포먼서 저하로 이어진다.

  • 스왑 아웃 : 메모리에서 하드디스크로 대피하는 것
  • 스왑 인(로드) : 하드디스크에서 메모리로 되돌리는 것

    우선순위가 낮은 프로세스를 페이지 파일로 저장해서 점유하고 있던 메인 메모리를 해제한다.

메모리 확보와 해제

메모리의 확보와 해제

OS가 프로세스나 데이터의 메모리 영역을 확보하는 것을 Allocation(할당)이라고 한다. 확보한 메모리 영역은 처리 종료시 해제할 필요가 있다. 메모리(힙)에서 일정 영역을 확보하고 처리를 수행한다. 수행후 OS가 해제명령을 내린다.

리로케이션

한번 확보한 메모리 영역의 위치를 변경하는 것을 리로케이션(Relocation: 재배치)라고 한다. 실행 중인 프로그램의 위치를 변경하는 것을 다이내믹 리로케이션(Dynamic Relocation:동적재배치)라고 한다. 가상 메모리상의 주소를 물리 메모리 주소로 변환할 때는 동적 재배치가 일어난다.

가비지 컬렉션

힙 영역이 가득차서 액세스할 수 없을 때는 불필요한 메모리 영역을 자동으로 해제하는데 이를 Garbage Collection이라고 한다.

가비지란 쓰레기라는 뜻으로 가비지 콜렉션은 사용이 끝난 메모리 영역을 재이용하는 것을 말한다.

컴팩션

단편화된 메모리의 미사용 영역을 모아서 연속으로 사용할 수 있는 메모리 영역을 만드는 것을 Compaction: 조각모음이라고 한다.

데이터 저장 순서

메모리 안에 놓인 데이터의 출입모습

메모리 추출 알고리즘

OS가 데이터를 읽어들일 때 빈 용량이 없으면 기존의 데이터를 메모리로부터 꺼낼 필요가 생긴다.

  • LIFO (Last In First Out) 메모리에 나중에 넣은 데이터를 먼저 꺼내는 방법. 스택 저장시 사용되는 방법이다.

    스택에 저장하는 것은 PUSH, 스택에서 꺼내는 것은 POP이라고 한다.

  • FIFO (First In First Out) 메모리에 먼저 넣은 데이터를 먼저 꺼내는 방법. 잡관리의 저장방법으로 사용된다. 데이터의 대기행렬을 Queue라고 한다.

    큐에 저장하는 것은 Enqueue, 큐에서 꺼내는 것을 Dequeue라고 한다.

    연결 리스트(Linked List)

    하나의 데이터가 요소와 포인터로 구성되어 포인터가 다음 데이터의 메모리 주소를 가리킴으로써 연속한 데이터를 저장하는 방법

    데이터요소 + 포인터(다음 데이터의 위치정보를 가리킨다)

    <연결리스트 종류>

  • 쌍방향 리스트

  • 환형 리스트

매핑

OS가 물리 메모리와 가상 메모리 사이에서 프로그램이나 데이터를 대응시키는 것을 의미한다.

페이징 Paging

고정 길이 페이지 단위(4KB)로 매핑을 수행하는 것을 의미한다.

페이징이 빈번히 일어나는 것을 Thrashing 이라고 한다. 이는 CPU의 이용효율 저하의 원인이 된다.

페이지 인: 가상메모리에서 물리 메모리로 우선순위가 높은 페이지를 전송하는 것. 페이지 아웃 : 물리메모리에서 가상메모리로 대피시키는 것.

세그멘테이션(Segmentation)

가변 길이 세그먼트 단위로 매핑을 수행하는 것을 의미한다. 세그먼트에는 프로세스에서 사용하는 메모리를 연속해서 할당한다. 세그먼테이션을 빈번히 수행하면 Fragmentation 이 발생하므로 컴팩션을 수행할 필요가 있다.

롤 인 : 가상메모리에서 물리 메모리로 우선순위가 높은 세그먼트를 전송한다. 롤 아웃 : 물리메모리에서 가상메모리로 대피시킨다.

메모리 맵(I/O)

입출력 기기를 제어할 때 메인 메모리와 I/O 주소 공간을 공유하는 방식을 메모리 맵 I/O(Memory Mapped I/O)라고 한다. I/O 주소 공간도 메모리의 일부로 취급한다. CPU가 지정한 메모리를 통해서 디바이스 또는 CPU로부터 명령이나 데이터를 기록한다.

CPU가 주소버스를 통해 메모리 주소를 메인 메모리에 있는 I/O주소공간에 지정한다. 디바이스 컨트롤러 메모리에 있는 명령문과 데이터는 해당 공간과 연동되며 메인 메모리에 복사된 후 데이터 버스를 통해 CPU와 데이터를 주고 받는다.

DMA(Direct Memory Access)

CPU를 거치지 않고, 입출력 장치와 메모리 사이에 직접 데이터를 주고받는 방식이다. 메모리와 입출력 기기 사이에 놓인 DMA 컨트롤러가 CPU를 대행하여 입출력 기기의 동작을 제어한다. DMA 컨트롤러는 인터럽트 처리도 대행한다.

DMA는 CPU에 부담을 주지 않아서 큰 데이터 전송에 적합하다.

results matching ""

    No results matching ""