본문 바로가기
운영체제

[OS] 가상메모리, 페이징, 세그멘테이션, page fault 질문답변

by 오렌지마끼야또 2023. 4. 7.
728x90
반응형

 

 

 

 

 

● 가상 메모리란 무엇인가요?

 - 실제 존재하는 메모리(4GB)보다 더 큰 가상의 메모리(16GB)처럼 사용한다는 의미. 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 아닌 일부분만 올라가도 실행이 가능하다는 점에 착안하여 고안되었다. 프로세스 실행에 필요한 일부분만 메모리에 올라가고 나머지는 하드디스크(VMS)에 올라가는 모양. RAM 과 HDD의 병합.

 - 가상 메모리는 주기억장치(RAM)와 보조기억장치(하드 디스크 등)를 조합하여 물리 메모리보다 큰 주소 공간을 제공하는 기술입니다. 가상 메모리에서는 일부 페이지만 주기억장치에 로드되고, 나머지 페이지는 보조기억장치에 저장되어 있습니다.

 



● MMU(Memory Management Unit)가 무엇인가요?

 - 가상주소를 물리주소로 변환해주고, 메모리를 보호해주는 메모리 관리 하드웨어. CPU가 메모리에 접근하기 전에 메모리 주소 번역 작업이 수행된다.
 - 그러나 메모리를 일일이 가상 주소에서 물리적 주소로 번역하게 되면 작업 부하가 너무 높아지므로, MMU는 가상 메모리 공간을 여러 페이지(page) 또는 세그먼트(Segment) 로 나누어 각 페이지(세그먼트)를 하나의 독립된 항목으로 처리한다.

 

 

● TLB(Translation Lookaside Buffer)는 무엇인가요? TLB를 쓰면 왜 빨라지나요?

 - TLB는 MMU에 포함되어 있는 작은 캐시로 최근에 일어난 가상 주소와 물리 주소의 변환 테이블을 저장해두어서 변환 속도가 훨씬 빠르다. CPU가 먼저 TLB를 보고 캐시가 있으면 가상 주소에 해당되는 물리 주소를 찾고, 없으면 MMU가 동작한다.

 

 

● TLB와 MMU는 어디에 위치해 있나요?

 - CPU 안에 MMU가 삽입되어 있고 MMU는 TLB라는 캐시를 포함하고 있다.



● 세그멘테이션과 페이징의 차이점은 무엇인가요?

 - 프로세스를 여러개로 나누어 메모리(RAM + HDD)에 적재한다는 것은 같지만 차이점은 페이징은 일정한 크기로 나눈것이고 세그멘테이션은 논리적인 단위로 나누어 할당한다는 것입니다. 여기서 논리적인 단위라고 하면 함수나 전역변수, 힙, 스택, 라이브러리 등 입니다.

 

 


● 두 가지 장단점

 - 페이징은 페이지 단위로 나뉜 프로세스를 물리메모리에 연속적으로 할당되지 않아도 되기때문에 외부단편화가 생기지 않습니다. 하지만 만약 프로세스의 크기가 페이지 단위로 딱 나누어지지 않는다면 마지막 페이지는 작은 단위로 만들어지게 되고 이것이 물리메모리의 프레임에 할당되면 내부 단편화가 생길 수 있습니다. 페이지 크기를 작게 해서 내부 단편화를 줄일 수 있지만 매핑 과정이 많아져서 효율이 떨어집니다.
 - 세그멘테이션은 세그먼트 크기만큼 메모리를 할당해주기 때문에 내부 단편화 문제는 발생하지 않지만, 중간에 메모리를 해제하고 다른것을 재할당 하면서 생기는 외부 단편화 문제가 발생합니다.

 

 

● 페이지와 프레임의 차이에 대해 설명해 주세요.

 - 페이지는 프로세스를 가상의 논리적인 주소 공간을 일정한 크기고 나눈 것이고, 프레임은 물리적인 실제 메모리를 일정한 크기로 나눈 개념이다. 윈도우 기준으로 특별한 설정을 하지 않았다면 둘 다 4KB의 크기를 갖는다.
 - 페이지: 고정 사이즈의 가상 메모리 내 프로세스 조각
 - 프레임: 페이지 크기와 같은 주 기억 장치의 메모리 조각


 

● 페이지에서 실제 주소를 어떻게 가져올 수 있는지 설명해 주세요.

 - 페이지 단위로 나누어진 모든 프로세스는 각각의 페이지 테이블을 가지고 있는데 여기에는 페이지가 어떤 프레임에 들어가 있는지 매핑 정보가 담겨 있습니다. 이 페이지 테이블을 통해 페이지가 위치하는 실제 메모리 주소를 얻을 수 있습니다.

 

 

● 어떤 주소공간이 있을 때, 이 공간이 수정 가능한지 확인할 수 있는 방법이 있나요?

 - 페이지 테이블의 각 엔트리(entry)는 해당 페이지의 접근 권한 정보를 가지고 있습니다. 페이지 접근 권한 정보는 읽기, 쓰기, 실행 등이 있는데 만약 쓰기를 허용하지 않는다면, 해당 페이지의 주소 공간은 수정이 불가능합니다. 이렇게 페이지 테이블을 확인하여 해당 페이지의 접근 권한 정보를 보고 수정 가능 여부를 판단할 수 있습니다.


 

● 32비트에서, 페이지의 크기가 1KB 라면 페이지 테이블의 최대 크기는 몇 개일까요?

 - 실제 컴퓨터 시스템의 논리 주소 공간 : 2^32
 - 페이지 크기 1KB = 2^10
 - 페이지 테이블 크기 = 2^(32-10) = 2^22 = 4MB


 

● page fault 란, 어떤 프로그램이 자신의 주소 공간(가상 메모리 공간)에는 존재하지만 시스템의 RAM에는 현재 존재하지 않는 데이터·코드에 접근을 시도할 경우 발생하는 현상


 

● Secondary Memory(보조기억장치, HDD)에서 page를 가져오는 영역 이름

 - 보조기억장치 페이지 캐시는 주로 가상 메모리(Virtual Memory)에서 사용됩니다. 
 - 보조기억장치 페이지 캐시로 보조기억장치에서 읽어들인 페이지를 저장하는 캐시 메모리입니다. 보조기억장치에서 페이지를 읽어들이는 경우, 해당 페이지가 보조기억장치 페이지 캐시에 존재한다면 캐시에서 페이지를 가져와 주기억장치에 저장하고, 없다면 보조기억장치에서 페이지를 읽어들여 캐시와 주기억장치에 저장합니다. 이를 통해 가상 메모리에서도 빠른 응답 속도를 보장할 수 있습니다.


 

● Page Fault가 발생했을 때, 어떻게 처리하는지 설명해 주세요.

 - 페이지 폴트가 발생하면 운영체제는 그 데이터를 메모리로 가져와서 다시 동일한 명령을 수행하여 이상없이 동작하도록 함.


 

● 페이지 크기에 대한 Trade-Off를 설명해 주세요.

 - 내부 단편화, 외부 단편화, 페이지 테이블 크기, 입출력(I/O) 오버헤드, 캐시 성능 등 요소
 - 내부 단편화(Internal Fragmentation) vs. 외부 단편화(External Fragmentation)
    - 페이지 크기 ↓ 내부단편화 ↓ 외부단편화 ↑ 
    - 페이지 크기 ↑ 내부단편화 ↑ 외부단편화 ↓


 - 페이지 테이블 크기
    - 페이지 크기↓ 페이지 테이블 크기↑
    - 페이지 크기↑ 페이지 테이블 크기↓


 - 입출력(I/O) 오버헤드
    - 페이지 크기 ↓ 입출력(I/O) 오버헤드↑
    - 페이지 크기 ↑ 입출력(I/O) 오버헤드↓


 - 캐시 성능
    - 페이지 크기 ↓ 캐시 성능↑
    - 페이지 크기 ↑ 캐시 성능↓


 

● 페이지 크기가 커지면, 페이지 폴트가 더 많이 발생한다고 할 수 있나요?

 - 꼭 그런것은 아니다. 실행되는 프로세스의 크기, 물리적 메모리의 크기 등에 따라 달라질 수 있다. 예를 들면 프로세스 크기가 작다면 나눈 페이지 수도 적어서 모두 메모리에 할당될 수도 있고, 메모리 자체의 크기가 크다면 페이지 폴트가 많이 발생하지 않을 것이다.


 

● Page Fault를 줄이는 방법에 대해서 설명하세요

 - 물리적인 메모리 증가
 - 캐시 메모리에 페이지 적재
 - 속도가 더 빠른 SSD를 사용하여 페이지를 물리 메모리에 빠르게 할당해서 페이지가 할당 되고 있는 중에 사용하려는 상황에 대한 page fault를 줄인다.


 

● 페이지 교체 알고리즘엔 어떤 것들이 있나요?

 - FIFO(First In First Out) 알고리즘
    - 가장 먼저 메모리에 올라온 페이지를 가장 먼저 내보내기. 
    - 구현이 간단하지만 성능은 좋지 않은 편.

 

 - LRU(Least Recently Used) 알고리즘
    - 가장 오랫동안 사용하지 않은 페이지를 교체. 
    - 성능이 좋은 편이다. 
    - 최적 알고리즘과 비슷한 효과를 낼 수 있다. 
    - 많은 운영체제가 채택하는 알고리즘이다.

 

 - LFU(Least Frequently Used) 알고리즘
    - 참조횟수가 가장 적은 페이지를 교체
    - 참조횟수가 가장 적은 페이지가 여러개라면 가장 오랫동안 사용하지 않은 페이지를 교체

 

 - MFU(Most Frequently Used) 알고리즘
    - LFU와 반대로 가장 많이 사용된 페이지를 교체
    - 이때까지 해당 페이지가 많이 사용됐으므로, 앞으로는 사용되지 않을 것이라는 관점에서 나옴

 

 - MRU(Most Recently Used) 알고리즘
    - LRU와 반대로 가장 최근에 사용된 페이지를 교체
    - 최근에 사용됐으니, 오랫동안 사용되지 않을 것이라는 관점에서 나옴

 

 - OPT(Optimal) 알고리즘
    - 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체. 

    - 모든 페이지 교체 알고리즘 중 page-fault 발생이 가장 적다. 

    - 프로세스가 앞으로 사용할 페이지를 미리 알아야한다. 

    - 실제로 구현하기 거의 불가능한 알고리즘이다. 실제로 사용하기 보다는 연구 목적을 위해 사용된다.


 

● MFU MRU 의 가치?

 - Most-Frequently-Used(MFU)와 Most-Recently-Used(MRU)와 같은 알고리즘도 존재하지만 대부분의 경우 (모든 경우는 아님!), 이러한 정책들은 잘 동작하지 않는다. 대부분의 프로그램들에서 관찰되는 지역성 접근 특성을 사용하지 않고 오히려 무시하기 때문이다.
 - 지역성이란, 데이터 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것을 의미한다.

 

 

 

 

 

 

출처

 

페이징 세그멘테이션
 https://ahnanne.tistory.com/15#6.%20TLB(Translation%20Lookaside%20Buffer,%20%ED%8E%98%EC%9D%B4%EC%A7%80%20%EC%A0%95%EB%B3%B4%20%EC%BA%90%EC%89%AC)%EB%9E%80? 

https://goodmilktea.tistory.com/35

https://cocoon1787.tistory.com/860


페이지 교체 알고리즘
https://code-lab1.tistory.com/60

https://kariskan.tistory.com/m/205

 

 

 

 

728x90
반응형

댓글