procfs와 sysfs의 차이점은 무엇입니까? 왜 파일 시스템으로 만들어졌나요? 내가 이해한 바로는 proc은 시스템에서 실행 중인 프로세스에 대한 즉각적인 정보를 저장하는 것뿐입니다.
답변1
처음(유닉스 시절)에 프로그램이 시스템에서 실행 중인 프로세스를 발견하는 방식은 커널 메모리에서 직접 프로세스 구조를 읽는 것이었습니다(/dev/mem을 열고 원시 데이터를 직접 해석함). 이것이 첫 번째 "ps" 명령이 작동하는 방식입니다. 시간이 지남에 따라 일부 정보는 시스템 호출을 통해 제공됩니다.
그러나 /dev/mem을 통해 시스템 데이터를 사용자 공간에 직접 노출하는 것은 좋지 않은 형태이며, 새로운 프로세스 데이터를 내보내고 싶을 때마다 새로운 시스템 호출을 계속 생성하는 것도 짜증나는 일이므로 새로운 방법은 사용자 공간 애플리케이션의 구조화된 데이터에 액세스합니다. 프로세스 속성을 이해합니다. 이것은 /proc 파일 시스템입니다. /proc를 사용하면 커널의 기본 데이터 구조가 변경되더라도 인터페이스와 구조(디렉터리 및 파일)가 동일하게 유지될 수 있습니다. 이전 시스템보다 취약성이 훨씬 낮고 확장성이 뛰어납니다.
/proc 파일 시스템은 원래 프로세스 정보와 "ps", "top", "free" 및 기타 시스템 유틸리티에 필요한 일부 주요 시스템 속성을 게시하도록 설계되었습니다. 그러나 사용하기가 매우 쉽기 때문에(커널이나 사용자 공간 측면에서) 전체 시스템에 대한 정보를 수집하는 장이 됩니다. 또한 설정을 조정하고 커널이나 다양한 하위 시스템의 작동을 제어하는 데 사용되는 읽기/쓰기 파일을 획득하기 시작합니다. 그러나 제어 인터페이스가 구현된 방식은 임시적이었고 /proc은 금방 엉망이 되었습니다.
sysfs(또는 /sys 파일 시스템)는 이러한 혼란에 구조를 추가하고 커널에서 사용자 공간으로 시스템 정보와 제어 지점(설정 가능한 시스템 및 드라이버 속성)을 노출하는 통합된 방법을 제공하도록 설계되었습니다. 이제 드라이버를 등록할 때 커널의 드라이버 프레임워크는 드라이버 유형과 해당 데이터 구조의 값을 기반으로 /sys 아래에 디렉터리를 자동으로 생성합니다. 즉, 특정 유형의 드라이버는 모두 sysfs를 통해 노출되는 동일한 요소를 갖습니다.
많은 레거시 시스템 정보와 제어 지점은 여전히 /proc에서 액세스할 수 있지만 모든 새로운 버스와 드라이버는 sysfs를 통해 정보와 제어 지점을 노출해야 합니다.
답변2
procfs와 sysfs의 차이점은 무엇입니까?
proc
오래되었고 규칙과 구조가 거의 없습니다. 어느 시점에서 우리는 이것이 proc
너무 혼란스럽고 새로운 접근 방식이 필요하다는 것을 깨달았습니다.
그런 다음 sysfs
생성되고 sysfs
장치 정보처럼 새로운 것이 추가됩니다.
따라서 어떤 의미에서는 동일한 작업을 수행하지만 sysfs
더 구조화되어 있습니다.
왜 파일 시스템으로 만들어졌나요?
UNIX 철학에서는 모든 것이 "파일"이므로 파일처럼 작동하도록 생성된다고 말합니다.
내가 이해한 바로는 proc은 시스템에서 실행 중인 프로세스에 대한 즉각적인 정보를 저장하는 것뿐입니다.
이러한 부품은 항상 거기에 있었으며 결코 이동하지 않을 수도 있습니다 sysfs
.
하지만 에서 더 proc
오래되고 이동되지 않은 콘텐츠를 찾을 수 있습니다.
답변3
procfs는 무엇이든 허용 file_operations
하지만 sysfs는 더 제한적입니다.
procfs 항목은 , , 등과 같은
file_operations
각 파일 기반 시스템 호출에서 어떤 일이 발생하는지 결정하는 함수 포인터가 포함된 구조를 수신하며 여기에서 임의의 작업을 수행할 수 있습니다.open
read
mmap
최소한의 예:
sysfs는 다음과 같은 방식으로 더욱 제한됩니다:
show
와 두 가지 방법만 구현하면 되며store
Linux는 이 두 가지 방법을 사용하여open
,close
,read
및write
을 구현합니다.lseek
또한보십시오:플랫폼 드라이버의 sysfs 속성에 파일 작업을 어떻게 연결합니까? |스택 오버플로- 긴밀하게 통합됨
kobject
답변4
sysfs는 procfs가 해당 정보를 잘 처리하지 못하기 때문에 장치 정보를 표시하기 위해 2.6 커널 릴리스 주기 동안 생성된 가상 파일 시스템입니다.
메모리 등은 해당 유형의 정보를 표시할 의도가 없었으므로 포팅이 불가능하므로 sysfs로 포팅되지 않았습니다.