답변:
procfs와 sysfs의 차이점은 무엇입니까?
proc
오래된 규칙입니다. 규칙과 구조가없는 정도입니다. 그리고 어느 시점 proc
에서 조금 혼란스럽고 새로운 방법이 필요하다고 결정되었습니다.
그런 다음 sysfs
만들어졌으며 추가 된 새 항목 sysfs
은 장치 정보와 같은 방식 으로 입력되었습니다 .
어떤 의미에서 그들은 똑같이하지만 sysfs
조금 더 구조적입니다.
왜 파일 시스템으로 만들어 집니까?
유닉스 철학에 따르면 모든 것이 "파일"이므로 파일처럼 작동하도록 만들어졌습니다.
내가 이해하는 것처럼 proc은 시스템에서 실행중인 프로세스에 관한 즉각적인 정보를 저장하는 것입니다.
그 부분은 항상 거기에 있었고 아마도 결코 들어 가지 않을 것입니다 sysfs
.
그러나에서 찾을 수없는 이전 항목이 더 많이 있습니다 proc
.
처음에 (유닉스로 돌아가서), 시스템에서 실행중인 프로세스에 대해 발견 한 프로그램은 커널 메모리에서 프로세스 구조를 직접 읽거나 (/ dev / mem을 열고 원시 데이터를 직접 해석하는) 방법이었습니다. 이것이 바로 첫 번째 'ps'명령의 작동 방식입니다. 시간이 지남에 따라 일부 정보는 시스템 호출을 통해 제공되었습니다.
그러나 / dev / mem을 통해 시스템 데이터를 사용자 공간에 직접 노출시키는 것은 좋지 않은 형식이며, 새로운 프로세스 데이터를 내보낼 때마다 새로운 시스템 호출을 지속적으로 생성하는 것이 불쾌하므로 새로운 방법이 만들어졌습니다. 사용자 공간 응용 프로그램의 구조화 된 데이터에 액세스하여 프로세스 속성을 찾습니다. 이것은 / proc 파일 시스템이었습니다. / proc를 사용하면 커널의 기본 데이터 구조가 변경된 경우에도 인터페이스와 구조 (디렉토리 및 파일)를 동일하게 유지할 수 있습니다. 이것은 이전 시스템보다 훨씬 덜 취약했으며 확장 성이 더 좋습니다.
/ proc 파일 시스템은 원래 'ps', 'top', 'free'및 기타 몇 가지 시스템 유틸리티에 필요한 프로세스 정보와 몇 가지 주요 시스템 속성을 게시하도록 설계되었습니다. 그러나 사용하기 쉬우므로 (커널 측과 사용자 영역 측 모두) 시스템 정보의 전체 범위에 대한 투기장이되었습니다. 또한 읽기 / 쓰기 파일을 얻기 시작하여 설정을 조정하고 커널 또는 다양한 하위 시스템의 작동을 제어하는 데 사용되었습니다. 그러나 제어 인터페이스를 구현하는 방법론은 특별했고 / proc는 곧 뒤엉킨 혼란에 빠졌다.
sysfs (또는 / sys 파일 시스템)는이 혼란에 구조를 추가하고 시스템 정보 및 제어점 (설정 가능한 시스템 및 드라이버 속성)을 커널의 사용자 공간에 노출시키는 균일 한 방법을 제공하도록 설계되었습니다. 이제 커널의 드라이버 프레임 워크는 드라이버 유형과 데이터 구조의 값을 기반으로 드라이버가 등록 될 때 / sys 아래에 디렉토리를 자동으로 만듭니다. 즉, 특정 유형의 드라이버는 모두 sysfs를 통해 동일한 요소가 노출됩니다.
많은 레거시 시스템 정보 및 제어 지점은 여전히 / proc에서 액세스 할 수 있지만 모든 새 버스 및 드라이버는 sysfs를 통해 정보 및 제어 지점을 노출해야합니다.
/dev/mem
이고 /dev/kmem
루트 액세스가 필요하기 때문에이를 사용하는 응용 프로그램을 setuid해야합니다.
kmem
와 같은 도구를 사용 합니다. ps
kmem
/dev/mem
하거나 /dev/kmem
커널에 대한 이전 방법 이 더 빠릅니다 mmap
. /proc
파일 시스템 에서 정보를 얻으 려면 하나의 시스템 콜이 필요 open
하고 다른 시스템 콜이 필요 read
하므로 속도가 훨씬 느립니다. 그러나 /proc
메모리를 읽기 위해 커널 특정 해킹이 필요하지 않으며 훨씬 덜 민감한 데이터를 사용자 모드 프로세스에 노출합니다.
procfs는 임의를 허용 file_operations
하고 sysfs는 더 제한적입니다.
procfs의 항목은 수신 file_operations
예를 들어 모든 파일 기반 시스템 호출에 발생하는 결정 함수 포인터를 포함 구조체, open
, read
, mmap
등, 당신은 그에서 임의의 조치를 취할 수 있습니다.
최소 예 :
sysfs는 다음과 같은 의미에서 더 제한적입니다.
show
하고 store
리눅스를 구현하는 데 사용 open
,을 close
, read
, write
그리고 lseek
당신을 위해. 플랫폼 드라이버에서 sysfs 속성에 파일 작업을 첨부하는 방법 도 참조하십시오 . | 스택 오버플로kobject
sysfs는 2.6 커널 릴리스주기 동안 생성 된 가상 파일 시스템으로, procfs가 이러한 유형의 정보를 제대로 수행하지 않았으므로 장치 정보를 표시합니다.
메모리 등은 해당 유형의 정보를 보여 주려고 의도되지 않았기 때문에 sysfs로 포팅되지 않았으므로 포팅되지 않을 것입니다.