procfs와 sysfs의 차이점은 무엇입니까?


71

procfs와 sysfs의 차이점은 무엇입니까? 왜 파일 시스템으로 만들어 집니까? 내가 이해하는 것처럼 proc은 시스템에서 실행중인 프로세스에 관한 즉각적인 정보를 저장하는 것입니다.

답변:


61

procfs와 sysfs의 차이점은 무엇입니까?

proc오래된 규칙입니다. 규칙과 구조가없는 정도입니다. 그리고 어느 시점 proc에서 조금 혼란스럽고 새로운 방법이 필요하다고 결정되었습니다.

그런 다음 sysfs만들어졌으며 추가 된 새 항목 sysfs은 장치 정보와 같은 방식 으로 입력되었습니다 .

어떤 의미에서 그들은 똑같이하지만 sysfs조금 더 구조적입니다.

왜 파일 시스템으로 만들어 집니까?

유닉스 철학에 따르면 모든 것이 "파일"이므로 파일처럼 작동하도록 만들어졌습니다.

내가 이해하는 것처럼 proc은 시스템에서 실행중인 프로세스에 관한 즉각적인 정보를 저장하는 것입니다.

그 부분은 항상 거기에 있었고 아마도 결코 들어 가지 않을 것입니다 sysfs.

그러나에서 찾을 수없는 이전 항목이 더 많이 있습니다 proc.


2
답변 주셔서 감사합니다. 그러나 왜 cpuinfo와 meminfo 같은 것들이 여전히 procfs에서 유지됩니까? 왜 sysfs로 옮길 수 없습니까?
Sen

5
나는 그들이 sysfs에 새로운 것을 넣고, 이전 버전과의 호환성을 유지하기 위해 오래된 것을 그대로 둡니다. 절차에있는 것들에 의존하는 많은 것들이 있습니다.
Johan

74

처음에 (유닉스로 돌아가서), 시스템에서 실행중인 프로세스에 대해 발견 한 프로그램은 커널 메모리에서 프로세스 구조를 직접 읽거나 (/ dev / mem을 열고 원시 데이터를 직접 해석하는) 방법이었습니다. 이것이 바로 첫 번째 'ps'명령의 작동 방식입니다. 시간이 지남에 따라 일부 정보는 시스템 호출을 통해 제공되었습니다.

그러나 / dev / mem을 통해 시스템 데이터를 사용자 공간에 직접 노출시키는 것은 좋지 않은 형식이며, 새로운 프로세스 데이터를 내보낼 때마다 새로운 시스템 호출을 지속적으로 생성하는 것이 불쾌하므로 새로운 방법이 만들어졌습니다. 사용자 공간 응용 프로그램의 구조화 된 데이터에 액세스하여 프로세스 속성을 찾습니다. 이것은 / proc 파일 시스템이었습니다. / proc를 사용하면 커널의 기본 데이터 구조가 변경된 경우에도 인터페이스와 구조 (디렉토리 및 파일)를 동일하게 유지할 수 있습니다. 이것은 이전 시스템보다 훨씬 덜 취약했으며 확장 성이 더 좋습니다.

/ proc 파일 시스템은 원래 'ps', 'top', 'free'및 기타 몇 가지 시스템 유틸리티에 필요한 프로세스 정보와 몇 가지 주요 시스템 속성을 게시하도록 설계되었습니다. 그러나 사용하기 쉬우므로 (커널 측과 사용자 영역 측 모두) 시스템 정보의 전체 범위에 대한 투기장이되었습니다. 또한 읽기 / 쓰기 파일을 얻기 시작하여 설정을 조정하고 커널 또는 다양한 하위 시스템의 작동을 제어하는 ​​데 사용되었습니다. 그러나 제어 인터페이스를 구현하는 방법론은 특별했고 / proc는 곧 뒤엉킨 혼란에 빠졌다.

sysfs (또는 / sys 파일 시스템)는이 혼란에 구조를 추가하고 시스템 정보 및 제어점 (설정 가능한 시스템 및 드라이버 속성)을 커널의 사용자 공간에 노출시키는 균일 한 방법을 제공하도록 설계되었습니다. 이제 커널의 드라이버 프레임 워크는 드라이버 유형과 데이터 구조의 값을 기반으로 드라이버가 등록 될 때 / sys 아래에 디렉토리를 자동으로 만듭니다. 즉, 특정 유형의 드라이버는 모두 sysfs를 통해 동일한 요소가 노출됩니다.

많은 레거시 시스템 정보 및 제어 지점은 여전히 ​​/ proc에서 액세스 할 수 있지만 모든 새 버스 및 드라이버는 sysfs를 통해 정보 및 제어 지점을 노출해야합니다.


8
사용하기에 "잘못된 형식" /dev/mem이고 /dev/kmem루트 액세스가 필요하기 때문에이를 사용하는 응용 프로그램을 setuid해야합니다.
Barmar

2
많은 유닉스 시스템과 리눅스에서 이러한 장치 파일은 그룹이 그룹 소유하고 SGID kmem와 같은 도구를 사용 합니다. pskmem
카운터 모드

2
사실, 사용자 모드 프로세스는 단순히 파일을 읽고 RAM을 읽음으로써 모든 정보를 가져올 수 있기 때문에 커널 에 직접 액세스 /dev/mem하거나 /dev/kmem커널에 대한 이전 방법 이 더 빠릅니다 mmap. /proc파일 시스템 에서 정보를 얻으 려면 하나의 시스템 콜이 필요 open하고 다른 시스템 콜이 필요 read하므로 속도가 훨씬 느립니다. 그러나 /proc메모리를 읽기 위해 커널 특정 해킹이 필요하지 않으며 훨씬 덜 민감한 데이터를 사용자 모드 프로세스에 노출합니다.
Mikko Rantalainen

10

procfs는 임의를 허용 file_operations하고 sysfs는 더 제한적입니다.


3

sysfs는 2.6 커널 릴리스주기 동안 생성 된 가상 파일 시스템으로, procfs가 이러한 유형의 정보를 제대로 수행하지 않았으므로 장치 정보를 표시합니다.

메모리 등은 해당 유형의 정보를 보여 주려고 의도되지 않았기 때문에 sysfs로 포팅되지 않았으므로 포팅되지 않을 것입니다.


메모리 등이 sysfs로 포팅되지 않았습니다 포팅 이란 무엇을 의미합니까? 왜 그런 유형의 정보를 보여주지 않았습니까? 저에게 설명해 주시겠습니까?
Sen

포팅하여 나는 메모리 등이 sysfs로 이동하는지에 대한 귀하의 질문에 대한 답변 인 이동을 의미했습니다. 그리고 그것은 단지 procfs가 잘하지 않았던 것이므로 장치 정보를 보여주기위한 것입니다. procfs는 여전히 다른 유형의 정보에 탁월합니다.
kemra102

1

또한 여기에 추가하고 싶습니다 ... / proc이 이전 버전이므로 해당 기간의 커널 장치 정보가 포함되어 있습니다. 조금 구조적이고 접근하기 쉬운 ..

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.