본문 바로가기
스터디북

[10/03] ocp 문제 풀이 및 sol11g 설치

by 파이어볼러 2015. 10. 3.

리눅스에서 df 명령으로 디스크의 빈 공간을 확인해 보면 /dev/shm 디렉토리가 있는데, 파일시스템 형식은 tmpfs이고 크기는 램(RAM) 용량의 반 정도 될 것이다. 

 

이 디렉토리는 공유 메모리(shared memory)라고 해서 일종의 램디스크인데, RAM 용량의 반을 당장에 실제로 점유하고 있는 것은 아니고 사용하는 만큼만 용량을 소모한다. 그러므로 RAM 용량이 반이나 날아갔다고 오해하면서 걱정할 필요는 없다. 


자주 읽기/쓰기를 하는 임시 파일을 사용해야 할 경우에 RAM 용량이 충분하다면 이 디렉토리가 상당히 요긴하다.



참고로, 만약 다른 프로그램들이 RAM을 이미 많이 점유하고 있는 상태에서 /dev/shm 디렉토리를 사용하다가 사용량이 RAM 용량을 초과하게 되면 그 때는 스왑(swap) 영역으로 넘어간다. 


출처 http://bahndal.egloos.com/465571


============================================================


tmpfs /dev/shm에 대한 고찰


커널 버전 2.4이후 tmpfs라는 형태의 새로운 램 디스크 매커니즘을 사용할 수 있다 일정 크기의 램 디스크를 잡고 필요한 경우에만 램에서 공간을 할당하여 디스크로 사용한다 즉 사용되지 않은 공간은 일반 램으로서 얼마든지 프로세스가 사용할 수 있다.


기존의 방법은 4g시스템에서 램디스크를 2g 잡고 실제 디스크 사용은 2g를 사용한다 가정하면 기존의 램 디스크 시스템의 사용 가능한 메모리는 4-2가 되어 2g만큼만 사용가능하다 


tmpfsl는 4g-실제 디스크 사용량 = 2g만큼 사용할 수 있다 디스크의 크기가 최대 크기만 지정되어 있으면 얼마든지 가변적이라는 애기다 


출처 http://egloos.zum.com/cubenuri/v/2291331


POSIX shared memory를 사용해서 구현했기 대문에 마운트되는 위치가 /dev/shm으로 붙여진듯


램디스크와 같은 특성을 가지므로 전원차단시나 리부팅시 모든 데이터는 사라지지만 램디스크와는 달리 지정된 용량 만큼의 용량을 한꺼번에 사용하는 것이 아니라 동적으로 메모리를 사용하고 메모리의 남은 용량이 부족하면 그때 swap를 사용한다 속도는 메모리인 만큼 하드디스크에 비해 좋은 성능을 보인다


출처 http://egloos.zum.com/dancal/v/578059


===========================================================================


POSIX shared memory란?


먼저 shared memory를 사용하는 방식은 두 가지가 있는데 기본적으로 알고 있는 shmget을 이용하여 생성하는 system V 방식과 shm_open을 사용하는 posix 방식이 있다


system v 방식


shmget -> shmat -> shmdt


posix 방식


shm_open -> ftruncate -> mmap -> munmap


shm segment 를 만들고 해당 id를 통해 segment들을 구분 관리하는 것에 비해 posix 방식은 shm segment에 대응하는 file을 통해 memory까지 관리하는 방식


posix방식은 shm 영역을 하나 잡고 파일을 하나 생성하여 해당 shm memory 영역을 파일에 mapping하여 사용하는 구조다 posix 방식이 필요한 이유는 inter x86기반 RHEL 6.2버전 기준 system v 방식의 경우 shared memory segment의 최대 개수가 32k로 제한되어 있다 즉 32k이상 만들지 못한다는 뜻이다


shmmni의 값을 수정해서 될 문제가 아니라 kernel에 hard coding 값으로 고정되어 있다는 뜻

대형 시스템의 경우 이 제한때문에 posix 방식으로 변경한다 물론 파일개수는 무제한이기 때문에 posix 방식을 통해 shm segment를 생성하는 것은 거의 제한이 없지만 시스템의 limit들을 조정할 필요는 있다


unlimit -n을 통해 open files에 대한 사용자 제한값을 늘린다던가 /proc/sys/vm/max_map_count의 값을 늘려서 프로세스가 mmap 및 malloc 등 memory map 사용갯수에 제한을 받지 않도록 해야 한다


shared memory를 눈에 보이는 file 형태로 관리하고 싶다면 posix 방식을 사용하면 된다

단 posix 방식은 ipcs -m 명령을 통해 보이지 않고 /dev/shm 아래에 파일을 생성하고 관리해야 한다


출처 http://stackcanary.com/?p=59



==================================================


공유 메모리 생성 및 관리


여러 프로세스가 함께 사용하는 메모리를 말한다 이것을 사용하면 프로세스끼리 통신을 할 수 있으며 같은 데이터를 공유할 수 있다 이렇게 같은 메모리 영역을 공유하기 위해서는 공유메모리를 생성한 후 프로세스의 자신의 영역에 첨부를 한 후에 마치 자신의 메모리를 사용하듯 사용한다


shmget -> shmat -> shmdt


shmget - 공유 메모리 생성 or 접근


shmget() 주어진 인자 key를 접근 번호로 하는 공유 메모리 공간 할당을 커널에 요청하고 커널에서 성공적으로 공유 메모리 공간을 할당하게 되면 공유 메모리를 가리키는 식별자를 리턴한다 생성될 공유 메모리 공간의 크기는 size를 통해서 byte 단위 크기로 지정할 수 있다


shmget() 함수는 공유 메모리의 확인자(ID)의 값을 리턴한다


shmat - 공유 메모리를 프로세스에 첨부


shmld에 공유메모리 세그먼트를 붙이기 위해 사용한다 붙이는 영역은 shmaddr로 결정할 수 있다 만약 이게 NULL이면 시스템은 적당한 사용하지 않은 메모리 영역을 붙이게 된다


shmat()함수는 해당 공유 메모리 id값에 대한 address를 리턴한다


shmdt - 공유 메모리를 분리


공유 메모리 영역으로부터 shm addr주소를 분리 시키기 위해서 사용한다 영역의 분리는 shmat 시스템 콜로 연결된 값과 동일한 shmaddr을 가지고 있는 연결된 영역들 중 하나여야 한다


출처 : http://mintnlatte.tistory.com/27

'스터디북' 카테고리의 다른 글

[10/05] 정리  (0) 2015.10.05
[10/04] RMAN one host Twice DB  (0) 2015.10.04
[10/02] Admin2 C3-2  (0) 2015.10.02
[10/02] Admin2 C3-1  (0) 2015.10.02
[10/01] admin1 test admin c2  (0) 2015.10.01