[리눅스 관리]가상메모리와 스왑
출처 : 대전국제IT교육센터 정성재 강사
1. 가상메모리(Virtual
Memory)
(1) 개요: 하드디스크의 일부를 마치 메모리처럼 사용할 수 있게 해주는 기술을 말한다. 이는
물리
적 메모리의 한계를 어느 정도 극복할 수 있다. 이 기법은 하나의 프로그램이 실행될 때,
프로그램의 전체가 메모리(RAM)에 올라와 실행되지 않고 필요한 부분만 을 불러와 실행하
는 기법을 기본으로
한다.
(2) 기법: 커널은 실제 메모리(RAM)에 올라와 있는 메모리 블록들 중에 당장 쓰이지 않는 것을
디스크에 저장한다. 이를 통해 사용가능한 메모리 영역을 늘린다. 만일 디스크에 저장되
었던 메모리 블록이 다시 필요하게
되면 그것을 다시 실제 메모리안으로 올려지며, 대신
다른 블록이 디스크로 내려가게 된다. 이런 과정이 일어나고 있다는
것을 사용자가 알 수
없고, 그저 많은 양의 메모리가 있는 것처럼 보일 뿐이어서 점유하고 있는 메모리가
디스
크에 있는 실제 메모리에 있는 지는 전혀 신경 쓸 필요가 없다. 그러나, 디스크를 읽고
쓰는
시간은 RAM보다 훨씬 느리기 때분에 프로그램의 실행은 그만큼 더디게 된다. 이렇게
가상메모리로 쓰이는 하드디스크의
영역을 스왑영역(Swap Space)라고 부른다.
2. 스왑
(1)
개요: 스왑영역은 보통 처음 설치시에 스왑파티션으로 설정을 꼭 하도록 되어 있다. 설치시의
스왑파티션의 크기는 실제
RAM의 2배정도를 잡도록 권장한다. 이렇게 파티션으로 설정하는
방법이 있고, 스왑 파일로 설정할 수 있다. 스왑 파일은
그 크기를 언제라도 자유롭게
조절할 수 있지만 스왑파티션에 비해 속도는 느리다.
(2) 관련명령어
1)
mkswap
ㄱ. 설명: 스왑파티션이나 스왑파일을 생성하는 명령이다.
ㄴ. 사용법
mkswap
[option] 스왑파일 or 스왑파티션 [size]
ㄷ. option
-c : 스왑파티션생성시에 사용하는
옵션이다.
ㄹ. 사용예
a. mkswap /swap-file 10240
=>
10240K 사이즈의 /swap-file을 생성한다.
b. mkswap -c /dev/hdb1
=>
/dev/hdb1을 스왑파티션으로 설정한다.
2) swapon
ㄱ. 설명: 스왑파티션이나 스왑파일을 구동하는
명령이다.
ㄴ. 사용법
swapon [option] 스왑파일 or 스왑영역
ㄷ.
option
-a : /etc/fstab파일에 있는 swap을 전부 활성화시킨다.
-s : 스왑영역의 상태를
보여준다.
ㄹ. 사용예
a. swapon /dev/hdb1
b. swapon
/swap-file
c. swapon -a
=> /etc/fstab파일에 설정되어 있는 swap
영역을 모두 활성화시킨다.
d. [root@www /]# swapon -s
Filename Type Size Used
Priority
/dev/hda1 partition 530104
0 -1
=> 현재 스왑의 상태를 보여준다.
3) swapoff
ㄱ. 설명:
스왑파티션이나 스왑파일의 구동을 중단시킨다.
ㄴ. 사용법
swapoff 스왑파일 or 스왑영역
ㄷ. 사용예
swapoff /swap-file
(3) 스왑 영역만들기
1) 스왑파일생성하기
ㄱ. dd명령을 실행하여 빈틈이 하나도 없는 스왑파일을 생성한다.
[root@www /root]# dd
if=/dev/zero of=/swap-file bs=1024 count=10240
10240+0 records
in
10240+0 records out
=> (설명)
/dev/zero: 빈틈이 없는 파일을 생성할 때 사용한다.
/swap-file: 생성하고자할 스왑파일의
이름이다.
bs=1024: 입출력단위의 크기를 지정한다. 보통 블록사이즈라고 부르며 단위는
바이트이
다. 현재설정은 1024byte, 즉 1KB이다.
count=10240: 입출력 단위의 몇 배 크기의 파일을 만들 것인지를 지정한다. (즉
10240KB
임) count는 꼭 4의 배수로 지정해주는 것이 좋은데, 그 이유는 커널이
스왑
하는 메모리페이지(Memory Page)의 단위가 4KB이기 때문이다.
ㄴ.
커널이 해당하는 파일을 가상메모리로 사용할 수 있도록 mkswap명령을 내린다.
[root@www /root]# mkswap
/swap-file 10240
Setting up swapspace version 1, size = 10481664
bytes
ㄷ. /swap-file의 권한을 root로 제한한다.
[root@www /root]# chmod
600 /swap-file
ㄹ. 스왑을 사용하도록 한다.
[root@www /root]# swapon
/swap-file
ㅁ. 시스템 부팅시마다 자동으로 사용되도록 설정하려면 /etc/fstab에 등록을 한다.
/swap-file swap swap defaults 0
0
2) 스왑파티션만들기 : 새로운 하드디스크를 Primary Slave(/dev/hdb)에 장착했다고 첫번째
파티
션을 스왑파티션이라고 가정
ㄱ. fdisk명령을 이용하여 스왑파티션을
생성한다.
fdisk /dev/hdb
ㄴ. mkswap명령을 이용하여 스왑파일시스템 생성
mkswap -c /dev/hdb1
ㄷ. 스왑영역 활성화
swapon /dev/hdb1
ㄹ.
부팅시마다 사용하기 위해 /etc/fstab에 등록한다.
3.
메모리관리
(1) 관련명령어
1) free
ㄱ. 설명: 현재 사용중인 메모리의 상태를 출력해
주는 명령이다.
ㄴ. 사용법
free [option]
ㄷ. option
-m
: MB 단위로 보여준다.
-k : KB 단위로 보여준다.
ㄹ. 사용예
a.
[root@www /root]# free
total used
free shared buffers cached
Mem: 513064
509532 3532 0 50480 348948
-/+
buffers/cache: 110104 402960
Swap: 265032
556 264476
b. [root@www /root]# free -m
total used free shared buffers cached
Mem: 501 498 2 0 45
353
-/+ buffers/cache: 99 401
Swap: 258 0 258
=>
(설명)
Mem: 실제적인 메모리의 상태를 보여준다. total은 전체메모리, used는 사용중인
메
모리양, free는 사용되지 않고 있는 메모리, share는 프로세스간 공유되고
있는
메모리, buffers와 cached는 현재 디스크의 버퍼및 캐쉬로 사용되는
메모리공간
을 뜻한다.
-/+ buffers/cache: 물리적인 메모리에서
버퍼로 사용되는 부분을 제외한 값
Swap: 스왑공간의 상태를 보여준다. used는 전체스왑의 크기, free는
사용중인 스왑,
free는 사용되지 않는 스왑을 뜻한다.
(2) 기타 : 메모리상태정보는
top명령으로 확인가능하며 또한 /proc/meminfo에서도 확인가능하다.