Home 메모리
Post
Cancel

메모리

메모리의 종류

아래쪽으로 갈수록 속도는 느려지고, 용량은 커지고, 가격은 싸진다.

  • 레지스터
    • 가장 빠르고 CPU내에 존재한다.
    • 컴퓨터가 꺼지면 데이터가 사라진다.(휘발성 메모리)
      • EX) 32bit CPU (= 32bit 레지스터인 CPU)
    • 메인메모리(RAM)의 값을 레지스터로 가지고 와서 계산하고 결과 값을 다시 RAM으로 보낸다.
      • 어셈블리어는 기계어와 1:1로 매칭이 되기때문에 실제로 레지스터를 사용하는 것을 볼 수 있다.
  • 캐시
    • 레지스터와 메인 메모리 사이에 존재한다.
    • 메인메모리는 레지스터에 비해 느리고, 레지스터에서 계산을 할때 메인메모리의 값을 가지고 오는데 시간이 걸린다. 이때 필요할 것 같은 데이터를 미리 가져와 캐시에 저장한다.
    • 성능을 위해 여러개의 캐시를 둔다.
    • 레지스터는 계산시에 캐시에 원하는 값이 있는지 확인해보고 없으면 메인메모리에서 값을 가지고 와 계산한다.
  • 메인메모리(RAM)
    • 실제 운영체제와 프로세스들이 올라가는 곳
    • 전원이 공급되지않으면 날아간다.(휘발성 메모리)
    • 가격이 비싸서 실행중인 프로그램만 올린다.

레지스터와 메인메모리는 휘발성 메모리이고 비싸기때문에 실제 문서 등을 저장하기엔 적합하지 않다.

  • 보조 저장 장치
    가격이 저렴하고 전원이 들어오지 않아도 지워지지않는 비휘발성 메모리
    • SSD
    • HDD(하드디스크)

메모리와 주소

폰 노이만 구조: 모든 프로그램을 메모리에 올려 실행시킨다. 멀티프로그래밍 환경으로 여러 프로세스들이 메모리에 올라오면서 관리하기 힘들어진다. 메모리를 관리하기 위해 1바이트(8bit) 크기로 구역을 나누고 숫자(= 주소)를 매긴다.

  • 물리 주소 공간
    • 메모리 관리자가 본 주소
    • 메모리를 컴퓨터에 연결하면 0x0번지 부터 시작하는 주소공간
  • 논리 주소 공간
    • 사용자 기준에서의 공간
    • 메모리 0번지에서 실행한다고 가정하고 개발한다.
    • 실제 메모리에는 운영체제 영역이 있어서 0번지 주소부터 메모리를 사용하지 않는다.하지만 유저는 0번지부터 프로세스를 올린다고 가정하고 개발, 실행하고 이 주소를 논리 주소라고 한다.

유저가 논리 주소로 요청하면 메모리 관리자는 실제 시작번지를 계산해서 물리 주소에서 값을 꺼내온다. -> 논리 주소로 물리 주소에 접근이 가능하다.

  • 메모리에 운영체제를 위한 공간은 따로 마련해둔다.
  • 사용자 공간(프로세스들을 위한 공간)이 운영체제 공간으로 넘어오면 위험하기 때문에 하드웨어적으로 경계레지스터를 만들어서 분리한다.
  • 경계레지스터: cpu 내에 존재하는 레지스터로 사용자 프로세스가 경계 레지스터 값을 벗어나면 그 프로세스를 종료시킨다.

메모리 할당방식

메모리보다 더 큰 프로그램을 실행시키는 방법

  • 유니프로그램 시
    • 메모리 오버레이
      • 프로그램을 잘라서 당장 실행시켜야 하는 부분을 메모리에 올리고 다른 부분은 하드디스크의 스왑영역에 올리는 방식
    • 사용에 무리는 없지만 스왑이 일어나기때문에 약간 느릴 수 있다.
  • 멀티 프로그래밍 환경에서는 어떻게 할까?
    • 가변 분할 방식(세그멘테이션)
      • 프로세스의 크기에 따라 메모리를 나눈다.
      • 연속메모리 할당
        • 연속적으로 메모리가 할당되기 때문에 내부단편화가 없다.
        • 외부단편화가 발생한다.
          • 외부단편화가 일어났을떄 조각 모음화를 한다.
          • 조각모음화를 하려면 현재 할당된 프로세스들을 일지중지하고 메모리공간을 이동시켜야 하기때문에 오버헤드가 발생한다.
    • 고정 분할 방식(페이징)
      • 프로세스 크기와 상관없이 정해진 크기로 메모리를 나눈다.
      • 비연속 메모리 할당(프로세스가 정해진 메모리 크기에 따라 쪼개지기 때문에 비연속적으로 할당된다.)
        • 구현이 간단하고 오버헤드가 적다.
        • 내부단편화 발생
          • 작은 프로세스여도 일정 메모리가 할당되기때문에 낭비되는 메모리가 존재한다.
          • 해결방법은 없고 할당되는 메모리의 크기를 줄여서 내부단편화를 줄이려고 한다.
      • 외부단편화: 실질적인 메모리 공간이 충분해도 연속적 메모리 공간이 존재하지 않기때문에 할당 못하는 현상
      • 내부단편화: 메모리가 프로세스 보다 더 크게 할당되어서 공간이 낭비되는 현상
    • 버디시스템
      가변 분할과 고정 분할을 혼합해 단점을 최소화한 시스템으로 2의 승수로 메모리를 분할해 메모리를 할당하는 방식
    • 할당을 원하는 프로세스의 크기에 따라 2의 승수로 나누고 가장 접근되는 수로 할당한다. 낭비되는 메모리의 크기도 최소한으로 만들고 근접한 메모리 공간을 합치기도 용이하다.
    • 2의 승수로 나누기떄문에 근접한 메모리 공간을 조립하면 큰 공간이 만들어진다.
    • 프로세스 크기에 따라 메모리를 다르게 할당하되, 내부단편화를 최소화하는 방법이다.
This post is licensed under CC BY 4.0 by the author.

중간정리

Session과 JWT