티스토리 뷰

Linux

가상메모리와 스왑

TurboC++ 2017. 11. 1. 14:04
728x90


 

 가상메모리(Virtual Memory)

 



 1.

 개요



하드디스크의 일부를 마치 메모리처럼 사용할 수 있게 해주는 기술을 말한다. 

이는 물리적 메모리의 한계를 어느 정도 극복할 수 있다. 

이 기법은 하나의 프로그램이 실행될 때, 프로그램의 전체가 메모리(RAM)에 올라와 실행되지 않고 필요한 부분만 을 불러와 실행하는 기법을 기본으로 한다.


 2.

 기법



커널은 실제 메모리(RAM)에 올라와 있는 메모리 블록들 중에 당장 쓰이지 않는 것을 디스크에 저장한다. 

이를 통해 사용가능한 메모리 영역을 늘린다. 만일 디스크에 저장되었던 메모리 블록이 다시 필요하게 되면 그것을 다시 실제 메모리안으로 올려지며, 대신 다른 블록이 디스크로 내려가게 된다. 

이런 과정이 일어나고 있다는 것을 사용자가 알 수없고, 그저 많은 양의 메모리가 있는 것처럼 보일 뿐이어서 점유하고 있는 메모리가 디스크에 있는 실제 메모리에 있는 지는 전혀 신경 쓸 필요가 없다. 

그러나, 디스크를 읽고 쓰는 시간은 RAM보다 훨씬 느리기 때분에 프로그램의 실행은 그만큼 더디게 된다. 

이렇게 가상메모리로 쓰이는 하드디스크의 영역을 스왑영역(Swap Space)라고 부른다.




 

 스왑

 


Performance Engineering은 시스템의 목표 성능 (응답 시간과 동시 접속자수)을 정의 하고, 이를 달성하기 위해서, 시스템의 구조를 반복적으로 개선하는 작업을  이야기 한다.


 1.

 개요



스왑영역은 보통 처음 설치시에 스왑파티션으로 설정을 꼭 하도록 되어 있다. 

설치시의 스왑파티션의 크기는 실제 RAM의 2배정도를 잡도록 권장한다. 

이렇게 파티션으로 설정하는 방법이 있고, 스왑 파일로 설정할 수 있다. 

스왑 파일은 그 크기를 언제라도 자유롭게 조절할 수 있지만 스왑파티션에 비해 속도는 느리다.


 2.

 관련명령어


  • mkswap : 스왑파티션이나 스왑파일을 생성하는 명령이다.

 사용법

mkswap [option] 스왑파일 or 스왑파티션 [size]

option 

-c : 스왑파티션생성시에 사용하는 옵션이다.

예시

① mkswap /swap-file 10240 => 10240K 사이즈의 /swap-file을 생성한다.

② mkswap -c /dev/hdb1 => /dev/hdb1을 스왑파티션으로 설정한다.


  •  swapon : 스왑파티션이나 스왑파일을 구동하는 명령이다.

 사용법

swapon [option] 스왑파일 or 스왑영역

option 

① -a : /etc/fstab파일에 있는 swap을 전부 활성화시킨다.

② -s : 스왑영역의 상태를 보여준다.

예시

① swapon /dev/hdb1
② swapon /swap-file

③ swapon -a => /etc/fstab파일에 설정되어 있는 swap 영역을 모두 활성화시킨다.

④ [root@www /]# swapon -s

    Filename               Type               Size               Used               Priority
    /dev/hda1            partition          530104              0                     -1
    => 현재 스왑의 상태를 보여준다.

  •  swapoff : 스왑파티션이나 스왑파일의 구동을 중단시킨다.

 사용법

swapoff 스왑파일 or 스왑영역

option 

① -a : /etc/fstab파일에 있는 swap을 전부 활성화시킨다.

② -s : 스왑영역의 상태를 보여준다.

예시

swapoff /swap-file



 3.

 스왑 영역 만들기



  • 스왑파일생성하기

① d명령을 실행하여 빈틈이 하나도 없는 스왑파일을 생성한다.

[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

     
  • 스왑파티션만들기 : 새로운 하드디스크를 Primary Slave(/dev/hdb)에 장착했다고 첫번째 파티션을 스왑파티션이라고 가정

① fdisk명령을 이용하여 스왑파티션을 생성한다.

fdisk /dev/hdb

     

② mkswap명령을 이용하여 스왑파일시스템 생성

mkswap -c /dev/hdb1

  

③ 스왑영역 활성화

swapon /dev/hdb1

  

④ 부팅시마다 사용하기 위해 /etc/fstab에 등록한다.

swapon /dev/hdb1

  


 

 메모리 관리

 



 1.

 관련명령어



  •  free : 현재 사용중인 메모리의 상태를 출력해 주는 명령이다.

 사용법

free [option]

option 

① -m : MB 단위로 보여준다.

② -k : KB 단위로 보여준다.

예시

① [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

② [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 : 스왑공간의 상태
  - total : 전체스왑의 크기
  - used : 사용중인 스왑
  - free : 사용되지 않는 스왑

  • 기타 : 메모리상태정보는 top명령으로 확인가능하며 또한 /proc/meminfo에서도 확인가능하다.


댓글