개념
관리 기법
메인 메모리는 운영체제를 위한 영역중인 프로그램을 위한 영역으로 구분
다중 프로그래밍 시스템에서 운영체제에 의해 동적으로 메모리의 사용자 영역을 여러 프로세스가 상주할 수 있도록 세분화하는 과정
반입 정책
메인 메모리에 적재할 다음 프로세스의 반입 시기하는 방법
- 요구 반입 기법: 운영체제나 시스템 프로그램, 사용자 프로그램 등의 참조 요구에 따라 메인 메모리에 적재 방법으로 오랫동안 사용
- 예상 반입 기법: 시스템의 요구를 에측하여 메모리에 미리 적재하는 방법으로 최근 사용되기 시작, 요구되는 페이지 외의 다른 페이지도 함께 들임, 탐색시간, 회전지연시간을 갖는 보조기억장치의 특성을 참조한 정책
배치 정책
디스크에 반입한 프로세스를 메인 메모리 어느 위치에 저장할 것인가를 결정하는 방법
최초 적합, 최적 적합, 최악 적합 등
대치 정책
재배치 기법으로 메인 메모리에 있는 어떤 프로세스를 제거할 것인가를 결정
메모리 해석에 대한 두 가지 관점
물리적 공간과 논리적 공간으로 구분
- 물리적 공간(물리적 주소): 실제 데이터나 프로그램이 저장되는 공간, 메모리 칩, 디스크 공간으로 생성
- 논리적 공간(논리적 주소): 프로그래머가 프로그래밍에 사용하는 공간, 목적코드가 저장된 공간, 프로그램에서 사용하는 자료구조 등이 해당된다.
메모리 매핑
- 논리적 주소와 물리적 주소의 연결
- 메모리 관리 장치(MMU, Memory Management Unit)인 하드웨어에서 실행
- 고정 분할, 동적 분할, 페이징, 세그먼트, 페이지화된 세그먼트 방식
메모리 관리 방식
- 연속 메모리 할당: 프로그램을 적재하는 과정에서 연속적으로 메모리를 할당
- 분산 메모리 할당: 프로그램을 페이지나 세그먼트 단위로 나누어 여러 곳에 적재하여 할당
메모리 방식 발전과정
- 연속 메모리 할당 방식 사용 (초기 컴퓨터 시스템)
- 고정 분할 기법: 메모리 영역을 여러개의 고정된 크기로 분할하여 프로세스에 제공하며, 메모리의 낭비(내부 단편화)를 유발
- 동적 분할 기법: 각 프로세스의 크기에 따라 메모리를 분할하는 방식, 고정 분할 기법의 문제점을 해결하기 위해 제시
- 분산 메모리 할당 방식 (현재의 가상 메모리 관리 기법으로 발전)
주소 바인딩
논리적 주소를 물리적 주소로 변환하는 과정(1/4)
- 프로그램에 있어서의 주소를 절대 주소로 바꾸어 메인 메모리의 고정된 부분에 적재
- 컴파일, 적재시간, 수행시간
논리적 주소를 물리적 주소로 변환하는 과정(2/4)
- 컴파일: 프로세스가 메모리 내에 적재될 위치를 컴파일 과정에서 알 수 있다면 컴파일러는 물리적 주소를 생성할 수 있다.
- 절대재배치: 메인 메모리의 실제 주소로 변환되는 과정
논리적 주소를 물리적 주소로 변환하는 과정(3/4)
- 적재시간: 프로세스가 메모리 내의 어디에 적재되어야 할 것인가를 컴파일 과정에서 알려주지 않으면 컴파일러는 재배치 가능 상대 주소를 생성, 상대 주소는 프로그램의 시작 주소가 0으로 생성되므로 최종 바인딩은 적재시간까지 연기, 시작 주소가 변하면 사용자 코드는 변화된 값 반영을 위해 재 적재한다.
논리적 주소를 물리적 주소로 변환하는 과정(4/4)
- 수행시간: 프로세스가 실행되는 도중에 메모리의 한 세그먼트에서 다른 세그먼트로 이동 시 바인딩은 수행시간까지 연기, 현대의 운영체제는 실행시간에 바인딩이 이루어진다.
동적 적재(Dynamic Loading)
- 메모리 공간 이용의 효율적 운영을 위해 제안
- 모든 루틴은 호출될 때까지 메모리 내에 적재되지않고 재배치 가능한 형태로 디스크에 저장
- 먼저 주 프로그램은 메모리에 적재되어 수행
- 주 프로그램(호출 루틴)이 다른 루틴을 호출할 필요가 있을 때, 호출 루틴은 호출될 루틴이 메모리에 적재되어 있는지 조사
- 만약 적재되어 있지 않다면, 재배치 기능 연결적재기(로더)는 요구된 루틴을 메모리로 적재하기 위해 호출하면서 프로그램의 주소 테이블을 갱신, 변화를 반영
장점
- 사용하지 않는 루틴을 적재하지 않는다.
- 코드양이 많이 필요한 경우 유용하다.
- 프로그램 전체 양은 많으나 실제로 사용된 구역은 적으며, 운영체제로부터 특별한 자원을 필요치 않음.(동적 연결적재기는 제공되어야 함.)
중첩(Overlay)
- 프로세스의 크기가 실제 메모리 크기로 제한되는 문제점을 해결하기 위해 사용
- 운영체제 영역과 메모리 공간의 일부 영역에 프로그램(작업) 실행에 반드시 필요한 명령어와 데이터를 저장
- 중첩 구동기(오버레이 드라이버)영역에는 실행기간 동안 필요한 각종 사용자 코드 등을 적재하여 필요한 시기에 해당 프로그램을 불어들여 실행
프로세스 교체
- 다중 프로그래밍 환경에서 프로세스는 사용자 프로그램이 끝날때까지 메인 메모리에 저장
- 순환 할당 알고리즘이나 우선순위에 바탕을 둔 프로세스 알고리즘에서 사용하기 적합하지 않다.
- 프로세스 할당이 끝나고 수행이 완료된 프로세스는 보조기억장치로 이동, 새롭게 시작되는 프로세스를 불러와야한다.
연속 메모리 할당
- 다중프로그래밍 환경에서 프로세스는 사용자 프로그램이 끝날때까지 메인 메모리에 저장
개념
- 초기 컴퓨터 시스템에 적용한 메모리 관리 기법
- 실행될 모든 프로그램은 필요한 영역만큼 연속적인 메모리 공간을 할당 받아 메모리에 적재한다.
- 한번에 적재 불가능하면 실행이 불가능하므로, 프로그램 수정 및 작은 모듈로 구성한다.
단일 사용자 연속 메모리 할당
- 메모리 영역을 사용자를 위한 공간과 운영체제 상주를 위한 공간으로 구분한다.
- 운영체제를 메모리의 하위, 상위에 두는 것이 가능하다.
- 메모리를 운영체제 루틴이 들어있는 부분(모니터)과 사용자 프로그램이 들어있는 부분(사용자)로 나눈다.
- 사용자가 모든 메인 메모리에 대한 제어권을 가진다.
문제점
- 사용자 프로그램의 적재
- 컴퓨터 주소 공간이 0000 부터 시작하더라도 사용자 프로그램의 처음 주소는 0000 번지가 아니라 기준 레지스터 값 이후가 되므로, 기준 주소가 변하면 다시 적재해야 한다.
해결 방법
- 사용자 프로그램을 기준으로 상위 주소에 적재하지 않고 기준 레지스터로 부터 내려가는 상위 메모리에 적재한다.
- 사용되지 않은 모든 공간이 중간에 있고, 운영체제나 사용자는 필요에 따라 사용되지 않을 공간으로 확정 가능하다.
- 수행할 때까지 바인딩을 연기한다.
교체 기법
- 메인 메모리보다 더 큰 프로그램을 실행할 수 있으므로 제한된 메인 메모리는 확장시키는 방법으로 사용된다.
- 단일 사용자 연속 메모리 할당 시스템이 프로세서 중심 작업일 경우 프로세스를 집중적으로 사용이 가능하다. 입출력 작업이 교대로 발생하는 경우 프로세서의 유휴상태가 자주 발생한다.
고정 분할 다중 프로그래밍
- MFT(Multiprogramming with a Fixed number of Tasks)
- IBM OS/360에서 사용 되었으나, 현재는 사용되지 않음.
- 고정된 크기의 분할 영역에 프로세스(작업)가 각각 할당한다.
- 물리 주소는 분할 기준 레지스터(PBR) 값에 논리 주소를 더하여 생성한다.
- 분할의 수에 고정 분할 다중프로그래밍의 성능이 제한된다.
고정 분할 다중 프로그래밍에서의 단편화
- 메모리의 단편화(Fragmentation)는 메모리 구성과 관계없이 모든 컴퓨터 시스템에서 발생한다.
- 사용자 작업의 크기가 지정된 분할에 정확히 맞지 않거나 분할이 너무 작아서 대기 중인 작업 중 하나도 맞는 것이 없는 상태를 말한다.
- 분할된 공간은 사용되지 않고 남아 내부 단편화의 원인이 된다.
가변 분할 다중 프로그래밍
- MVT(Multiprogramming with a Variable number of Tasks)
- 고정된 경계를 없애고 각 작업이 필요한 만큼만 메모리를 할당한다.
- 각 프로세스(분할 영역)을 나타내기 위해 기준(재배치) 레지스터와 한계 레지스터를 사용한다.
- 한계 레지스터는 프로세스 크기만큼의 영역에 저장한다.
메모리 재배치 기법
- 최초 적합 기법
- 최상 적합 기법
- 최악 적합 기법
외부 단편화
- 가변 분할 알고리즘은 외부 단편화 문제가 발생한다.
- 프로세스들이 메모리에서 제거되고 새로운 프로세스가 적재될 때, 사용 가능 공간은 작게 나누어진다.
- 프로세스들이 연속된 메모리를 차지하는 과정에서 공백이 발생, 사용 가능 공간은 많은 수의 작은 공가능로 단편화될 수 있다.
- 분할은 프로세스가 요구한 크기로 만들어지므로 내부 단편화는 거의 없으나 외부 단편화는 발생할 수 있다.
통합
- 하나의 작업이 끝났을 때, 기억 장소가 비어있는 다른 기억 장소(공백)와 연결되어 있는지를 점검, 하나의 공백으로 합하는 과정
압축
- 메모리 내용들을 적절히 움직여 모든 사용 가능 메모리를 하나의 큰 블록으로 만듦.
버디 시스템
- Buddy System
- 자원 할당 과정에서 발생하는 단편화 문제를 해결하기 위해 제안
- 큰 버퍼들을 반복적으로 이등분하여 작은 버퍼 생성
- 가능할 때마다 인접한 자유로운 버퍼들(Free Buffers)을 합치는 과정을 반복
- 버퍼가 나뉘어 질 때, 각각을 서로의 버디(Buddy)라고 부른다.