프로세서

procfs

proc 파일 시스템(procfs)은 Unix와 유사한 운영 체제의 특수한 파일 시스템으로 프로세스 및 기타 시스템 정보에 대한 정보를 계층형 파일 같은 구조로 표시하여 기존 추적 방법이나 직접 액세스 방법보다 커널에 저장된 프로세스 데이터에 동적으로 액세스하기 위한 보다 편리하고 표준화된 방법을 제공합니다.커널 메모리에 필요합니다.일반적으로 부팅 시 /proc라는 마운트 지점에 매핑됩니다.proc 파일 시스템은 커널에서 실행 중인 프로세스에 대한 내부 데이터 구조에 대한 인터페이스 역할을 합니다.Linux에서는 커널에 대한 정보를 가져오거나 실행 시 특정 커널 매개 변수를 변경하는 데도 사용할 수 있습니다(sysctl).

Solaris, IRIX, Tru64 UNIX, BSD, Linux, IBM AIX,[1] QNX Bell Labs의 Plan 9비롯한 많은 Unix 유사 운영 체제가 proc 파일 시스템을 지원합니다.OpenBSD는 2015년 5월에 출시된 버전 5.7에서 지원을 중단했습니다.HP-UX[1][2]macOS에는 없습니다.

리눅스 커널은 프로세스와 관련이 없는 데이터로 확장합니다.

proc 파일 시스템은 커널 공간사용자 공간 의 통신 방법을 제공합니다.를 들어 GNU 버전의 프로세스 리포트 유틸리티 ps는 특별한 시스템 호출을 사용하지 않고 proc 파일 시스템을 사용하여 데이터를 가져옵니다.

역사

UNIX 8th Edition

Tom J. Killian은 /proc의 UNIX 8th Edition(V8) 버전을 구현했습니다.그는 1984년 6월에 USENIX에서 "Processes as Files"라는 제목의 논문을 발표했습니다.procfs 설계는 프로세스 트레이스에 사용되는 ptrace 시스템콜을 대체하는 것을 목적으로 하고 있습니다.상세한 것에 대하여는, proc(4)의 메뉴얼 페이지를 참조해 주세요.

SVR4

Roger FaulknerRon Gomes는 V8/procSVR4로 포팅하여 1991년 1월 USENIX에서 "The Process File System and Process Model in UNIX System V"라는 논문을 발표했습니다.이러한 종류의 procfs는 ps의 작성을 지원했지만 파일에는 read(), write()ioctl() 함수로만 액세스할 수 있었습니다.1995년부터 1996년 사이에 Roger Faulkner는 Solaris-2.6용 procfs-2 인터페이스를 만들었습니다.이 인터페이스는 서브 디렉토리가 있는 구조화된 /proc 파일시스템을 제공합니다.

플랜 9

Plan 9는 프로세스 파일 시스템을 구현했지만 V8보다 더 발전했습니다.V8의 프로세스 파일 시스템은 프로세스당 하나의 파일을 구현했습니다.Plan 9는 이러한 기능을 제공하기 위해 개별 파일의 계층을 만들고 /proc를 파일 시스템의 실제 부분으로 만들었습니다.

4.4BSD

4.4BSD는 다음과 같은 구현을 복제했습니다. /[citation needed]proc를 참조하십시오.2011년 2월 현재 procfs는 FreeBSD에서 [3]점차 폐지되고 있으며 프로세스 관련 정보에 sysctl을 대신 사용하고 있습니다.2015년 5월에 출시된 OpenBSD 버전 5.7에서는 "항상 레이스 조건에 시달려 현재는 사용되지 않는다"[4]는 이유로 삭제되었습니다.macOS는 procfs를 구현하지 않았으며 사용자 공간 프로그램은 프로세스 [2]데이터를 위해 sysctl 인터페이스를 사용해야 합니다.

Linux 사용자 공간 프로그램과 바이너리 호환성을 제공하려면 FreeBSD 커널은 Linux procfs와 [5]유사한 linprocfs도 제공합니다.

솔라리스

Solaris의 /proc는 처음부터 사용할 수 있었습니다.Solaris 2.6은 1996년에 Roger Faulkner에서 procfs2를 도입했습니다.

리눅스

Linux는 1992년 9월 v0.97.3에서 /proc 파일 시스템을 처음 추가하였고 1992년 12월 v0.98.6에서 프로세스와 관련이 없는 데이터로 확장하기 시작했습니다.

2020년 현재 Linux 구현에서는 실행 중인 각 프로세스의 디렉토리가 /proc/PID라는 이름의 디렉토리에 포함되어 있습니다.여기서 PID는 프로세스 번호입니다.각 디렉토리에는, 다음의 1개의 프로세스에 관한 정보가 격납되어 있습니다.

  • /proc/PID/cmdline.처음 프로세스를 시작한 명령어.
  • /proc/PID/cwd. 프로세스의 현재 작업 디렉토리에 대한 심볼 링크입니다.
  • /proc/PID/environment에는 프로세스에 영향을 주는 환경변수의 이름과 값이 포함되어 있습니다.
  • /proc/PID/exe는 원래 실행 파일에 대한 심볼 링크입니다(원래 실행 파일이 삭제 또는 교체된 후에도 프로세스가 계속 실행될 수 있습니다).
  • /proc/PID/fd: 열려 있는 각 파일 기술자의 심볼릭링크가 격납되어 있는 디렉토리.
  • /proc/PID/fdinfo: 열려 있는 각 파일 기술자의 위치와 플래그를 기술하는 엔트리를 포함하는 디렉토리.
  • /proc/PID/maps: 매핑된 파일 및 블록(히프 및 스택 등)에 대한 정보를 포함하는 텍스트 파일입니다.
  • 프로세스의 가상 메모리를 나타내는 바이너리 이미지인 /proc/PID/mem은 ptrace' 처리 프로세스에서만 액세스할 수 있습니다.
  • /proc/PID/root. 프로세스에서 볼 수 있는 루트 경로에 대한 심볼 링크입니다.프로세스가 chroot 감옥에서 실행되지 않는 한 대부분의 프로세스에서 이 링크는 /로의 링크가 됩니다.
  • /proc/PID/status에는 프로세스의 실행 상태 및 메모리 사용량을 포함한 프로세스에 대한 기본 정보가 포함되어 있습니다.
  • /proc/PID/task: 이 프로세스(즉, 부모)에 의해 시작된 태스크에 대한 하드링크를 포함하는 디렉토리입니다.

(사용자는 pgrep, pidof, ps 등의 유틸리티를 사용하여 PID를 얻을 수 있습니다.

달러ls -l /proc/$(pgrep-npython3)/fd)리스트 가장 최근에 시작했다 `python3의 과정 총 0lrwx의 모든 파일 설명자----1baldur baldur 642020-03-18 12:31 0->, /dev/pts/3 lrwx요 1baldur baldur 642020-03-18 12:31 1->, /dev/pts/3 lrwx요 1baldur baldur 642020-03-18 12:31 2->, /dev/pts/3달러 readlink /proc/$(pgrep. -n 비단뱀3) / exe # 가장 최근에 시작된 python3 프로세스를 시작하기 위해 사용되는 목록 실행 파일 /usr/bin/python3.8

)

2.6 커널에서는 /sys 아래에 마운트된 별도의 의사 파일 시스템 sysfs로 이동되었지만 /sys에는 프로세스와 관련되지 않은 시스템 정보도 포함되어 있습니다.

  • sysfs보다 이전이고 전원 관리 상태에 대한 다양한 정보가 포함된 디렉토리 /sysfs/acpi 또는 /sysp/apm 중 하나를 전원 관리 모드에 따라 달라집니다.
  • /syslog/sysloginfo:[6] 메모리플래그먼테이션을 처리하는 버디알고리즘에 관한 정보
  • /proc/bus: PCI/USB같은 컴퓨터상의 다양한 버스를 나타내는 디렉토리가 포함되어 있습니다.이것은 주로 /sys/bus 아래의 sysfs로 대체되어 훨씬 더 많은 정보를 제공합니다.
  • /timeout/fb, 사용 가능한 프레임버퍼 목록
  • /syslog/syslogline, 커널에 전달되는 부팅 옵션 제공
  • /proc/cpuinfo: CPU 벤더(및 CPU 패밀리, CPU를 식별할 수 있는 모델명 및 모델명), 속도(CPU 클럭 속도), 캐시 크기, 형제자매 수, 코어 및 CPU 플래그 의 CPU에 대한 정보를 포함합니다./proc/cpuinfo에는 "bogomips" 이 포함되어 있습니다.이 값은 벤치마크와 같이 CPU 속도의 측정으로 잘못 해석되는 경우가 많지만 실제로는 (최종 사용자에 대한) 합리적인 값은 전혀 측정되지 않습니다.커널 타이머 교정의 부작용으로 발생하며 동일한 클럭 속도에서도 CPU 유형에 따라 값이 크게 달라집니다.
$ cat / proc / cpuinfo processor : 0 vendor_id : 인증AMD CPU 패밀리: 16 모델명: 6 모델명: AMD Athlon(tm) II X2 270 프로세서 스테핑: 3 마이크로코드: 0x10000c8 cpu MHz: 2000.000 캐시 크기: 1024KB ... 프로세서: 1 vendor_id: 인증AMD CPU 패밀리: 16 모델: 6 모델명: AMD Athlon(tm) II X2 270 프로세서 스테핑: 3 마이크로코드: 0x10000c8 cpu MHz: 800. 캐시 크기: 1024KB... 

멀티코어 CPU의 경우 /proc/cpuinfo에는 다음 [7]계산이 적용되는 "siblings" 및 "cpu cores" 필드가 포함됩니다.

"소요" = (CPU 패키지당 HT) * (CPU 패키지당 코어 수) "CPU 코어 수" = (CPU 패키지당 코어 수)

CPU 패키지는 복수의 코어를 가질 수 있는 물리 CPU(1개의 싱글 코어, 2개의 듀얼 코어, 4개의 쿼드 코어)를 의미합니다.이를 통해 하이퍼스레딩과 듀얼코어를 구별할 수 있습니다.즉, CPU 패키지당 하이퍼스레드 수는 형제/CPU 코어로 계산할 수 있습니다.CPU 패키지의 두 값이 동일한 경우 하이퍼스레딩은 [8]지원되지 않습니다.예를 들어 형제=2 및 "cpu cores"=2가 있는 CPU 패키지는 듀얼 코어 CPU이지만 하이퍼스레딩을 지원하지 않습니다.

  • /syslog/syslog, 사용 가능한 암호화 모듈 목록
  • /proc/devices: 디바이스 ID별로 정렬된 문자 및 블록 디바이스 목록., /dev 이름의 주요 부분도 제공합니다.
  • /diskstats, 각 논리 디스크 디바이스에 대한 정보(디바이스 번호 포함)를 제공합니다.
  • /timeout/filesystems: 목록 작성 시 커널에서 지원되는 파일 시스템 목록
  • /syslog/interrupts, /syslog/iomem, /syslog/ioports디렉토리 /syslog/irq를 사용하여 다양한 시스템리소스를 사용하는 디바이스에 대한 상세 정보를 제공합니다.
  • /syslog/kmsg, 커널에서[9] 출력되는 메시지 보유
  • /meminfo: 커널이 메모리를 관리하는 방법에 대한 요약을 포함합니다.
  • /filename/filename은 /filename에서 가장 중요한 파일 중 하나이며 현재 로드된 커널 모듈의 목록이 포함되어 있습니다.의존관계를 나타내는 지표(항상 완전히 올바른 것은 아닙니다)가 있습니다.
  • /syslog/syslog는 현재 마운트된 장치와 마운트 지점(및 사용 중인 파일 시스템 및 사용 중인 마운트 옵션)의 목록을 포함하는 자체/sysmlink입니다.
  • /proc/net/: 네트워크 스택, 특히 /proc/net/nf_conntrack에 대한 유용한 정보를 포함하는 디렉토리입니다(특히 iptables FORWARD를 사용하여 네트워크 접속을 리다이렉트 할 때 라우팅 추적에 도움이 됩니다).
  • /dev/partitions, 디바이스 목록, 커널이 기존 파티션으로 식별한 크기 및 /dev 이름
  • /proc/scsi: SCSI 또는 RAID 컨트롤러를 통해 연결된 모든 디바이스에 대한 정보를 제공합니다.
  • /proc/self(즉, /proc/PID/ 여기서 PID는 현재 프로세스의 프로세스)에 대한 심볼 링크입니다.
  • /proc/slabinfo, Linux 커널에서 자주 사용되는 개체의 캐시 통계 목록
  • /swaps/swaps, 활성 스왑 파티션 목록, 다양한 크기와 우선순위
  • /proc/sys에서 동적으로 구성 가능한 커널 옵션에 액세스합니다./proc/sys 아래에는 읽기 및 쓰기 가능한 가상 파일이 포함된 커널 영역을 나타내는 디렉토리가 표시됩니다.
    예를 들어 방화벽 또는 터널 라우팅에 필요하기 때문에 일반적으로 참조되는 가상 파일은 /proc/sys/net/ipv4/ip_forward입니다.이 파일에는 '1' 또는 '0'이 포함되어 있습니다.이것이 1이면 IPv4 스택은 로컬호스트에 대해서 의도되지 않은 패킷을 전송 합니다.이것이 0이면 그렇지 않습니다.
  • /proc/sysvipc. 메모리 공유 및 프로세스통신(IPC) 정보를 포함합니다.
  • /syslog/ttty: 현재 단말기에 대한 정보를 포함합니다./syslog/ttty/driver는 사용 가능한 다양한 유형의 tty 목록으로 보입니다[original research?].각각은 각 유형의 tty 목록입니다.
  • /syslog/syslog - 부팅 후 커널이 실행되어 아이돌모드로 소비된 시간(모두 초단위)
  • /proc/version - Linux 커널 버전, 배포 번호, gcc 버전 번호(커널 구축에 사용) 및 현재 실행 중인 커널 버전과 관련된 기타 관련 정보를 포함합니다.
  • 기타 파일은 다양한 하드웨어, 모듈 구성 및 커널 변경에 따라 달라집니다.

Linux에서 /proc를 사용하는 기본 유틸리티는 procps(/proc processes) 패키지로 제공되며 마운트된 /proc와 함께만 작동합니다.

시스템

Cygwin은 기본적으로 Linux procfs와 동일한 procfs를 구현했습니다.

레퍼런스

  1. ^ a b Nemeth, Evi; Snyder, Garth; Hein, Trent R.; Whaley, Ben (14 July 2010). UNIX and Linux System Administration Handbook. Pearson Education. p. 136. ISBN 978-0-13-211736-4.
  2. ^ a b Amit Singh (2003). "/proc on Mac OS X". Mac OS X Internals: The Book. Archived from the original on 4 May 2012. Retrieved 10 July 2021.
  3. ^ "Why is procfs deprecated in favor of procstat?". freebsd.org.
  4. ^ "Detailed changes between OpenBSD 5.6 and 5.7". openbsd.org.
  5. ^ "linprocfs(5)". FreeBSD Manual Pages. The FreeBSD Project. 13 November 2019. Retrieved 12 June 2021.
  6. ^ "3.2.2. /proc/buddyinfo". centos.org. Archived from the original on 2 September 2013. Retrieved 23 May 2011.
  7. ^ Baron, Jason. "HT vs. dual-core".
  8. ^ "Understanding Linux /proc/cpuinfo". richweb.com. Archived from the original on 3 April 2012. Retrieved 21 April 2015.
  9. ^ Nguyen, Binh (30 July 2004). "Linux Filesystem Hierarchy". Binh Nguyen. p. 63. Retrieved 18 July 2016. /proc/kmsg[:] Messages output by the kernel. These are also routed to syslog.

외부 링크