01 기억장치 관리 개요

 

 

1) 기억장치 계층 구조

 

레지스터 <- 캐시 기억장치 <- 주기억 장치 <- 보조기억 장치

 

2) 기억장치의 관리 전략

 

- 반입(Fetch) 전략

 

보조기억장치에 보관중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지를 결정하는 전략이다.

 

요구 반입 : 실행중인 프로그램이 특정 프로그램이나 데이터 등의 참조를 요구할 때 적재하는 방법

예상 반입 : 실행중인 프로그램에 의해 참조될 프로그램이나 데이터를 미리 에상하여 적재

 

- 배치전략

 

최초적합(첫 번째 분할 영역에 배치), 최적 적합(빈 영역중에 단편화를 가장 작게 남기는 분할 영역에 배치)

, 최악적합(빈 영역중에 단편화를 가장 많이 남기는 분할영역에 배치)

 

- 교체전략

 

FIFO, OPT, LRU, LFU, NUR, SCR 등이 있다.

 

02 주기억장치 할당 기법

 

1) 연속할당 기법

 

프로그램을 주기억장치에 연속으로 할당하는 기법으로, 단일 분할 할당 기법과 다중 분할 할당 기법이 있다.

 

단일 분할 할당 기법 : 오버레이, 스와핑

다중 분할 할당 기법 : 고정 분할 할당 기법, 동적 분할 할당 기법

 

 

1-1) 단일 분할 할당

 

단일 분할 할당 기법은 주기억장치를 운영체제 영역과 사용자 영역으로 나누어 한 순간에는 오직 한 명의 사용자만이 주기억장치의 사용자 영역을 사용하는 기법이다.

 

* 가장 단순한 기법

* 운영체제 영역과 사용자 영역을 구분하는 경계 레지스터가 사용된다.

* 초기에는 주기억장치보다 큰 사용자 프로그램은 실행할 수 없었으나 오버레이 기법을 사용하면서 이 문제가 해결되었다.

 

- 오버레이 기법

 

오버레이 기법은 주기억장치보다 큰 사용자 프로그램을 실행하기 위한 기법이다.

 

* 보조기억장치에 저장된 하나의 프로그램을 여러 개의 조각으로 분할한 후 필요한 조각을 차례로 주기억장치에 적재하여 프로그램을 실행한다.

 

* 프로그램이 실행되면서 주기억장치의 공간이 부족하면 주기억장치에 적재된 프로그램의 조각 중 불필요한 조각이 위치한 장소에 새로운 프로그램의 조각을 중첩(overlay)하여 적재한다.

 

* 프로그램을 여러 개의 조각으로 분할하는 작업은 프로그래머가 수행해야 하므로 프로그래머는 시스템 구조나 프로그램 구조를 알아야 한다.

 

- 스와핑 기법

 

스와핑 기법은 하나의 프로그램 전체를 주기억장치에 할당하여 사용하다 필요에 따라 다른 프로그램과 교체하는 기법이다.

 

* 주기억장치에 있는 프로그램이 보조기억장치로 이동되는 것을 Swap Out, 보조기억장치에 있는 프로그램이 주기억장치로 이동되는 것을 Swap In이라고 한다.

 

* 가상메모리 페이징 기법으로 발전되었다.

 

1-2) 다중 분할 할당 기법

 

1-2-1) 정적할당

 

주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하고 준비상태 큐에서 준비중인 프로그램을 각 영역에 할당하여 수행하는 기법이다.

 

1-2-2) 동적할당

 

고정 분할 할당 기법의 단편화를 줄이기 위한 것으로, 미리 주기억장치를 분할해 놓는 것이 아니라 프로그램을 주기억장치에 적재하면서 필요한 만큼의 크기로 영역을 분할 하는 기법이다.

 

 

2) 분산 할당 기법

 

프로그램을 특정 단위의 조각으로 나누어 주기억장치 내에 분산하여 할당하는 기법으로, 페이징 기법과 세그먼테이션 기법으로 나눌 수 있다.(가상메모리기법)

 

 

03 주기억장치 관리 기법의 문제점과 해결 방법

 

1) 단편화

 

- 내부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 크기 때문에 프로그램이 할당된 후 사용되지 않고 남아 있는 빈 공간

 

- 외부 단편화 : 분할된 영역이 할당될 프로그램의 크기보다 작기 때문에 프로그램이 할당될 수 없어 사용되지 않고 빈공간으로 남아 있는 분할된 전체 영역

 

 

2) 단편화 해결방법

 

- 통합 기법

 

통합 기법은 주기억장치 내에 인접해 있는 단편화된 공간을 하나의 공간으로 통합하는 작업을 의미한다.

 

- 압축 기법

 

주기억장치 내에 분산되어 있는 단편화된 빈 공간을 결합하여 하나의 큰 가용 공간을 만드는 작업을 의미한다.

가비지 콜렉션이라고도 한다.

 

가비지 콜렉션후 분할영역 주소를 새롭게 지정해줘야 하는데, 이를 기억장소의 relocation이라고 한다.

 

 

04 가상메모리

 

 

1) 가상메모리

 

페이징 기법 - 프로그램을 동일한 크기로 나눈 단위를 페이지라 하며 이 페이지를 블록으로 사용하는 기법

 

세그먼테이션 기법 - 프로그램을 가변적인 크기로 나눈 단위를 세그먼트라 하며, 이 세그먼트를 블록으로 사용하는 기법

 

 

1-1) 페이징 기법

 

- 프로그램을 일정한 크기로 나눈 단위를 페이지라고 하고, 페이지 크기로 일정하게 나누어진 주기억장치의 단위를 페이지 프레임이라고 한다.

 

- 외부 단편호는 발생하지 않으나 내부 단편화는 발생할 수 있다.

 

- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 테이블이 필요하다.

- 페이지 맵 테이블 사용으로 비용이 증가되고, 처리속도가 감소한다.

 

가상주소 형식  =  페이지번호 + 변위값

 

 

실기억주소 형식  = 페이지 프레임 + 변위값

 

 

페이지 테이블 = 디스크 주소 + 페이지 프레임 번호 + 상태비트

 

주소 변환 순서

 

1. 가상주소의 페이지 번호에 해당하는 페이지 프레임 번호와 가상주소의 변위값을 이용하여 실기억주소를 만든다.

 

2. 만들어진 실기억주소를 이용하여 주기억장치를 액세스한다.

 

 

 

 

페이지 폴트 ?

 

페이지 폴트란 프로그램 실행 시 참조한 페이지가 주기억장치에 없는 현상을 의미한다.

페이지 폴트 현상이 발생하면 다음과정에 따라 페이지 부재 현상을 처리한다.

 

페이지 폴트 발생시 처리 순서

 

1. 운영체제에서 트랩 요청 - > 2. 사용자 레지스트리와 프로그램의 상태저장 -> 현재 사용가능한 페이지를 페이지 맵 테이블에서 검색

-> 가상기억장치에 있는 페이지를 주기억장치로 가져옴 -> 페이지 맵 테이블 갱신 -> 프로그램 상태를 불러와 계속 작업을 진행함

 

 

1-2) 세그먼테이션 기법

 

* 가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법이다.

 

* 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트라고 하며, 각 세그먼트는 고유한 이름과 크기를 갖는다.

 

* 기억장치의 사용자 관점을 보존하는 기억장치 관리 기법이다.

 

* 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블이 필요하다.

 

 

세그먼테이션 기법의 일반적인 주소 변환

 

 

세그먼트 + 페이징

 

 

 

 

05 페이지 교체 알고리즘

 

1) OPT

 

OPT는 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법이다. 미래예측. 

 

2) FIFO

 

FIFO는 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체하는 기법이다.

 

3) LRU

 

LRU는 최근에 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법이다.

 

4) LFU 

 

LFU는 사용 빈도가 가장 적은 페이지를 교체하는 기법이다.

 

5) NUR

 

NUR은 LRU와 비슷한 알고리즘으로, 최근에 사용하지 않은 페이지를 교체하는 기법이다.

 

NUR은 참조 비트와 변형 비트가 필요한 교체 알고리즘이다. NUR 하면 참조 비트와 변형 비트를 기억하고, 참조 비트와 변형 비트에 따른 교체 우선순위를 기억하자.

 

참조 비트 : 페이지가 호출되지 않았을 때는 0, 호출되었을 때는 1로 지정된다.

변형 비트 : 페이지 내용이 변경되지 않았을 때는 0, 변경되었을 때는 1로 지정된다.

 

6) SCR(Second Chance Replacement)

 

SCR은 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것으로, FIFO기법의 단점을 보완하는 기법이다.

 

* 각 페이지마다 참조 비트를 두고, FIFO 기법을 이용하여 페이지 교체 수행중 참조 비트가 0일 경우에는 교체하고, 참조 비트가 1일 경우에는 참조 비트를 0으로 지정한 후 FIFO리스트의 맨 마지막으로 피드백시켜 다음 순서를 기다리게 한다.

 

* 교체 대상이 되기 전에 참조 비트를 검사하여 1일 경우 한 번의 기회를 더 부여하기 때문에 Second Chance 라고도 한다.

 

 

06 가상기억장치 기타 관리 사항

 

1) 페이지 크기

 

- 페이지 크기가 작을 경우

 

페이지 단편화가 감소되고 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어든다.

국부성에 더 일치할 수 있기 때문에 기억장치 효율이 높아진다.

 

- 페이지 크기가 클 경우

 

페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고, 매핑 속도가 빨라진다.

디스크 접근 횟수가 줄어들어 전체적인 입*출력의 효용성이 증가된다.

 

 

2) 국부성(Locality)

 

Locality는 프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론이다.

 

* 스래싱을 방지하기 위한 워킹 셋 이론의 기반이 되었다.

 

* 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나로, 가상기억장치 관리의 이론적인 근거가 된다.

 

* 캐시메모리 시스템의 이론적 근거이다.

 

3) Locality의 종류

 

- 시간구역성

 

* 시간 구역성은 프로세스가 실행되면서 하나의 페이지를 일정시간 동안 집중적으로 액세스하는 현상이다.

 

* 한번 참조한 페이지는 가까운 시간 내에 게속 참조할 가능성이 높음을 의미한다.

 

- 공간구역성

 

* 공간 구역성은 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상이다.

* 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미한다.

 

4) 워킹 셋

 

워킹 셋은 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합이다.

 

- 프로그램의 Locality의 특징

 

- 자주 참조되는 워킹 셋을 주기억장치에 상주 시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정된다.

 

5) 페이지 폴트 빈도 방식

 

페이지 폴트 빈도 PFF(Page Fault Frequency)는 페이지 부재가 일어나는 횟수를 의미한다.

 

* 페이지 폴트 빈도 방식은 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식이다.

 

6) 프리페이징

 

* 프리페이징은 처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 기법이다.

 

6) 스래싱

 

스래싱은 프로세스의 처리 시간보다 페이지 교체에 소요되는 시간이 더 많아지는 현상이다.

 

* 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정중 자주 페이지 부재가 발생함으로써 나타나는 현상으로, 전체 시스템의 성능이 저하된다.

 

* 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 감소하게 된다.

 

 

 

07 디스크 스케쥴링

1) 디스크 스케줄링의 개요

 

* 디스크 스케줄링은 사용할 데이터가 디스크 상의 여러 곳에 저장되어 있을 경우 데이터를 액세스하기 위해 디스크 헤드가 움직이는 경로를 결정하는 기법이다.

 

* 디스크 스케줄링은 일반적으로 탐색 시간을 최적화하기 위해 수행되며, 다음과 같은 목적을 갖고 있다.

 

처리량 최대화, 응답 시간 최소화, 응답 시간 편차의 최소화

 

2) fcfs

 

디스크 대기 큐에 가장 먼저 들어온 트랙에 대한 요청을 먼저 서비스하는 기법이다.

 

3) sstf

 

sstf는 탐색거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스하는 기법이다.

 

4) scan

 

scan은 sstf가 갖는 탐색 시간의 편차를 해소하기 위한 기법이다.

 

* 현재 헤드의 위치에서 진행 방향이 결정되면 탐색 거리가 짧은 순서에 따라 그 방향의 모든 요청을 서비스하고,

끝까지 이동한 후 역방향의 요청 사항을 서비스한다.

 

5) c-scan

 

c-scan은 항상 바깥쪽에서 안쪽으로 움직이면서 가장 짧은 탐색 거리를 갖는 요청을 서비스하는 기법이다.

 

* 헤드는 트랙의 바깥쪽에서 안쪽으로 한 방향으로만 움직이며 서비스하여 끝까지 이동한 후, 안쪽에 더 이상의 요청이 없으면

헤드는 가장 바깥쪽의 끝으로 이동한 후 다시 안쪽으로 이동하면서 요청을 서비스한다.

 

 

6) n-step scan

 

n-step scan은 scan 기법의 무한 대기 발생 가능성을 제거한 것으로, 어떤 방향의 진행이 시작될 당시에 대기 중이던 요청들만 서비스하고, 진행 도중 도착한 요청들은 한데 모아서 다음의 반대 방향 진행 때 서비스하는 기법이다.(scan방식은 진행 도중 도착한 요청도 서비스 한다)

 

* sstf나 scan 기법보다 응답 시간의 편차가 적다.

 

7) 에션바흐 기법

 

* 헤드는 c-scan처럼 움직이며 예외적으로 모든 실린더는 그 실린더에 요청이 있던 없던 간에 전체 트랙이 한 바퀴 회전할 동안에 서비스를 받는다.

 

8) sltf

 

섹터 큐잉이라고 하며 회전 지연 시간의 최적화를 위해 구현된 기법이다.

 

* 디스크 대기 큐에 있는 여러 요청을 섹터 위치에 따라 재정렬하고, 가장 가까운 섹터를 먼저 서비스한다.

 

* 헤드의 이동이 거의 없는 고정 헤드 장치인 드럼과 같은 장치에서 사용된다.

 

 

 

 

 

'이론 > 운영체제' 카테고리의 다른 글

데이터 통신 개요  (0) 2015.09.28
파일과 파일 시스템  (0) 2015.09.27
기억장치 관리  (0) 2015.09.27
프로세스 개요  (0) 2015.09.26
운영체제 개요  (0) 2015.09.26
운영체제 3학년 최종 텀프로젝트.  (0) 2015.03.19
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요