728x90

메모리 관리 기법중 하나로 프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법

 

1. 사용자 프로그램이 물리 메모리의 제약에서 벗어남

2. 각 프로그램이 더 작은 메모리를 차지하기 때문에 더 많은 프로그램을 동시수행 가능

3. 프로그램을 메모리에 올리고 swap하는데 필요한 IO횟수가 줄어듦

 

 

가상 메모리 관리 : 지금 당장 실행해야 하는 부분만 메인 메모리에 저장하고 나머지 프로그램은 보조기억장치에 둔 채 동작하는 방법

실행할 프로그램 크기가 메인 메모리보다 크거나 개수가 많으면 메인메모리 내 공간이 부족해 프로그램이 제대로 실행되지 못하는 문제를 해결하기 위해 개발

 

페이징 기법 : 프로그램을 일정 크기로 나누어 페이지를 만들고 페이지 단위별로 메인메모리에 올려 동작하는 방식

 

페이지 테이블에서 몇번째 페이지가 물리 주소의 어느 주소 번지에 있는지 명시되어있다.

만약 32비트 머신이 있다고 치자.

그럼 프로세스가 접근할 수 있는 메모리 주소의 범위는 각 주소가 32개의 비트로 구성되어 있을 것이다.

32비트, 즉 2의 32승개의 고유한 주소를 나타낼 수 있다.

따라서 32비트 머신의 주소 공간은 최대 4GB이다.

 

페이지 폴트(Page Fault)란?

컴퓨터 시스템에서 프로세스가 요청한 메모리 페이지가 현재 물리적 메모리(RAM)에 존재하지 않을 때 발생하는 이벤트이다.

 

페이지 폴트 발생 과정

1. 프로세스가 페이지 접근 시도 : 프로세스가 특정 데이터에 접근 시도 시, 해당 데이터가 저장된 메모리 페이지에 접근

2. 페이지 테이블 조회 : CPU가 페이지 테이블을 조회하여 해당 가상 페이지가 물리적 메모리에 매핑되어 있는지 확인

3. 페이지 부재 확인 : 페이지 폴트 발생

 

페이지 폴트 처리 과정

1. 페이지 폴트 핸들러 호출 : 운영체제의 페이지 폴트 핸들러 호출

2. 디스크에서 페이지 로드 : 필요한 페이지를 디스크에서 물리적 메모리로 로드

3. 페이지 테이블 업데이트 : 페이지 테이블을 업데이트하여 새로 로드된 페이지의 물리적 메모리 주소 기록

4. 프로세스 재개 : 필요한 페이지가 메모리에 로드되면 프로세스는 중단된 지점에서 다시 시작

 

페이지 트레이드 오프(Trade-Off)란?

주로 가상 메모리 시스템에서 메모리 관리 전략과 성능 간의 균형을 맞추기 위해 고려되는 다양한 선택.

페이지 시스템에서는 메모리 사용의 효율성과 시스템 성능을 최적화 하려고 하는데, 이 과정에서 여러 가지 트레이드 오프가 발생

 

1. 페이지 크기

큰 페이지와 작은 페이지로 나뉜다.

2. 페이지 교체 알고리즘

최적 교체 알고리즘과 LRU(최근에 사용되지 않은 페이지 교체)와 FIFO알고리즘 사용

3. 페이지 파일 크기와 위치

큰 페이지 파일은 더 많은 가상 메모리, 작은 페이지 파일은 더 적은 가상 메모리

4. 메모리 할당 전략

최초 적합과 최적 적합

5. 프리페이징 수요페이징

초기에 로드 할 때 페이지 폴트를 줄일 수 있음, 실제로 필요한 페이지만 로드하여 메모리를 효율적으로 사용 가능

6. 쓰기 전략

즉시 쓰기, 지연 쓰기

 

페이지 크기가 커지면, 페이지 폴트가 더 많이 발생할까?

보통은 페이지 폴트가 감소한다. 

페이지가 크면 반대로 페이지 테이블 크기는 감소한다. 때문에 테이블 탐색하는 시간이 줄어든다.

한번의 페이지 폴트로 더 많은 데이터를 메모리에 로드할 수 있기 때문에 결과적으로 페이지 폴트의 빈도를 줄인다.

 

세그멘테이션 방식을 사용하고 있다면 가상 메모리를 사용할수 없을까?

세그멘테이션 방식

프로그램을 논리적 block으로 분할

block의 크기가 서로 다를 수 있음

때문에 메모리를 미리 분할할 수 없음

세그먼트를 공유, 보호하기 용이함

주소 매핑 및 메모리 관리의 오버헤드가 크다.

내부 단편화가 발생하지 않음(크기를 조절할 수 있기 때문, 외부 단편화는 생길 수 있음)

 

주소 매핑

가상 주소 : v = (s, d)

s는 세그먼트 번호, d는 오프셋

세그먼트는 논리적으로 분할되어 있어서 공유 및 보호가 용이하다.

페이징에서는 공유할 때 주소를 뛰어넘어서 공유를 해야했는데, 세그먼트는 논리적인 공간에서 공유가 용이해진다.

 

 

결국 세그멘테이션 방식도 가상 메모리 시스템의 한 형태이다.

 

 

페이지와 프레임의 차이

페이지

가상 메모리의 고정된 크기의 블록, 프로세스의 가상 주소 공간을 나누는 단위

프레임

물리적 메모리의 고정된 크기의 블록, 물리 메모리를 나누는 단위로 가상 메모리의 페이지가 매핑되는 대상

 

내부 단편화와 외부 단편화란?

내부 단편화

할당 된 메모리 블록 내에서 실제로 사용되지 않는 여유 공간이 생기는 현상

외부 단편화

메모리의 여러 작은 비어있는 블록들로 인해 전체적으로 충분한 메모리가 있음에도 불구하고, 큰 연속적인 메모리 블록을 할당할 수 없는 상태

 

페이지에서 실제 주소를 어떻게 가져올 수 있나?

 

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

운영 체제에서의 메모리 보호기능

1. 페이지 권한 설정

2. 메모리 보호 오류 처리

3. 메모리 보호 관련 시스템 호출

4. 주소 공간 분할 (예 : 코드 영역은 실행만 가능하고 읽기만 가능한 권한, 데이터 영역은 읽기/쓰기 가능한 권한)

 

32비트에서 페이지 크기가 1KB라면 페이지 테이블의 최대 크기는?

페이지의 크기가 1KB인 경우, 1KB 페이지는 2^10바이트이다.

32비트 크기는 4GB(2^32)이다.

즉 페이지 테이블의 최대 크기는 2^32 / 2^10 인 2^22이다.

 

32비트 운영체제는 램을 최대 4G까지 사용가능하다. 그 이유는?

32비트 운영체제에서는 가상 주소 공간의 크기가 최대 4GB이므로 운영체제는 이를 기준으로 최대로 사용할 수 있는 램의 용량을 결정한다.

즉, 운영체제는 최대 4GB의 램을 사용하도록 설정된다.

 

C/C++ 개발을 하게 되면 Segmentation Fault라는 에러를 접할 수 있을 텐데, 이 에러는 세그멘테이션/페이징과 어떤관계가 있나?

세그멘테이션 오류는 프로그램이 잘못된 메모리 영역에 접근하여 발생하는 오류이다.

주로 배열 범위를 초과하거나 NULL포인터를 참조하는 등의 경우에 발생 가능하다.

세그멘테이션 오류가 발생할 때, 이는 가상 주소를 올바르게 페이징하지 못하거나 잘못된 물리 주소로 매핑될 수 있음을 의미한다.

 

 

Thrashing이란?

페이지 부재율(Page fault)이 증가하여 CPU 이용율이 급격하게 떨어지는 현상이다.

 

해결방법은?

Working set

지역성의 원리를 이용하여 지역성 집합이 메모리에 동시에 올라갈 수 있도록 보장하는 메모리 관리 방법이다.

 

Page Fault Frequency(페이지 부재 빈도)

프로세스의 페이지 부재율을 주기적으로 조사하고 이 값에 근거하여 각 프로세스에 할당할 메모리 양을 동적으로 예측하고 조절하는 알고리즘이다.

728x90

'기술 면접 > 운영체제' 카테고리의 다른 글

프로세스란?  (0) 2024.05.09
인터럽트란?  (0) 2024.05.09
시스템 콜이란?  (0) 2024.05.09

+ Recent posts