CS\OS

[OS] Memory Management (1)

maedyoung 2025. 5. 5. 18:42
  • 메모리 관리의 필요성
    • 몇몇 프로세스는 physical memory에 동시에 저장되는데 이때 자신에게 할당 된 범위 내의 메모리를 벗어나 다른 메모리를 침범하는 상황이 생길 수 있다.
    • 이를 막기위한 Protection mechanism이 제공되어야 한다.

한 예시로 base register와 limit register를 사용하는 예시가 있다.

base register는 프로세스가 시작하는 메모리 주소를 저장하며, limit register는 해당 프로세스가 저장된 메모리의 크기를 저장한다. 이를 사용하는 Hardware-supported address protection 를 간단하게 알아보도록 하자

Hardware-supported address protection 

위 그림의 base 레지스터를 30004, limit을 12090으로 하자.

이 경우 cpu에 주소가 들어 왔을때 하드웨어는 각 주소가 사용자가 접근할 수 있는 메모리 범위 내에 있는지 확인하며. 범위 밖일 경우 다른 메모리로의 접근이 감지된것으로 판단해 trap을 발생시킨다.

 

Address

 

메모리 주소는 논리적 주소(logical address, 가상주소라고도 불린다), 물리적 주소(physical address)로 나뉘어 진다. 이때 논리적 주소는 cpu에서 생성된 주소로 프로그램이나 프로세스가 메모리에 접근할때 사용 된다.

 

물리적 주소란 실제 메모리(DRAM)에 저장된 주소이며 각 논리 주소에는 대응하는 물리 주소가 존재하며. 프로그램이 생성한 가상 주소는 MMU(Memory Management Unit)를 통해 물리 주소로 변환된다.

 

그렇다면 왜 이렇게 복잡하게 논리적 주소를 사용하는 것일까? 만약 물리 주소로만 있을 경우 우리는 모든 프로그램들을 직접 메모리에 load해야 할 것이며 이는 프로그램이 늘어날 수록 이러한 저장 된 위치들을 다 알고 있어야 한다 이렇게 될경우 위에서 설명했던 한 프로그램이 다른 프로그램이 저장된 메모리를 침범할 확률이 매우 높아질 것이다.

그리고 취약성,보안성 등의 이유로 우리는 논리 주소를 사용한다. 논리 주소는 모든 실행중인 프로그램 이나 프로세스들이 고유한 자신만의 메모리를 가지고 있는 것처럼 보이며 이 논리적 주소의 값을 mmu에게 전달하면 mmu는 그 주소에 맞는 물리적 주소값을 읽는다.

mmu 내부에는 relocation register가 있는데 이를통해 logical address에 특정 값을 더하는 방식으로 하는 방식이 있는데 이는 매우 이론적인 방식으로 실제로 이렇게 구현되어 있지 않는다.

만약 프로세스가 나뉘어져서 할당되었고 Base register와 limit register가 이와 같이 할당 되어있을 경우 이는 다른 프로세스의 메모리를 침범 하므로 문제가 발생한다.

이런 문제를 해결하기 위해서는 연속 메모리 할당(Contiguous Memory Allocation)을 해야한다. 

'CS\OS' 카테고리의 다른 글

[OS] Memory Management (2)  (0) 2025.05.05