운영체제(OS)

[OS] 물리 메모리 관리 기법

서노리 2022. 10. 18. 02:10
반응형

초기 운영체제

1950년 ~ 1970년대의 초기 운영체제는 물리 메모리에 단 하나의 프로그램만 올리는 single programming의 형태였다.

즉, 메모리는 os 영역과 실행 중인 하나의 프로그램이 올라가는 영역으로만 구분되었으며 가상화 개념이 존재하지 않았다.

동시에 메모리를 점유할 수 있는 프로그램이 단 하나였기 때문에 multi-tasking이 불가능했다.

 

Multiprogramming and Time Sharing

이후 Multiprogramming의 등장으로 동시에 여러 프로세스가 실행되는 것처럼 보이게 할 수 있게 되었다.

os는 여러 프로세스를 매우 빠르게 전환하면서 실행하는데 이를 Time Sharing(시분할)이라고 한다.

이때 기존에 실행되던 프로세스의 상태를 디스크에 저장하게 되는데 이는 시간이 오래 걸릴 수밖에 없었다.

또한 다른 프로세스의 메모리 공간을 침범할 위험성도 존재했다. 따라서 메모리 관리 기법이 필요했다.


Memory Management Issue

  • 배치(Placement)
    - 메모리의 여러 빈 공간 중 어느 곳에 새로운 프로세스를 삽입할 것인가

 

  • 재배치(Replacement)
    - 메모리에 올라가 있던 프로세스가 종료되었을 때 생기는 빈 공간을 어떻게 최소화할 것인가

 

  • 보호(Protection)
    - 메모리 상의 여러 프로세스 및 os가 어떻게 서로의 공간을 침범하지 않도록 할 것인가

 

  • 반입(Loading)
    - 어느 시점에 메모리에 올릴 것인가
    - on-demand loading(요구 시 반입) vs prefetching(예측하여 반입)

물리 메모리 관리 기법

단일 사용자 전용 시스템(Single User System)

초기 os와 같은 방식으로 메모리에 단 하나의 프로세스만 올리므로 배치, 재배치를 고려할 필요가 없으며 

protect register 값과 비교하여 protection을 할 수 있다.

 

고정 분할 다중 프로그래밍 시스템

1. 절대 번역 어셈블러

메모리를 고정된 크기로 미리 분할시켜놓고 각 세그먼트마다 독립적인 큐를 두는 방법이다.

각 프로세스는 컴파일될 때 해당 세그먼트를 배정받기 때문에 다른 세그먼트가 비어있어도 자신의 세그먼트가 빌 때까지 대기해야 해서 메모리 효율이 안 좋다는 단점이 있다.

 

2. 재배치 가능 어셈블러

메모리 효율 문제를 해결하기 위한 방법이 재배치 가능 어셈블러이다.

이는 메모리를 고정된 크기로 분할시켜놓고 하나의 큐를 통해 각 프로세스의 크기에 맞는 세그먼트에 분배하는 방법이다.

따라서 재배치가 용이하고 메모리 효율이 좋다는 장점이 있다.

 

하지만 절대 번역 어셈블러와 재배치 가능 어셈블러의 공통된 단점이 있는데 바로 내부 단편화(Internal Fragmentation)이다. 내부 단편화란 세그먼트의 크기보다 더 작은 프로세스가 들어올 경우 해당 세그먼트 내부에 빈 공간이 생기게 되는 것이며 해당 공간들은 사용하지 못하게 되어 낭비가 심해진다.

 

가변 분할 다중 프로그래밍 시스템

공통된 하나의 큐를 운용하는 방식은 동일하지만 미리 세그먼트를 분할해놓지 않고 프로세스가 들어올 때마다 그 크기에 맞게 할당하는 방식이다. 이는 내부 단편화 문제를 해결하지만, 외부 단편화(External Fragmentation)이 발생하게 된다.

외부 단편화란 하나의 프로세스가 종료된 자리에 새로운 프로세스가 들어오지 못하고 낭비되는 현상을 말한다.

즉, 대기 중인 프로세스들이 모두 빈 공간의 크기보다 커서 들어오지 못하는 경우 해당 공간은 계속 비어있게 된다.

이는 compaction을 통해 모든 외부 단편화를 없애는 방법을 통해 해결할 수 있다.

 

※ 가변 분할 방식의 재배치 기법
Q. 25KB 크기의 task 8이 생성되면 어디에 배치?

  • First fit
    - 메모리의 처음부터 찾으면서 프로세스가 들어갈 수 있는 첫 번째 빈 공간에 넣는 것
    - 이 방식을 따르면 task 8은 1번 공간에 할당

  • Best fit
    - 메모리를 모두 읽어 가장 크기의 차이가 적은 빈 공간에 넣는 것
    - 이 방식을 따르면 task 8은 2번 공간에 할당

  • Worst fit
    - 메모리를 모두 읽어 가장 크기의 차이가 큰 빈 공간에 넣는 것
    - 이 방식을 따르면 task 8은 4번 공간에 할당

  • Next fit
    - 메모리의 처음이 아닌 현재 포인터로부터 탐색해 알맞은 첫 번째 빈 공간에 넣는 것
    - 이 방식을 따르면 task 8은 4번 공간에 할당


※ 다중 프로그래밍 시스템의 protection 문제를 어떻게 해결할 것인가

protection register를 여러 개 두는 방법은 메모리를 너무 많이 낭비하게 되어 가상 메모리 개념이 도입되는 이유가 되었다.


 

반응형

'운영체제(OS)' 카테고리의 다른 글

[OS] 페이징(Paging) 기법  (0) 2022.10.26
[OS] 가상 메모리(Virtual Memory)  (0) 2022.10.18
[OS] Scheduling  (0) 2022.10.17
[OS] Limited Direct Execution  (0) 2022.10.17
[OS] Process Abstraction  (0) 2022.10.14