Sysfs
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Sysfs는 리눅스 커널의 가상 파일 시스템으로, 장치 트리에 표현되는 정보를 사용자 공간으로 내보내는 역할을 한다. 2.5 버전 개발 과정에서 드라이버 장치 관계를 통일적으로 표현하고, 핫 플러그 구조를 지원하며, procfs의 정보 과부하 문제를 해결하기 위해 개발되었다. sysfs는 `/sys` 마운트 지점 아래에 마운트되며, PCI, USB, SCSI, S/390, ACPI 등 다양한 버스의 장치 정보를 제공한다. Sysfs는 장치 드라이버 및 장치의 속성을 파일 형태로 제공하여, udev나 HAL과 같은 유틸리티가 하드웨어 및 드라이버 정보에 접근하고 장치를 구성하는 데 사용된다.
더 읽어볼만한 페이지
- 리눅스 커널 인터페이스 - 장치 파일
유닉스 및 유닉스 계열 운영 체제에서 하드웨어 장치 접근을 위해 사용되는 특수 파일 시스템 객체인 장치 파일은 문자 장치와 블록 장치로 나뉘며 주 번호와 부 번호로 식별되고, 물리 장치 외에 가상 장치도 존재하며 다른 운영 체제에서도 유사한 개념으로 특정 포트와 장치에 접근하는 데 사용된다. - 리눅스 커널 인터페이스 - 리눅스 기본 규격
리눅스 기본 규격(LSB)은 리눅스 배포판 간 호환성 증진을 목표로 하는 표준으로, 다양한 발전을 거쳤으나 비판과 제한적인 적용 사례가 있다. - 리눅스 커널 특징 - 커널 기반 가상 머신
커널 기반 가상 머신(KVM)은 리눅스 커널의 가상화 확장 기능으로, CPU와 메모리 가상화를 지원하며 QEMU와 함께 완전한 가상화 솔루션을 구성하고 다양한 관리 도구를 제공한다. - 리눅스 커널 특징 - AppArmor
AppArmor는 리눅스 보안 모듈로, 프로그램의 정상적인 동작을 정의하는 프로필을 통해 비정상적인 행위를 차단하며 SELinux의 대안으로 제시되었으나 보안 취약점, 성능, 설정, 호환성 등에 대한 논란도 있다. - 파일 시스템 - 부트 섹터
부트 섹터는 시스템 부팅 코드를 담은 저장 매체의 특정 영역으로, 볼륨 부트 레코드(VBR)와 마스터 부트 레코드(MBR)로 나뉘며, BIOS는 이를 실행하고 UEFI는 부트로더를 직접 로드하지만 바이러스 공격에 취약하다. - 파일 시스템 - ZFS
ZFS는 Jeff Bonwick 등이 설계하고 구현한 파일 시스템으로, 데이터 무결성, 스냅샷, RAID-Z 등의 기능을 제공하며, 썬 마이크로시스템즈에서 개발되어 OpenZFS 프로젝트를 통해 다양한 운영체제에서 사용된다.
Sysfs | |
---|---|
설명 | |
유형 | 가상 파일 시스템 |
운영체제 | 리눅스 커널 |
개발자 | 패트릭 모셸 마이크 머피 |
첫 번째 출시 | 2.6 리눅스 커널 |
라이선스 | GNU 일반 공중 사용 허가서 버전 2 |
세부 정보 | |
용도 | 커널 객체 내보내기 |
기반 | 램 파일 시스템 |
관련 도구 | sysctl |
2. 역사
리눅스 커널 버전 2.5 개발 과정에서, 기존 procfs의 한계를 극복하고 장치 트리 정보를 효과적으로 표현하기 위한 목적으로 sysfs가 도입되었다.[8][9] 초기에는 ddfs(Device Driver Filesystem), driverfs 등의 이름으로 불렸으나, 특정 하위 시스템에 국한되지 않는 범용성을 고려하여 sysfs로 최종 명명되었다.[10][11] 패트릭 모첼(Patrick Mochel)이 처음 개발했으며, 이후 마니시 소니(Maneesh Soni)가 대규모 시스템에서의 메모리 사용량을 개선하기 위한 패치를 추가하는 등 발전에 기여했다.
sysfs는 일반적으로 `/sys` 디렉토리에 마운트된다. 시스템 초기화 시 자동으로 마운트되지 않는 경우, `mount` 명령어를 사용하여 수동으로 마운트할 수 있다: `mount -t sysfs sysfs /sys`.[1]
2. 1. 초기 개발 배경
리눅스 커널 버전 2.5 개발 중, 이전 버전 2.4의 몇 가지 단점을 해결하기 위해 리눅스 드라이버 모델이 도입되었다. 버전 2.4에는 다음과 같은 문제점들이 있었다:- 드라이버와 장치 간의 관계를 통일된 방식으로 표현하는 방법이 부재했다.
- 하드웨어를 시스템 실행 중에 교체할 수 있는 핫플러그를 위한 일반적인 구조가 없었다.
- procfs 파일 시스템에 프로세스와 직접 관련 없는 너무 많은 정보가 포함되어 혼란을 야기했다.
이러한 문제점을 해결하고 장치 트리에 표현된 정보를 외부에 효과적으로 보여주기 위해 sysfs가 설계되었다. 이는 procfs에 더 이상 과도한 정보를 포함시키지 않으려는 목적도 있었다. sysfs는 패트릭 모첼(Patrick Mochel)이 처음 작성하였다.[8][9]
sysfs는 원래 ramfs를 기반으로 하는 인 메모리 파일 시스템으로 구현되었다. 초기에는 새로운 드라이버 모델의 디버깅을 돕기 위해 ddfs(Device Driver Filesystem)라는 이름으로 만들어졌다. 이는 장치 트리를 내보내기 위해 procfs를 사용하던 기존 방식 대신 리누스 토르발스의 요청에 따라 새로운 파일 시스템으로 개발된 것이었다. 이후 리눅스 커널 2.5.1 버전에 새로운 드라이버 모델이 통합될 즈음, 좀 더 설명적인 이름인 driverfs로 변경되었다.
버전 2.5 개발 과정에서, 장치 모델과 driverfs의 하부 구조 기능들이 다른 하위 시스템에도 유용하다는 점이 드러났다. 이에 따라 중앙 집중적인 객체 관리를 위해 kobjects가 개발되었다. 특정 하위 시스템에 국한되지 않는다는 점을 나타내기 위해 driverfs는 최종적으로 sysfs라는 이름으로 변경되었다.[10][11]
이후 마니시 소니(Maneesh Soni)는 대규모 시스템에서 메모리 사용량을 줄이기 위해 sysfs 백킹 스토어(backing store) 패치를 작성하여 sysfs 개선에 기여하였다.
3. 지원 버스
Sysfs는 시스템에 연결된 다양한 하드웨어 버스에 대한 정보를 사용자 공간에 일관된 방식으로 제공한다. 이를 통해 리눅스 커널은 연결된 장치들을 효율적으로 관리하고 사용자 애플리케이션은 장치 정보에 쉽게 접근할 수 있다. 주요 지원 버스에 대한 자세한 내용은 아래 하위 섹션에서 다룬다.
3. 1. PCI
PCI 및 PCI Express 장치에 대한 정보를 내보낸다.3. 2. USB
USB 장치에 대한 정보를 내보낸다.3. 3. SCSI
USB, SATA 및 NVMe 인터페이스를 포함한 대용량 저장 장치 장치에 대한 정보를 내보낸다.[7]3. 4. S/390 버스
S/390 아키텍처는 다른 곳에서는 찾을 수 없는 장치를 포함하고 있어서 다음과 같은 특수한 버스가 만들어졌다:- '''css''': 하위 채널들을 포함한다. (현재 제공되는 유일한 드라이버는 입출력 하위 채널을 위해 존재함)
- '''ccw''': CCW(Channel Command Word)로 구동되는 채널 부착 장치들을 포함한다.
- '''ccwgroup''': 사용자가 만들어 ccw 장치를 이루는 인공 장치들. 2.4 chandev 기능 일부를 대체한다.
- '''iucv''': VM의 IUCV 인터페이스를 사용하는 netiucv 장치와 같은 인공 장치들.
3. 5. ACPI
ACPI 장치에 대한 정보를 내보낸다.4. 기술적 개요
리눅스 커널 버전 2.5 개발 과정에서 기존 버전 2.4의 단점을 보완하기 위해 리눅스 드라이버 모델이 도입되었다. 버전 2.4의 주요 문제점은 다음과 같았다.[8][9][3][4]
- 드라이버와 장치 간의 관계를 통일된 방식으로 표현하는 방법이 없었다.
- 포괄적인 핫플러그 구조가 없었다.
- procfs에 프로세스와 직접 관련 없는 정보가 너무 많이 포함되어 있었다.
sysfs는 이러한 문제점을 해결하기 위해 등장했으며, 장치 트리에 표현된 정보를 사용자 공간으로 내보내고 procfs의 부담을 덜어주는 역할을 하도록 설계되었다. 초기 개발은 패트릭 모첼(Patrick Mochel)이 주도했다.[8][9][3][4] 이후 마니시 소니(Maneesh Soni)는 대규모 시스템에서 메모리 사용량을 줄이기 위한 sysfs 백킹 스토어(backing store) 패치를 개발했다.
sysfs는 본래 ramfs를 기반으로 하는 인-메모리 파일 시스템이다. ramfs는 리눅스 커널 2.4.0 안정화 시점에 개발되었으며, 당시 새로운 VFS(가상 파일 시스템) 레이어를 이용하여 간단한 파일 시스템을 쉽게 구현할 수 있음을 보여주는 사례였다. sysfs는 처음에는 'ddfs'(Device Driver Filesystem)라는 이름으로, 새로운 드라이버 모델을 디버깅할 목적으로 만들어졌다. 기존에는 procfs를 통해 디버깅이 이루어졌으나, 리누스 토르발스의 요청에 따라 ramfs 기반의 새로운 파일 시스템으로 개발 방향이 바뀌었다. 커널 버전 2.5.1에 드라이버 모델이 병합될 즈음에는 'driverfs'로 이름이 변경되었다.[10][11][5][6]
이후 2.5 개발 과정에서 드라이버 모델과 driverfs의 기능들이 다른 하위 시스템에도 유용하다는 것이 밝혀졌다. 중앙 집중적인 객체 관리 메커니즘을 제공하기 위해 kobjects가 개발되었고, driverfs는 특정 하위 시스템에 얽매이지 않는다는 점을 나타내기 위해 최종적으로 'sysfs'라는 이름으로 변경되었다.
sysfs는 일반적으로 `/sys` 디렉토리에 마운트된다. 시스템 부팅 시 자동으로 마운트되지 않는 경우, `mount -t sysfs sysfs /sys` 명령어를 사용하여 수동으로 마운트할 수 있다.[1]
sysfs 내부에는 드라이버 모델 트리에 추가된 각 객체(장치, 드라이버, 클래스 등)에 해당하는 디렉토리가 생성된다. 주요 디렉토리 구조는 다음과 같다.
- `/sys/devices/`: 장치의 물리적 배치와 부모-자식 관계를 반영하는 하위 디렉토리 구조를 가진다.
- `/sys/bus/`: 장치가 연결된 버스 정보를 심볼릭 링크 형태로 보여준다. 각 버스 유형별 디렉토리 아래에 해당 버스에 연결된 장치들의 심볼릭 링크가 위치한다.
- `/sys/block/`: 블록 장치 관련 정보를 포함한다.
- `/sys/class/`: 네트워크 인터페이스, 입력 장치 등 특정 클래스별로 장치를 분류하여 보여준다.
각 장치나 드라이버 디렉토리 내부에는 '속성(attribute)' 파일들이 존재한다. 이 파일들은 일반적으로 하나의 값만을 포함하며, 해당 값을 읽거나 새로운 값을 설정하는 데 사용된다. 이는 복잡한 파싱이 필요했던 procfs 내의 일부 파일들과 대조되는 단순한 구조이다. 속성들은 관련된 장치나 드라이버의 하위 디렉토리에 위치하며, '속성 그룹(attribute group)' 기능을 통해 관련된 속성들을 모아 별도의 하위 디렉토리로 구성할 수도 있다.
5. Sysfs와 사용자 공간
sysfs는 udev나 HAL과 같은 여러 사용자 공간 유틸리티들이 하드웨어 및 관련 드라이버 정보에 접근하는 데 사용된다. 과거에는 procfs를 통해 얻은 정보에 접근하기 위해 스크립트를 작성했으며, 일부 스크립트는 장치 드라이버나 장치를 속성을 통해 설정하기도 했다.
참조
[1]
웹사이트
sysfs - _The_ filesystem for exporting kernel objects
https://www.kernel.o[...]
kernel.org
[2]
웹사이트
sysctl man page
https://www.freebsd.[...]
FreeBSD
[3]
웹사이트
Linux v2.5.44 - and offline for a week
https://lkml.org/lkm[...]
2002-10-18
[4]
웹사이트
Linux v2.5.46
https://lkml.org/lkm[...]
2002-11-04
[5]
웹사이트
"[RFC] New Driver Model for 2.5"
https://lkml.org/lkm[...]
2001-10-17
[6]
웹사이트
Re: [PATCH] 2.5 PROPOSAL: Replacement for current /proc of shit.
https://lkml.org/lkm[...]
2001-11-01
[7]
웹사이트
SCSI Interfaces Guide — The Linux Kernel documentation
https://www.kernel.o[...]
2020-11-13
[8]
웹인용
Linux v2.5.44 - and offline for a week
https://lkml.org/lkm[...]
2002-10-18
[9]
웹인용
Linux v2.5.46
https://lkml.org/lkm[...]
2002-11-04
[10]
웹인용
"[RFC] New Driver Model for 2.5"
https://lkml.org/lkm[...]
2001-10-17
[11]
웹인용
Re: [PATCH] 2.5 PROPOSAL: Replacement for current /proc of shit.
https://lkml.org/lkm[...]
2001-11-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com