Procfs

proc 파일시스템 (procfs)은 유닉스 계열 운영 체제에서 프로세스와 다른 시스템 정보를 계층적 파일 구조 같은 형식으로 보여주는 특별한 파일시스템으로서, 전통적인 트레이싱 방식이나 커널 메모리로의 간접적인 접근 보다는 더 편리하고 표준적인 방식인 동적으로 커널이 소유하는 프로세스 데이터에 접근하는 방식을 제공한다. 일반적으로 이것은 부트 타임에 /proc라는 이름의 마운트 포인트에 매핑된다. proc 파일 시스템은 커널에서 내부 데이터 구조체에 대한 인터페이스처럼 행동하며 런타임(sysctl) 시에 특정한 커널 파라미터를 바꾸고 시스템에 대한 정보를 얻는데 사용될 수 있다.

솔라리스, IRIX, BSD, 리눅스, AIX 등의 수많은 유닉스 계열 운영 체제들이 proc 파일시스템을 지원한다. 리눅스 커널은 이것을 프로세스와 관련 없는 데이터까지 확장하였다.

Proc 파일시스템은 커널 영역과 사용자 영역 사이의 통신에 대한 방식을 제공한다. 예를 들면 프로세스 리포팅 유틸리티 ps의 GNU 버전은 proc 파일 시스템을 어떤 특별한 시스템 호출의 사용 없이 자신의 데이터를 얻는데 사용한다.

역사

리눅스

리눅스에서 /proc은 커널 프로세스를 포함하는 각 실행 중인 프로세스들을 위한 디렉토리를 포함하며 디렉토리는 /proc/PID라는 이름을 갖는다(PID는 프로세스 번호이다). 각 디렉토리는 한 프로세스에 관한 정보 뿐만 아니라 다음을 포함한다:

PID는 pgrep, pidof 또는 ps 같은 유틸리티들에 의해서 얻을 수 있다:

$ ls -l /proc/$(pgrep -n python)/fd        # List all file descriptors of the most recently started `python' process
samtala 0
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 0 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 1 -> /dev/pts/3
lrwx------ 1 baldur baldur 64 2011-03-18 12:31 2 -> /dev/pts/3
$ readlink /proc/$(pgrep -n python)/exe    # List executable used to launch the most recently started `python' process
/usr/bin/python3.1

2.6 커널에서 대부분의 정보가 /sys에 마운트된 독립된 슈도 파일 시스템인 sysfs로 옮겨졌지만, 이것은 또한 프로세스와 관련 없는 시스템 정보도 포함한다:

멀티 코어 CPU에서, /proc/cpuinfo는 다음의 계산이 적용되는 두 필드 "siblings"와 "cpu cores"를 갖는다:

"siblings" = (HT per CPU package) * (# of cores per CPU package)
"cpu cores" = (# of cores per CPU package)

CPU package는 물리적 CPU를 의미하며 여러 코어들을 가질 수 있다. 이것은 하이퍼스레딩과 다중 코어 사이에서 구별할 수 있게 해주는데 CPU 패키지에 대한 하이퍼스레드들의 수는 siblings / CPU cores에 의해 계산될 수 있다. 만약 CPU 패키지 값들이 같다면, 하이퍼스레딩은 지원되지 않는다.

각주

  1. ↑ “3.2.2. /proc/buddyinfo”. 《centos.org》. 2013년 9월 2일에 원본 문서에서 보존된 문서. 2016년 2월 22일에 확인함.
  2. ↑ Baron, Jason. “HT vs. dual-core”. 2016년 5월 13일에 원본 문서에서 보존된 문서. 2016년 2월 22일에 확인함.
  3. ↑ “Understanding Linux /proc/cpuinfo”. 《richweb.com》. 2012년 4월 3일에 원본 문서에서 보존된 문서. 2015년 4월 21일에 확인함.

외부 링크