물리 메모리 관리

메론보이·2024년 5월 6일
0

운영체제

목록 보기
7/11

학습목표

  • 메모리 관리의 복잡성과 이중성을 이해하고 메모리 관리자의 역할을 파악한다
  • 논리 주소와 물리 주소의 의미 및 변환 과정을 이해한다
  • 메모리 오버레이와 스왑 기법을 알아본다
  • 메모리 관리 방식인 가변 분할 방식과 고정 분할 방식을 알아본다
  • 버디 시스템의 동작을 이해한다

메모리 관리의 개요

메모리란

개요

  • 컴퓨터 시스템에서 데이터와 프로그램 명령어를 저장하는 핵심 구성요소입니다.
  • CPU가 직접 접근하여 데이터를 읽고 쓸 수 있는 고속의 저장 공간으로, 프로그램의 실행과 데이터 처리를 가능하게 합니다.

정의

  • 메모리는 컴퓨터에서 데이터를 저장하고 접근할 수 있는 장치로, 주로 RAM(Random Access Memory)을 의미합니다.

왜 필요한가?

  • 메모리는 CPU가 처리할 데이터와 실행할 프로그램을 임시로 저장하는 역할을 하므로, 컴퓨터의 성능과 효율성을 결정짓는 중요한 요소입니다.
  • 메모리 없이는 프로그램을 실행하거나 데이터를 처리하는 것이 불가능해집니다.

언제 필요한가 & 어떤 순간에 필요한가?

  • 프로그램 실행 시: 사용자가 프로그램을 실행하면, 해당 프로그램은 하드 드라이브에서 메모리로 로드됩니다. 이를 통해 CPU는 메모리에서 직접 명령어를 가져와 실행할 수 있습니다.
  • 데이터 처리 시: 사용자가 문서를 편집하거나, 계산을 수행하는 등의 작업을 할 때, 이러한 데이터는 메모리에 임시 저장되어 빠르게 접근하고 수정할 수 있습니다.
  • 멀티태스킹 환경에서: 여러 프로그램이 동시에 실행될 때, 각 프로그램의 작업 내용과 데이터는 메모리에 저장되어 CPU가 필요에 따라 빠르게 전환하여 처리할 수 있습니다.

사용 예시

  • 웹 브라우징: 인터넷 브라우저는 웹 페이지의 내용을 메모리에 저장하여 빠르게 렌더링합니다.
  • 게임 플레이: 게임은 그래픽, 사운드, 사용자 입력 등 다양한 요소를 메모리에 로드하여 실시간으로 처리합니다.
  • 문서 편집: 워드 프로세서는 사용자가 작성하는 문서를 메모리에 저장하면서, 변경 사항을 실시간으로 반영합니다.

작동 원리

  • 페이징(Paging): 메모리를 고정 크기의 블록(페이지)으로 나누고, 프로세스를 페이지에 맞게 분할하여 메모리에 할당합니다.
  • 세그멘테이션(Segmentation): 프로그램을 논리적인 단위(세그먼트)로 분할하여 메모리에 할당합니다. 이는 더 유연한 메모리 관리를 가능하게 합니다.
  • 가상 메모리(Virtual Memory): 물리 메모리의 크기를 초과하는 프로그램도 실행할 수 있게 해주는 기술입니다. 필요한 부분만 메모리에 로드하고, 나머지는 보조 저장 장치에 저장합니다.
  • 메모리 계층 구조: 컴퓨터는 여러 종류의 메모리를 가지고 있으며, 속도와 용량에 따라 계층을 이룹니다. CPU에 가장 가까운 캐시 메모리는 속도가 가장 빠르고, RAM은 그 다음으로 빠릅니다.
  • 메모리 관리: 운영 체제는 메모리 관리자를 통해 메모리를 할당하고 회수합니다. 프로세스가 메모리를 요청하면, 메모리 관리자는 사용 가능한 메모리 영역을 찾아 할당하고, 프로세스가 종료되면 해당 영역을 회수합니다.

이러한 메모리 관리 기술을 통해, 운영체제는 메모리의 효율적 사용과 프로그램 간의 격리, 시스템의 안정성과 성능을 보장합니다.

메모리관리자

개요

  • 운영체제의 중요한 구성 요소 중 하나로, 컴퓨터 시스템에서 메모리 자원을 효율적으로 관리하고 할당하는 역할을 합니다.
  • 프로그램 실행과 데이터 처리를 위해 필요한 메모리 공간을 할당하고, 사용이 끝난 메모리를 회수하여 시스템의 안정성과 효율성을 유지합니다.

정의

  • 메모리 관리자는 프로세스에 메모리 공간을 할당하고, 사용이 끝난 메모리를 회수하며, 메모리의 사용을 최적화하는 시스템 소프트웨어의 일부입니다.

개념

  • 메모리 관리자는 메모리의 할당, 보호, 공유, 메모리 단편화 관리 등을 담당하여 프로세스가 필요로 하는 메모리를 효과적으로 사용할 수 있도록 합니다.

왜 필요한지

  • 효율적인 메모리 사용: 메모리 관리자는 한정된 메모리 자원을 여러 프로세스 간에 효율적으로 분배합니다.
  • 시스템 성능 유지: 메모리 관리자는 메모리 단편화를 최소화하고, 메모리 접근 속도를 최적화하여 시스템의 전반적인 성능을 유지합니다.
  • 프로세스 격리: 메모리 관리자는 각 프로세스가 다른 프로세스의 메모리 영역에 접근하지 못하도록 격리함으로써 시스템의 안정성과 보안을 보장합니다.

언제 필요한지

  • 시스템 부팅 시: 운영 체제가 메모리 관리자를 초기화하여 시스템의 메모리를 관리하기 시작합니다.
  • 프로세스 생성 시: 새로운 프로세스가 생성될 때, 메모리 관리자는 필요한 메모리 공간을 할당합니다.
  • 프로세스 종료 시: 프로세스가 종료되면, 메모리 관리자는 해당 프로세스에 할당된 메모리를 회수하여 다른 프로세스에 재할당할 수 있도록 합니다.

어떤 순간에 필요한지

  • 멀티태스킹: 여러 프로세스가 동시에 실행될 때, 메모리 관리자는 각 프로세스에 충분한 메모리가 할당되도록 관리합니다.
  • 동적 메모리 할당: 프로그램이 실행 중에 추가적인 메모리를 요청할 때, 메모리 관리자는 요청에 따라 메모리를 할당하고 해제합니다.

사용 예시:

  • 가상 메모리 사용: 시스템의 물리 메모리가 부족할 때, 메모리 관리자는 디스크의 일부를 가상 메모리로 사용하여 프로세스가 더 많은 메모리를 사용할 수 있도록 합니다.
  • 메모리 보호: 운영 체제는 메모리 관리자를 통해 각 프로세스가 자신의 메모리 영역만을 사용하도록 보호합니다.

작동 원리:

  • 메모리 할당: 메모리 관리자는 프로세스의 메모리 요구 사항을 평가하고, 사용 가능한 메모리 영역을 찾아 할당합니다.
  • 주소 변환: 메모리 관리자는 논리 주소를 물리 주소로 변환하는 주소 매핑을 수행합니다.
  • 메모리 회수: 프로세스가 종료되면, 메모리 관리자는 해당 프로세스에 할당된 메모리를 회수하고, 메모리 단편화를 관리합니다.

메모리 관리자는 운영 체제의 중요한 부분으로, 메모리 자원을 효율적으로 관리하여 시스템의 안정성과 성능을 유지하는 데 필수적인 역할을 수행합니다.

메모리 관리 작업

메모리 가져오기

  • 실행할 프로세스와 데이터를 메모리로 가져오는 작업

메모리 배치

  • 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정하는 작업

  • 이때 가져온 데이터를 어떤 크기로 자를지 매우 중요

  • 자른 데이터를 메모리의 구역에 따라 프로세스와 데이터를 어떤 위치에 놓을지 결정하는 것이 배치 작업

  • 이때 같은 크기로 데이터를 자르면 페이징, 프로세스의 크기에 맞게 자르는 것을 세그먼테이션

메모리 재배치

  • 꽉 찬 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보내는 작업

메모리 주소

개요

  • 메모리 주소는 컴퓨터 메모리 내에서 데이터 또는 명령어가 저장된 위치를 식별하기 위한 고유 식별자입니다. 컴퓨터 메모리는 일련의 저장소 공간으로 구성되며, 각 공간은 고유한 주소를 가지고 있어 CPU가 필요한 데이터나 명령어를 정확히 찾아갈 수 있게 합니다.

왜 필요한가?

  • 정확한 데이터 접근: 메모리 주소를 통해 CPU는 메모리 내의 정확한 위치에서 데이터를 읽고 쓸 수 있습니다. 이는 프로그램 실행과 데이터 처리에 있어서 중요합니다.
  • 효율적인 메모리 관리: 메모리 주소를 사용하여 운영 체제는 메모리를 효과적으로 관리할 수 있습니다. 이는 메모리의 낭비를 줄이고, 프로그램 간 충돌을 방지합니다.
  • 멀티태스킹: 여러 프로그램이 동시에 실행될 때, 각 프로그램의 데이터와 명령어를 구분하여 저장할 수 있게 해주어, 시스템의 안정성과 효율성을 보장합니다.

언제 필요한가?

  • 프로그램 실행 시: 프로그램이 실행될 때, 해당 프로그램의 코드와 데이터를 메모리에 로드해야 하며, 이때 메모리 주소가 할당됩니다.
  • 데이터 처리 시: 프로그램이 데이터를 처리할 때, 데이터를 읽고 쓰는 위치를 지정하기 위해 메모리 주소가 사용됩니다.
  • 동적 메모리 할당 시: 프로그램 실행 도중 필요한 메모리 공간이 결정될 때, 새로운 데이터를 저장하기 위한 메모리 주소가 할당됩니다.

사용 예시 및 작동 원리

  • 변수의 메모리 주소: 프로그래밍에서 변수를 선언하면, 해당 변수를 위한 메모리 공간이 할당되고, 이 공간은 고유한 메모리 주소를 가집니다. 예를 들어, C 언어에서 int a = 10; 이라는 코드는 정수형 변수 a를 위한 메모리 공간을 할당하고, 10이라는 값을 그 주소에 저장합니다.
  • 포인터: 포인터는 메모리 주소를 저장하는 변수입니다. 포인터를 사용하면 메모리의 특정 위치를 직접 참조하고, 그 위치의 데이터를 읽거나 수정할 수 있습니다.
  • 가상 메모리: 운영 체제는 가상 메모리를 사용하여 물리적 메모리보다 큰 프로그램을 실행할 수 있도록 합니다. 이때, 가상 메모리 주소는 필요에 따라 물리적 메모리 주소로 변환되어 실제 데이터에 접근합니다.

메모리 주소는 컴퓨터 시스템에서 데이터와 명령어의 정확한 위치를 식별하고 접근하는 기본적인 메커니즘입니다. 이를 통해 운영 체제와 프로그램은 메모리 리소스를 효율적으로 사용하고 관리할 수 있습니다.

물리 주소와 논리 주소

논리주소
정의

  • 프로그램이 사용하는 주소입니다.
  • 이 주소는 실행 중인 프로그램의 관점에서 생성되며, 실제 메모리 위치와는 독립적입니다.
  • 실행 중인 프로그램 각각에게 부여된 0번주부터 시작되는 주소

필요성

  • 논리주소는 프로그램이 메모리의 실제 구조에 대해 걱정하지 않고도 실행될 수 있도록 해줍니다.
  • 이는 프로그램이 다른 프로그램이나 운영 체제와 메모리를 공유하는 멀티태스킹 환경에서 중요합니다.

사용 시점

  • 프로그램이 컴파일되어 실행 파일이 생성될 때 논리주소가 사용됩니다.
  • 실행 중인 프로그램은 논리주소를 사용하여 데이터와 명령어에 접근합니다.

물리주소

정의

  • 컴퓨터 메모리 내의 실제 위치를 나타내는 주소입니다.
  • 이 주소는 메모리 컨트롤러를 통해 RAM과 같은 실제 메모리 장치에 접근하는 데 사용됩니다.
  • 실제로 저장된 하드웨어상의 주소

필요성

  • 실제 메모리 관리와 데이터 접근을 위해서는 물리주소가 필요합니다.
  • 물리주소를 통해 운영 체제는 실제 메모리 자원을 할당하고 관리할 수 있습니다.

사용 시점

  • 실행 중인 프로그램이 실제 메모리에 접근할 때, 논리주소는 메모리 관리 단위(MMU)에 의해 물리주소로 변환됩니다.
  • 이 변환 과정은 프로그램이 실제 메모리에 데이터를 읽거나 쓸 때마다 발생합니다.

참고로 다른 프로그램들의 물리 주소가 무엇인지는 굳이 알 필요는 없음
왜냐하면 새로운 프로그램이 언제든 적재될 수 있고, 실행되지 않는 프로그램은 언제든 메모리에서 사라질 수 있기 때문
이러한 이유로 메모장,게임,브라우저 모두 물리 주소가 아닌 0번지부터 시작한느 자신만을 위한 논리 주소를 가지고 있음

여기서 중요한점은 CPU가 이해하는 주소가 논리 주소라 해도 CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소 간의 변환이 이루어져야 함

즉 프로그램마다 같은 논리 주소가 얼마든디 있을수 있다는 의미임

여기서 중요한점은 CPU가 이해하는 주소가 논리 주소라 해도 CPU가 메모리와 상호작용하려면 논리 주소와 물리 주소 간의 변환이 이루어져야 함

이때 논리 주소가 물리 주소로 변환이 될때 메모리 관리 장치(MMU)라는 하드웨어에 의해 수행이됨

MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환함

베이스 레지스터란 프로그램의 가장 작은 물리 주소, 즉 프로그램의 첫 물리 주소를 저장하는 것
논리 주소는 프로그램의 시작점으로부터 떨어진 거리라고 생각하면됨

메모리 보호 기법

문제상황

위의 그림처럼 프로그램의 논리 주소 영역을 벗아난 명령어 삭제를 얻는다면,


애꿎은 인터넷 브라우저 프로그램에 숫자 10을 저장하고 명령어와 관련없는 프로그램 정보를 삭제하는 문제가 발생함

이러한 문제를 방지하기위해 한계 레지스터가 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 기능을함

한계 레지스터


베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리주소의 최대 크기를 저장
즉, 프로그램의 물리 주소 범위는 베이스 레지스터의 값 이상, 베이스 레지스터 값 + 한계 레지스터 값 미만임


CPU가 접근하려는 논리 주소는 한계 레지스터가 저장한 값보다 커서는 안됨

위의 그림처럼 베이스 레지스터 100, 한계 레지스터 150이라고 가정해보면
물리주소 시작점은 100번지, 프로그램의 크기는 150임을 의미함
따라서 150번지를 넘어서는 논리 주소를 가질 수 없음

결론적으로 CPU는 메모리에 접근하기 전에 접근하고자 하는 논리 주소가 한계 레지스터보다 작은지를 항상 검사해야함
만약 CPU가 한계 레지스터보다 높은 논리 주소에 접근하려고 하면 인터럽트를 발생시켜 실행을 중단시킴

단일 프로그래밍 환경의 메모리 할당

메모리구조

개요

  • 컴퓨터 메모리 구조는 크게 운영체제 영역과 사용자 영역으로 나뉩니다.
  • 이 두 영역은 서로 다른 역할과 기능을 가지고 있으며, 시스템의 안정성과 보안을 위해 분리되어 관리됩니다.

운영체제 영역 (Kernel Space):

정의

  • 운영체제 영역은 시스템의 핵심 기능을 수행하는 코드와 데이터를 포함합니다.
  • 이 영역은 일반적으로 메모리의 하위 부분에 위치하며, 사용자 모드의 애플리케이션보다 높은 권한을 가집니다.

구조와 역할:

  • 커널 코드: 운영체제의 핵심 코드로, 시스템 호출, 인터럽트 처리, 하드웨어 관리 등을 담당합니다.
  • 디바이스 드라이버: 하드웨어 장치를 제어하기 위한 코드로, 입출력 관리, 장치 통신 등을 수행합니다.
  • 시스템 데이터: 프로세스 테이블, 파일 시스템 메타데이터, 네트워크 상태 정보 등 시스템 전반의 데이터를 관리합니다.
  • 메모리 관리: 운영체제는 프로세스에게 메모리를 할당하고, 더 이상 사용되지 않는 메모리를 회수하는 역할을 합니다. 또한, 가상 메모리 관리를 통해 물리적 메모리보다 큰 메모리 공간을 제공할 수 있습니다.
  • 프로세스 관리와 스케줄링: 시스템의 모든 프로세스를 관리하며, CPU 시간을 효율적으로 분배하여 프로세스가 실행될 수 있도록 합니다.
  • 입출력 시스템 관리: 디스크 드라이브, 키보드, 마우스 등의 모든 입출력 장치를 관리합니다.

기능

  • 자원 관리: CPU, 메모리, 입출력 장치 등의 자원을 효율적으로 관리합니다.
  • 보안 및 보호: 시스템의 보안을 유지하고, 사용자 프로세스가 무단으로 커널 영역에 접근하는 것을 방지합니다.
  • 멀티태스킹: 여러 프로세스가 동시에 실행될 수 있도록 스케줄링하고, 컨텍스트 스위칭을 관리합니다.

사용자 영역 (User Space)

개요

  • 사용자 영역은 일반 애플리케이션과 사용자 수준의 프로그램이 실행되는 공간입니다. 이 영역은 메모리의 상위 부분에 위치하며, 제한된 권한을 가집니다

구조와 역할

  • 사용자 데이터: 애플리케이션의 데이터, 사용자 문서, 설정 파일 등이 저장됩니다.
  • 스택: 함수 호출, 로컬 변수 등을 관리하는 임시 저장 공간입니다.
  • 힙: 동적 메모리 할당을 위한 공간으로, 런타임에 크기가 변할 수 있습니다.
  • 응용 프로그램 실행: 사용자 영역은 다양한 사용자 프로그램이 실행되는 공간입니다. 이러한 프로그램은 시스템 자원을 직접 제어할 수 없으며, 운영체제가 제공하는 인터페이스를 통해 자원을 요청해야 합니다.

기능

  • 애플리케이션 실행: 사용자가 작업을 수행할 수 있도록 다양한 애플리케이션을 실행합니다.
  • 데이터 처리: 사용자 데이터를 생성, 수정, 저장하고, 다양한 작업을 수행합니다.
  • 시스템 리소스 접근: 시스템 호출을 통해 운영체제 서비스에 접근하고, 필요한 자원을 요청합니다.

메모리 오버레이

개요

  • 프로그램의 실행에 필요한 메모리가 실제로 사용 가능한 메모리보다 클 때 사용되는 기술입니다.
  • 이 기술을 통해 프로그램은 사용 가능한 메모리 내에서 여러 부분으로 나뉘어 순차적 또는 필요에 따라 메모리에 로드되어 실행됩니다.
  • 오버레이의 주된 목적은 메모리 사용을 최적화하여 제한된 메모리 리소스로도 큰 프로그램을 실행할 수 있게 하는 것입니다.

왜 필요한가?

  • 메모리 제약: 특히 과거에는 시스템의 메모리가 매우 제한적이었기 때문에 큰 프로그램을 실행하기 위해서는 메모리 관리가 중요했습니다.
  • 효율성: 프로그램의 모든 부분이 동시에 메모리에 있을 필요가 없을 때, 오버레이를 사용하여 필요한 부분만 메모리에 로드함으로써 메모리를 효율적으로 사용할 수 있습니다.

언제 필요한가?

  • 제한된 메모리: 사용 가능한 메모리가 프로그램의 실행에 필요한 메모리보다 작을 때.
  • 큰 프로그램 실행: 전체 프로그램을 동시에 메모리에 올릴 수 없는 큰 프로그램을 실행해야 할 때.
  • 리소스 최적화 필요: 시스템의 메모리 리소스를 최적화하여 사용해야 할 때.

어떤 순간에 필요한가?

  • 동시 실행 부분이 제한된 프로그램: 프로그램의 특정 부분들이 서로 독립적이어서 동시에 실행될 필요가 없는 경우.
  • 특정 기능 실행 시: 사용자가 특정 기능을 요청할 때만 필요한 코드 부분을 메모리에 로드해야 하는 경우.

작동 원리 및 사용 예시

작동 원리

  • 프로그램을 여러 개의 오버레이로 분할합니다.
  • 프로그램 실행 시 필요한 오버레이만 메모리에 로드되며, 다른 오버레이가 필요할 때 이전 오버레이는 메모리에서 제거되고 새 오버레이가 로드됩니다.

사용 예시

  • 과거에는 게임이나 대규모 계산 프로그램에서 메모리 오버레이 기술이 자주 사용되었습니다. 예를 들어, 게임에서 특정 레벨이나 장면이 로드될 때만 필요한 데이터를 메모리에 로드하고, 다음 레벨이나 장면으로 이동할 때 이전 데이터를 제거하고 새로운 데이터를 로드하는 방식으로 메모리를 관리했습니다.

현재는 메모리 용량이 크게 증가하고 운영체제의 메모리 관리 기능이 향상되면서 메모리 오버레이의 필요성은 크게 감소했습니다. 하지만, 제한된 메모리 리소스를 가진 임베디드 시스템이나 특정 애플리케이션에서는 여전히 유용하게 사용될 수 있습니다.

스왑

개요

  • 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는데 이러한 영역을 스왑 영역이라함
  • 메모리로 데이터를 가져오는 작업인 스왑인, 메모리에서 스왑 영역으로 데이터를 내보내는 스왑아웃으로 구성됨

정의

  • 컴퓨터 운영체제에서 메모리 관리의 한 방법으로, 물리적 메모리(RAM)가 부족할 때 하드 디스크의 일부 공간을 가상 메모리로 사용하여 프로그램이 필요로 하는 메모리 공간을 확장하는 기술입니다.
  • 이 과정에서 물리적 메모리와 하드 디스크 사이에 데이터를 교환(swap)합니다.

왜 필요한가?

  • 메모리 부족: 컴퓨터에서 실행 중인 프로그램의 메모리 요구량이 물리적 메모리의 용량을 초과할 때 스왑을 통해 추가 메모리 공간을 확보할 수 있습니다.
  • 효율적인 메모리 사용: 사용 빈도가 낮은 메모리 페이지를 하드 디스크로 옮겨 물리적 메모리를 더 효율적으로 사용할 수 있습니다.

언제 필요한가?

  • 다중 프로그램 실행: 여러 프로그램이 동시에 실행될 때 시스템의 물리적 메모리만으로는 모든 프로그램의 요구를 충족시키기 어려울 수 있습니다.
  • 대용량 프로그램 실행: 특히, 대용량 데이터 처리나 복잡한 계산을 요구하는 응용 프로그램을 실행할 때 필요합니다.
    시스템의 안정성 유지: 메모리가 부족해지면 시스템의 성능이 저하되거나, 최악의 경우 프로그램이 중단될 수 있으므로, 이를 방지하기 위해 필요합니다.

사용 예시 및 작동 원리

  • 작동 원리: 운영체제는 물리적 메모리가 부족할 때, 가장 최근에 사용되지 않은 페이지(Least Recently Used, LRU 알고리즘을 사용하는 경우)를 스왑 영역으로 이동시키고, 필요한 데이터를 물리적 메모리로 로드합니다.
  • 이 과정에서 하드 디스크의 스왑 영역과 물리적 메모리 사이에 데이터가 교환됩니다.

사용 예시

  • 가상 머신 환경에서는 각 가상 머신이 독립적인 운영체제를 실행하므로, 가상 머신들 사이에서 메모리 자원을 효율적으로 배분하기 위해 스왑을 사용합니다.
  • 또한, 서버 환경에서 많은 양의 요청을 처리해야 할 때 스왑 공간을 사용하여 시스템의 안정성을 유지할 수 있습니다.

스왑은 시스템의 메모리 요구를 충족시키는 중요한 기술이지만, 하드 디스크의 속도가 물리적 메모리에 비해 상대적으로 느리기 때문에 스왑을 과도하게 사용하면 시스템의 전반적인 성능 저하를 초래할 수 있습니다.
따라서, 스왑 공간의 사용을 최소화하면서 시스템의 성능을 유지하기 위한 메모리 관리 전략이 중요합니다.

정리해보면 스와핑은 메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보래고 실행할 프로세스를 메모리로 들여보내는 메모리 관리 기법임

다중 프로그래밍 환경의 메모리 할당

가변 분할 방식

개요

  • 컴퓨터 메모리 관리에서 사용되는 기법으로, 메모리를 프로세스의 크기에 따라 동적으로 분할하여 할당하는 방식입니다.
  • 이 방식은 메모리를 고정 크기의 분할로 나누는 고정분할방식과 달리, 프로세스의 요구에 맞춰 메모리 분할의 크기와 위치가 실시간으로 변할 수 있습니다.

왜 필요한가?

  • 메모리 효율성: 가변분할방식은 메모리를 보다 효율적으로 사용할 수 있게 해줍니다. 프로그램마다 필요한 메모리의 크기가 다르기 때문에, 정확히 필요한 만큼의 메모리만을 할당함으로써 낭비를 줄일 수 있습니다.
  • 유연성: 프로그램의 메모리 요구사항이 시간에 따라 변할 수 있는 상황에서 가변분할방식은 메모리 관리를 보다 유연하게 해줍니다.
    동적 할당: 시스템의 메모리 사용 상황에 따라 필요할 때에만 메모리를 할당하고, 사용이 끝난 메모리는 회수하여 다시 사용할 수 있게 합니다.

언제 필요한가?

  • 다양한 크기의 프로그램 실행: 시스템에서 실행되는 프로그램의 크기가 다양할 때, 각 프로그램에 적합한 메모리 공간을 동적으로 할당해야 합니다.
  • 메모리 공간의 최적화가 필요할 때: 사용 가능한 메모리 공간이 제한적이고, 이를 최대한 효율적으로 관리해야 할 때 필요합니다.
  • 프로그램의 동적 확장 필요: 실행 중인 프로그램이 추가 메모리를 필요로 하게 될 때, 가변분할방식을 통해 추가 메모리 공간을 할당받을 수 있습니다.

사용 예시와 작동 원리

작동 원리

  • 시스템은 프로세스가 메모리를 요청하면, 사용 가능한 메모리 공간 중에서 충분한 크기의 공간을 찾아 프로세스에 할당합니다. 이 때, 메모리 내부에는 사용 중인 공간과 빈 공간이 공존하게 되며, 메모리 관리 시스템은 이 빈 공간을 관리하여 새로운 프로세스의 요구에 할당할 수 있도록 합니다.

사용 예시

  • 운영체제에서 다수의 사용자 프로그램이 동시에 실행되는 멀티태스킹 환경에서 가변분할방식을 사용합니다. 사용자가 새로운 프로그램을 실행시킬 때마다, 시스템은 현재의 메모리 상태를 확인하고 적절한 크기의 메모리 공간을 할당합니다.

세그먼테이션

개요

  • 가변 분할 방식의 메모리 관리 기법 중 하나로, 프로그램을 의미 있는 단위인 세그먼트로 나누어 메모리에 할당하는 방식입니다.

정의

  • 세그먼테이션은 프로그램을 여러 개의 세그먼트(예: 코드, 데이터, 스택)로 나누고, 각 세그먼트를 메모리의 다른 부분에 독립적으로 할당하는 메모리 관리 기법입니다.

개념

  • 각 세그먼트는 시작 주소와 길이를 가지며, 이 정보는 세그먼트 테이블에 저장됩니다. 프로세스가 메모리에 접근할 때, 세그먼트 번호와 오프셋을 사용하여 물리적 메모리 주소를 계산합니다.

왜 필요한지

  • 논리적 구조 반영: 세그먼테이션은 프로그램의 논리적 구조를 메모리에 반영하여, 보다 효율적인 메모리 사용과 보호를 가능하게 합니다.
  • 보안 및 보호: 각 세그먼트는 독립적으로 보호되며, 잘못된 메모리 접근을 방지할 수 있습니다.
  • 유연성: 프로그램의 다양한 크기의 세그먼트를 메모리에 유연하게 할당할 수 있습니다.

언제 필요한지:

  • 프로그램 로드 시: 프로그램이 메모리에 로드될 때, 각 세그먼트는 필요한 메모리 공간을 할당받습니다.
  • 프로세스 실행 중: 프로세스가 실행되는 동안, 세그먼테이션은 메모리 접근을 관리하고 보호합니다.

어떤 순간에 필요한지:

  • 함수 호출 시: 함수 호출 시 스택 세그먼트가 사용되며, 세그먼테이션은 이를 관리합니다.
  • 데이터 접근 시: 프로그램이 데이터 세그먼트에 접근할 때, 세그먼테이션은 해당 세그먼트의 메모리 위치를 제공합니다.

사용 예시:

  • 운영 체제: 현대 운영 체제에서는 세그먼테이션을 사용하여 프로세스의 코드, 데이터, 스택 등을 관리합니다.

작동 원리:

  • 세그먼트 테이블: 운영 체제는 세그먼트 테이블을 유지하여 각 세그먼트의 기준 주소와 한계를 추적합니다.
  • 주소 변환: 프로세스가 메모리에 접근할 때, 세그먼트 번호와 오프셋을 사용하여 물리적 주소로 변환합니다.

외부 단편화 해결 방법:

  • 외부 단편화는 사용 가능한 메모리 공간이 충분함에도 불구하고, 연속적인 공간이 아니기 때문에 큰 블록을 할당할 수 없는 문제입니다.
  • 쉽게말해 외부 단편화란 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상을 의미

메모리 배치 방식:

개요

  • 메모리 관리에서 프로세스를 위한 메모리 공간을 선택하는 방법을 말합니다. 이러한 배치 방식은 메모리의 효율적인 사용과 프로세스의 빠른 할당을 위해 필요합니다.

정의

  • 메모리 배치 방식은 가용 메모리 내에서 프로세스에 할당할 위치를 결정하는 알고리즘입니다.

개념

  • 프로세스가 메모리를 요청할 때, 운영 체제는 메모리 배치 방식에 따라 적절한 위치를 찾아 할당합니다.

작동 원리 및 주요 배치 방식:

  • 최초 적합(First Fit): 메모리의 처음부터 검색하여 처음으로 발견된 충분히 큰 공간에 프로세스를 할당합니다.
  • 최적 적합(Best Fit): 가장 작은 충분한 크기의 빈 공간에 프로세스를 할당하여 낭비를 최소화합니다.
  • 최악 적합(Worst Fit): 가장 큰 빈 공간에 프로세스를 할당합니다.

조각모음(Compaction):

정의

  • 메모리 상의 사용 중인 세그먼트를 이동시켜 연속적인 빈 공간을 만드는 과정입니다.

필요성

  • 외부 단편화로 인해 메모리 할당이 어려울 때, 조각모음을 통해 큰 블록의 연속적인 공간을 확보할 수 있습니다.

작동 원리

  • 조각모음은 메모리 상의 모든 세그먼트를 한쪽으로 몰아서, 다른 한쪽에 큰 빈 공간을 만듭니다.
  • 세그먼테이션은 프로그램의 논리적 구조를 메모리에 효과적으로 매핑할 수 있게 해주지만, 외부 단편화와 같은 문제를 관리해야 하는 도전이 있습니다.
  • 메모리 배치 방식과 조각모음은 이러한 문제를 해결하기 위한 기법입니다.

고정 분할 방식

개요

  • 메모리를 고정된 크기의 여러 영역으로 나누고, 각 영역에 하나의 프로세스를 할당하는 메모리 관리 기법입니다.

정의

  • 고정 분할 방식은 메모리를 미리 정해진 크기의 분할로 나누고, 각 분할에는 오직 하나의 프로세스만을 할당하는 방식입니다.

개념

  • 이 방식에서는 메모리가 몇 개의 고정된 크기의 분할로 나뉘며, 각 분할은 독립적으로 사용됩니다. 프로세스가 메모리를 요청하면, 충분한 크기의 빈 분할을 찾아 할당합니다.

왜 필요한지:

  • 단순성: 고정 분할 방식은 구현이 간단하고, 메모리 관리를 위한 오버헤드가 적습니다.
  • 빠른 할당과 회수: 고정된 크기의 분할로 인해 메모리 할당과 회수가 빠르게 이루어질 수 있습니다.

언제 필요한지:

  • 시스템 초기화 시: 시스템이 시작될 때 메모리를 분할하여 초기화합니다.
  • 프로세스 할당 시: 새로운 프로세스가 메모리를 요청할 때, 빈 분할을 찾아 할당합니다.

어떤 순간에 필요한지:

  • 프로세스 생성 시: 새로운 프로세스가 시스템에 추가될 때, 고정 분할 방식을 사용하여 메모리를 할당합니다.
  • 프로세스 종료 시: 프로세스가 종료되면, 해당 분할은 다른 프로세스에게 재할당될 수 있도록 회수됩니다.

사용 예시:

  • 초기 컴퓨터 시스템: 메모리와 프로세스 관리가 상대적으로 단순했던 초기 컴퓨터 시스템에서 고정 분할 방식이 널리 사용되었습니다.

작동 원리:

  • 메모리 분할: 시스템 부팅 시 메모리는 고정된 크기의 분할로 나뉩니다.
  • 프로세스 할당: 프로세스가 메모리를 요청하면, 운영 체제는 적절한 크기의 빈 분할을 찾아 프로세스를 할당합니다.
  • 프로세스 회수: 프로세스가 종료되면, 해당 분할은 회수되어 다시 사용 가능한 상태가 됩니다.

고정 분할 방식은 구현이 간단하고 관리가 쉽다는 장점이 있지만, 내부 단편화(할당된 분할 내에 사용되지 않는 메모리 공간)와 메모리 활용도 저하라는 단점이 있습니다.
현대의 운영 체제에서는 가변 분할 방식이나 페이징, 세그먼테이션과 같은 더 진보된 메모리 관리 기법이 널리 사용됩니다.

페이징

개요

  • 메모리 관리를 위한 기법으로, 고정 분할 방식의 한 형태입니다. 페이징은 메모리를 고정된 크기의 블록, 즉 '페이지'로 나누고, 이를 프로세스의 '페이지 테이블'을 통해 관리합니다.

정의

  • 페이징은 물리적 메모리를 동일한 크기의 페이지로 나누고, 가상 메모리 역시 같은 크기의 페이지로 나누어, 논리적 메모리(프로세스가 사용하는 메모리)를 물리적 메모리에 매핑하는 기법입니다.

개념

  • 각 프로세스는 페이지 테이블을 가지며, 이 테이블은 가상 주소를 물리적 주소로 변환하는 데 사용됩니다. 프로세스는 연속적인 가상 메모리를 사용하는 것처럼 동작하지만, 실제 물리적 메모리에서는 비연속적으로 분산되어 있을 수 있습니다.

왜 필요한지:

  • 외부 단편화 제거: 페이징은 외부 단편화 문제를 해결합니다. 모든 페이지가 같은 크기이기 때문에, 빈 메모리 공간이 페이지 크기와 일치하지 않는 문제가 발생하지 않습니다.
  • 메모리 활용 극대화: 페이징을 통해 메모리를 보다 효율적으로 사용할 수 있으며, 프로세스의 메모리 요구에 더 유연하게 대응할 수 있습니다.
  • 보안 및 보호: 각 페이지는 독립적으로 보호될 수 있으며, 프로세스 간 메모리 격리가 가능합니다.

언제 필요한지:

  • 프로세스 실행 시: 프로세스가 실행될 때, 그에 해당하는 페이지들이 메모리에 로드됩니다.
  • 메모리 접근 시: 프로세스가 메모리에 접근할 때마다 페이지 테이블을 통해 물리적 주소로의 변환이 필요합니다.

어떤 순간에 필요한지:

  • 멀티태스킹 환경: 여러 프로세스가 동시에 실행될 때, 페이징은 각 프로세스의 메모리를 효과적으로 관리합니다.
  • 가상 메모리 사용 시: 시스템의 물리적 메모리보다 큰 프로세스를 실행할 때, 페이징은 가상 메모리를 통해 이를 가능하게 합니다.

사용 예시:

  • 현대 운영 체제: 대부분의 현대 운영 체제는 페이징 기법을 사용하여 메모리를 관리합니다.

작동 원리:

  • 페이지와 프레임: 물리적 메모리는 '프레임'이라고 하는 페이지와 같은 크기의 블록으로 나뉩니다.
  • 페이지 테이블: 각 프로세스는 페이지 테이블을 가지며, 이 테이블은 가상 페이지 번호를 물리적 프레임 번호로 매핑합니다.
  • 주소 변환: CPU가 가상 주소를 생성하면, 페이지 테이블을 참조하여 해당 가상 주소가 실제 메모리의 어느 프레임에 있는지 찾아내고, 그 결과를 통해 물리적 주소를 얻습니다.

페이징은 메모리 관리의 복잡성을 줄이고, 프로세스의 메모리 할당을 보다 유연하게 만들어 줍니다.
그러나 내부 단편화와 페이지 테이블 관리에 따른 오버헤드는 페이징 시스템의 단점으로 간주될 수 있습니다.

정리

구분가변 분할 방식고정 분할 방식
메모리 관리 기법세그먼테이션페이징
특징연속 메모리 할당비연속 메모리 할당
장점프로세스를 한 덩어리로 관리 가능메모리 관리가 편리함
단점빈 공간의 관리가 어려움프로세스가 분할되어 처리됨
단편화외부 단편화내부 단편화

참고

메모리 오버레이
스왑
메모리 분할 방식의 구현

0개의 댓글