세그먼테이션은 메모리를 프로세스 관점으로 지원하는 메모리 관리 방법이다.

페이징과는 달리 세그먼테이션은 물리적인 크기의 단위가 아닌 논리적 내용의 단위로 분할하기때문에 각 크기가 일반적으로 같지 않다.

세그먼테이션은 프로세스를 자르는 방법을 제외하고 메모리에 할당하는 방법에 있어서 페이징과 유사하다.

세그먼테이션은 프로세스에 따라 세그먼트 크기가 다르기 때문에 메모리를 크기가 일정한 페이지 프레임으로 나누지 않고 가변 분할 방법으로 할당한다. 이 때문에 외부 단편화가 일어난다.

외부 단편화를 해결하기 위해 세그먼테이션은 충분한 공간이 생길때까지 기다리거나 압축을 해 큰 공간을 만든다. 세그먼테이션은 동적 대치 알고리즘이기 떄문에 원할 때마다 메모리를 압축할 수 있다. 외부 단편화의 정도는 세그먼트의 크기에 따라 결정된다. 세그먼트의 크기가 클 수록 단편화가 심해지고, 작을 수록 완화된다.

  페이징 세그먼테이션
프로그래머의 기술 인식 아니오
선형 주소 공간 1 많음
물리적 주소를 초과하는 총 주소 공간
프로시저와 데이터 분리, 보호 여부 아니오
수용할 수 있는 테이블 크기가 심하게 변화 아니오
사용자 공유가 용이 아니오

 

페이지화된 세그먼테이션

페이징은 내부 단편화가 발생할 수 있지만, 메모리를 효율적으로 사용할 수 있다.

반면에 세그먼테이션은 외부 단편화가 발생할 수 있지만, 가변적인 데이터 구조와 모듈 처리, 공유와 보호의 지원이 편리하다.

이러한 장단점을 취합한 방법이 페이지화된 세그먼테이션이다.

프로세스를 일단 세그먼트 단위로 분할한다. 이는 보호와 공유를 하는 측면에 이점을 가진다. 하지만 외부 단편화가 발생할 수 있기 때문에 분할한 세그먼트를 다시 고정된 간격인 페이지 단위로 자르는 페이징을 한다. 그래서 메모리에 적재하면 페이징의 일정 단위로 다시 분할되었기 때문에 외부 단편화가 발생하지 않는다. 하지만 이 경우에는 두 가지 테이블을 거쳐야 하므로 속도가 비교적 느리다.

 

페이징 세그먼테이션 하드웨어 시스템의 구조

프로세서는 논리적 주소의 세그먼트 번호와 STBR(세그먼트 테이블 기준 레지스터)을 이용해 세그먼트 테이블을 확인한다. 그리고 해당 세그먼트 페이지 테이블에서 페이지 번호를 찾아 이에 대응하는 페이지 프레임을 찾는다. 그런 다음 페이지 프레임을 오프셋과 결합하여 메모리 주소를 생성한다.

각 프로세스에는 세그먼트 테이블이 하나 있고, 세그먼트에는 자신의 페이지 테이블이 있다. 그러므로 특정 프로세스가 실행중일 때 레지스터 하나는 프로세스 세크먼트 테이블의 시작 주소를 갖는다. 특히 각 세그먼트의 마지막 페이지는 완전히 차지 않아서 내부 단편화를 가져올 수 있다.

페이지화된 세그멘테이션은 세그먼트와 페이지를 함께 사용해 복잡하지만, 세그먼트를 페이징하여 외부 단편화 문제를 제거하면서 할당 과정을 쉽게 해결한다는 장점이 있다.

 

페이지 테이블을 통해 논리적 주소와 물리적 주소가 매칭된다.

페이징은 작업을 크기가 동일한 페이지로 나누어 처리하는 방법이다.

프로세스를 동일한 크기의 페이지로 나누고, 메인 메모리도 프레임이라는 고정 크기 블록으로 나누어 프레임에 페이지를 적재한다.

장점 빈 프레임에 어떤 페이지든 적재할 수 있어 메모리를 효율적으로 사용할 수 있고, 외부 단편화가 발생하지 않는다.
단점 운영체제의 페이지 관리 부담이 크고, 내부 단편화가 발생할 수 있다.

페이지의 크기가 작을 수록 내부 단편화로 인한 용량 낭비를 줄일 수 있지만, 페이지 테이블을 유지하는데 부담이 커진다.

페이지 테이블은 논리적 주소를 물리적 주소로 변환한다. 페이지 테이블은 페이지의 논리적 주소인 페이지 번호와 이에 대응하는 물리적 주소인 페이지 프레임 주소를 포함한다.

페이지 테이블에서 연관 레지스터를 이용해 주소를 변환하는 방법은 세가지가 있다.

  1. 직접 매핑
  2. 연관 매핑
  3. 연관-직접 매핑

직접 매핑

 

연관 매핑

 

연관-직접 매핑

메모리에 프로세스를 적재할 때 연속적으로 적재하는 방법이 연속 메모리 할당이다.

이는 초기 컴퓨터 시스템에서 많이 사용하던 방법으로, 단일 프로그래밍 환경과 다중 프로그래밍 환경으로 구분할 수 있다.

 

단일 프로그래밍 환경에서의 연속 메모리 할당

초기 컴퓨터 시스템에서는 한명의 사용자만 컴퓨터를 사용할 수 있었고, 자원도 한명의 사용자만 사용 가능했다.

프로그램은 메모리보다 클 수 없고 직접 배치 과정을 수행하여 항상 같은 메모리 위치에 적재되었다.

단일 프로그래밍 환경에서 연속 메모리 할당은 메모리를 사용자 영역과 운영체제 상주 영역으로 나눈다. 크게 모니터(운영체제의 상주 영역), 사용자 영역, 미사용 영역으로 나눌 수 있다. 메모리를 제어하는 모든 권한이 사용자에게 있기 때문에 사용자가 주소를 잘못 지정하면 운영체제가 손상될 수 있다. 그래서 프로세서에 경계 레지스터를 두어 이를 방지한다.

이런 메모리 할당 시스템의 문제는 사용자 프로그램의 적재이다. 컴퓨터 주소 공간이 0000부터 시작하더라도 사용자 프로그램의 시작 주소는 기준 레지스터 값의 이후가 된다. 그러므로 기준 주소가 변하면 다시 적재해야 한다. 다음 두 가지 방법을 고려하여 이런 운영체제의 동적 변화에 대비할 수 있다.

첫 번째 방법은 사용자 프로그램을 기준 레지스터보다 상위 메모리에 적재하는 것,

두 번째 방법은 주소 바인딩을 연기하는 것이다.

단일 프로그래밍 환경에서 연속 메모리 할당은 메모리의 효율성이 떨어진다. 또한 자원 낭비가 심하고 프로세스 스와핑 비용이 많이 든다.

 

다중 프로그래밍 환경에서의 연속 메모리 할당

1) 고정 분할 방법

고정 분할 방법에서는 메모리를 여러 개의 고정된 크기로 분할하고 분할된 각 메모리는 프로세스 하나를 실행하는 방식이다.

고정 분할 방법에서는 논리적 주소가 분할된 메모리보다 크면 오류가 발생하고, 작으면 내부 단편화가 발생한다.

내부 단편화란 분할된 메모리 공간보다 용량이 작은 작업이 들어갔을 때, 사용할 수 없게 되는 공간이 생기는것을 말한다.

2) 가변 분할 방법 

가변 분할 방법은 고정된 경계를 없애고 각 프로세스가 필요한 만큼 메모리를 할당하는 방법이다.

프로세스가 할당되고 해제되다보면 사용 가능한 메모리 공간이 흩어져있게 되는데, 새로 들어갈 작업이 어느 공간에 할당되어야 할 지 결정하는 방법으로는 최초 적합, 최적 적합, 최악 적합 방법이 있다.

최초 적합 최초 적합 방법은 프로세스를 사용 가능 공간 중 충분히 큰 첫 번째 공간에 할당한다.
최적 적합 최적 적합 방법은 프로세스를 충분히 큰 사용 가능 공간 중에서 들어갈 수 있는 가장 작은 공간에 할당한다. 이 방법을 사용하기 위해선 사용 가능 공간이 크기 순으로 정렬되어있어야 한다.
최악 적합 프로세스를 가장 큰 사용 가능 공간에 할당한다. 최적 적합과 같이 공간이 크기 순으로 정렬되어있어야 한다.

가변 분할 방법에서는 외부 단편화가 일어난다.

외부 단편화는 사용 가능한 공간의 총량은 100MB인데, 메모리공간이 연속적이지 않고 흩어져 있어 총량보다 용량이 작은 작업도 할당할 수 없게 되는것을 말한다.

외부 단편화를 해결할 방안으로 메모리 통합과 메모리 압축 방법이 있다.

메모리 통합 메모리 통합 방법은 하나의 작업이 끝났을 때 다른 빈 공간과 인접해 있는지 점검하여 하나로 합치는 것이다.
메모리 압축 메모리 압축 방법은 메모리의 내용을 움직여 사용 가능 공간을 큰 블록 하나로 합치는 것이다.

 

3) 버디 시스템

위 두 가지 방법 모두 단편화 문제가 있었다. 이를 해결하는 방법으로 버디 시스템이 제안되었다.

버디 시스템은 큰 버퍼들을 반복적으로 이등분하여 작은 버퍼들을 만들고, 가능할 때마다 인접한 빈 버퍼들을 합치는 과정을 반복한다. 나뉜 버퍼들 각각을 서로의 버디라고 칭한다.

할당 요청이 들어오면, 메모리를 요청한 메모리보다 크거나 같아질때까지 이등분하기를 반복한다.

예를 들면, 전체 메모리가 64KB고 들어온 요청은 8KB라면, 64KB를 32KB두개로, 32KB를 16KB 두개로, 16KB를 8KB 두개로 쪼개어 알맞은 크기로 생성된 8KB의 버디에 들어온 요청을 할당한다. 

메모리는 주소의 연속으로, 주소는 크게 두 가지 관점에서 해석 가능하다.

프로그래머가 프로그래밍에 사용하는 공간으로 보는 논리적 관점의 논리적 주소

그리고 실제 데이터나 프로그램을 저장하는 공간으로 보는 물리적 관점의 물리적 주소이다.

논리적 주소는 C/C++같은 언어에서 변수의 주소값을 출력해보면 나오는 주소를 생각하면 이해하기 쉽다.

 

실제로 프로그래머가 사용하는 논리적 주소

 

메모리 관리 장치

논리적 주소와 물리적 주소의 변환은 메모리관리장치가 처리한다.

메모리관리장치가 논리적 주소를 물리적 주소로 변환할 때 다음과 같은 방법을 사용한다.

  1. 고정 분할
  2. 동적 분할
  3. 페이징
  4. 세그먼테이션
  5. 페이지화된 세그먼테이션

프로세스의 논리적 주소에 대응하는 물리적 주소를 알아야 프로세스를 실행할 수 있는데, 두 주소를 매핑 시켜주는 작업을 바인딩이라고 한다.

바인딩은 컴파일 시간, 적재 시간, 실행 시간으로 구분할 수 있다.

 

 

메모리 관리

메모리 관리는 프로세스들을 위해 메모리를 할당하고 제거하며 보호하는 활동이다. 이는 저장장치 전반(하드디스크, DB, etc..)에 해당한다.

메모리 관리는 메모리 관리자가 담당한다. 메모리 관리자는 운영체제의 관리 모듈과 메모리 관리장치(Memory Management Unit)가 협업하여 관리한다.

메모리 관리자는 메모리와 관련된 여러 관리 정책을 수립해 이에 따라 메모리를 관리한다.

관리 정책

1) 적재 정책

디스크에서 메모리로 프로세스를 반입할 시기 결정한다.

적재는 다음 두 가지 방법으로 실행된다.

요구 적재 운영체제나 시스템 프로그램, 사용자 프로그램 등 참조 요청에 따라 다음에 실행할 프로세스를 메모리에 적재하는 방법이다.
예상 적재 시스템의 요구를 미리 예측하여 메모리에 적재하는 방법이다. 요청한 페이지 외의 다른 페이지도 함께 불러들여 탐색시간과 회전 지연시간을 가지는 보조 기억 장치의 특성을 참조한다.

2) 배치 정책

디스크에서 반입한 프로세스를 메모리 어느 위치에 저장할 것인지 결정한다.

최초 적합 사용 가능 공간 리스트에서 충분히 큰 첫번째 공백 분할 공간에 적재하는 방법
최적 적합 사용 가능 공간 리스트에서 가장 작은 크기의 사용 공간을 작업에 적재하는 방법
최악 적합 가장 큰 사용 가능 공간에 적재하는 방법

3) 대치 정책

메모리가 충분하지 않을 때 현재 메모리에 적재된 프로세스 중 제거할 프로세스를 결정하는 방법이다.

시기 및 사용 빈도에 따라 선입선출(FIFO) 대치 알고리즘, 최근 최소 사용(LRU) 대치 알고리즘 등 다양한 방법이 있다.

스케줄링 알고리즘의 선택 기준

스케줄링 알고리즘을 비교할 때 참조할 수 있는 기준은 다음과 같다.

1) 프로세서 사용률 - CPU가 놀지 않고 얼마나 많이 사용되고 있는가?
2) 처리율 - 단위시간당 처리하는 일의 양
3) 반환시간 - 수행 요청을 한 다음 끝날때까지 걸리는 시간
4) 대기시간 - 작업이 준비 큐에서 기다리는 시간
5) 반응시간 - 대화형으로 동작할 때 작업 요청 후 반응하는데 까지의 간격

라운드 로빈 스케줄링

라운드 로빈 스케줄링은 시분할 시스템을 위해 설계된 선점형 스케줄링의 하나이다.

라운드 로빈 스케줄링은 작은 단위의 시간인 규정 시간량(time quantum)또는 시간 할당량(time slice)을 정의한다. 보통 규정 시간량은 10ms ~ 100ms정도이다. 준비 큐를 순환 큐로 설계해서 스케줄러가 준비 큐를 돌아가며 한 번에 한 프로세스에 정의된 규정 시간량만큼 프로세서를 제공한다. 준비 큐는 FIFO(First In First Out) 큐로 되어있어 새로운 프로세스를 추가할 때는 준비 큐의 맨 뒤에 붙인다.

스케줄러는 준비 큐의 가장 앞부분의 프로세스에 프로세서를 할당하는데, 해당 프로세스가 규정 시간 안에 작업을 마친 경우엔 프로세서가 준비 큐의 다음 프로세스에 할당된다. 규정 시간을 초과한 경우에는 운영체제가 인터럽트해 중단된 프로세스의 레지스터들을 PCB에 저장하고 프로세스는 준비 큐의 마지막 위치에 들어간다.

라운드 로빈 스케줄링의 장단점

장점 1. 모든 프로세스가 프로세서의 동일한 점유율과 제한된 대기시간으로 공정해 기아상태가 발생하지 않는다.
  2. 실행 큐에 프로세스 수를 알고 있을 때 구현이 용이하다
  3. 강한 상호작용과 프로세스의 짧은 응답시간, 특히 프로세스 최악의 응답시간을 알 수 있다.
  4. 작업 길이가 다양할 때는 이전 작업을 마친 후보다 규정 시간량을 마치고 다음 작업으로 이동하기 때문에 평균 대기시간이 FIFO와 최소작업 우선 스케줄링보다 적다.
단점 1. 성능은 규정 시간량의 길이에 따라 달라지므로 작업이 비슷한 길이가 좋다. 너무 길면 FIFO와 다를게 없고 너무 짧으면 문맥교환이 지나치게 많이 이루어져 오버헤드가 크다.
  2. 하드웨어 타이머가 필요하다.
  3. 미완성 작업은 각 규정 시간량을 마친 후 프로세서를 기다리므로 평균 처리 시간이 높다.

 

 

다단계 큐 스케줄링

각 작업을 여러개의 큐에 분할하여 스케줄링 하는 방식이다.

각 큐는 각자 독자적인 스케줄링을 가지고, 고정된 선점 우선순위를 가진다.

이때 하위 우선순위를 가진 큐는 상위 우선순위를 가진 큐가 다 처리되어야만 처리가 가능하다. 이 때문에 기아 상태가 발생할 수 있다. 

다단계 피드백 큐 스케줄링과 다른 점은 작업이 하나의 큐에 고정된다는점이다.

다단계 피드백 큐 스케줄링

모든 프로세스는 다 같이 가장 우선순위가 높은 큐에 들어온다. 이 때 큐에 지정된 time-quantum을 채운(초과한) 프로세스는 그보다 한단계 아래 우선순위의 큐에 들어가게 된다.

 

HRN 스케줄링

각 작업의 우선순위에 따라 서비스해주는 스케줄링 방법이다.

이 때, 우선순위는 다음과 같이 정한다.

우선순위 = (서비스를 받을 시간 + 대기한 시간)/서비스를 받을 시간

HRN 스케줄링은 자원을 효율적으로 사용하고, 기아가 발생하지 않는 특징이 있다.

이에 반해 오버헤드가 높은 단점이 있다.

 

+ Recent posts