Memory (메모리)

이유석·2022년 3월 9일
0

CS - Operating System

목록 보기
12/20

Main Memory

정의

  • 메인 메모리는 CPU가 직접 접근할 수 있는 기억장치
  • 프로세스가 실행되려면, 프로그램이 메모리에 올라와야 함
  • 메인 메모리는 주소가 할당된 일련의 바이트들로 구성되어 있다.

Memory Protection (보호)

  • 오직 1개의 프로세스만이 메모리의 특정 주소(위치)에 접근하는것을 보당하여야 한다.
  • BaseLimit registers 의 쌍을 이용하여 프로세스의 가상 주소를 정의한다.
  • CPU는 항상 모든 메모리에 대한 접근이 base 와 base+limit 사이에 위치한지 확인한다.

Logical Address VS Physical Address

  • Logical Address : Virtual Address, 각 프로세스가 독립적으로 가지는 주소공간
    (CPU가 보는 주소)
  • Physical Address : Actual Address, 물리 메모리에 실제 올라가는 위치

Address Binding

정의

  • Logical Address 를 Physical Address로 바뀌는 과정
  • 각 프로세스마다 Logical Adress가 0번부터 시작하는데, 해당 프로세스를 물리 메모리에 올리기 위해, Logical Address 가 Physical Address로 바뀌어야 한다.

Address Binindg 이 필요한 시기
1. Compile time binding

  • physical address가 프로그램 컴파일 시 결전되며, 시작 위치 변경 시 컴파일 과정을 다시 거침
  • 과거 시스템 내의 하나의 프로그램을 실행할 때 사용되었으며, 최근의 시스템에서는 사용하지 않음

2. Load time binding

  • 소스코드가 컴파일 되면, logical address만 결정되고, 메모리에 올라갈 때 physical address가 결정된다.
  • loader의 책임하에 physical address를 부여하여, 컴파일러가 재배치가능 코드를 생성한 경우 가능

3. Excution(Run) time binding

  • 소스코드가 컴파일 되면, logical address만 결정되고, 메모리에 올라갈 때 physical address가 결정된다.
  • 프로세스가 시작된 이후에도, 프로세스의 메모리 상 위치를 옮길 수 있음.
  • CPU가 주소를 참조할 때마다 binding 을 점검
  • 하드웨어적인 지원이 필요 (base and limit register, mmu)

Memory Management Unit (MMU)

정의

  • CPU코어 안에 탑재되어 가상(Logical) 주소를 실제(Physical) 주소로 변환해주는 하드웨어 장치
  • 반대로도 가능하다.

방법

  • 사용자 프로세스가 CPU에서 수행되면, 생성해내는 모든 주소값에 대해 base register (relocation register)값을 더한 값이 실제 physical address가 됩니다.
  • relocation register을 더하기 전에 logical address가 limit register 보다 더 큰지 검사한다.
    • 만약, 더 클 시, sw interrupt(trap)을 발생시킵니다.

Dynamic Loading

정의

  • 프로세스 전체를 물리 메모리에 미리 다 올리는 것이 아니라, 해당 루틴이 불려질 때 메모리에 로드하는 방법

특징

  • 빈번히 발생하는 것이 아니고, 많은 양의 코드가 필요할 때 유용하다.(ex. 오류 처리 루틴)
  • 운영체제의 특별한 지원 없이, 프로그램 자체에서 구현 가능

Linking

정의

  • 여러군데에 존재하는 컴파일된 파일들을 묶어서 하나의 실행파일을 만드는 것
  • 파일들은 사용자가 만든것일 수 도 있고, 라이브러리 일 수 도 있다.

Static Linking

  • 시스템 라이브러리와 프로그램 코드가 loader에 의해 합쳐져서 binary program image에 결합됨
  • 단점 : 실행 파일의 크기가 커지고, 동일한 라이브러리를 갖는 각각의 프로세스가 메모리에 올라가므로, 메모리 낭비

Dynamic Linking

  • 시스템 라이브러리와의 연결이 프로그램 실행 시 까지 delay(연기)된다.
  • Stub
    • 메모리 내의 적절한 라이브러리를 찾아주는 작은 양의 코드
    • 메모리에 없을 시, Disk에서 가져온다.
    • routine의 주소와 대체되고, 해당 routine이 실행된다.
  • Shared Libraries
    • Dynamic Linking 은 Library routine이 변경될 때 유용하다.
    • Library의 버전, 상태 변경 시 → 모든 program에게 공유 되어야 한다.

OverLays

정의

  • 메모리에 프로세스의 부분 중 실제로 필요한 정보만을 올린다.
  • 프로세스의 크기가 메모리 보다 클 때 유용하다.

Swapping

정의

  • 프로세스를 일시적으로 메모리에서 backing store(디스크의 일부 여역)로 쫓아내는 것
  • 일반적으로 우선순위가 낮은 프로세스를 swap out 시키고, 우선순위가 높은 프로세스를 (swap in)메모리에 올려 놓음.
  • 시스템은 ready queue를 유지시켜 더 빠른 Swapping을 가능하게 한다.

Allocation of Physical Memory

메모리는 일반적으로 OS 상주 영역과 사용자 프로세스 영역으로 나누어 사용된다.

사용자 프로세스 영역의 할당 방법
1. Contiguous allocation

  • 각각의 프로세스가 메모리의 연속적인 공간에 적재되도록 하는 것

2. NonContiguous allocation

  • 하나의 프로세스가 메모리의 여러 영역에 분산되어 올라갈 수 있음

Contiguous Allocation

1-1. 고정 분할 방식

  • 물리적 메모리를 몇개의 영구적 분할(partition)으로 나눔
  • 분할 당 하나의 프로그램 적재
  • 단점 : 동시에 메모리에 load되는 프로그램 수가 고정, 최대 수행 가능 프로그램 수 또한 제한

1-2. 가변 분할 방식

  • 프로그램의 크기를 고려해서 할당
  • 분할의 크기, 개수가 동적으로 변한다.
  • 기술적 관리 기법 필요

Hole : 물리 메모리 상의 가용 메모리 공간, 다양한 크기의 hole들이 메모리 여러 곳에 흩어져 있음

  • 프로세스를 넣을 홀을 결정하는 방법
    1. First-fit : 충분한 크기의 첫번째 홀
    2. Best-fit : 순서와 상관없이 가장 크기가 맞는 홀 (크기가 가장 가은 hole 부터 확인)
    3. Worst-fit : 가장 큰 홀 (크기가 가장 큰 hole 부터 확인)

Fragmentation

정의

  • 단편화 문제 : 전체 메모리 공간에는 프로세스 할당이 가능하지만, 너무 세분화 되어서 할당이 불가능 하다.
  • Contiguous Allocation의 주요 문제
  • 새 프로세스가 메모리 할당을 받기 위한 적당한 크기의 hole이 없는 상황에서 문제 발생

종류

  • External Fragmentation

    • 전체 메모리 공간은 새 프로세스의 요청을 만족 하지만, 너무 세분화 되어있어서 할당이 불가능한 상황
  • Internal Fragmentation

    • 프로세스에게 할당된 메모리 크기가 요청 메모리 크기보다 살짝 큼
    • 해당 차이는 사용되지 않는 메모리 공간이다.

compaction

  • External Fragmentation의 해결책
  • 사용중인 모든 프로세스들의 메모리 영역을 한군데로 몰고, hole들을 다른 한곳으로 몰아, 큰 가용 공간을 확보
  • 프로세스의 주소가 실행 시간에 동적으로 재배치 가능한 경우에만 수행 가능하다.
  • I/O Problem
    • I/O 연산의 결과가 적합한 메모리 공간으로 가지 않을 수 있다.
    • I/O는 Physical Location만 알고 있기 때문

NonContiguous Allocation

2-1. Paging

  • 프로세스의 가상메모리를 동일한 page로 나누어 물리 메모리에 올림

2-2. Segmentation

  • 프로세스의 가상 메모리를 segment단위(code, data, ...)로 물리 메모리에 올림

2-3. Paged Segmentation

  • Paging 과 Sementation을 혼용한 방법

해당 방법들의 자세한 내용은 다음 게시글에서 다룰 예정입니다.

profile
https://github.com/yuseogi0218

0개의 댓글