유토피아의 구성 ¶
- 리눅스 2.6
- sysfs
- 리눅스 2.6에서는 하드웨어의 정보를 일반화시켜서 볼 수 있는 sysfs가 추가되었다.
- proc에서 subsystem마다 각기 따로 관리하던 정보를 단일하고 일반화된 방식으로 접근이 가능하다.
- 현재 시스템에서 동작되고 있는 장치들을 물리적, 또는 논리적인 구조로 원하는 방향에서 찾아 볼수 있다.
- 아래에서 시스템에서 동작하고 있는 ide인터페이스 장치들을 물리적인 구조및 논리적인 구조로 보여주고 있다.
- 또한 서로의 정보가 심볼릭 링크가 되어 있어서 관련 정보를 쉽게 얻을 수 있다.
ganadist@ganadist sys $ tree -d devices/pci0000\:00/0000\:00\:09.0
devices/pci0000:00/0000:00:09.0
|-- ide0
| |-- 0.0
| | |-- block -> ../../../../../block/hda
| | `-- power
| |-- 0.1
| | |-- block -> ../../../../../block/hdb
| | `-- power
| `-- power
`-- power
ganadist@ganadist sys $ tree -d block/hd*
block/hda
|-- device -> ../../devices/pci0000:00/0000:00:09.0/ide0/0.0
|-- hda1
|-- hda10
|-- hda11
|-- hda12
|-- hda2
|-- hda5
|-- hda6
|-- hda7
|-- hda8
|-- hda9
`-- queue
`-- iosched
block/hdb
|-- device -> ../../devices/pci0000:00/0000:00:09.0/ide0/0.1
|-- hdb1
|-- hdb2
|-- hdb5
|-- hdb6
|-- hdb7
`-- queue
`-- iosched
- LinuxHotplug
- 커널 2.4에서 일부 시스템(usb, ieee1394, pci)에서만 적용되던 LinuxHotplug가 subsystem 전체(block, net, scsi_host, scsi_device, input, etc)에 적용되게 되었다.
- hotplug 이벤트가 발생할 때 sysfs의 경로를 가리켜서 새로 연결된 장치의 정보를 참조할 수 있도록 한다.
- ProjectUtopia에서는 3가지의 hotplug agent가 실행된다.
- linux-hotplug agent : 기존의 리눅스 2.4에서 쓰이던 hotplug agent이다. 필요한 커널 모듈을 커널에 적재하며 필요한 쉘 스크립트를 실행한다.
- udev agent : 새로 연결된 장치에 접근할 수 있는 장치노드를 사용자 설정에 따라 만든다.
- hal agent : 새로 연결된 장치에 대한 정보를 dbus를 통해 시스템 전체에 알린다.
D-BUS Message Bus System
- 데스크탑 프로그램들을 위한 IPC(interprocess communication) 시스템
- dbus-daemon은 -system 모드와 -session 모드로 동작한다.
- system모드로 시작한 데몬은 하드웨어 추가/제거 또는 프린트 큐 상태 같은 시스템 전체 메세지를 전달하며 모든 사용자가 접근 가능하다.
- session모드로 시작한 데몬은 세션 데몬의 주소를 반환하며 그 세션에서 실행되는 프로그램 사이의 IPC메세지를 전달 할 수 있다.
- c, c++, c#, java, python 등의 여러가지 언어 바인딩이 제공되어 진다.
Hardware Abstraction Layer
- 다양한 OS상에서 각종 하드웨어의 상태를 동일한 인터페이스로 접근 가능하게 하는 Framework
- dbus를 이용하여 현재 하드웨어의 연결,제거 또는 상태에 대한 정보를 얻어낼 수 있다.
- 현재는 hal agent가 리눅스 2.6에서만 구현되어 있다. hal agent만 구현되면 다른 OS에서도 동작이 가능하다.
- Gnome Volume Manager
- HAL에서 전달된 메세지를 파악해서 시스템에 연결된 디스크 장치를 자동으로 마운트, 또는 필요한 프로그램을 실행한다.
|
|