본문 바로가기
CS/컴퓨터 네트워크

Main Memory

by snow_white 2023. 4. 1.

Background

Memory는 각각 주소가 할당된 byte들의 array로 구성된다.

 

기본 하드웨어

  • Main Memory와 processor 자체에 내장되어 있는 register들은 CPU가 직접 접근할 수 있는 유일 general-purose storage이다
  • 모든 실행되는 instruction과 data들은 CPU가 직접적으로 접근할 수 있는 main memory와 register에 있어야 한다.
  • CPU에 내장되어 있는 register들은 일반적으로 CPU clock의 1cycle 내에 접근이 가능하다
  • 대부분의 CPU들은 register에 있는 instruction의 decode와 간단한 opertion을 이 시간 내에 처리한다.
  • memory bus를 통해 전송되는 main memory의 경우, main memory에 대한 접근을 완료하기 위해서는 많은 CPU clock tick cycle이 소요되며, 이 경우 CPU가 필요한 데이터가 없어서 명령어를 수행하지 못하고, 지연(Stall)되는 현상이 발생하게 된다
  • 위 문제를 해결하기 위해 CPU 와 main memory 사이에 빠른 속도를 가진 Cashe를 추가하는 것이다
  • Cache는 보통 빠르게 접근할 수 있도록 하기 위해 CPU 안에 있으며, Memory 접근 속도를 향상시킨다
  • 시스템이 올바르게 동작하기 위해서는 운영체제 영역을 보호해야 하며 Multi-user System인 경우, 추가적으로 다른 user program의 특정 user program을 접근하는 것을 막아야 한다

Address Binding

  • 프로그램은 binary executable file로 disk에 저장되어 있어야 한다
  • 프로그램이 Main Memory로 올라오게 되면, 프로세스가 되어야 한다
  • 디스크에서 Main Memory로 들어오기를 기다리고 있는 프로세스들의 집합은 input queue를 구성한다
  • 보통 single-tasking의 작업 절차는 input queue의 프로세스 중 하나를 선택해서, Memory로 load한다
  • 이 프로세스가 종료되면, 해당 프로세스가 사용했던 memory space가 available space가 된다
  • 대부분의 시스템은 user 프로세스가 memory 내 어느 부분으로도 올라올 수 있도록 지원한다
  • 대부분의 경우 user program은 아래 그림과 같이 여러 단계를 거쳐 실행된다

(1) 컴파일 시간 바인딩

만약 프로세스가 memory 내에 들어갈 위치를 컴파일 시간에 미리 알 수 있으면 컴파일러는 absolute code를 생성할 수 있다.

(2) 적재 시간 바인딩

만약 프로세스가 memory 내 어디로 올라오게 될지를 컴파일 시점에 알지 못하면, 컴파일러는 일단 이진 코드를 relocated code로 만들어야 한다.

(3) 실행 시간 바인딩

만약 프로세스가 실행하는 중간에 Memory 내의 한 세그먼트로부터 옮겨질 수 있다면, 바인딩이 실행 시간까지 허용되었다 라고 한다.

Logical Address vs. Physical Address

  • 논리 주소 (logical address): 사용자 프로세스에서 사용하기 위해 CPU에서 생성된 주소.
  • 물리 주소 (physical address): 실제 하드웨어 상의 주소. 논리 주소와는 아무런 관계가 없어야 하며, 메모리 주소 레지스터 (memory-address register)에 저장되는 주소.

논리 주소를 물리 주소에 매핑하기 위해서는 논리적 주소 공간 (logical address space)와 물리적 주소 공간 (physical address space)이 분리되어야 함.

Dynamic Loading

메모리 공간을 효율적으로 사용하기 위해 프로그램, 루틴을 한꺼번에 로딩하지 않고 필요할 때마다 로딩하는 방식

  • 재배치 가능한 링킹 로더는 필요할 때마다 호출되어 주소 테이블 (address table)을 업데이트할 수 있다.

MMU (Memory Management Unit)

논리 주소를 물리 주소로 매핑하기 위한 하드웨어 장치

프로그램의 실행 중에는 가상 주소를 물리 주소로 바꿔주어야 하는데, 이 변환 작접은 hardware인 MMU에 의해 실행된다.

MMU에는 재배치 레지스터 (relocation register)가 존재하여 베이스 레지스터의 역할을 함. CPU가 전달한 논리 주소를 규칙에 맞춰 물리 주소에 매핑한다.

Contiguous Memory Allocation

  • OS와 사용자 프로세스가 메모리가 사용할 수 있다
  • 여러 사용자 프로세스가 동시에 메모리에 있을 수 있어야 하기 때문에 사용 가능한 메모리를 어떻게 할당할지 결정해야 한다
  • 연속 메모리 할당은 프로세스를 단일 구역 (single section)에 할당하는 방식으로, 여러 곳에 나눠서 할당되어있지 않고 한 구역에 할당되어있으므로 연속적이다
  • 이때 메모리 보호는 재배치 레지스터 (relocation register)와 한계 레지스터 (limit register)를 통해 이루어진다

프로세스의 할당 & 해제를 반복하다보면 빈 공간이 생기는데, 이를 구멍 (hole)이라고 부른다.

저장 공간에 동적으로 메모리를 할당할 때 여러 구멍들 중에 크기 n만큼의 메모리를 어느 구멍에 할당할지에 대한 문제가 발생한다.

 

메모리 할당 방법

1️⃣ 최초 적합 (first-fit): 메모리의 처음부터 살펴 적당한 첫 번째 빈 공간 할당

2️⃣ 최적 적합 (best-fit): 여러 공간중에 빈 공간을 가장 적게 만들 공간 선택

3️⃣ 최악 적합 (worst-fit): 여러 공간중에 빈 공간을 가장 크게 만들 공간 선택

페이징

  • 프로세스의 내용을 작업을 크기가 동일한 페이지로 나눠 처리 (2^k 단위)
  • 물리적 메모리도 같은 크기의 페이지프레임으로 나누어 놓음
  • 프로그램을 페이지 단위로 페이지 프레임에 올리고, 이 관계를 페이지 테이블에 기록 이 사상관계를 가지고 실제 메모리에서의 주소를 찾아내어 프로그램 실행하는 방법

페이징 시스템에서 프로그램 실행 준비

  • 프로세스에 필요한 페이지의 개수를 결정하여 각부분에 페이지 번호 부여
  • 메모리의 빈 프레임을 조사하여 프로세스를 적재할 위치 파악
  • 프로세스의 페이지를 빈 프레임에 적재하도록 준비

페이징의 특징

  • 빈 프레임에 어떤 페이지든 적재할 수 있어 메모리 효율적 사용
  • 프레임 간에 외부 단편화도 발생하지 않음
  • 한 프로세스의 페이지를 메인 메모리의 여러 위치에 분산 적재하여 운영체제의 페이지 관리 부담 큼

프레임 단위로 적재하므로 어떤 프로세스에 필요한 공간이 페이지 크기보다 작으면, 마지막 페이지에 할당된 프레임이 완전히 차지 않아 내부 단편화가 발생 가능 (하지만 메모리 낭비는 최소화 됨)

댓글