최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| [[분류:운영체제]]
| |
|
| |
| ;주기억장치의 부족한 물리적 저장공간을 보조기억장치를 이용해서 가상으로 늘려 주는 기술 | | ;주기억장치의 부족한 물리적 저장공간을 보조기억장치를 이용해서 가상으로 늘려 주는 기술 |
|
| |
|
| ==장단점== | | == 장단점 == |
| | * 메모리 크기의 제약으로부터 자유로워진다. |
| | ** 사용자 프로그램이 물리 메모리보다 커져도 실행 가능 |
| | * 병행성 및 CPU 이용률 증가 |
| | ** 사용자 프로그램이 더 작은 메모리를 차지하므로 더 많은 프로그램을 동시에 수행 가능 |
| | * 프로그램 실행 속도 향상 |
| | ** 프로그램을 메모리에 올리고 스왑(swap)하는데 필요한 입/출력 횟수가 줄어듬 |
| | * 부가기능 제공 |
| | ** [[공유 메모리]] |
| | ** [[Memory mapped file]] |
|
| |
|
| *메모리 크기의 제약으로부터 자유로워진다.
| | == Demand Paging == |
| **사용자 프로그램이 물리 메모리보다 커져도 실행 가능
| | ;어떤 알고리즘에 따라서 미리 올려 두는 것이 아니라 실제 사용되려고(demand) 할때 메모리에 올리는 방식 |
| *병행성 및 CPU 이용률 증가
| |
| **사용자 프로그램이 더 작은 메모리를 차지하므로 더 많은 프로그램을 동시에 수행 가능
| |
| **주기억장치의 용량이 확대된 것 처럼 프로그램 실행 가능
| |
| *부가기능 제공
| |
| **[[공유 메모리]]
| |
| **[[Memory mapped file]]
| |
| *전반적인 속도가 느려질 수 있다.
| |
| **가상메모리를 사용할 경우 물리 메모리로 프로그램을 구동하는 것 보다 속도가 느림
| |
|
| |
|
| ==요구 페이지==
| | * 어떤 것을 메모리에 올릴 것인가를 판단하는 기준 중 가장 일반적으로 사용되는 기준 |
| | | * 장점 |
| ;Demand Paging
| | ** Less I/O needed |
| ;어떤 알고리즘에 따라서 미리 올려 두는 것이 아니라 실제 사용되려고 요구(demand) 될때 메모리에 적재
| | ** Less memory needed |
| | | ** Faster response |
| *어떤 것을 메모리에 올릴 것인가를 판단하는 기준 중 가장 일반적으로 사용되는 기준 | | ** More users |
| *장점 | |
| **Less I/O needed | |
| **Less memory needed | |
| **Faster response | |
| **More users | |
| | |
| ===수행 과정===
| |
|
| |
|
| | === 수행 과정 === |
| ;Virtual memory는 OS적으로 수행. HW/SW 입장에선 투명성을 가짐 | | ;Virtual memory는 OS적으로 수행. HW/SW 입장에선 투명성을 가짐 |
| | # 어떤 명령을 수행하기 위해서 필요한 page로 엑세스를 시도한다. |
| | # 페이지 엑세스가 불가능하다면'''(page fault)''' |
| | #* OS에선 페이지가 존재하지 않는 것인지, 아직 올라오지 않은 것인지 판단한다. |
| | #* 아직 올라오지 않은 것이라면 하드에서 해당되는 페이지를 찾는다. |
| | #* 메모리로 올리고 다시 명령을 수행한다. |
|
| |
|
| #어떤 명령을 수행하기 위해서 필요한 page로 엑세스를 시도한다.
| | == 페이지 교체 == |
| #페이지 엑세스가 불가능하다면'''(page fault)'''
| | * [[페이지 교체 알고리즘]] 참조 |
| #*OS에선 페이지가 존재하지 않는 것인지, 아직 올라오지 않은 것인지 판단한다.
| |
| #*아직 올라오지 않은 것이라면 하드에서 해당되는 페이지를 찾는다.
| |
| #*메모리로 올리고 다시 명령을 수행한다.
| |
| | |
| ==기법==
| |
| | |
| *페이징(Paging)
| |
| **가상기억장치의 일반적인 구현 방법에는 프로그램을 고정된 크기의 일정한 블록으로 나누는 방식
| |
| *'''세그멘테이션(Segmentation)'''
| |
| **가변적인 크기의 블록으로 나누는 방식
| |
| | |
| ==페이지 교체== | |
| | |
| ;상세 내용은 [[가상메모리 페이지 교체]] 참조
| |
| | |
| *FIFO(First In First Out)
| |
| **가장 먼저 들어와서 가장 오래 있었던 페이지를 교체
| |
| *LRU(Least Recently Used)
| |
| **최근에 적게 사용된 페이지를 교체
| |
| *NUR(Not Used Recently)
| |
| **LRU의 개선 기법으로, 참조 비트와 변형 비트를 두어 최근에 사용하지 않은 페이지를 교체
| |
| *SCR(Second Chance Replacement)
| |
| **LRU의 개선 기법으로, 회전 주기 내에 두번 연속 사용되지 않을 경우 삭제하는 기법
| |
| *OPT(OPTimal Replacement, Belady's Algorithm)
| |
| **가장 오랫동안 사용하지 않을 페이지를 교체하는 기법('최적'을 상정하는 가상의 이론적 기법)
| |
| *LFU(Least Frequency Used)
| |
| **가장 빈번하지 않게 사용된 페이지를 교체한다.
| |
| *MFU(Most Frequency Used)
| |
| **가장 빈번하게 사용된 페이지를 교체한다. 구역성(Locality)에 반하는 것으로, 거의 사용되지 않는다.
| |