Unix Linux

[Unix]swap 이란 무엇이며, 왜 시스템에 swap 이 필요한가 ?

_침묵_ 2007. 6. 30. 06:24

출처 :http://linuxer.superuser.co.kr/jsboard/read.php?table=os&no=14&page=6

 

====================================================
swap 이란 무엇이며, 왜 시스템에 swap 이 필요한가 ?
====================================================

HP-UX 는 다른 유닉스 버전들처럼, process 들을 메모리로 로드하기 위해서 Virtual Memory를 사용합니다. 간단하게 요약하자면, Virtual Memory 는 2개의 부분으로 구성되어 있습니다.

  Virtual Memory = (Physical memory 또는 RAM memory) + swap Area

물리적인 메모리(Physical memory)는 프로그램이 동작되는 공간이며, swap 영역은 프로그램을잠시 옮겨 놓는 영역입니다. swap 디바이스는 일반적으로 physical hard dirve 로 구성이 됩니다. swap 을 사용함으로서, 물리적인 메모리의 한계를 초과하여 프로세스가 동작되도록 할 수 있는것입니다.

프로세스가 생성될 때, 커널은 프로세스가 physical memory 에 바로 로딩될 수 있는지를 확인하기 위해서, virtual memory 를 체크하게 됩니다. 또, 그 프로세스가 swap 영역내의 공간을 예약가능한지도 체크하게 됩니다. 만약, 이런 테스트들중 어느하나라도 실패하게 되면 그 프로세스는 생성될 수 없으며, 바로 종료되게 됩니다. 그 결과로 발생하는 에러 메시지는 malloc fail 또는 fork fail 등이 됩니다. 모든 프로세스들은 swap 영역에 공간을 예약할 수 있어야 합니다.

프로세스들이 동작하기에 충분한 physical memory 를 유지하기 위해, vhand 라고 불리는 daemon 은 커널내부의 프로세스 테이블을 검색하여 한동안 사용되지 않았던 data 의 page 들을 검색하게 됩니다. 만약, vhand 가 "non-active" page들을 발견하게 되면, vhand 는 이런 page 들을 swap 영역으로 옮기게 되는 것입니다.

만약, "available memory" 가 너무 낮아지게 되면 (프로세스들이 사용가능한 physical memory영역의 사이즈가 너무 작아기게 되면) swapper 라고 불리우는 다른 daemon 이 전체 프로세스들을 제거 (remove) 또는 swap out 하게 됩니다. swapper daemon은 available memory가 증가할 때 까지 프로세스들을 physical memory 에서 swap 영역으로 내리는 작업을 계속 하게 됩니다.

이런 작업을 swapping 이라고 하는데, 시스템이 swapping 중일 때는 swapper 프로세스가 아주 active 한 상태가 됩니다. (즉, cpu 사용량이 높아지게 됩니다.) HP-UX 10.X 와 상위 버전에서는 전체 프로세스가 swap out 되는 것은 아닙니다. 다만, 프로세스의 일부분만이 swap 되게 됩니다.
이렇게 프로세스의 부분이 swap 되는 것을 paged(paging) 이라는 용어를 사용하여 부르고 있습니다.

==================================
System Memory 에 대한 간략한 설명
==================================

시스템은 booting 할 때, physical memory 와 page size, lockable memory 등의 정보를 display 해 줍니다. 또한, syslog.log 파일에 그정보를 기록하고 있으므로 다음의 명령으로 확인하실 수 있습니다.

[root@sssskont:/] more /var/adm/syslog/syslog.log | grep -i physical
Apr 16 08:11:00 sssskont vmunix: physical page size = 4096 bytes,
logical page size = 4096 bytes Apr 16 08:11:00 sssskont vmunix:
Physical: 180224 Kbytes, lockable: 127120 Kbytes,
available: 149336 Kbytes

위의 결과는 page size 는 4096 bytes 즉 4 Kbytes 이며,
Physical memory 는 180224 Kbytes locakable memory 는 127120 Kbytes,
available memory 는 149336 Kbytes 라는 것을 보여 줍니다.

또한, # dmesg 명령으로도 같은 결과를 보실 수 있습니다.

위의 그림에서 보시는 바와 같이, 모든 physical memory 가 HP-UX 프로세스들에게 사용가능한 것은 아닙니다. 일부분의 메모리는 kernel code 과 data structure 들을 위해 예약되어 있기 때문입니다. 이 예약된 부분을 제외한 physical memory 의 영역이 available memory 이며, 이 부분이 paging 요구를 위해 시스템에서 사용되는 부분입니다.

Available memory 중 전체 또는 일부가 서브시스템이나 사용자 프로세스에 의해서 lock 될수가 있습니다.
Locked memory 는 말 그대로 잠긴 메모리이므로, swap 영역으로 swapping 되지 않습니다. Locked memory는빈번하게 사용되는 프로그램 또는 data structure 들을 메모리에 보관하게 하여, 시스템 성능을 향상시키는데 그 목적이 있습니다. 하지만, 대부분의 available memory 가 locked 되게되면, 시스템이 deadlock 상태가 될 수도 있으므로,어느정도의 unlockable 메모리가 시스템에 반드시 존재하여 deadlock 을 예방해야 합니다.

Kernel Parameter 중 unlockable_mem parameter 는 locking 될 수 없는 메모리를 예약할 수 있는 parameter 입니다.

system 을 install 하고 난 후, 이 값은 default 로 0 으로 설정되며, 0 의 의미는 lockable memory 가 0 이라는 의미가 아니라, 시스템이 적당한 값을 설정하겠다는 의미입니다.