본문 바로가기
IT

컴퓨터 운영체제 기억장치 관리

by EDMBLACKBOX 2021. 3. 24.
728x90

기억장치 관리
기억장치는 프로그램이나 데이터를 저장하는 장치로, 주기억장치와 보조기억장치로 구분됩니다. 그리고 가상 기억장치(Virtual Memory)는 프로그램의 일부를 주기억장치에 유지하고 나머지는 보조기억장치에 유지함으로써 프로세스 전체가 주기억장치에 존재하지 않아도 실행될 수 있게 합니다.

주기억장치 관리 기법
주기억장치는 실행할 프로그램과 데이터, 연산 결과 등을 저장합니다. 주기억장치 관리 기법에는 단일 프로그래밍 기법, 고정 분할 다중 프로그래밍 기법, 가변 분할 다중 프로그래밍 기법이 있습니다.

- 단일 프로그래밍 기법
초기 컴퓨터 시스템에서 사용하던 가장 단순한 방식으로 운영 체제와 하나의 사용자 프로그램만 주기억장치에 적재됩니다. 그리하여 주기억장치의 빈 공간이 있어도 다른 사용자 프로그램을 실행할 수 없으므로 주기억장치와 주변 장치 등의 자원 낭비가 심합니다. 또한 사용자 프로그램의 크기가 주기억장치의 용량을 초과할 수 없으므로, 주기억장치의 용량보다 작은 프로그램만 실행할 수 있습니다.

- 다중 프로그래밍 기법
주기억장치의 용량이 커지고 CPU 속도가 빨라짐에 따라 CPU 활용률과 처리량을 증대시키는 다중 프로그래밍 기법이 등장했습니다. 다중 프로그래밍 기법을 효율적으로 활용하기 위해서는 다수의 작업이 주기억장치에 동시에 존재해야 합니다. 또한 실행 중인 작업이 입출력을 요구하면 대기 중인 다른 작업에 CPU를 양도하여 실행되도록 해야 합니다.

- 고정 분할 다중 프로그래밍 기법
주기억장치를 다수의 고정된 크기로 나눠서 실행 중인 여러 프로세스에게 할당합니다. 분할(Partition)은 하나의 작업이 적재될 수 있는 일정한 크기의 기억 공간으로 하나의 분할에 적재된 작업은 다른 분할의 작업으로부터 보호되어야 합니다. 이 기법은 작업과 분할의 크기가 일치하지 않아 사용되지 않는 빈 공간이 생기거나, 분할이 너무 작아서 작업을 적재하지 못하는, 단편화(Fragmentation) 현상이 발생합니다. 단편화 현상은 분할에 작업을 적재한 후 빈 공간이 남는 내부 단편화(Internal Fragmentation)와 적재할 작업보다 분할의 크기가 작아서 분할이 빈 공간으로 남게 되는 외부 단편화(External Fragmentation)로 구분할 수 있습니다.

- 가변 분할 다중 프로그래밍 기법
고정 분할 다중 프로그래밍 기법의 단점을 보완한 기법으로 고정된 분할의 경계를 없애고 각 작업에게 필요한 만큼의 기억 공간을 할당합니다. 그리고 작업이 완료되면 사용되지 않는 기억 공간을 회수하여 관리합니다. 가변 분할 다중 프로그래밍 기법은 초기에는 기억 공간의 낭비가 거의 없지만, 새로운 작업의 적재와 완료된 작업의 기억 공간 회수가 반복됨에 따라 단편화 현상이 발생합니다.
단편화 현상에 따른 기억 공간의 낭비를 막기 위해 통합(Coalescing)과 집약(Compaction) 기법이 사용됩니다. 통합 기법은 완료된 작업의 기억 공간을 회수할 때 다른 빈 공간과의 인접 여부를 검사하고, 인접한 경우에는 합병하여 하나의 큰 공백을 형성합니다.
인접한 공백을 통합하더라도 주기억장치에는 다수의 공백이 산재되어 있을 수 있습니다. 이때 사용 중인 기억 공간을 주기억장치의 한쪽 끝으로 옮겨서 하나의 큰 공백을 형성하는 집약 기법이 사용됩니다.

주기억장치의 관리 전략

주기억장치 관리 전략
주기억장치 관리 전략은 프로세스들이 주기억장치를 효율적으로 사용할 수 있도록 설계되어야 합니다. 주기억장치 관리 전략은 3가지 범주로 나눠집니다.

- 반입 전략
반입 전략(Fetch Strategy)은 다음에 실행할 프로그램이나 참조할 데이터를 보조기억장치에서 주기억장치로 언제 가져올 것인지 결정합니다. 반입 시점에 따라 요구 반입(Demand Fetch) 전략과 예상 반입(Anticipatory Fetch) 전략으로 나눌 수 있습니다. 요구 반입 전략은 실행 중인 프로그램이 다른 프로그램이나 데이터를 참조할 때 가져오는 것이고, 예상 반입 전략은 실행 중인 프로그램이 참조할 가능성이 있는 프로그램이나 데이터를 미리 가져오는 것입니다.

- 배치 전략
배치 전략(Placement Strategy)은 새로 가져온 프로그램이나 데이터를 주기억장치의 어디에 배치할 것인지를 결정합니다. 배치 전략의 종류에는 최초 적합, 최적 적합, 최악 적합이 있습니다.
● 최초 적합(First-Fit)
새로 반입된 프로그램이나 데이터를 주기억장치의 빈(가용) 공간들 중에서 첫 번째 빈 공간에 배치합니다. 이 전략은 빈 공간을 찾기 위해 기억 공간 전체를 탐색할 필요가 없기 때문에 배치 결정이 빠릅니다.
● 최적 적합(Best-Fit)
새로 반입된 프로그램이나 데이터를 주기억장치의 빈 공간들 중에서 가장 작은 곳에 배치합니다. 이 전략은 기억 공간을 반만 탐색해도 적합한 공간을 찾을 수 있으며 기억 공간 낭비를 최소화할 수 있습니다. 그러나 빈 공간의 리스트가 크기 순으로 정렬되어 있지 않으면 빈 공간 리스트를 모두 검색해야 하므로 빈 공간을 항상 크기 순으로 정렬해야 하는 단점이 있습니다.
● 최악 적합(Worst-Fit)
새로 반입된 프로그램이나 데이터를 주기억장치의 빈 공간들 중에서 가장 큰 곳에 배치합니다. 이 전략은 배치 후 남은 공간이 여전히 크기 때문에 다른 프로그램이나 데이터의 적재에 활용할 수 있습니다. 그러나 큰 공간을 우선적으로 할당하므로 커다란 프로그램을 적재할 공간이 없어지고, 빈 공간을 항상 크기가 작아지는 순으로 정렬해야 하는 단점이 있습니다.

- 교체 전략
교체 전략(Replacement Strategy)은 주기억장치에 새로 반입될 프로그램이나 데이터를 배치할 빈 공간이 없을 때, 배치 공간을 마련하기 위해 어떤 프로그램이나 데이터를 주기억장치에서 제거할 것인지 결정합니다. 교체 전략의 종류에는 최적화 원리, 무작위 교체, 선입 선출(FIFO) 교체, LRU(Least Recently Used) 교체, NUR(Not Used Recently) 교체, LFU(Least Frequently Used) 교체, 2차 기회 교체 등이 있습니다.

가상기억장치 구현

가상 기억장치 구현 기법
다중 프로그래밍 기법을 구현하려면 주기억장치에 다수의 프로그램을 동시에 유지해야 합니다. 그러나 주기억장치의 기억용량은 제한되어 있으므로 처리할 프로그램을 모두 적재하지 못할 수 있습니다. 가상 기억장치(Virtual Memory)는 프로그램 전체가 주기억장치에 존재하지 않아도 실행이 가능하게 만들기 위해, 현재 실행 중인 프로그램의 일부는 주기억장치에 적재하고, 나머지는 보조기억장치에 유지합니다. 가상 기억장치는 작은 기억용량으로도 큰 프로그램을 실행시킬 수 있기 때문에 프로그래머는 주기억장치의 기억용량에 신경 쓰지 않고 프로그램을 작성할 수 있습니다.

가상 기억장치에서 프로세스가 참조하는 가상 주소(Virtual Address)는 주소 사상 함수에 의해 실행 중에 주기억장치에서 사용할 수 있는 실제 주소(Real Address)로 변환됩니다. 따라서 프로세스가 가지는 연속적인 가상 주소가 반드시 주기억장치에서도 연속일 필요는 없습니다. 가상 기억장치의 구현 방법에는 페이징 기법, 세그멘테이션 기법, 페이징/세그멘테이션 혼합 기법이 있습니다.

- 페이징 기법
페이징(Paging) 기법은 가상 기억 장치를 일정한 크기의 페이지(Page)로 나눠서 관리합니다. 주기억장치는 페이지와 크기가 동일한 페이지 프레임(Page Frame)으로 분할하여 사용하는데, 일반적으로 페이지 크기는 1KB~4KB입니다.
페이징 기법에서 가상 주소는 V=(p, d)로 나타냅니다. p는 가상 기억장치에서 참조될 항목이 속한 페이지 번호이고, d는 페이지 p내에서 참조될 항목까지의 변위(Displacement)입니다.
페이징 기법은 프로세스마다 별도의 페이지 테이블을 가집니다. 페이지 테이블은 특정 페이지가 적재된 페이지 프레임의 실제 주소와 페이지의 주기억장치 내 존재 여부 등의 정보를 보유합니다. 페이징 기법에서 동적 주소 변환 과정은 아래와 같습니다.


1. 실행 중인 프로세스가 가상 주소 V = (p, d)를 참조합니다.
2. 페이지 테이블에서 페이지 p가 페이지 프레임 p'에 적재되어 있음을 알아냅니다.
3. 주기억장치 내의 실제 주소 r = p' + d를 구합니다.

만약 가상 주소에서 참조하고 있는 페이지가 주기억장치에 존재하지 않으면, 해당 페이지를 보조기억장치에서 읽어와서 주기억장치의 페이지 프레임에 적재한 후 실행합니다.  페이징 기법은 하나의 프로그램이 주기억장치의 연속적인 공간에 배치되지 않아도 되기 때문에 저장 공간을 효율적으로 활용할 수 있으며, 외부 단편화 현상도 제거할 수 있습니다.

- 세그멘테이션 기법
세그멘테이션(Segmentation) 기법은 프로그램이나 데이터를 용도에 따라 가변적인 크기로 분할하여 관리하는 것입니다. 이때 가변적인 크기로 분할된 프로그램이나 데이터 블록을 세그먼트라고 합니다. 세그멘테이션 기법에서 가상 주소는 V=(s, d)로 나타냅니다. s는 가상 기억장치에서 참조될 항목이 속한 세그먼트 번호이고, d는 세그먼트 s내에서 참조될 항목까지의 변위입니다.
세그멘테이션 기법은 프로세스마다 별도의 세그먼트 테이블을 가집니다. 세그먼트 테이블은 특정 세그먼트가 적재된 주기억장치의 시작 주소와 길이, 세그먼트의 주기억장치 내 존재 여부 등의 정보를 보유합니다. 세그멘테이션 기법에서 동적 주소 변환 과정은 아래와 같습니다.

1. 실행 중인 프로세스가 가상 주소 V = (s, d)를 참조합니다.
2. 세그먼트 테이블에서 세그먼트 s의 주기억장치 내 시작 주소 s'를 구합니다.
3. 실제 주소 r = s' + d를 구합니다.

만약 가상 주소에서 참조하고 있는 세그먼트가 주기억장치에 존재하지 않으면 해당 세그먼트를 보조기억장치에서 읽어와서 주기억장치에 적재한 후 실행합니다. 세그멘테이션 기법은 프로그램 코드나 자료의 공유가 용이하고, 세그먼트의 특성을 고려한 세밀한 접근 제어가 가능합니다.

- 페이징/세그멘테이션 혼합 기법
세그멘테이션 기법에서는 빈 공간보다 큰 세그먼트를 주기억장치에 적재하지 못하는 외부 단편화 현상이 발생할 수 있습니다. 이때 페이징/세그멘테이션 혼합 기법은 모든 세그먼트를 페이지 단위로 다시 분할해 외부 단편화 현상을 해결합니다. 세그먼트의 크기는 페이지의 정수 배입니다.
페이징/세그멘테이션 혼합 기법에서 가상 주소는 V=(s, p, d)로 나타냅니다. s는 세그먼트 번호, p는 페이지 번호, d는 페이지 p 내에서 참조될 항목까지의 변위입니다.
페이징/세그멘테이션 혼합 기법에서 동적 주소 변환 과정은 아래와 같습니다. 단 프로세스마다 별도의 페이지 테이블을 가지는 페이징 기법과 달리, 세그먼트마다 별도의 페이지 테이블을 가집니다.

1. 실행 중인 프로세스가 가상 주소 V = (s, p, d)를 참조합니다.
2. 연관 기억장치 사상표에서 (s, p)를 탐색하여 해당 항목이 존재하면 페이지 프레임 p'를 구하고, 존재하지 않으면 세그먼트 테이블과 페이지 테이블을 각각 이용하여 페이지 프레임 p'를 구합니다.
3. 실제 주소 r = p' + d를 구합니다.

페이징/세그멘테이션 혼합 기법은 외부 단편화 현상은 제거됐으나, 내부 단편화 현상은 여전히 존재합니다. 또한 연관 기억장치 사상표가 차지하는 기억 공간의 오버헤드가 증가하는 단점이 있습니다.

728x90

'IT' 카테고리의 다른 글

컴퓨터 운영체제 정보 관리  (0) 2021.04.04
컴퓨터 운영체제 CPU 스케줄링  (0) 2021.03.13
원드라이브(OneDrive) 회원가입 하는 방법  (3) 2021.03.03