메모리 관리
주기억장치는 운영체제(상주 모니터, 커널)를 위한 곳과, 현재 수행중인 프로그램을 위한 공간으로 구분된다.
멀티프로그래밍 시스템에서는 주기억장치의 사용자 영역이 다수의 프로세스들을 수용하기 위해 더 여러개로 나뉘게 된다. 이와 같은 분할 작업은 운영 체제에 의해서 동적으로 이루어지며, 이를 메모리 관리라고 한다.
메모리 관리 관련 용어
프레임 (Frame) : 주기억장치의 고정 길이 블록
페이지 (Page) : 보조기억장치에 있는 데이터의 고정 길이 블록. 한 페이지의 데이터는 한 프레임의 주기억장치에 임시로 복사될 수 있다.
세그먼트 (Segment) : 보조기억장치에 있는 데이터의 가변 길이 블록. 전체 세그먼트는 주기억장치의 사용 가능한 공간에 임시로 복사될 수 있거나 (세그먼테이션), 주기억장치로 일일이 복사될 수 있는 페이지들로 분할 될 수 있다. (세그먼테이션과 페이징의 결합)
메모리 관리기법 종류
- 언제 메모리로 적재할 것인지 결정하는 전략
- 메인메모리에 적재할 다음 프로세스의 반입시기를 결정
- 기법 : 요구반입기법, 예상반입기법
- 어디로 위치시킬 것인지 결정하는 전략
- 디스크에서 반입한 프로세스를 메인 메모리의 어느 위치에 저장할 것인지를 결정하는 방법
- 기법 : 최초적합(first-fit), 최적적합(best-fit), 최악적합(worst-fit), 순환적합(next-fit)
- 최초적합: 메모리의 처음부터 검사해서 크기가 충분한 첫 번째 사용 가능한 메모리 블록을 선택한다.
- 최적적합: 요청한 크기와 가장 근접한 크기의 메모리를 선택한다. 가용 공간들에 대한 목록이 그 공간들의 크기 순서대로 정렬되어 있지 않다면 최적인 곳을 찾기 위해 전체를 검색해야 한다.
- 최악적합: 사용 가능한 공간들 중에서 가장 큰 것을 선택한다. 할당해주고 남는 공간을 크게하여 다른 프로세스들이 그 공간을 사용할 수 있도록 하는 전략. 최적 적합과 마찬가지로, 가용 공간들에 대한 목록이 그 공간들의 크기 순서대로 정렬되어 있지 않다면 최적인 곳을 찾기 위해 전체를 검색해야 한다.
- 순환적합: 가장 최근에 배치되었던 메모리의 위치에서부터 검사를 시작해 크기가 충분한 다음 위치의 사용 가능한 메모리 블록을 선택한다.
- 메모리의 어느 영역을 교체하여 사용할 것인지 결정하는 전략
- 재배치 기법으로 메인 메모리에 있는 어떤 프로세스를 제거할 것인가를 결정
- 기법: 프로세스 Swap In/Out
연속 메모리 할당 방식
- 메모리의 영역을 사용자를 위한 공간과 운영체제 상주를 위한 공간으로 구분하는 기법
- 메모리를 운영체제 루틴이 들어있는 부분(모니터)과 사용자 프로그램이 들어있는 부분, 사용되지 않는 부분으로 구분
- 사용자가 모든 메인 메모리에 대한 제어권을 가짐
- 사용자 프로그램이 주소를 잘못 지정하면 운영체제 파괴
- 운영체제 파괴 방지를 위한 프로세서 내 경계 레지스터를 둠
- 사용자 프로그램이 메모리 참조할 때마다 경계 레지스터 검사 이후 실행
- 메모리를 여러 개의 고정된 크기로 분할. (partition)
- 고정된 크기의 분할 영역에 프로세스가 각각 할당됨.
- 물리주소는 분할 기준 레지스터(PBR) 값에 논리 주소를 더하여 생성됨
- 강점 : 구현이 간단하다 = 운영체제에 오버헤드가 거의 없다.
- 약점 : 내부단편화로 인한 비효율적인 사용. 최대 활성 프로세스의 수가 고정됨
- 메인메모리의 사용자 공간 전체를 하나의 분할 영역으로 설정하고, 이후 프로세스의 움직임에 따라 분할 형태를 동적으로 변화시키는 기법
- 강점 : 내부단편화가 없고, 주기억장치를 보다 효율적으로 사용할 수 있다.
- 약점 : 외부 단편화를 해결하기 위한 메모리 집약(Compaction)이 요구된다. 따라서 처리기 효율이 나빠진다. (오버헤드 발생)
분산 메모리 할당 방식
- 동일 크기의 프레임 분할.
- 페이지라고 불리는 프로세스 영역들이 프레임(페이지 프레임)이라고 불리는 고정크기 블록의 메모리 영역에 할당.
=> 즉, 주기억장치를 고정 사이즈 파티션으로 나누고 각 프로세스 또한 같은 크기의 고정 조각으로 나눈다!
- 내부 단편화 발생, 외부 단편화 없음
- 각 페이지를 연속된 공간에 넣을 필요가 없지만, 프로세스의 각 페이지들에 해당하는 프레임의 위치를 저장하기 위해 운영체제는 각 프로세스마다 하나의 페이지 테이블(page table)을 유지한다.
- 페이지 테이블 : 논리메모리 페이지 번호와 물리메모리 프레임 번호를 매핑.
- 분할되는 프로그램 블록들을 세그먼트라 하며, 각 세그먼트들의 크기는 서로 다르게 되어 있다.
- 크기가 다르기 때문에 주기억장치 영역을 페이징 시스템에서와 같이 미리 분할해 둘 수 없으며, 주기억장치에 적재될 때 빈 공간을 찾아 할당하는 방법.
- 단점 : 프로그래머가 세그먼트의 최대 크기를 알고 있어야한다.
논리주소와 물리주소 간에 복잡한 관계가 존재한다.
외부 단편화 문제 발생.
- 동적 할당과 차이점은 세그먼테이션의 경우 프로그램이 하나 이상의 파티션을 차지할 수 있고, 이 파티션들이 연속적일 필요는 없다는 점.