운영체제의 메모리 관리
공부할 때 필기한 내용이라 알고 계시는 내용과 다를 수 있습니다.
간단하게 정리한 내용이므로 자세한 설명은 아닙니다.
다중 프로그램 기법
메인 메모리에 여러 개의 작업을 쌓아 둔 후 CPU가 작업을 오가며 동시에 실행하는 기법이다. 운영체제는 프로그램들이 서로 충돌하거나 상대방의 영역에 침범하지 않도록 관리한다.
다중 프로그래밍 환경의 메인 메모리 관리 기법으로는 고정 분할 메모리 관리와 가변 분할 메모리 관리가 있다.
고정 분할 메모리 관리
'고정 분할(Fixed Partition) 메모리 관리 기법'은 가장 간단한 메모리 할당 방법으로 메인 메모리를 고정된 크기로 미리 나눠 두었다가 실행 중인 프로세스에 할당한다.
단편화(Fragmentation)
작업량과 분할 공간의 크기가 일치하지 않아 빈 공간이 발생할 수 있는데 이를 단편화 현상이라고 한다.
단편화 현상은 내부 단편화(Internal Fragmentation)와 외부 단편화(External Fragmentation) 2가지 현상으로 나타난다.
내부 단편화(Internal Fragmentation)
작업물이 분할 공간에 들어가 있지만 공간의 크기가 커서 빈 공간이 발생하는 것이다.
30KB 분할 공간에 15KB 크기의 프로세스를 40KB 분할 공간에 30KB 프로세스가 로딩되면 15KB 공간과 10KB 공간은 사용할 수 없다. 고정 분할 방식으로 크기가 나눠져, 새로운 분할 공간을 만들 수 없기 때문이다. 이런 경우가 내부 단편화다.
외부 단편화(External Fragmentation)
분할 공간의 크기가 작업량보다 작아서 빈 공간이 된 것이다.
10KB 분할 공간에 15KB 크기의 프로세스를 로딩하려는 경우이다. 넣어 둘 작업량보다 분할 공간의 크기가 작아서 사용할 수 없다.
가변 분할(Variable Partition) 메모리 관리 기법
고정 분할 메모리 관리 기법의 단점을 보완하기 위해 등장한 기법이다.
고정된 분할 공간의 경계를 없애고 작업량이 맞는 공간을 할당한다.
작업이 완료되면 빈 공간은 다시 모아 관리한다.
사용자 프로그램이 실행되면 그때그때 알맞은 크기로 공간을 분할해 할당한다고 보면 된다.
[a]
운영체제만 메모리에 로딩되어 있고 메인 메모리는 1개의 파티션으로 존재한다.
[b]
프로세스 1~4가 진행되면서 순서에 맞게 공간을 할당하고 빈 공간은 그대로 남아있다.
[c]
프로세스 3이 종료되면서 15KB 크기의 빈 공간이 추가로 발생했다.
[d]
가변 분할은 빈 공간을 1개로 만들기 위해 프로세스들을 재배치(Re-Location) 할 수 있는데 이를 압축(Compaction)이라고 한다. 위 그림도 압축이 진행되자 40KB의 큰 공간이 생겼다. 이 공간은 다음에 실행될 프로세스가 사용할 것이다.
빈 공간에 새로운 프로그램을 할당하는 방식 3가지
최초 적합(First Fit)
프로그램 크기보다 큰 분할 공간 중 처음 만나는 공간을 할당한다.
최적 적합(Best Fit)
프로그램 크기보다 큰 분할 공간 중 가장 작은 공간을 할당한다.
최악 적합 (Worst Fit)
프로그램 크기보다 큰 분할 공간 중 가장 큰 공간을 할당한다.
가상 메모리(Virtual Memory) 관리
지금 당장 실행해야 하는 부분만 메인 메모리에 저장하고 나머지 프로그램은 보조기억장치에 둔 채 동작하는 방법이다.
메모리 관리의 가장 큰 특징은 프로세스가 올라갈 메모리 크기와 위치를 신경 쓰지 않고 프로그래밍되도록 지원하는 것인데 이를 가능하게 하는 것이 가상 메모리이다. 실제 메모리와 상관없이 메모리 공간을 제공한다고 보면 된다.
페이징(Paging) 기법
프로그램을 일정 크기로 나누어 페이지를 만들고 페이지 단위별로 메인 메모리에 올려 동작하는 방식이다. 가상 메모리를 일정한 크기의 페이지로 나누어 관리하는 것이다.
페이징 기법에서 메인 메모리는 프레임(Frame)이라는 고정된 크기의 블록으로 프로세스는 페이지(Page) 단위로 나뉜다. 보통 페이지와 프레임은 크기가 같다. 하나의 프로세스를 구성하는 페이지는 서로 다른 프레임에 할당되는데, 각 프로세스에 할당된 페이지 테이블(Page Table)이 페이지와 프레임 번호를 연결해 준다.
요구 페이징(Demand Paging) 기법
기본 페이징 기법을 확장한 개념이다.
CPU가 프로세스의 페이지 중 하나를 가지고 작업을 수행하다가 다른 페이지가 필요하면 먼저 그 페이지가 메모리 내에 적재되어 있는지를 확인한다.
메모리 내에 이미 있다면 그 페이지를 사용하고 없다면 보조기억장치에서 해당 페이지를 읽어 들인다.
세그먼테이션(Segmentation) 기법
가상 메모리를 프로그램이나 데이터 용도에 맞춰 분할하는 기법이다.
페이징 기법이 페이지를 일정한 크기로 분할한다면 세그먼테이션 기법은 논리적인 단위로 잘라서 적재한다.
여기서 논리적인 단위란 코드(Code), 데이터(Data), 스택(Stack) 등을 말한다.