[OS] 기억장치 관리

sky·2022년 4월 6일
0

정리

목록 보기
3/13
post-thumbnail

(1) 개요

  • 프로그램과 데이터는 직접 실행되거나 참조되기 위하여 주기억장치 내에 존재해야 한다.
  • 각 프로세스는 메모리 공간에 저장되고, 다수 프로세스들을 위한 주기억장치의 효율적인 관리가 필요하다. 이것이 OS의 역할이다.
  • 주기억장치는 용량이 제한되어 있고 가격이 비싼 반면에, 보조기억장치(자기테이프, 하드디스크, 플로피디스크, CD-ROM, DVD-ROM, 플래시메모리, SSD, etc)는 용량이 크고 가격도 저렴하다.

Address Binding & Type

  • 정의 : 이진파일 형태로 디스크에 저장되어 있는 프로그램이다. (주기억장치 적재(로드))
  • logical address를 가진 프로그램이 주기억장치에 적재될 실제 physical address로 mapping되는 것을 의미한다.

1. Compile Time Binding

  • 프로세스가 적재될 주기억장치의 위치(주소)를 미리 아는 경우, 컴파일러가 절대코드(물리적 주소를 가진 이진코드)를 생성한다.
  • 만약, 프로세스 실행 위치(주소)를 바꾸고자 한다면 재컴파일이 필요하다.
  • Ex) OS를 위한 *bootloader는 일반적으로 물리적 주소가 정해져 있다.
*bootloader : 시스템의 하드웨어를 초기화하고 OS의 커널을 메모리에 올려 실행시키는 프로그램이다. 일반적으로 BIOS가 디스크에서 읽은 bootloader를 메모리의 정해진 물리주소 0x00007c00번지에 로드시킨다. 윈도우나 리눅스를 끌어오는데 항상 같은 위치에 올라온다.(특수한 case)

2. Load Time Binding

  • 프로세스가 적재될 위치(주소)를 컴파일러가 알지 못하는 경우, 컴파일러는 일단 이진코드를 재배치 가능하게 생성한다.
  • 물리적 주소로의 주소 바인딩은 프로그램이 기억장치에 적재되는 시간에 적재기(loader)에 의해 수행된다.

3. Execution Time Binding

  • 프로세스가 실행되는 시점에 주소 바인딩이 이루어진다. (Ex-Dynamic Link Library)

Logical Address & Physical Address

  • 논리적 주소는 CPU가 생성하여 관리하는 주소로, virtual address라고도 부른다.
  • 물리적 주소는 메모리의 실제 주소로, *기억장치(관리기)가 관리하는 주소를 의미한다.
*Memory Management Unit(기억장치 관리기)은 논리적 주소를 물리적 주소로 변환하는 역할을 수행한다. (OS에 포함되는 모듈)

(2) 기억장치의 계층 구조 및 관리 기법

계층적 구조


캐시는 Static RAM(SRAM)으로 만들어지며, CPU에 존재한다. 여러 레벨(L1, L2, L3 등)의 캐쉬가 존재한다.
주기억장치는 Dynamic RAM(DRAM)으로 만들어진다.
CPU는 보조기억장치를 읽지 못하기 때문에 프로그램과 데이터를 주기억장치에 먼저 옮겨져야 보조기억 장치가 실행된다.


Memory Management Unit(MMU)의 기억장치 관리

  • 기억장치 자원을 효율적으로 사용할 수 있도록 한다.

  • fetch(반입)기법 : 주기억장치에 적재할 다음 프로그램이나 데이터를 언제 가져올 것인가 결정한다. demand fetch(요구반입)기법과 anticipatory fetch(예상반입)기법이 있다

  • placement(배치)기법 : 새로 반입된 데이터나 프로그램을 주기억장치의 어디에 위치시킬 것인가 결정한다. first-fit(최초적합), best-fit(최적적합), worst-fit(최악적합) 기법이 있다.

  • replacement(교체)기법 : 새로 들어온 프로그램이 들어갈 장소를 마련하기 위해서 어떤 프로그램 및 데이터를 제거할 것인가를 결정한다.

(3) 단일 사용자 연속 기억장치 할당

  • 초기의 컴퓨터 시스템에서는 임의의 시간에 한 사용자만이 시스템을 사용했다. (아주 간단한 기억장치 할당, but 자원 낭비가 많음)
  • *Overlay 기법을 이용하여 주기억장치보다 더 큰 프로그램도 실행 가능하다.
    • 큰 프로그램을 몇 개의 조각으로 분할하여, 프로그램이 시작되면 각 단계별로 차례로 적재하여 실행함으로써, 여러 단계를 거치면서 커다란 프로그램을 실행하는 방법이다.
    • 프로그램의 한 부분이 더 이상 실행에 필요 없는 경우 다른 프로그램을 보조 기억장치로부터 옮겨와서 필요 없는 프로그램이 사용하던 기억장치를 차지하게 한다.

시스템 보호 방법(OS 보호)

  • 사용자 프로그램이 OS영역을 침범하지 못하도록 한다.
  • CPU 내에 하나의 boundary register(경계 레지스터)를 이용한다.

(4) 고정 분할 기억장치 할당

주기억장치를 일정 수의 고정된 크기들로 분할하여 여러 프로세스에게 할당하는 방법으로, 초기의 다중 프로그래밍 시스템에서 활용했다.

기억장치에 프로그램(작업) 할당하는 방법

  • 절대 번역 및 로딩 방법 : 컴파일 시에 정해진 주소의 메모리에 로딩
  • 재배치 가능 번역 및 로딩 방법 : 로딩 시에 배치되는 주소의 메모리에 로딩

시스템 보호 방법

  • 임의의 한 분할에 있는 프로그램과 데이터를 다른 분할에 있는 프로그램으로부터 보호해야 한다.
  • 여러 개의 bound register를 이용하여 다른 프로그램을 보호한다.
  • lower bound(하한) register & upper bound(상한) register


기억장치의 fragmentation(단편화)현상 발생(Cons)

전체 18K의 메모리가 사용되지 않고 있으나, 작업 4(13K)를 수행할 수 없다.

  • 사용자 작업(프로그램)의 크기가 분할에 정확히 맞지 않거나, 또는 분할이 너무 작아서 대기 중인 어떤 작업이 이 분할에 적재될 수 없는 경우에 발생한다.
  • Internal Fragmentation : 어떤 분할이 사용되었으나, 사용된 분할의 일부는 사용되고 다른 일부는 남았을 때 발생한다.
  • External Fragmentation : 어떤 분할이 사용되지 않고 이용 가능하지만 대기 중인 작업에게는 너무 작아서 사용할 수 없을 때 발생한다.
다양한 프로그램 내용에 따라 프로그램 크기가 변화하기 때문에 단편화 문제를 줄이기 위하여 합리적인 메모리의 고정 분할 크기를 결정하는 것은 어려운 문제다.

(5) 가변 분할 기억장치 할당

기억장치 단편화 문제를 해결하기 위해 고정된 분할의 개념을 없애고 각 작업(프로그램)에 필요한 만큼의 기억 장치를 동적으로 할당하는 방법이다.

가변 분할 다중 프로그래밍에서의 초기 분할 할당


기억장치의 fragmentation(단편화)현상 발생(Cons)

시스템 구동 초기에는 별다른 낭비가 없는데, 작업에 대하여 메모리의 할당과 해제를 반복하는 경우에 기억장치 단편화의 문제가 심화될 가능성이 높다.


위 그림에서 파란색 부분이 비어있는 부분이다. 초기엔 문제 없이 구동되다가도 갈수록 메모리 단편화 현상이 발생하게 돼서 메모리 효율이 감소한다. 그래서 이 문제를 OS가 해결한다.


메모리 공간 효율화 방법

1. coalescing holes(공백 합병)

인접한 공백들을 결합하여 하나의 큰 기억 공간으로 만들어 버린다.


2. compaction(기억장소 집약)

  • 존재하는 여러 개의 작은 공백들을 하나의 커다란 기억 공간으로 통합한다.
  • 일반적으로 garbage collection이라고도 부른다.

기억장소 집약의 문제점

  • 집약이 실행되는 동안 모든 일을 중지해야 하고, 집약 시에 기억장치 내에 있는 작업(프로그램)들을 relocation(재배치)해야 한다.
  • 잦은 기억장소 집약을 수행하는데 필요한 시스템 자원들의 소모가 기억장소 집약으로부터 얻는 이익보다 더 커질 수 있다.
  • 따라서 메모리 효율은 좋으나 컴퓨터 이용률이 떨어진다.

해결 방법 - 기억 장치 배치 기법

  1. first-fit 기법 : 주기억장치의 첫 번째 유용한 공백을 우선적으로 선택하는 방법으로, 널리 사용되고 있다.
  2. best-fit 기법 : 기억장치의 단편화를 최소로 하는 방법으로, 적재 가능한 가용 공간 중 가장 작은 공백이 남는 분할에 할당한다.
  3. worst-fit 기법 : 적재 가능한 가용 공간 중 가장 큰 공간에 할당하고, 할당 후에도 활용할 수 있는 가용 공간이 남아 있다.

(6) 기억장치 Swapping

  • Replacement라고도 하고, 하나의 작업이 전체 기억장치를 사용한 후, 필요에 따라 그 작업은 swap out(제거)되고 다시 다음 작업이 swap in(적재)되는 순으로 수행한다.
  • 오늘날 일반적으로 사용되는 paging system의 기초가 됐다.

만일 A가 수행되고 B가 들어오려고 하는데 자리가 부족하니 A를 잠시 가상 메모리에 보관해둔다.
가상 메모리를 사용하면 속도가 감소하고, 주기억장치만 쓰면 속도가 증가한다.

profile
개발자가 되고 싶은 1人

0개의 댓글