[운영체제] Chapter 8. 메모리 관리

Lil_Young·2022년 11월 19일
0

운영체제

목록 보기
8/11

메모리(주 기억장치) 종류

메모리 계층 구조

  • Block

    • 보조기억장치와 주기억장치 사이의 데이터 전송 단위

    • Size: 1~4KB

  • Word

    • 주기억장치와 레지스터 사이의 데이터 전송 단위

    • Size: 16~64bits

Address Binding

  • 프로그램의 논리 주소를 실제 메모리의 물리 주소로 매핑하는 작업

  • Binding 시점에 따른 구분

    • Compile time binding

      • 프로세스가 메모리에 적재될 위치를 컴파일러가 알 수 있는 경우

        • 위치가 변하지 않음

      • 프로그램 전체가 메모리에 올라가야 함

    • Load time binding

      • 메모리 적재 위치를 컴파일 시점에서 모르면 대체 가능한 상대 주소를 생성

      • 적재 시점(load time)에 시작 주소를 반영하여 사용자 코드 상의 주소를 재설정

      • 프로그램 전체가 메모리에 올라가야 함

    • Run time binding

      • Address binding을 수행시간까지 연기

        • 프로세스가 수행 도중 다른 메모리 위치로 이동할 수 있음

      • HW 도움 필요

        • MMU: Memory Management Unit

      • 대부분의 OS가 사용

Dynamic Loading

  • 모든 루틴을 교체 가능한 형태로 디스크에 저장

  • 실제 호출 전까지는 루틴을 적재하지 않음

    • 메인 프로그램만 메모리에 적재하여 수행

    • 루틴의 호출 시점에 address binding 수행

  • 장점

    • 메모리 공간의 효율적 사용

Swapping

  • 프로세서 할당이 끝나고 수행 완료된 프로세스는 swap-device로 보내고 (Swap-out)

  • 새롭게 시작하는 프로세스는 메모리에 적재 (Swap-in)

Memory Allocation(메모리 할당)

  • Continuous Memory Allocation (연속할당)

    • Uni-programming

      • Multi-programming degree = 1

    • Multi-programming

      • Fixed partition (FPM)

        • 고정 분할

      • Variable partition (VPM)

        • 가변 분할

  • Non-continuous Memory Allocation (비연속할당)

Continuous Memory Allocation (연속할당)

  • 프로세스를 하나의 연속된 메모리 공간에 할당하는 정책

    • 프로그램, 데이터, 스택 등

  • 메모리 구성 정책

    • 메모리에 동시에 올라갈 수 있는 프로세스 수

      • Multi-programming degree

    • 각 프로세스에게 할당되는 메모리 공간 크기

    • 메모리 분할 방법

Uni-Programming

  • 하나의 프로세스만 메모리 상에 존재

  • 가장 간단한 메모리 관리 기법

  • 문제점1

    • 프로그램의 크기 > 메모리 크기

  • 해결법

    • Overlay structure

      • 메모리에 현재 필요한 영역만 적재

      • 사용자가 프로그램의 흐름 및 자료구조를 모두 알고 있어야 함

  • 문제점2

    • 커널 보호

  • 해결법

    • 경계 레지스터 (boundary register) 사용

  • Uni-Programming 문제점

    • Low system resource utilization

    • Low system performance

  • 해결법

    • Multi-programming

Fixed Partition Multi-programming (고정 분할)

  • 메모리 공간을 고정된 크기로 분할

    • 미리 분할되어 있음

  • 각 프로세스는 하나의 partition(분할)에 적재

    • Process : Partition = 1 : 1

  • Partition의 수 = K

    • Multi-programming degree = K

  • 예)

  • 경계 레지스터 사용 -> 커널 보호

  • 내부 단편화, 외부 단편화 발생 가능

Variable Partition Multi-programming (가변 분할)

  • 초기에는 전체가 하나의 영역

  • 프로세스를 처리하는 과정에서 메모리 공간이 동적으로 분할

  • 내부 단편화 발생 X

  • 외부 단편화 발생 O

배치 전략 (Placement strategies)

가변 분할 방식의 메모리 관리

  • 최초 적합 (First-fit)

    • 충분한 크기를 가진 첫 번째 partition을 선택

    • Simple and low overhead

    • 공간 활용률이 떨어질 수 있음

  • 최적 적합 (Best-fit)

    • Process가 들어갈 수 있는 partition 중 가장 작은 곳 선택

    • 탐색 시간이 오래 걸림

      • 모든 partition을 살펴봐야 함 -> overhead가 큼

    • 크기가 큰 partition을 유지할 수 있음

    • 작은 크기의 partition이 많이 발생

  • 최악 적합 (Worst-fit)

    • Process가 들어갈 수 있는 partition 중 가장 큰 곳 선택

    • 탐색 시간이 오래 걸림

      • 모든 partition을 살펴봐야 함 -> overhead가 큼

    • 작은 크기의 partition 발생을 줄일 수 있음

    • 큰 크기의 partition 확보가 어려움

  • 순차 최초 적합 (Next-fit)

    • 최초 적합과 유사

    • State table에서 마지막으로 탐색한 위치부터 탐색

    • 메모리 영역의 사용 빈도 균등화

    • Low overhead

Coalescing holes (공간 통합)

  • 인접한 빈 영역을 하나의 partition으로 통합

    • Process가 memory를 release하고 나가면 수행

    • Low overhead
  • 예)

Storage Compaction (메모리 압축)

  • 모든 빈 공간을 하나로 통합

  • 프로세스 처리에 필요한 적재 공간 확보가 필요할 때 수행

  • High overhead

    • 모든 Process 재배치 (Process 중지)

    • 많은 시스템 자원 소비

  • 예)

[참고]
https://drive.google.com/file/d/1BBrzcAflvyToBu8GLRQCcVsPtf_pcL9X/view

profile
Beginner_Developer

0개의 댓글