가상 메모리: 두 판 사이의 차이

기술노트
(Gemini 벌크 업로더로 자동 업로드)
 
(Gemini 벌크 업로더로 자동 업로드)
 
1번째 줄: 1번째 줄:
== ☁️ 가상 메모리 (Virtual Memory) ==
== 가상 메모리 (Virtual Memory) ==


'''가상 메모리'''는 운영체제(OS)가 실제 물리 메모리(RAM)의 용량 한계를 극복하기 위해, '''하드 디스크의 일부 공간을 마치 주 기억 장치(RAM)처럼 사용'''하는 기술입니다. 이를 통해 실제 메모리보다 큰 프로그램을 실행하거나, 더 많은 프로그램을 동시에 실행할 수 있게 됩니다.
'''가상 메모리(Virtual Memory)'''는 운영체제가 물리 메모리(RAM)의 한계를 극복하기 위해 사용하는 메모리 관리 기법입니다. 각 프로세스에게 실제 물리 메모리 크기와 상관없이 '''크고 연속적인 메모리 공간'''이 있는 것처럼 보이게 하여, 효율적인 메모리 사용과 프로세스 간 메모리 보호를 가능하게 합니다.


사용자는 실제 메모리의 크기에 구애받지 않고, 무한한 메모리 공간을 사용하는 것처럼 느끼게 됩니다.
----


----
=== 🧠 가상 메모리의 필요성 ===


=== 🤔 가상 메모리는 왜 필요한가? ===
* '''물리 메모리의 한계 극복'''
> * 실제 물리 메모리(RAM)의 크기보다 더 큰 프로그램을 실행할 수 있게 합니다.
> * 여러 프로세스가 동시에 실행될 때, 각 프로세스가 독립적인 큰 메모리 공간을 사용하는 것처럼 보이게 합니다.


* '''메모리 용량 확장''' : 실제 RAM 용량이 부족하더라도, 하드 디스크의 여유 공간을 활용하여 더 큰 프로그램을 실행할 수 있습니다.
* '''메모리 관리의 효율성 증대'''
* '''다중 프로그래밍 효율 증대''' : 여러 프로세스가 동시에 실행될 때, 모든 프로세스를 RAM에 올리지 않고 필요한 부분만 올려서 메모리 사용 효율을 높입니다.
> * '''프로세스 간 메모리 보호''' : 각 프로세스는 자신의 가상 주소 공간만 접근할 수 있어, 다른 프로세스의 메모리 영역을 침범하는 것을 방지합니다.
* '''메모리 보호''' : 각 프로세스는 자신만의 가상 주소 공간을 가지므로, 다른 프로세스의 메모리 영역을 침범할 수 없습니다.
> * '''메모리 공유 용이''' : 여러 프로세스가 동일한 코드나 데이터를 공유할 수 있도록 하여 메모리 사용 효율을 높입니다. (e.g., 공유 라이브러리)
* '''프로그램 공유 용이''' : 여러 프로세스가 동일한 코드나 라이브러리를 공유할 , 물리 메모리에는 한 번만 적재하고 각 프로세스의 가상 주소 공간에 매핑하여 메모리를 절약합니다.
> * '''프로그램 로딩 시간 단축''' : 프로그램 전체를 한 번에 물리 메모리에 올리지 않고, 필요한 부분만 올릴 수 있습니다.


----
----


=== ⚙️ 가상 메모리의 동작 방식 ===
=== ⚙️ 가상 메모리의 동작 원리 ===
 
* '''가상 주소 (Virtual Address) vs 물리 주소 (Physical Address)'''
> * '''가상 주소''' : CPU가 생성하는 주소. 각 프로세스마다 독립적인 가상 주소 공간을 가집니다.
> * '''물리 주소''' : 실제 물리 메모리(RAM)의 주소.


가상 메모리는 주로 '''페이징(Paging)''' 기법을 기반으로 구현됩니다.
* '''주소 변환 (Address Translation)'''
> * CPU가 가상 주소를 생성하면, '''MMU(Memory Management Unit)'''라는 하드웨어 장치가 이 가상 주소를 물리 주소로 변환합니다.
> * '''페이지(Page)와 프레임(Frame)''' : 가상 메모리 공간과 물리 메모리 공간을 고정된 크기의 블록으로 나눈 단위입니다. 가상 메모리의 블록을 '페이지', 물리 메모리의 블록을 '프레임'이라고 합니다.
> * '''페이지 테이블 (Page Table)''' : 가상 주소의 페이지 번호와 해당 페이지가 매핑되는 물리 메모리의 프레임 번호를 저장하는 테이블입니다. 각 프로세스마다 고유한 페이지 테이블을 가집니다.


1.  프로세스는 가상 주소 공간을 가집니다. 이 가상 주소 공간은 고정된 크기의 페이지(Page)들로 나뉩니다.
* '''페이지 폴트 (Page Fault)'''
2.  운영체제는 이 페이지들을 물리 메모리(RAM)의 프레임(Frame)에 할당하거나, 필요에 따라 하드 디스크의 '''스와프 영역(Swap Area / Page File)'''에 저장합니다.
> * CPU가 접근하려는 가상 주소에 해당하는 페이지가 현재 물리 메모리(RAM)에 없는 경우 발생하는 인터럽트입니다.
3.  CPU가 가상 주소를 요청하면, MMU(Memory Management Unit)라는 하드웨어 장치가 페이지 테이블(Page Table)을 참조하여 해당 가상 주소를 물리 주소로 변환합니다.
> * 운영체제는 페이지 폴트가 발생하면, 해당 페이지를 디스크(스왑 영역)에서 찾아 물리 메모리로 로드하고, 페이지 테이블을 업데이트한 후, 중단되었던 명령어를 다시 실행합니다.
4.  만약 요청된 페이지가 현재 물리 메모리에 없다면, '''페이지 부재(Page Fault)'''가 발생하고, 운영체제는 해당 페이지를 스와프 영역에서 물리 메모리로 가져옵니다.


----
----


=== 💡 정보처리기사 핵심 Point ===
=== 💡 개발자 핵심 Point ===


* 가상 메모리는 실제 메모리보다 큰 프로그램을 실행할 수 있도록 하는 '''메모리 관리의 핵심 기술'''입니다.
* 가상 메모리는 개발자가 직접적으로 관리할 필요는 없지만, 그 동작 원리를 이해하는 것은 메모리 관련 성능 문제를 해결하는 데 중요합니다.
* 정보처리기사 시험에서는 '''가상 메모리의 개념, 장점, 그리고 페이지 부재(Page Fault)의 발생 과정'''을 묻는 문제가 자주 출제됩니다.
* '''스래싱 (Thrashing)'''
* '''페이지 교체 알고리즘'''(FIFO, LRU, LFU 등)은 페이지 부재 발생 시, 어떤 페이지를 스와프 영역으로 내보낼지 결정하는 중요한 알고리즘입니다.
> * '정의': 프로세스의 작업 세트(Working Set, 현재 활발하게 사용되는 페이지 집합)가 물리 메모리보다 커서, 페이지 폴트가 빈번하게 발생하고 CPU 이용률이 급격히 떨어지는 현상입니다.
> * '원인': 너무 많은 프로세스가 동시에 실행되거나, 각 프로세스에 할당된 물리 메모리가 너무 적을 때 발생합니다.
> * '해결': 프로세스 수를 줄이거나, 물리 메모리를 늘리거나, 페이지 교체 알고리즘을 최적화합니다.
* '''지역성 (Locality of Reference)'''
> * '시간 지역성': 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높습니다.
> * '공간 지역성': 최근에 참조된 데이터 주변의 데이터는 가까운 미래에 참조될 가능성이 높습니다.
> * 가상 메모리 시스템은 이러한 지역성 원리를 활용하여, 페이지 폴트 발생 시 주변 페이지를 함께 로드하는 등의 최적화를 수행합니다. 개발자는 지역성을 고려하여 코드를 작성하면 캐시 및 가상 메모리 효율을 높일 수 있습니다.

2025년 9월 11일 (목) 16:50 기준 최신판

가상 메모리 (Virtual Memory)

가상 메모리(Virtual Memory)는 운영체제가 물리 메모리(RAM)의 한계를 극복하기 위해 사용하는 메모리 관리 기법입니다. 각 프로세스에게 실제 물리 메모리 크기와 상관없이 크고 연속적인 메모리 공간이 있는 것처럼 보이게 하여, 효율적인 메모리 사용과 프로세스 간 메모리 보호를 가능하게 합니다.


🧠 가상 메모리의 필요성

  • 물리 메모리의 한계 극복

> * 실제 물리 메모리(RAM)의 크기보다 더 큰 프로그램을 실행할 수 있게 합니다. > * 여러 프로세스가 동시에 실행될 때, 각 프로세스가 독립적인 큰 메모리 공간을 사용하는 것처럼 보이게 합니다.

  • 메모리 관리의 효율성 증대

> * 프로세스 간 메모리 보호 : 각 프로세스는 자신의 가상 주소 공간만 접근할 수 있어, 다른 프로세스의 메모리 영역을 침범하는 것을 방지합니다. > * 메모리 공유 용이 : 여러 프로세스가 동일한 코드나 데이터를 공유할 수 있도록 하여 메모리 사용 효율을 높입니다. (e.g., 공유 라이브러리) > * 프로그램 로딩 시간 단축 : 프로그램 전체를 한 번에 물리 메모리에 올리지 않고, 필요한 부분만 올릴 수 있습니다.


⚙️ 가상 메모리의 동작 원리

  • 가상 주소 (Virtual Address) vs 물리 주소 (Physical Address)

> * 가상 주소 : CPU가 생성하는 주소. 각 프로세스마다 독립적인 가상 주소 공간을 가집니다. > * 물리 주소 : 실제 물리 메모리(RAM)의 주소.

  • 주소 변환 (Address Translation)

> * CPU가 가상 주소를 생성하면, MMU(Memory Management Unit)라는 하드웨어 장치가 이 가상 주소를 물리 주소로 변환합니다. > * 페이지(Page)와 프레임(Frame) : 가상 메모리 공간과 물리 메모리 공간을 고정된 크기의 블록으로 나눈 단위입니다. 가상 메모리의 블록을 '페이지', 물리 메모리의 블록을 '프레임'이라고 합니다. > * 페이지 테이블 (Page Table) : 가상 주소의 페이지 번호와 해당 페이지가 매핑되는 물리 메모리의 프레임 번호를 저장하는 테이블입니다. 각 프로세스마다 고유한 페이지 테이블을 가집니다.

  • 페이지 폴트 (Page Fault)

> * CPU가 접근하려는 가상 주소에 해당하는 페이지가 현재 물리 메모리(RAM)에 없는 경우 발생하는 인터럽트입니다. > * 운영체제는 페이지 폴트가 발생하면, 해당 페이지를 디스크(스왑 영역)에서 찾아 물리 메모리로 로드하고, 페이지 테이블을 업데이트한 후, 중단되었던 명령어를 다시 실행합니다.


💡 개발자 핵심 Point

  • 가상 메모리는 개발자가 직접적으로 관리할 필요는 없지만, 그 동작 원리를 이해하는 것은 메모리 관련 성능 문제를 해결하는 데 중요합니다.
  • 스래싱 (Thrashing)

> * '정의': 프로세스의 작업 세트(Working Set, 현재 활발하게 사용되는 페이지 집합)가 물리 메모리보다 커서, 페이지 폴트가 빈번하게 발생하고 CPU 이용률이 급격히 떨어지는 현상입니다. > * '원인': 너무 많은 프로세스가 동시에 실행되거나, 각 프로세스에 할당된 물리 메모리가 너무 적을 때 발생합니다. > * '해결': 프로세스 수를 줄이거나, 물리 메모리를 늘리거나, 페이지 교체 알고리즘을 최적화합니다.

  • 지역성 (Locality of Reference)

> * '시간 지역성': 최근에 참조된 데이터는 가까운 미래에 다시 참조될 가능성이 높습니다. > * '공간 지역성': 최근에 참조된 데이터 주변의 데이터는 가까운 미래에 참조될 가능성이 높습니다. > * 가상 메모리 시스템은 이러한 지역성 원리를 활용하여, 페이지 폴트 발생 시 주변 페이지를 함께 로드하는 등의 최적화를 수행합니다. 개발자는 지역성을 고려하여 코드를 작성하면 캐시 및 가상 메모리 효율을 높일 수 있습니다.