Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- userprog
- CSS
- 큐
- Flutter
- 모션비트
- 알고리즘
- JavaScript
- 자바스크립트
- defee
- 자바
- HTML
- corou
- 오블완
- 리액트
- TiL
- 핀토스
- 코드트리
- 스택
- 크래프톤정글
- 백준
- 티스토리챌린지
- Vue.js
- pintos
- 크래프톤 정글
- 4기
- 시스템콜
- Java
- 나만무
- 사이드프로젝트
- 소켓
Archives
- Today
- Total
미새문지
24.07.18 day28 가상 메모리 본문
728x90
가상 메모리
가상 메모리란 무엇일까요?
가상 메모리는 컴퓨터 시스템에서 실제 물리적 메모리(주기억장치)의 제한을 극복하기 위해 사용되는 메모리 관리 기술이이며, 운영 체제가 메모리를 효율적으로 관리하고 프로그램이 요구하는 메모리보다 물리적 메모리가 적을 때도 프로그램을 실행할 수 있도록 한다.
주요 기능
- 주소 공간의 확장:가상 메모리는 각 프로그램이 독립적인 주소 공간을 갖도록 하여, 물리적 메모리의 크기와 관계없이 프로그램이 큰 메모리 공간을 사용할 수 있게 한다. 이를 통해 프로그램이 실제 메모리보다 더 큰 메모리 공간을 사용할 수 있다.
- 페이지화(Paging): 가상 메모리는 일반적으로 작은 고정 크기의 블록으로 나뉘는데, 이러한 블록을 '페이지'라고 하며, 가상 메모리의 페이지와 물리적 메모리의 페이지 프레임 간의 매핑을 통해 프로그램이 필요로 하는 메모리 영역을 물리적 메모리로 불러오고, 필요 없어진 페이지는 다시 디스크로 내보내는 방식이다.
- 세그멘테이션(Segmentation): 가상 메모리를 관리하는 또 다른 방법으로, 메모리를 서로 다른 크기의 세그먼트로 나눈다. 각 세그먼트는 논리적 단위로, 코드, 데이터, 스택 등이 포함될 수 있으며, 세그멘테이션은 페이지화와 함께 사용되기도 한다.
- 페이지 폴트(Page Fault): 프로그램이 접근하려는 페이지가 현재 물리적 메모리에 없을 때 발생하는 인터럽트이며, 이 경우 운영 체제는 디스크에서 해당 페이지를 읽어와 물리적 메모리에 적재한다.
- 스왑 공간(Swap Space): 물리적 메모리가 가득 찰 경우, 운영 체제는 사용하지 않는 페이지를 하드 디스크의 스왑 공간에 저장하여 메모리를 확보합니다. 이 공간은 가상 메모리의 일부로, 필요할 때 다시 물리적 메모리로 불러올 수 있습니다.
주요 이점
- 효율적인 메모리 사용: 여러 프로그램이 동시에 실행될 때, 각 프로그램이 필요로 하는 실제 메모리 양을 최소화하여 시스템 자원을 효율적으로 사용한다.
- 프로그램 독립성: 프로그램이 독립적인 주소 공간을 사용함으로써 다른 프로그램과 충돌 없이 실행될 수 있다.
- 안정성 및 보안: 잘못된 메모리 접근으로부터 시스템을 보호하고, 프로그램 간의 메모리 간섭을 방지한다.
Page Fault가 발생했을 때, 어떻게 처리하는지 설명해 주세요.
Page Fault는 프로그램이 접근하려는 페이지가 현재 물리적 메모리에 없을 때 발생하는 인터럽트이다.
처리 과정
- Page Fault 발생: 프로그램이 접근하려는 가상 주소에 대응하는 페이지가 물리적 메모리에 없는 경우 Page Fault가 발생한다.
- 트랩(Trap) 발생: Page Fault가 발생하면 CPU는 현재 작업을 중단하고, Page Fault 핸들러라는 운영 체제의 특정 루틴으로 제어를 넘긴다.
- Page Fault 핸들러 실행: Page Fault 핸들러는 가상 주소를 확인하여 어느 페이지가 필요한지 알아낸 후, 페이지 테이블을 조회해 해당 페이지가 유효한지 확인한다. 유효하지 않으면(예: 잘못된 메모리 접근) 프로그램은 exception을 발생시킨다.
- 스왑 공간 검사: 유효한 페이지 접근이라면, 해당 페이지가 디스크의 스왑 공간에 있는지 확인해서 있으면 해당 페이지를 물리적 메모리로 가져오고, 없으면 필요한 초기화를 수행한 후 페이지를 생성한다.
- 물리적 메모리 확보: 페이지를 메모리로 가져오기 위해 물리적 메모리 공간을 확보한다. 물리적 메모리가 모두 사용 중이라면, 현재 사용 중이지 않은 페이지를 선택해 스왑공간으로 보내고 빈 프레임을 확보한다.
- 페이지 적재: 디스크로부터 해당 페이지를 물리적 메모리로 읽어오면서, 페이지 테이블을 업데이트하여 가상 주소와 물리적 주소 간의 매핑을 설정한다.
- 페이지 테이블 업데이트: 페이지 테이블에 새로 적재된 페이지의 정보인 가상 주소와 물리적 메모리의 페이지 프레임 간의 매핑 정보를 기록한다.
- 프로그램 재개: Page Fault 핸들러의 작업이 완료되면, 프로그램의 실행이 중단된 지점에서 다시 시작된다. 이제 접근하려는 페이지가 물리적 메모리에 적재되어 있으므로, 정상적으로 메모리 접근이 이루어진다.
페이지 크기에 대한 Trade-Off를 설명해 주세요.
작은 페이지 크기의 장단점
장점:
- 내부 단편화 감소: 필요한 메모리 양에 더 가깝게 할당되어 메모리 낭비를 줄인다.
- 세분화된 메모리 관리: 메모리를 더 세밀하게 관리할 수 있어 효율적인 공유가 가능하다.
단점:
- 페이지 테이블 크기 증가: 더 많은 페이지를 관리해야 하므로 페이지 테이블의 크기가 커진다.
- 페이지 폴트 증가 가능성: 페이지 폴트 발생 빈도가 높아져 시스템 성능 저하 가능성이 있다.
큰 페이지 크기의 장단점
장점:
- 페이지 테이블 크기 감소: 적은 수의 페이지로 메모리를 관리하여 페이지 테이블 크기와 오버헤드가 감소한다.
- 페이지 폴트 감소: 페이지 폴트 발생 빈도가 줄어 실행 성능을 향상시킬 수 있다.
단점:
- 내부 단편화 증가: 필요 이상의 메모리를 할당하여 메모리 낭비가 증가한다.
- 세분화된 메모리 관리 어려움: 세밀한 관리가 어려워 다양한 프로세스의 효율적 메모리 공유가 힘들다.
종합적인 고려 사항
- 시스템 특성: 워크로드 특성에 따라 작은 페이지 크기와 큰 페이지 크기 중 선택할 수 있다.
- 성능과 메모리 사용량의 균형: 페이지 테이블 크기, 페이지 폴트 빈도, 내부 단편화 간의 균형을 고려해야 한다.
- 하드웨어 지원: 다양한 페이지 크기를 지원하는 하드웨어를 활용할 수 있다.
페이지 크기가 커지면, 페이지 폴트가 더 많이 발생한다고 할 수 있나요?
페이지 크기가 커지면, 페이지 폴트가 더 적게 발생할 가능성이 높다.
장점
- 지역성(Locality) 개선
- 큰 페이지 크기는 한 페이지에 더 많은 데이터와 명령어를 포함하므로, 프로그램이 해당 데이터와 명령어를 더 자주 재사용하게 되는데, 이로 인해 페이지 폴트가 줄어들 수 있다.
- 페이지 테이블 항목 수 감소
- 큰 페이지 크기는 동일한 양의 메모리를 관리하기 위해 적은 수의 페이지 항목이 필요하므로, 페이지 테이블이 더 작아지고 관리가 용이해진다. 이는 페이지 테이블 조회 속도를 향상시키고, 페이지 폴트를 줄이는 데 기여할 수 있다.
- 디스크 입출력 감소
- 큰 페이지 크기는 한 번의 페이지 폴트 시 디스크로부터 더 많은 데이터를 메모리로 읽어오기 때문에, 디스크 입출력(I/O) 횟수를 줄일 수 있는데, 이는 시스템 전반의 성능 향상으로 이어질 수 있다.
단점
- 내부 단편화 증가
- 큰 페이지 크기는 프로그램이 실제로 필요로 하는 메모리보다 더 많은 메모리를 할당하게 되어, 내부 단편화가 증가하며, 이는 메모리 낭비를 초래할 수 있다.
- 메모리 관리의 세분화 감소
- 큰 페이지 크기는 메모리를 세밀하게 관리하기 어려워지므로, 다양한 프로세스가 효율적으로 메모리를 공유하기 힘들 수 있다.
페이지 크기가 커지면 일반적으로 페이지 폴트가 줄어들 수 있지만, 이는 특정 워크로드와 시스템 환경에 따라 다를 수 있기 때문에, 최적의 페이지 크기를 선택하기 위해서는 시스템의 특성과 요구사항을 종합적으로 고려해야 한다.
세그멘테이션 방식을 사용하고 있다면, 가상 메모리를 사용할 수 없을까요?
세그멘테이션과 가상 메모리는 함께 사용할 수 있으며, 많은 현대 운영 체제는 두 방식을 결합하여 메모리를 관리한다.
세그멘테이션 (Segmentation)
개념
- 메모리를 논리적 단위인 세그먼트로 나누며, 각 세그먼트는 특정 목적(코드, 데이터, 스택)을 가진다.
장점
- 논리적 관리가 직관적이며, 메모리 보호와 공유가 용이하다.
단점
- 외부 단편화가 발생할 수 있으며, 관리가 복잡함.
페이징 (Paging)
개념
- 메모리를 고정 크기의 페이지로 나누며, 가상 주소를 물리적 메모리에 매핑.
장점:
- 외부 단편화가 없고 효율적 메모리 관리가 가능하다.
단점:
- 내부 단편화 발생할 수 있으며, 페이지 테이블이 커질 수 있다.
세그멘테이션과 페이징의 결합
세그먼트 페이징 (Segmented Paging)
- 가상 주소 공간을 세그먼트로 나누고, 각 세그먼트를 다시 페이지로 나눈다.
- 논리적 주소는 세그먼트 번호와 오프셋(페이지 번호와 페이지 내 오프셋)으로 구성된다.
장점
- 외부 단편화가 감소하고, 메모리 보호와 공유가 강화된다.
단점
- 구현이 복잡하고 메모리 오버헤드가 증가할 수 있다.
세그멘테이션과 페이징을 결합하면 메모리를 효율적이고 유연하게 관리할 수 있어 시스템 성능을 최적화할 수 있다.
728x90
'개발 TIL' 카테고리의 다른 글
24.07.22 day30 useMemo, useCallback (2) | 2024.07.22 |
---|---|
24.07.19 day29 스터디 회고 2주차, props와 state의 차이 (0) | 2024.07.19 |
24.07.17 day27 메모리 연속할당, 숫자 고르기 (0) | 2024.07.17 |
24.07.16 day26 캐시 메모리, 백준 1654번 랜선자르기 (0) | 2024.07.16 |
24.07.15 day25 IPC, CSR과 SSR (0) | 2024.07.15 |