jissue
SSUE's IT World
jissue
전체 방문자
오늘
어제
  • 분류 전체보기 (88)
    • CS (4)
    • 자료구조 (5)
    • 알고리즘 (30)
      • 백준 (28)
      • 프로그래머스 (2)
    • JAVA (0)
    • Spring Boot (0)
    • 가상화 (35)
      • VMware (23)
      • Docker (12)
    • sw 사관학교 정글 (13)
      • TIL (12)
    • 기타 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

티스토리

hELLO · Designed By 정상우.
jissue

SSUE's IT World

sw 사관학교 정글/TIL

[정글 78일차] Project3 : Anonymous Page

2023. 5. 16. 12:55
  • 관리
  • 글쓰기
  • 로그인
  • 로그아웃

Pintos  프로젝트 5가지의 필수 구현 과제 중 2번째 구현 과제인 Anonymous Page 구현을 완료 했다. 구현 중에 실제 진행했던 내용에 대해 정리를 하고 지나가겠다.

 

페이지 

프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재하는 방식인 페이지의 종류는 크게 Anonymous Page, File-backed Page로 나눌 수 있다. 이렇게 나누어진 페이지를 이용해서 실제 메모리에 올려 프로그램을 실행하게 되는데 하나의 프로세스를 굳이 연속적으로 배치할 필요가 없어 외부 단편화가 발생하지 않는다.

 

- Anonymous Page

익명 페이지라고 부르는 Anonymous 페이지는 프로세스가 시작할 때, 생성되어 종료가 되면 삭제되는 페이지로 프로세스가 동적으로 생성되며, 프로그램의 스택과 힙 영역에 존재한다. 파일 시스템에 저장된 파일과 달리 특정한 파일에 연결되지 않은 페이지로 프라이빗한 데이터 저장에 사용된다. 

 

- File-Backed Page

파일 기반 페이지는 실제 존재하는 디스크 내 파일을 사용 시 물리 메모리에 적재 해 사용하는 것을 의미한다. 디스크에 있는 파일의 내용을 메모리로 로드하고, 변경된 내용이 존재한다면 프로세스가 종료하기 전 해당 변경 사항을 디스크에 갱신 해 주어야 한다. 일반적으로 실행 파일이나 코드, 데이터를 나타낼 때 사용한다.

 

- Anonymous Page vs File-Backed Page 

둘의 차이점을 보면 가장 큰 것은 파일 존재 여부다. File-backed의 경우 실제 디스크에 파일이 존재 해 필요 시 메모리로 로드해 사용하지만 Anonymous는 프로세스가 시작할 때, 생성되기 때문에 변경 내용을 따로 저장해 주지 않아도 된다.


Swap

물리적인 RAM이 부족한 상황에서 메모리 부족 문제를 해결하기 위해 보조 저장 장치를 활용하여 메모리 관리를 하는 기술로 커널이 관리한다. 디스크에 존재하는 일부분의 영역을 스왑 영역이라고 하는데 이 영역은 물리 메모리 부족 시 일부 데이터를 물리메모리에서 이동 시키는 공간이다.  스왑에 대해 간단히 설명을 해 보자면 아래와 같다.

- Swap out

Page Fault 발생 시 커널은 이를 해결하기 위해 물리 메모리에 데이터 적재 / 맵핑 / 유효성 검사 작업을 진행하는데 만약 물리 메모리에 해당 페이지를 올릴 공간이 없다면 현재 메모리에 위치하는 프레임 중 하나를 빼고, 해당 페이지로 변경해야 한다. 이때, 기존 메모리에 있는 프레임은 사라지지 않고 디스크의 스왑 영역으로 이동하게 되는데 이를 Swap out이라고 하는 것이다. 

 

프레임을 스왑 영역으로 out 시킬 때는 페이지 교체 알고리즘을 사용하여 디스크로 내보낼 프레임을 선정하게 되는데 FIFO, LRU, Clock, Optimmal 방법 등이 있다.

 ※ 페이지 교체 알고리즘
- FIFO : 가장 간단한 알고리즘으로 가장 먼저 올라온 페이지를 선정하는 방식으로 선형적으로 페이지 교체가 이루어 진다.
- LRU : 가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘으로 타임스탬프를 통해 페이지를 교체한다.
- Clock : 참조 비트를 사용하는데 테이블 엔트리를 순차적으로 검사하며 참조 비트가 0인 경우는 해당 페이지를 교체하고, 1인 경우에는 참조 비트를 0으로 설정 후 한바퀴 돌 때까지 다음 엔트리를 확인한다.
- Optimal : 가장 이상적인 알고리즘으로 앞으로 가장 오랫동안 사용되지 않을 페이지를 확인하여 교체하기 때문에 최적의 성능을 보장한다. 하지만 실제로 어떤 페이지가 사용될지 사전에 모르기 때문에 구현이 어렵고 현실적으로 사용되지 않는다.

 

- Swap in

Page Fault 발생 시 디스크의 스왑 영역에 있는 데이터가 필요하다면 이때, 스왑 영역에 있는 데이터를 다시 요청하게 되는데 물리 메모리 공간이 남아 있다면 비어있는 공간에 페이지를 맵핑 시키고, 물리 메모리 공간이 남아 있지 않다면 물리 메모리에 있는 프레임을 다시 swap out 후 스왑 영역에 있는 페이지를 물리 메모리로 되돌리는 과정을 말한다.

 

-  Swap : Anonymous Page vs File-backed Page 

그렇다면 둘의 차이점은 무엇일까? 라는 궁금증이 떠오르게 된다. 우선 이 둘의 기본적인 개념을 생각해 보면 답이 쉽게 나온다. Anonymous Page는 프로세스 생성 시 시작되고, 종료 시 삭제되는 페이지다. 따라서, 스왑 영역으로 OUT되었다가 IN이 된다면 스왑 영역에 있는 기존의 데이터를 삭제 후 이동해야 한다.

하지만 File-backed Page의 경우 디스크에 데이터가 존재하기 때문에 스왑 아웃 시 dirty 비트를 확인하여 디스크의 변경 사항을 저장해 준다.


소감

모든 구현과 공부를 완료하고 함수 호출 과정을 정리해보면서 팀원들과 내용을 정리하는 시간을 가졌다. 

실제 구현한 내용을 간단히 정리한 일이여도 회의 시간이 1시간이 걸렸다. 1주일간 얼마나 많은 지식들이 들어갔는지 알 수 있는 기회였다. 

나머지 구현 과제 3개가 남아있는데 남은 1주 동안에 열심히 진행 해 봐야 할 것 같다.

 

'sw 사관학교 정글 > TIL' 카테고리의 다른 글

[정글 73일차] Project3 : Page Table & Virtual Memory  (0) 2023.05.10
[정글 72일차] Project2 발표 및 Project3 발제  (0) 2023.05.09
[정글 63일차] Project2 : Argument Passing 구현 및 확인  (0) 2023.04.30
[정글 62일차] Project2 : Argument Parsing 호출 순서 및 코드 실행 방법  (0) 2023.04.29
[정글 60일차] Project2 발제  (0) 2023.04.29
    'sw 사관학교 정글/TIL' 카테고리의 다른 글
    • [정글 73일차] Project3 : Page Table & Virtual Memory
    • [정글 72일차] Project2 발표 및 Project3 발제
    • [정글 63일차] Project2 : Argument Passing 구현 및 확인
    • [정글 62일차] Project2 : Argument Parsing 호출 순서 및 코드 실행 방법
    jissue
    jissue

    티스토리툴바