Memory Virtualization & Address Space

JungJae Lee·2023년 6월 3일
0

운영체제

목록 보기
1/7

Memory Virtualization

What is memory virtualization?

메모리 가상화

  • OS virtualizes its physical memory.
  • OS provides an illusion memory space per each process.
  • It seems to be seen like each process uses the whole memory

메모리 가상화는 운영 체제가 물리적인 메모리를 가상화.

  • 각 프로세스마다 메모리 공간이 있는 것처럼 보이도록 한다.
  • 각 프로세스가 전체 메모리를 사용하는 것처럼 보이게 한다.

Benefit of Memory Virtualization

Ease of use in programming

  • 물리적인 메모리의 세부 사항을 신경 쓰지 않고 프로그램을 작성할 수 있다.
  • 각 프로세스는 자신만의 독립된 메모리 공간을 가지므로, 다른 프로세스의 영향을 받지 않고 프로그래밍할 수 있다.`

Memory efficiency in terms of times and space

  • 가상 메모리를 사용하면 물리적인 메모리 크기보다 큰 프로그램을 실행할 수 있다.
  • 필요한 메모리 영역만 실제로 물리적 메모리에 로드되고, 나머지 부분은 디스크의 가상 메모리로 저장됩니다.
  • 프로그램의 실행에 필요한 메모리 공간을 효율적으로 관리할 수 있습니다.

The guarantee of isolation for processes as well as OS
Protection from errant accesses of other processes
프로세스 및 운영 체제의 격리 보장, 다른 프로세스의 잘못된 접근으로부터 보호

각 프로세스는 독립된 메모리 공간을 할당받으며, 다른 프로세스의 메모리에 접근할 수 없습니다.
이로써 프로세스 간의 충돌이나 비정상적인 접근으로 인한 문제를 방지할 수 있습니다.

OS in The Early System

초기 운영체제는 메모리에 상주하는 루틴의 집합이었다.
물리 메모리에 하나의 실행 중인 프로그램(프로세스)이 존재하였고, 나머지 메모리를 사용하였다.

가상화는 거의 존재하지 않았다.

  • Load only one process in memory.
  • Poor utilization and efficiency

Multiprogramming and Time Sharing

Multiprogramming (Load multiple processes in memory).

  • Execute one for a short while.
  • Switch processes between them in memory.
  • Increase utilization and efficiency. 효율성 개선, CPU 이용률 증가

시분할(Time Sharing)을 구현하는 한 가지 방법은 하나의 프로세스를 짧은 시간동안 실행하는 것이다. 해당 기간동안 프로세스에게 모든 메모리를 접근 할 권한이 주어진다.
여러 프로세스를 메모리에 로드하고, 실행 준비상태에 있다.
운영체제는 그들을 전환하면서 실행한다.

한 프로세스를 잠시 실행한 후, 메모리에서 프로세스를 전환한다.

  • 한 프로세스가 입출력을 실행하면, CPU는 다른 프로세스로 전환하였다.

프로그램이 메모리에 동시에 존재하려면 보호(Protection)이 중요한 문제가 된다.

Cause an important protection issue.

  • Errant memory accesses from other processes

다른 프로세스로부터의 잘못된 메모리 접근으로 인한 문제가 발생할 수 있다.

한 프로세스가 다른 프로세스의 메모리 영역에 잘못된 접근을 시도하는 경우가 있을 수 있다.

이러한 잘못된 메모리 접근은 다른 프로세스나 운영 체제에 대한 예기치 않은 동작을 유발할 수 있으며, 시스템의 안정성과 보안을 위협할 수 있다.

이러한 보호 문제를 해결하기 위해 운영 체제는 메모리 가상화를 통해 각 프로세스에게 독립된 가상 메모리 공간을 제공한다.
이를 통해 각 프로세스는 자신의 메모리 영역에만 접근할 수 있으며, 다른 프로세스의 메모리에는 접근할 수 없다.

Virtual Address Space

사용하기 쉬운 메모리 개념
OS creates an abstraction of physical memory.

  • The address space contains all about a running process.
  • That consists of program code, heap, stack and etc


실행중인 프로그램이 가정하는 메모리의 모습
주소공간은 실행 프로그램의 모든 메모리 상태를 갖고 있다.

Code(명령어)
Where instructions live 프로그램의 명령어들이 저장되는 영역
반드시 메모리에 존재해야 하고, 주소공간도 존재한다.

실행 가능한 기계어 코드가 위치하며, 정적이기 때문에 메모리에 저장하기 쉽다.

주소공간의 상단에 배치하며 프로그램이 실행되면서 추가 메모리를 필요로 하지 않는다.

Heap
Dynamically allocate memory.(동적으로 할당되는 메모리를 위해 사용)

  • malloc in C language
  • new in object-oriented language(C++, java)

동적으로 할당되는 메모리가 저장되는 영역이다.두 프로그램의 실행 중에 필요에 따라 메모리를 동적으로 할당하고 해제할 수 있다. 프로그램에 실행에 더불어 확장되거나 축소될수 있으므로 상단에 힙이 존재하고 하단에 스택이 존재한다.

두 메모리 영역은 확장할 수 있어야 하기 때문에 이런 방식으로 배치하고, 주소 공간의 양 끝단에 배치해야 두 영역 모두 확장하는 것이 가능하다. (두 영역의 확장 방향은 반대 방향이다)

합은 코드 바로 뒤 1KB부터 시작하고 아래방향으로 확장한다.

Stack
함수 호출 체인 상의 현재 위치, 지역 변수, 함수 인자와 반환 값 들을 저장하는데 사용한다.
Store return addresses or values.
Contain local variables arguments to routines.

함수 호출과 관련된 정보들이 저장되는 영역이다. 함수 호출 시에 지역 변수, 매개변수, 복귀 주소 등이 스택에 저장되며, 함수 호출이 완료되면 해당 정보들은 스택에서 제거된다.

스택은 16KB에서 시작하고 위쪽 방향으로 확장한다.

하지만 이는 관례이며 다른 방식으로 배치할 수 있다.
실제로 프로그램이 물리주소 0에서 16KB사이에 존재하는 것은 아니며 실제로는 임의의 물리 주소에 탑재된다.

주소공간에 여러 쓰레드가 공존할 떄는 이런식으로 주소 공간을 나누게 되면 동작하지 않는다.

정적으로 초기화된 영역
데이터(Data) 영역: 전역 변수와 정적(static) 변수가 저장되는 영역입니다. 초기화된 데이터는 데이터 영역에 저장되고, 초기화되지 않은 데이터는 BSS(Block Started by Symbol) 영역에 할당됩니다.

힙과 스택 사이의 영역: 힙과 스택 사이에는 사용되지 않는 공간이 존재할 수 있습니다. 이는 힙과 스택의 크기가 동적으로 변경될 수 있기 때문입니다.

Process memory layout

#include <stdio.h>
#include <stdlib.h>

int global_variable;  // 전역 변수 (데이터 영역)

int main() {
    int stack_variable = 5;  // 지역 변수 (스택 영역)
    int *heap_variable = (int*)malloc(sizeof(int));  // 동적으로 할당된 변수 (힙 영역)

    if (heap_variable == NULL) {
        printf("힙 메모리 할당에 실패했습니다.");
        return 1;
    }

    *heap_variable = 10;

    printf("전역 변수: %d\n", global_variable);
    printf("스택 변수: %d\n", stack_variable);
    printf("힙 변수: %d\n", *heap_variable);

    free(heap_variable);  // 동적 할당 해제

    return 0;
}

Virtual Address

Every address in a running program is virtual.

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
printf("location of code : %p\n", (void *) main);
printf("location of heap : %p\n", (void *) malloc(1));
int x = 3;
printf("location of stack : %p\n", (void *) &x);
return x;
}

A simple program that prints out addresses
포인터를 출력하는 C 프로그램에서 출력되는 값은 모두 Virtual address이다.
User level 프로그램이 볼 수 있는 모든 주소는 가상 주소이다.
명령어와 데이터가 탑재되어있는 물리 메모리 주소는 운영체제뿐이다.

The output in 64-bit Linux machine

location of code : 0x40057d
location of heap : 0xcf2010
location of stack : 0x7fff9ca45fcc

OS translates the virtual address to physical address

주소공간에서 코드가 제일 먼저 등장하고, 다음에 힙이 배치되고 마지막으로 대규모 가상 공간의 반대편에 스택이 위치한다.
모든 주소느 가상주소이며 저장된 실제 물리 메모리 위치에서 값을 반입하기 위해 운영체제와 하드웨어에 의해 물리 주소로 변환된다.

Address Translation

Hardware transforms a virtual address to a physical address.

  • The desired information is actually located in a physical address.

The OS must get involved at key points to set up the hardware.

  • The OS must manage memory to judiciously intervene.

하드웨어는 가상 주소를 물리 주소로 변환합니다.
실제로 원하는 정보는 물리 주소에 위치하게 됩니다.
이를 위해 운영 체제는 핵심적인 지점에서 하드웨어를 설정하는 역할을 수행해야 합니다.
또한, 운영 체제는 메모리를 관리하여 필요한 시점에 적절히 개입해야 합니다.

가상 주소와 물리 주소 간의 변환은 가상 메모리 관리 기술을 통해 이루어집니다. 가상 메모리는 각 프로세스가 자신만의 독립된 가상 주소 공간을 가지며, 이 가상 주소는 물리적인 메모리 주소와 매핑됩니다. 하드웨어의 메모리 관리 유닛(MMU, Memory Management Unit)은 가상 주소를 받아들이고 이를 물리 주소로 변환하여 실제 메모리에 액세스합니다.

가상 주소를 물리 주소로 변환하는 과정에서 운영 체제는 페이지 테이블이라는 데이터 구조를 관리하며, 이는 가상 주소와 물리 주소 간의 매핑 정보를 담고 있다. 운영 체제는 프로세스의 가상 주소 공간을 적절히 관리하고, 필요한 페이지를 메모리에 로드하거나 페이지를 디스크에 스왑하는 등의 작업을 수행한다.

Example: Address Translation

void func() {
int x=3000;
...
x = x + 3; // this is the line of code we are interested in
}
  1. Load a value from memory
  2. Increment it by three
  3. Store the value back into memory

컴파일러는 이 코드를 어셈블리 코드로 변환한다.

Assembly

128 : movl 0x0(%ebx), %eax ; load 0+ebx into eax
132 : addl $0x03, %eax ; add 3 to eax register
135 : movl %eax, 0x0(%ebx) ; store eax back to mem
  1. Load the value at that address into eax register.
  2. Add 3 to eax register.
  3. Store the value in eax back into memory.

x의 주소는 레지스터 ebx에 저장되어 있다고 가정한다.
이 주소에 저장되어 있는 값을 movl명령어(longword를 이동하는 명령어)를 사용하여 범용 레지스터 eax에 넣는다.
다음 명령은 eax에 3을 더하고 마지막으로 eax의 값을 같은 위치의 메모리에 저장한다.

코드와 데이터가 프로세스 주소공간에 배치되어있는 그림

세개의 명령어 코드는 주소 128에 위치하고 변수 x의 값은 15KB(아래 쪽 스택)에 위치한다. x의 초기값은 3000이다.

• Fetch instruction at address 128
• Execute this instruction (load from address 15KB)
• Fetch instruction at address 132
• Execute this instruction (no memory reference)
• Fetch the instruction at address 135
• Execute this instruction (store to address 15 KB)

프로그램 관점에서 주소 공간은 주소 0부터 시작해서 최대 16KB 까지이다. 프로그램이 생성하는 모든 메모리 참조는 이 범위 내에 있어야한다.

Dynamic Relocation: Base and Bound

동적 (하드웨어 기반) 재배치
The OS wants to place the process somewhere else in physical
memory, not at address 0.
The address space start at address 0.

동적 재배치(Dynamic Relocation)은 운영 체제가 프로세스를 물리적인 메모리의 다른 위치에 위치시키려는 경우를 의미한다. 이 때 프로세스의 주소 공간은 보통 0번지에서 시작된다.

동적 재배치를 통해 운영 체제는 프로세스의 메모리 위치를 자유롭게 조정할 수 있다. 이는 메모리 공간을 효율적으로 활용하고, 프로세스 간의 충돌을 방지하며, 시스템의 유연성을 높이는 데 도움을 준다.

각 CPU마다 2개의 하드웨어 레지스터가 필요하다.
하나는 베이스(base) 레지스터, 다른 하나는 바운드(bound)레지스터

Base and Bounds Register

Dynamic(Hardware base) Relocation

Base Register는 프로세스의 가상 주소 공간에서 물리 메모리의 시작 위치를 가리키는 주소를 저장하는 레지스터이다.
Bound Register는 프로세스의 주소 공간의 크기를 나타내는 값이 저장되는 레지스터이다.
이 베이스와 바운드 쌍은 우리가 원하는 위치에 주소공간을 배치할 수 있게 하며 배치와 동시에 프로세스가 오직 자신의 주소공간에만 접근한다는 것을 보장한다.

When a program starts running, the OS decides where in physical memory a process should be loaded.

  • Set the base register a value.

프로세스를 메모리에 로드할 때, 운영 체제는 Base Register를 설정하여 프로세스의 가상 주소 공간을 물리 메모리의 원하는 위치로 이동시킨다.

physical address == virtual address ++ base

프로세스가 생성하는 메모리 참조는 가상 주소이다. 하드웨어는 베이스 레지스터의 내용을 이 주소에 더하여 물리 주소를 생성한다.

  • Every virtual address must not be greater than bound and negative.

00 \leq virtual address << bounds

Relocation and Address Translation

명령어가 하나 실행될 때 일어나는 변화

# Fetch instruction at address 128 
128 : movl 0x0(%ebx), %eax

# 32896 = 128 + 32KB(Base)

PC(프로그램 카운터)는 128로 설정된다. 하드웨어가 이 명령어를 반입할 때 먼저 PC값을 베이스 레지스터의 값 32KB(32768)에 더해 32896의 물리 주소를 얻는다.

그 뒤에 하드웨어는 해당 물리주소에서 명령어를 가져온다. 그리고 프로세서는 명령어의 실행을 시작한다.

가상주소 15KB의 값을 load하라는 명령어를 받아서 다시 15KB(Base)를 더해 물리주소 47KB에서 원하는 내용을 load한다.

가상주소에서 물리주소로의 변환이 주소변환이라고 불리는 기술이다. 하드웨어는 프로세스가 참조하는 가상주소를 받아들여 데이터가 실제로 존재하는 물리주소로 변환한다. 이 주소의 재배치는 실행시에 일어나고 프로세스가 실행을 시작한 이후에도 주소공간을 이동할 수 있기 때문에 동적 재배치라고 불린다.

동적 재배치는 프로그램 실행시에 일어나며 프로세스 실행중에도 주소공간의 이동이 가능하기 때문에 동적 재배치라고 불린다.

Bounds Register


바운드 레지스터는 보호를 지원하기 위해 존재한다. 프로세서는 먼저 메모리 참조가 합법적인지 확인하기 위해 가상주소가 바운드 안에 있는지 확인한다.
the processor will first check that the memory reference is within bounds to make sure it is legal

앞의 예시에서 바운드 레지스터는 항상 16KB로 설정된다. 프로세스가 바운드보다 큰 가상주소 또는 음수인 가상 주소를 참조하면 CPU는 예외를 발생시키고 프로세스는 종료된다.

바운드의 요점은 프로세스가 생성한 모든 주소가 합법적이고 프로세스의 범위에 있다는 것을 확인하는 것이다.

베이스와 바운드 레지스터는 CPU칩 상에 존재하는 하드웨어 구조이다.
CPU당 1쌍
주소 변환에 도움을 주는 프로세서의 일부를 메모리 관리 유닛(MMU, Memory Management Unit)이라고 부른다.

베이스와 바운드를 이용한 주소변환을 이해하기 위해 주소공간의 크기가 4KB인 프로세스가 물리 주소 16KB에 탑재되어있다고 가정하자.
주소변환의 결과는 다음과 같다.
가상주소 -> 물리주소
0KB -> 16KB
1KB -> 17KB
3000 -> 19384(16384 + 3000)
4400 -> 20784 (Fault, 바운드에서 벗어남)
20KB(20480)을 넘었기 때문에 폴트를 일으킨다. (예외 발생)

Hardware Requirements

Privileged mode
두 가지 CPU모드가 필요하다. 운영체제는 Privileged mode(커널 모드)에서 실행하며 컴퓨터 전체에 대한 접근 권한을 가진다.

응용프로그램은 사용자 모드에서 실행되며, 할 수 있는 일에 제한이 있다.

프로세서 상태 워드(Processor status word) 레지스터의 한 비트가 비트가 CPU의 현재 실행 모드를 나타낸다.

특정한 순간(시스템 콜 또는 다른 종류의 예외나 인터럽트 발생 시) CPU는 모드를 전환한다.

Base/Bounds registers
하드웨어는 베이스와 바운드 레지스터를 자체적으로 제공한다. CPU는 메모리 관리 장치(MMU)의 일부인 추가의 레지스터 쌍을 가진다.

Ability to translate virtual addresses and check if within bounds
프로그램이 실행 중인 경우 하드웨어는 프로그램이 생성한 가상 주소에 베이스 값을 더하여 주소를 변환한다. 하드웨어는 주소가 유효한지 검사할 수 있어야 한다. 이 검사는 바운드 레지스터와 CPU내의 일부 회로를 사용하여 이루어진다.

Privileged instructions to update base/bound
하드웨어는 베이스와 바운드의 레지스터 값을 변경하는 특권 명령어를 제공해야한다. 커널 모드에서만 레지스터를 변경할 수 있다.

Privileged instructions to register exception handlers
CPU는 사용자 프로그램이 바운드를 벗어난 주소로 불법적인 메모리 접근을 시도하려는 상황에서 예외(Exception)를 발생시킬 수 있어야 한다.
segmentation fault
이 경우 CPU는 사용자 프로그램의 실행을 중지하고 운영체제의 바운드 벗어남 예외 핸들러Exception handler가 실행하도록 조치해야한다.
이때 운영체제 핸들러는 어떻게 대처할지 결정할 수 있다. 이 경우 프로세스를 종료시킬 확률이 매우 높다.

Ability to raise exceptions
사용자 프로그램이 특권이 필요한 베이스와 바운드 레지스터 값의 변경을 시도하면 CPU는 예외를 발생시키고 사용자 모드에서의 특권 연산 발생 핸들러를 실행시켜야 한다.
CPU는 이 핸들러들의 주소를 파악하기 위한 방법을 제공해야하고, 몇 개의 특권 명령어가 더 필요하다.

하드웨어 요구사항 정리

특권 모드, 베이스/바운드 레지스터
특권 모드(커널 모드)는 사용자 모드 프로세스가 특권 명령을 실행하지 못하도록 하며, Base/bounds 레지스터는 주소 변환과 경계 검사를 지원하기 위해 사용된다.

  • 가상 주소를 변환하고 Bound(범위)안에 있는지 검사
  • 베이스/바운드를 갱신하기 위한 특권 명령어
  • 예외 핸들러 등록을 위한 특권 명령어
  • 예외 발생 기능

운영 체제는 특권 명령을 사용하여 레지스터 값을 설정하고 업데이트하며, 예외 처리기 코드를 등록하여 예외 발생 시 처리할 수 있도록 한다. 또한, 예외 처리를 위해 하드웨어는 예외를 발생시킬 수 있는 기능을 갖추고 있어야 한다.

작성중

OS Issues for Memory Virtualizing

The OS must take action to implement base-and-bounds approach.

운영체제가 반드시 개입되어야 하는Three critical actions:

  1. When a process starts running:
    Finding space for address space in physical memory

  2. When a process is terminated:
    Reclaiming the memory for use
    프로세스가 종료되면, 운영 체제는 해당 프로세스가 사용한 메모리를 회수하여 다른 프로세스가 사용할 수 있도록 해야 합니다. 이를 위해 운영 체제는 종료된 프로세스의 메모리 영역을 식별하고 해당 영역을 물리 메모리의 사용 가능한 공간으로 표시합니다. 메모리 회수는 메모리 관리 기법에 따라 다를 수 있으며, 종료된 프로세스의 메모리를 효율적으로 관리하여 메모리 자원의 최적 활용을 추구합니다.

  3. When context switch occurs:
    Saving and storing the base-and-bounds pair
    문맥 교환(Context switch)는 실행 중인 프로세스와 다른 프로세스 사이의 전환을 의미합니다. 컨텍스트 스위치가 발생할 때, 운영 체제는 현재 프로세스의 base와 bounds 값을 저장하고, 새로운 프로세스의 base와 bounds 값을 복원해야 합니다. 이를 통해 다른 프로세스로 전환되더라도 올바른 주소 공간에 접근할 수 있도록 보장합니다. 컨텍스트 스위치는 프로세스 간의 공유되는 자원 및 상태를 관리하는 중요한 작업이며, base와 bounds 값을 적절히 관리하여 올바른 메모리 접근을 유지합니다.

OS Issues: When a Process Starts Running

The OS must find a room for a new address space.
프로세스가 실행을 시작할 때, 운영 체제는 물리 메모리에서 주소 공간을 위한 공간을 찾아야 합니다. 각 주소공간은 물리 메모리의 크기보다 작고 크기가 일정하다라는 가정하에서는 운영체제가 쉽게 처리할 수 있다. 운영체제는 물리메모리를 슬롯의 배열로 보고 각 슬롯의 사용 여부를 관리한다. 새로운 프로세스가 생성되면 운영체제는 새로운 주소공간 할당에 필요한 영역을 찾기 위해 빈공간 리스트(Free list)라고 불리는 자료구조를 검색한다.
free list : A list of the range of the physical memory which are not in use.

OS Issues: When a Process Is Terminated

The OS must put the memory back on the free list.

OS Issues: When Context Switch Occurs

The OS must save and restore the base-and-bounds pair.

  • In process structure or process control block(PCB)

OS Issues: provide exception handlers

the OS must provide exception handlers,
the OS installs these handlers at boot time (via privileged instructions
Exception handler for segmentation fault

Inefficiency of Base and Bound registers

Internal fragmentation
The relocated process is using physical memory from 32 KB to 48 KB
The process stack and heap are not too big, all of the space between the two is simply wasted

Base and Bound registers 기법의 비효율성은 내부 단편화(Internal fragmentation)와 관련이 있습니다. 재배치된 프로세스가 32 KB에서 48 KB까지의 물리 메모리를 사용한다고 가정해봅시다. 이 경우 프로세스의 스택과 힙이 그다지 크지 않다면, 두 공간 사이의 모든 공간이 단순히 낭비되는 현상이 발생합니다.

내부 단편화는 메모리 할당 방식에서 발생하는 현상으로, 할당된 메모리 공간 중에서 실제로 사용되지 않는 공간이 존재하는 경우를 말합니다. Base and Bound registers 기법에서는 프로세스의 주소 공간을 물리 메모리에 연속적으로 배치하기 때문에, 스택과 힙 사이에 미사용 공간이 존재할 수 있습니다.

예를 들어, 프로세스의 스택이 32 KB까지, 힙이 48 KB부터 시작한다고 가정해봅시다. 이 경우 스택과 힙 사이의 32 KB ~ 48 KB 사이의 공간은 프로세스가 사용하지 않는 미할당 공간입니다. 이렇게 낭비된 공간은 내부 단편화를 초래하며, 메모리의 효율성을 저하시킬 수 있습니다.

내부 단편화는 메모리 할당의 효율성을 감소시키고, 메모리 자원의 낭비를 초래할 수 있습니다. 이는 메모리가 제한적인 시스템에서 특히 중요한 문제입니다. 이러한 단편화를 해결하기 위해 다른 메모리 관리 기법이나 할당 알고리즘을 사용할 수 있습니다. 예를 들어, 페이지 기반의 가상 메모리 관리에서는 페이지 크기에 맞게 메모리를 할당하여 내부 단편화를 최소화할 수 있습니다. 또는 메모리 단편화를 해결하기 위해 외부 단편화를 줄이는 방법을 사용할 수도 있습니다. 이러한 기법들은 메모리의 효율성을 향상시키고, 더 많은 프로세스를 실행하는 데 도움을 줄 수 있습니다.

Summary

Address translation: hardware support and OS support
주소 변환(Address translation)은 하드웨어와 운영 체제의 지원을 통해 이루어집니다. 주소 변환은 가상 주소와 물리 주소 간의 매핑을 수행하는 과정을 말합니다.
Basic form: base and bound
Base는 가상 주소 공간에서 물리 메모리의 시작 위치를 가리키는 주소를 저장하는 레지스터이며, Bound는 주소 공간의 크기를 나타내는 값이 저장되는 레지스터이다. 이 두 레지스터를 사용하여 가상 주소를 물리 주소로 변환한다. 베이스-바운드로 알려진 가상화의 한 형태는 베이스 레지스터를 가상 주소에 더하고 생성된 주소가 바운드를 벗어나는지 검사하기 위한 간단한 하드웨어 회로만 추가하면 되기 때문에
Fragmentation issue
하지만 base와 bound 기법을 사용하는 경우에는 단편화(fragmentation)라는 문제가 발생할 수 있습니다. 내부 단편화는 할당된 메모리 공간 중에서 사용되지 않는 공간이 존재하는 경우를 의미하며, 외부 단편화는 여러 개의 작은 빈 공간이 분산되어 할당할 수 있는 큰 공간이 부족한 경우를 의미합니다. 이러한 단편화는 메모리의 효율성을 저하시키고, 메모리 자원의 낭비를 초래할 수 있습니다.

주소 변환에서는 단편화 문제를 해결하기 위해 다양한 기법과 알고리즘이 사용될 수 있습니다. 이를 통해 메모리 할당의 효율성을 향상시키고, 더 많은 프로세스를 실행하는 데 도움을 줄 수 있습니다.
이러한 일반화 된 베이스-바운드 기법을 세그멘테이션이라고 부른다.

0개의 댓글