📚프로세스와 메모리

프로세스가 동작하기 위해 자원을 할당받아야 한다. 자원 중 CPU와 메모리는 필수 요소이다. 프로세스는 프로그램 카운터를 참조하여 수행될 명령을 읽어보고 CPU의 해당 명령을 수행한다. 여기서 프로그램 카운터가 참조하는 것이 메모리상의 특정 위치가 된다.

데이터나 프로그램의 양이 많아 메모리에 다 가져오지 못하면 하드 디스크나 SSD와 같은 보조기억장치를 이용하여 필요한 순간에만 메모리로 가져오고 그렇지 않으면 다시 보조기억 장치로 옮겨 놓는다.

보조기억장치는 메모리에 비해 접근 속도는 느리지만 저렴하고 용량이 크다는 장점이 있다. 캐시 메모리는 메모리에 비해 비용이 비싸고 용량이 작지만 접근속도가 빠르다. 따라서 자주 실행되는 프로세스는 캐시에 두어 실행속도를 향상시킬 수 있다.

메모리를 효율적으로 관리하기 위해 다양한 관리유형과 기법이 필요합니다.

MemoryHierarchy
https://ko.wikipedia.org/wiki/메모리_계층_구조


📚단일 프로그래밍 환경

초창기 시스템은 하나의 프로세스만 메모리를 사용했다. 따라서 나머지 사용자는 하나의 프로세스가 작업을 완료할 때까지 기다려야 했다. 여기서 프로세스는 하나의 연속된 블록으로 메모리에 할당되는 연속 메모리 할당 방식을 이용했다.

이 방식은 단순하다는 장점이 있지만 메모리의 용량을 초과하는 프로세스는 실행될 수 없다는 단점이 있다. 또한 사용되지 않는 프로세스도 메모리에 계속 적재되어 있어야 해서 메모리 낭비가 심하고 주변장치 등 자원의 낭비가 심하다. 입출력을 수행하는 중에는 CPU가 대기하고, CPU가 작업 중에는 입출력 장치가 대기해야 하는 단점이 있다.


📚다중 프로그래밍 환경

다중 프로그래밍은 여러 개의 프로세스가 메모리에 동시에 적재되는 것이다. 현재 실행 중인 프로세스가 입출력 대기를 해야 하면 실행을 기다리고 있는 다른 프로세스에 CPU를 할당할 수 있다.


📄메모리 분할

메모리 분할은 여러 프로세스를 메모리에 적재하기 위해 고안된 방법이다.

  • 고정 분할
    고정 분할은 메모리를 여러 개의 고정된 크기의 영역으로 분할하는 방식이다. 분할된 영역에서 프로세스를 배치하는 방법은 두 가지가 있다.

    1. 각 분할영역마다 큐를 두고 큐에 들어온 프로세스는 해당 분할영역에만 적재되도록 하는 방법
    2. 메모리 전체에 하나의 큐만 두고 모든 프로세스를 하나의 작업 큐에 넣어서 어느 분할에서든지 실행 가능하게 하는 방법

      고정 분할 방식은 프로세스의 크기가 적재된 분할영역의 크기보다 작아서 메모리가 남게되는 부분이 있어 낭비가 있다. 이것을 내부 단편화라고 한다.


  • 동적 분할
    동적 분할은 메모리의 분할경계가 고정되지 않고 각 프로세스에 필요한 만큼 메모리를 할당하는 방식이다. 이 방법은 필요한 시점에 필요한 만큼의 메모리만 할당받기 때문에 내부 단편화 문제는 일어나지 않지만 외부 단편화 문제가 발생한다. 메모리 할당과 반환이 반복됨에 따라 작은 크기의 공백이 메모리 공간에 흩어져 생기는 문제이다.

    외부 단편화를 해결하기 위한 방법으로 통합과 집약이 있다.

    • 통합: 인접된 공백을 더 큰 하나의 공백으로 만드는 과정. 공백이 통합되더라도 메모리 안에 여기저기 분산되어 있으면 여전히 문제 발생.
    • 집약: 메모리 내의 모든 공백을 하나로 모으는 작업. 이용 가능한 기억장소가 연속으로 모여 있어 통합이 가지는 문제를 해결할 수 있음.


📄메모리 보호

여러 프로세스가 동시에 메모리에 상주해야 하므로 메모리 보호가 필요하다. 연속 메모리 할당 방식에서 프로세스가 사용할 수 있는 주소 범위를 하한-상한 레지스터 쌍 또는 하한-크기 레지스터 쌍의 값으로 제한하여 다른 할당영역을 침범하지 않게 한다. 프로세스가 제한을 넘으려면 시스템 호출을 통해야 한다.



📚메모리 배치기법

메모리 배치기법은 동적 분할 다중 프로그래밍에서 프로그램이나 데이터를 메모리의 어느 위치에 배치할 것인가를 결정하는 것이다.


📄최초 적합

최초 적합(first-fit) 방법은 프로세스가 적재될 수 있는 빈 공간 중 가장 먼저 발견되는 곳을 할당합니다. 이 방법은 빈 공간 리스트를 메모리의 주소순으로 유지하고 할당 속도를 빠르게 할 수 있는 방법이다.



📄후속 적합

후속 적합(next-fit) 방법은 이전에 탐색이 끝난 다음 부분부터 시작하여 사용 가능한 빈 공간 중 가장 먼저 발견되는 곳을 할당한다.



📄최적 적합

최적 적합(best-fit) 방법은 빈 공간 중 가장 작은 곳을 선택하여 할당한다. 빈 공간을 최대한 많이 남겨 놓기 위한 방법이다.



📄최악 적합

최악 적합(worst-fit) 방법은 빈 공간 중 가장 큰 곳을 선택하여 할당한다. 작은 자투리 공간이 남아 사용되지 못하는 공간이 발생하는 것을 최소화하기 위한 방법이다.



Leave a comment