Memory Management

EBAB!·2023년 7월 9일
0

OS

목록 보기
13/16

Memory Management in Operating System

메모리는 데이터의 특정 형식으로 구성된 집합으로 정의됩니다.

주로 명령을 저장하고 데이터를 처리하는 데 사용됩니다.

메모리는 많은 단어나 바이트의 배열 또는 그룹으로 구성되며, 각각 고유한 위치를 가집니다. 컴퓨터 시스템의 주요 목적은 프로그램을 실행하는 것입니다. 이를 위해서는 실행 중에 프로그램과 함께 접근하는 정보가 주 메모리에 있어야 합니다. CPU는 프로그램 카운터의 값에 따라 메모리에서 명령을 가져옵니다.

다중 프로그래밍의 수준과 메모리의 적절한 활용을 위해 메모리 관리가 중요합니다. 많은 메모리 관리 방법이 있으며, 각 알고리즘의 효과는 상황에 따라 다릅니다. 이러한 방법은 다양한 접근 방식을 반영합니다.

메인 메모리

수십만 개에서 십억 개까지 크기가 다른 워드나 바이트로 이루어진 대규모 배열입니다.

CPU와 I/O 장치에서 공유하는 정보를 빠르게 저장하는 공간이며, 프로세서가 프로그램과 정보를 처리하는 데 필요한 장소입니다.

메인 메모리는 프로세서와 밀접한 관련이 있어서, 명령어와 정보를 빠르게 프로세서로 이동시킵니다. 랜덤 액세스 메모리(RAM)라고도 하는 이 메인 메모리는 전원이 차단되면 데이터가 손실됩니다.

메모리 관리

다중 프로그래밍 컴퓨터에서 운영 체제는 메모리의 일부에 상주하며 나머지는 여러 프로세스에서 사용됩니다. 메모리를 서로 다른 프로세스에게 분할하는 작업을 메모리 관리라고 합니다. 메모리 관리는 프로세스 실행 도중 메인 메모리와 디스크 간의 작업을 관리하기 위한 운영 체제의 방법입니다. 메모리 관리의 주요 목적은 메모리의 효율적인 활용을 달성하는 것입니다.

역할

  • 프로세스 실행 전후에 메모리를 할당하고 해제합니다.
  • 메모리 사용을 추적하여 관리합니다.
  • 단편화 문제를 최소화합니다.
  • 메인 메모리를 효율적으로 사용합니다.
  • 데이터 무결성을 유지하기 위해 프로세스 실행 중입니다.

논리 및 물리 주소 공간

논리 주소 공간: CPU가 만든 주소를 "논리 주소" 또는 가상 주소라고 합니다. 논리 주소 공간은 프로세스 크기로 정의됩니다. 논리 주소는 변경될 수 있습니다.

물리 주소 공간: 메모리에서 볼 수 있는 주소를 "물리 주소" 또는 실제 주소라고 합니다. 이러한 논리 주소에 해당하는 모든 물리 주소 집합을 물리 주소 공간이라고 합니다. 물리 주소는 MMU에 의해 계산됩니다. 가상 주소에서 물리 주소로의 매핑은 하드웨어 장치인 메모리 관리 장치(MMU)에 의해 수행됩니다. 물리 주소는 항상 일정합니다.

정적 및 동적 로딩

프로세스를 주 메모리에 로드하는 작업은 로더가 수행합니다. 로딩은 두 가지 유형으로 구분됩니다.

  • 정적 로딩: 전체 프로그램을 고정 주소로 로드합니다. 이 방법은 더 많은 메모리 공간이 필요합니다.
  • 동적 로딩: 프로세스의 크기가 물리 메모리로 제한될 때 발생하는 문제를 해결하기 위해 사용됩니다. 동적 로딩에서는 루틴이 호출될 때까지 로드되지 않으며, 모든 루틴은 재위치 가능한 로드 형식으로 디스크에 상주합니다. 이 방법은 사용되지 않는 루틴이 로드되지 않아 효율적으로 처리할 수 있습니다.

정적 및 동적 링크

링크 작업을 위해 링커를 사용합니다. 링커는 하나 이상의 오브젝트 파일을 가져와 단일 실행 파일로 결합합니다.

  • 정적 링크: 모든 프로그램 모듈이 결합되어 실행 가능한 파일이 생성됩니다. 런타임 종속성이 없습니다. 일부 운영 체제는 정적 링크 만 지원합니다.
  • 동적 링크: 동적 로딩과 유사합니다. 동적 링크에서는 "Stub"이 포함됩니다. 스텁은 작은 코드 조각입니다. 스텁이 실행되면 필요한 루틴이 이미 메모리에 있는지 확인합니다. 메모리에 없으면 루틴을 메모리로로드합니다.

Swapping

프로세스 실행 시 메모리에 있어야 합니다.

Swapping은 프로세스를 보조 메모리로 임시적으로 이동시킴으로써, 더 많은 프로세스를 실행할 수 있게 해줍니다.

전송 시간은 교환된 메모리의 양에 비례하며 롤아웃/롤인 방식으로 높은 우선순위 작업을 지원합니다. 이는 높은 우선순위 작업이 완료되면, 낮은 우선순위 프로세스를 Swapping하여 높은 우선순위 프로세스를 로드하고 실행합니다. 그리고 나서 다시 낮은 우선순위 프로세스가 메모리에 Swapping되어 계속 실행할 수 있습니다.

메모리 관리에서 Swapping

  • 단일 프로그래밍으로 메모리 관리(Swapping 없음): 간단한 메모리 관리 방법. 메모리는 두 부분으로 나뉘어집니다
    • 운영 체제용 부분

    • 사용자 프로그램용 두 번째 파트

      fence register
      operating systemuser program

    • 이 접근 방식에서는 운영 체제가 사용자 프로그램의 시작과 끝 위치를 추적.

    • 운영 체제는 보통 가장 낮은 또는 가장 높은 주소로 로드.

    • 인터럽트 벡터는 낮은 메모리에 로드되므로 낮은 메모리에 운영 체제를 로드하는 것이 합리적.

    • 데이터와 코드 공유는 단일 프로세스 환경에서는 중요하지 않습니다.

    • 울타리 레지스터를 사용하여 운영 체제를 사용자 프로그램으로부터 보호할 수 있습니다.

      장점

    • 간단한 관리 접근 방식입니다.

      단점

    • 다중 프로그래밍을 지원하지 않습니다.

    • 메모리가 낭비됩니다.

  • 고정 파티션으로 다중 프로그래밍(Swapping 없음):
    • 고정 파티션 수와 함께 메모리 파티션 체계가 도입되어 다중 프로그래밍을 지원합니다. 이 체계는 연속 할당을 기반으로합니다.

    • 각 파티션은 연속적인 메모리 블록입니다.

    • 메모리는 고정된 파티션으로 분할됩니다.

    • 각 파티션은 고정된 크기입니다.

      파티션 메모리의 예는 다음과 같습니다:

      그림과 같이 메모리는 5개의 영역으로 분할되며 영역은 시스템 업데이트를 위해 예약되며 나머지 네 파티션은 사용자 프로그램을 위한 것입니다.

      운영 체제


      p1


      p2


      p3


      p4


      고정 크기 파티션화 그림

      파티션 테이블:

      파티션이 정의되면 운영 체제는 메모리 파티션 상태를 추적합니다. 이는 파티션 테이블이라는 데이터 구조를 통해 수행됩니다.

      일련번호파티션 시작 주소파티션 크기상태
      10k200k할당됨
      2200k100k무료
      3300k150k무료
      4450k250k할당됨

      샘플 파티션 테이블

논리적 대 물리적 주소

CPU에서 생성된 주소는 일반적으로 논리적 주소라고 합니다. 메모리 단위에서 볼 수 있는 주소를 물리적 주소라고 합니다.

하드웨어의 기본 레지스터를 사용하여 논리적 주소를 물리적 주소로 매핑할 수 있습니다. 이를 메모리 참조의 동적 재배치라고합니다.

연속 메모리 할당 :

주 메모리는 운영 체제와 클라이언트 프로세스 모두에게 필요합니다. 따라서 메모리 할당은 운영 체제에서 중요한 작업입니다.

메모리는 상주하는 운영 체제와 사용자 프로세스를 위한 두 파티션으로 나뉩니다.

여러 사용자 프로세스가 동시에 메모리에 상주해야 한다면 대기열에 있는 프로세스에 사용 가능한 메모리를 할당하는 방법을 고려해야 합니다. 이를 위해 인접 메모리 할당 방법을 사용하면 각 프로세스는 메모리의 단일 연속 세그먼트에 포함됩니다.

연속 메모리 할당

메모리 할당

메모리 할당이 효율적이어야 적절한 메모리 활용이 가능합니다. 메모리를 고정 크기 파티션으로 나누어 각 파티션에 하나의 프로세스를 할당하는 것이 가장 간단한 방법 중 하나입니다. 이렇게 함으로써 다중 프로그래밍의 정도는 파티션 수에 따라 결정됩니다.

다중 파티션 할당

  • 빈 파티션에 로드되는 프로세스를 선택합니다. 프로세스가 종료되면 파티션이 다른 프로세스에게 사용 가능해집니다.

고정 파티션 할당

  • 운영 체제가 사용 가능한 메모리와 프로세스가 점유한 메모리를 나타내는 테이블을 유지합니다. 프로세스가 메모리를 요청하면 충분히 큰 Hole을 찾아 할당하고, 사용 가능한 메모리를 유지합니다. 동적 저장소 할당 문제가 발생할 수 있으며, 이 문제를 해결할 수 있는 몇 가지 방법이 있습니다.

First fit

  • First fit에서는 할당 된 프로세스의 요구 사항을 충족시키는 첫 번째 빈 Hole을 선택.

  • 위의 다이어그램에서 40KB 메모리 블록은 프로세스 A (크기 25KB)를 저장할 수있는 첫 번째 사용 가능한 빈 Hole입니다. 처음 두 블록은 충분한 메모리 공간이 없기 때문에 사용할 수 없습니다.

Best fit

  • Best fit에서는 프로세스 요구 사항을 충족시키는 가장 작은 크기의 Hole을 할당합니다. 이를 위해 크기에 따라 정렬 된 목록이 아닌 경우 전체 목록을 검색합니다.

  • 위의 예에서는 먼저 전체 목록을 탐색하여 마지막 Hole (크기 25KB)이 프로세스 A (크기 25KB)에 가장 적합한 Hole입니다.
  • 이 방법은 다른 메모리 할당 기술과 비교하여 메모리 활용이 최대화됩니다.

Worst fit

  • Worst fit에서는 프로세스에 가장 큰 사용 가능한 Hole을 할당합니다. 이 방법은 가장 큰 남은 Hole을 생성합니다.
  • 위 예시에서, 프로세스 A (크기 25KB)는 60KB 중 가장 큰 사용 가능한 메모리 블록에 할당됩니다. Worst fit에서 메모리 활용이 비효율적인것이 주요 문제입니다.

Fragmentation

Fragmentation은 프로세스가 메모리에서 실행 후에 로드 및 제거될 때 작은 빈 공간을 생성하는 것으로 정의됩니다. 이러한 공간들은 메모리 요구 사항을 충족시키지 않거나 결합되지 않기 때문에 새로운 프로세스에 할당될 수 없습니다. 다중 프로그래밍의 정도를 달성하기 위해서는 메모리의 낭비 또는 Fragmentation문제를 줄여야 합니다. 운영 체제에서는 두 가지 유형의 Fragmentation이 있습니다:

내부 Fragmentation

  • 프로세스에 할당된 메모리 블록이 요청한 크기보다 큰 경우 발생합니다. 이로 인해 일부 사용하지 않는 공간이 남아 내부 Fragmentation 문제가 발생합니다.
  • 메모리 할당에 고정 분할 방식이 사용되고 3MB, 6MB 및 7MB 크기의 블록이 메모리에 존재한다고 가정합니다. 이제 크기가 2MB인 새로운 프로세스 p4가 와서 메모리 블록을 요구합니다. 그러면 3MB의 메모리 블록을 얻지만 1MB의 메모리 블록은 낭비되며 다른 프로세스에 할당할 수도 없습니다. 이것을 내부 프래그먼테이션이라고 합니다.

외부 Fragmentation

  • 빈 메모리 블록이 있지만 연속적이지 않기 때문에 프로세스에 할당할 수 없는 경우입니다.
  • 크기가 각각 2MB, 4MB 및 7MB인 세 개의 프로세스 p1, p2, p3가 온다고 가정합니다. 이제 각각 3MB, 6MB 및 7MB의 메모리 블록이 할당됩니다. 프로세스 p1 및 p2가 할당된 후 1MB 및 2MB가 남습니다. 새로운 프로세스 p4가 3MB의 메모리 블록을 요구하면 사용 가능하지만 연속적인 빈 메모리 공간이 아니기 때문에 할당할 수 없습니다. 이것을 외부 프래그먼테이션이라고 합니다.
  • 메모리 할당 시스템은 첫 번째 적합과 최적 적합 모두 외부 Fragmentation에 영향을 받습니다.

    • 해결 방안 1.압축 기술을 사용
      → 압축 기술은 빈 메모리 공간을 결합하여 하나의 큰 블록으로 만들어 다른 프로세스에서 효과적으로 사용할 수 있도록 합니다.

    • 해결 방안 2.논리적 주소 공간 활용
      → 외부 Fragmentation의 다른 해결책으로는 프로세스의 논리적 주소 공간이 연속적이지 않도록 허용하여 사용 가능한 물리적 메모리에 프로세스를 할당하는 것이 있습니다.

Paging

Paging은 메모리 관리 기법 중 하나로, 물리적 메모리의 연속 할당을 필요로하지 않습니다. 이를 통해 프로세스의 물리적 주소 공간이 비연속적일 수 있습니다.

  • 논리 주소 또는 가상 주소 (비트로 표시) : CPU에서 생성하는 주소
  • 논리 주소 공간 또는 가상 주소 공간 (단어 또는 바이트로 표시) : 프로그램이 생성하는 모든 논리 주소의 집합
  • 물리적 주소 (비트로 표시) : 메모리 장치에서 실제로 사용 가능한 주소
  • 물리적 주소 공간 (단어 또는 바이트로 표시) : 논리적 주소에 해당하는 모든 물리적 주소의 집합

가상 주소에서 물리적 주소로의 매핑은 하드웨어 장치인 메모리 관리 유닛(MMU)에 의해 수행되며, 이 매핑을 Paging 기법이라고 합니다.

  • 물리적 주소 공간은 여러 개의 고정 크기 블록 (프레임)으로 나누어집니다.
  • 논리적 주소 공간도 고정 크기 블록 (페이지)으로 나누어집니다.
  • 페이지 크기는 프레임 크기와 같습니다.
  • 예시
    • 물리적 주소 = 12 비트이면 물리적 주소 공간 = 4K 단어
    • 논리적 주소 = 13 비트이면 논리적 주소 공간 = 8K 단어
    • 페이지 크기 = 프레임 크기 = 1K 단어 (가정)

CPU에서 생성 된 주소는 다음과 같이 나누어집니다.

  • 페이지 번호(p): 논리적 주소 공간 또는 페이지 번호에서 페이지를 나타내는 데 필요한 비트 수
  • 페이지 오프셋(d): 페이지의 특정 워드를 나타내는 데 필요한 비트 수 또는 논리적 주소 공간의 페이지 크기 또는 페이지의 워드 번호 또는 페이지 오프셋

물리적 주소는 다음과 같이 나누어집니다.

  • 프레임 번호(f): 물리적 주소 공간 또는 프레임 번호에서 프레임을 나타내는 데 필요한 비트 수 또는 프레임 번호 프레임
  • 프레임 오프셋(d): 프레임의 특정 워드를 나타내는 데 필요한 비트 수 또는 물리적 주소 공간의 프레임 크기 또는 프레임의 워드 번호 또는 프레임 오프셋

페이지 테이블을 구현할 때 전용 레지스터를 사용할 수 있지만, 페이지 테이블이 크다면 레지스터를 사용하는 것은 효과적이지 않습니다. 페이지 테이블에 항목이 많은 경우, TLB(Translation Look-aside Buffer)와 같은 작고 빠른 하드웨어 캐시를 사용할 수 있습니다.

  • TLB는 결합, 고속 메모리입니다.
  • TLB의 각 항목은 태그와 값 두 부분으로 구성됩니다.
  • 이 메모리를 사용할 때 항목은 모든 태그와 동시에 비교됩니다. 항목이 발견되면 해당 값이 반환됩니다.

Main memory access time = m
If page table are kept in main memory,
Effective access time = m(for page table) + m(for particular page in page table)

profile
공부!

0개의 댓글