상세 컨텐츠

본문 제목

LINUX | SWAP 스왑메모리(와 가상 메모리)에 대해

갭알/어렵다.. 서버..

by ranlan 2022. 9. 12. 19:57

본문

728x90

스왑(swap) 메모리

실제 메모리 램이 가득 찬 상황에서 더 많은 메모리가 필요할 때 하드 디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간을 의미한다.

실제 메모리가 아닌 하드디스크를 이용하는 것이기 때문에 속도면에서는 현저히 떨어진다.

 

실제 디스크 공간을 메모리처럼 이용하는 것이기 때문에 가상메모리라고도 할 수 있다.

 

 

** 메모리(memory)

프로그램과 프로그램 수행에 필요한 데이터 및 코드를 저장하는 장치로 크게 내부 기억장치인 주기억장치(램(RAM), CPU안의 레지스터와 캐쉬 메모리)와 외부 기억장치인 보조기억장치(SSD, HDD)로 분류된다.

 

** 가상메모리 기법의 등장

초창기 컴퓨터에는 사용 가능한 RAM의 용량이 가장 큰 어플리케이션의 주소 공간보다 커야 실행이 가능했다. 그렇지 않을 경우 '메모리 부족' 오류에 의해 해당 어플리케이션을 실행할 수 없었다. 이에 어플리케이션의 일부만 기억장치에 올려 실행할 수 있도록 지정하는 오버레이 기법을 사용하여 이러한 문제를 해결하고자 하였다. 그러나 이 역시 전반적인 메모리 부족 문제를 해결할 수 없었다. 이에 더 발전한 가상 메모리 기법은 어플리케이션을 실행하는데 얼마나 많은 메모리가 필요한지 대신 어플리케이션을 실행하는데 최소한 얼마만큼의 메모리가 필요한가에 집중하여 문제를 해결하고자 했다.

(메모리에 올라가지 않는 나머지는 보조기억장치에!)

 

** 가상 메모리(가상 기억 장치)

메모리 관리 기법 중 하나로,  실제 주기억장치보다 큰 메모리 영역을 제공하는 방법이다. 어떤 프로세스가 실행될때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안하여 고안되었으며 나머지는 디스크에 남게되고 디스크가 RAM의 보조기억장치처럼 작동하는 것이다. 가상 메모리 방식은 멀티태스킹 운영 체제에서 흔히 사용된다.

가상적으로 주어진 주소를 가상 주소(virtual address) 또는 논리 주소(logical address) 라고 하며, 실제 메모리 상에서 유효한 주소를 물리 주소(physical address) 또는 실주소(real address)라고 한다. 

가상 메모리 구현을 위해서는 특수 메모리 관리 하드웨어가 있어야하는데 이것이 바로 MMU(Memory Management Unit)이다. MMU는 가상주소를 물리 주소로 변환하고 메모리를 보호하는 기능을 수행한다.

가상 주소 공간은 MMU에 의해 물리 주소로 변환된다. 이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되고 프로그램이나 데이터가 주기억장치에서 어떻게 존재하는지 의식할 필요가 없어진다. 대부분의 현대적 아키텍처와 운영체제는 가상 메모리 기능을 제공하며 각 응용 프로그램에 더 적합한 메모리 관리를 위해 어도비 포토샵과 같은 일부 응용 프로그램은 스스로 가상 메모리를 관리하기도 한다.

 

 

메모리 스와핑(swapping)

프로세스가 실행되기 위해서는 메모리상에 있어야 하지만 필요한 경우 프로세스는 실행 도중 임시로 보조 메모리로 교체되어 나갔다가 다시 메모리로 돌아올 수 있다. 이러한 프로세스 교체 과정을 스와핑(swapping)이라고 한다.

 

메모리에 올라온 프로세스의 주소 공간 전체를 디스크의 스왑 영역에 일시적으로 내려놓는 것을 말한다. 이때 스왑 영역은 백킹스토어(backing store)라고 부르며, 디스크 내에 파일 시스템과는 별도로 존재하는 일정 영역을 말한다.

스와핑이라는 개념은 프로세스가 종료되어 그 주소 공간을 디스크로 보내는 것이 아니라 특정 이유로 수행중인 프로세스의 주소 공간을 일시적으로 메모리에서 디스크로 내려놓는 것을 의미한다.

 

** 스와핑의 역할

스와핑은 멀티 프로그래밍의 정도를 조절한다. 즉 메모리에 존재하는 프로세스의 수를 조절하는 것이다.

너무 많은 프로그램이 메모리에 동시에 올라오게 되면 한정된 메모리양을 사용하게 되고 이는 시스템 성능을 크게 떨어뜨린다. 스와핑은 이러한 문제를 해결하기 위해 몇 프로그램을 통째로 스왑 영역으로 보내 메모리에 있는 프로그램들에게 실행에 필요한 적절한 메모리 공간을 보장한다. 현재 메모리에 있는 프로그램이 충분히 실행되고 나면 디스크 영역에 보낸 프로그램을 스왑인 시켜 다시 메모리에 올린다.

스와핑은 다중 프로그래밍의 정도(degree of multiprogramming)을 조절한다.

다시 말하면 메모리에 존재하는 프로세스의 수를 조절하는 것이다. 너무 많은 프로그램에 메모리에 동시에 올라오게 되면 한정된 메모리의 양을 적게 사용하게 될 것이다. 이는 시스템의 성능을 크게 떨어뜨린다. 스와핑은 이러한 문제를 해결하기 위해 몇몇 프로그램을 통째로 디스크의 스왑 영역으로 보냄으로써 메모리에 있는 프로그램들에게 실행에 필요한 적절한 메모리 공간을 보장한다. 현재 메모리에 있는 프로그램이 충분히 실행되고 나면 디스크 영역에 보낸 프로그램을 스왑 인 시켜 다시 메모리에 올린다.

 

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jevida&logNo=140191090013

 

  1. 스와퍼(swapper)라고 불리는 중기 스케줄러에 의해 스왑 아웃(swap out)시킬 프로세스를 선택한다.
    중기 스케줄러는 메모리에 적재된 프로세스의 수를 동적으로 조절하기 위한 스케줄러이다.
  2. 스와퍼가 선택한 프로세스에게 할당된 메모리 주소 공간을 통째로 빼앗아 스왑 영역(backing store)으로 스왑 아웃 시킨다.
  3. 여유가 생긴 메모리 공간에 필요한 프로세스의 메모리 주소 공간을 스왑 인(swap in) 시킨다.

 

 

물리 메모리가 충분한데 스왑 메모리를 사용하는 이유는?

참고 > https://qastack.kr/server/420778/why-swap-is-used-when-plenty-of-free-memory-is-left

 

충분한 여유 메모리가 남아있을 때 스왑이 사용되는 이유는 무엇입니까?

 

qastack.kr

대충 시스템이나 서비스 시작 시 함께 구동된 기본 서비스들이 게속 RAM을 잡아먹거나 잘못된 스왑 사용 등이 문제로 보인다.

 

 

그래도 메모리가 부족하다면

OutOfMemory(OOM) 메모리 부족 오류로 강제 종료된다😂

 

 


[Swap이란?(CPU, RAM, 하드디스크)] https://it-serial.tistory.com/entry/Linux-Swap-%ED%8C%8C%ED%8B%B0%EC%85%98%EC%9D%B4%EB%9E%80-CPU-RAM-%ED%95%98%EB%93%9C-%EB%94%94%EC%8A%A4%ED%81%AC-%E2%91%A0

[메모리 스와핑(swapping)] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=jevida&logNo=140191090013 

[위키백과 | 가상메모리] https://ko.wikipedia.org/wiki/%EA%B0%80%EC%83%81_%EB%A9%94%EB%AA%A8%EB%A6%AC

[운영체제 | 가상 메모리(Virtual Memory System)] https://ahnanne.tistory.com/15

[메모리 스왑(스와핑)] https://zangzangs.tistory.com/132

 

 

728x90

관련글 더보기

댓글 영역