[운영체제] 가상기억장치 구현기법과 페이지 교체 알고리즘

mainxjuju·2021년 8월 7일
0

운영체제

목록 보기
1/5

가상기억장치란? 보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것. 용량이 작은 주기억장치를 마치 큰 용량을 가진 것 처럼 사용하는거다!

🍕 프로그램을 여러개의 작은 블록 단위로 나눠서 가상기억장치에 보관, 실행 할때마다 요구되는 블록만 주기억장치에서 불연속적으로 할당해서 처리한다.
🍕 주기억장치의 용량보다 큰 프로그램을 실행하기 위해서 사용
🍕 주기억장치의 이용률과 다중 프로그래밍의 효율 높일수 있다
🍕 가상기억장치에 저장된 프로그램을 실행하려면?? 주소를 주기억장치의 주소로 바꿔주는 변환이 필요함
🍕 일반적인 구현방법으로는 블록의 종류에 따라 페이징 기법과 세그먼테이션 2개

1. 페이징(Paiging) 기법

가상기억장치에 보관되어있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눠서 프로그램에 동일하게 나눠진 주기억장치의 영역에 적재시켜 실행하는 기법!

🍕 프로그램을 일정한 크기로 나눈 단위 : 페이지(page)
🍕 페이지 크기로 일정하게 나누어진 주기억장치의 단위 : 페이지 프레임(Page Frame)
🍕 외부 단편화는 발생x, 내부 단편화는 발생할 수 있다!
🍕 주소 변환을 위해서 페이지의 위치 정보를 갖고 있는 페이지 맵 테이블이 필요함
🍕 페이지 맵 테이블 사용으로 비용이 증가되고, 처리속도가 감소

2. 세그먼테이션(Segmentation)기법

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

🍕 배열, 함수 등과 같은 논리적인 크기로 나눈 단위 : 세그먼트(segment)
🍕 각 세그먼트는 고유한 이름, 크기 갖음
🍕 기억 장치의 사용자 관점을 보존하는 기억장치 관리 기법
🍕 세그멘테이션 기법을 이용하는 궁극적인 이유는 기억공간을 절약하기 위해서
🍕 주소 변환을 위해 세그먼트가 존재하는 위치 정보를 갖고 있는 세그먼트 맵 테이블이 필요함
🍕 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역 침범x, 이를 위해 기억장치 보호키(storage protection key)필요함
🍕 내부단편화 발생x, 외부 단편화는 발생할 수 있다.

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

주소형식에 따른 주소와 세그먼트 맵 테이블의 구성

  • 가상주소는 세그먼트 번호를 나타내는 s와 세그먼트 내에 실제 내용이 위치하고 있는 곳 까지의 거리를 나타내는 변위값 d로 구성
    🍕가상주소 형식 : | 세그먼트번호(s) | 변위값(d) |
  • 실기억주소는 완전주소 형태를 사용하며 이는 세그먼트의 기준번지와 변위값을 더함으로써 얻을 수 있다.
    🍕실기억주소 형식: 실기억주소(세그먼트 기준번지+변위값)
  • 세그먼트 맵 테이블은 세그먼트 번호 s와 세그먼트의 크기 L(한계번지), 주기억장치 상의 기준번지(시작주소)b로 구성된다.

주소변환 순서

세그먼트 맵 테이블 | 세그먼트 번호(s) | 세그먼트 크기(L) | 기준번지(b) |

  1. 가상 주소의 세그먼트 번호로 세그먼트 맵 테이블에서 해당 세그먼트 기준번지와 세그먼트 크기를 구한다. 세그먼트 번호는 세그먼트 맵 테이블에 대한 색인으로 사용된다.
  2. 가상주소의 변위값과 세그먼트의 크기를 비교한다
  3. 변위값이 작거나 같을때 : 기준번지+변위값 후 실기억주소를 만들어 주기억장치를 엑세스
  4. 변위값이 크면 : 다른 영역을 침범하게 되므로 실행 권한을 운영체제에 넘기고 트랩을 발생시킴.(변위값이 크다는건 현재 찾는 세그먼트의 위치가 해당 세그먼트의 크기를 초과했다는 뜻)

3. 페이지 교체 알고리즘

페이지 부재(Page Fault)가 발생하였을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재해야 하는데, 이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할 것 인지를 결정하는 기법

3-1. OPT(OPTimal replacement, 최적 교체)

  • 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체
  • 페이지 부재 횟수가 가장 적게 발생하는 가장 효율적인 알고리즘

3-2. FIFO(First In First Out)

  • 각 페이지가 주기억장치에 적재될 때 마다 그때의 시간을 기억시켜 가장 먼저 들어와 가장 오래 있었던 페이지를 교체하는 기법
  • 이해하기 쉽고 프로그래밍 설계 간단~

3-3. LRU(Least Recently Used)

  • 최근들어 가장 오랫동안 사용하지 않은 페이지를 교체하는 기법
  • Counter나 Stack을 두어 현 시점에서 가장 오랫동안 사용하지 않은 즉 가장 오래전에 사용된 페이지를 교체한다

3-4. LFU(Least Frequently Used)

  • 사용 빈도가 가장 적은 페이지를 교체
  • 활발하게 사용되는 페이지는 사용 횟수가 많아 교체 x

3-5. NUR(Not Used Recently)

  • NUR은 LRU와 비슷한 알고리즘으로 최근에 사용하지 않은 페이지를 교체
  • 최근에 사용안했으니 향후에도 사용되지 않을 가능성이 높다는 것을 전제로 LRU에서 나타나는 시간적인 오버헤드를 줄일 수 있다.
  • 최근 사용 여부 확인을 어떻게 하냐...? 각 페이지마다 두개의 비트, 즉 Reference Bit와 Modified Bit, Dirty Bit가 사용된다.

3-6. SCR(Second Chance Replacement, 2차 기회 교체)

  • 가장 오랫동안 주기억장치에 있던 페이지 중 가장 자주 사용되는 페이지의 교체를 방지하기 위한것으로 FIFO의 단점 보완
profile
나 개발자가 맞을까....?

0개의 댓글