Kobject

Β· 863 words Β· 2 minute read

kobjects, ktypes, ksets πŸ”—

λ””λ°”μ΄μŠ€ 트리λ₯Ό μ‚΄νŽ΄λ³΄λ‹€ kobject 에 λŒ€ν•œ λ‚΄μš©μ΄ μ–ΈκΈ‰λ˜κΈ° μ‹œμž‘ν–ˆλ‹€. λ‹¨μˆœν•œ 객체가 μ•„λ‹ˆλΌ νŠΉμˆ˜ν•œ λͺ©μ μœΌλ‘œ μ‚¬μš©λ  것이라 μ˜ˆμƒλ˜μ–΄ κ΄€λ ¨ λ‚΄μš©μ„ μ°Ύμ•„λ³΄μ•˜λ‹€.

 61 struct kobject {
 62         const char              *name;
 63         struct list_head        entry;
 64         struct kobject          *parent;
 65         struct kset             *kset;
 66         struct kobj_type        *ktype;
 67         struct kernfs_node      *sd;
 68         struct kref             kref;
 69 #ifdef CONFIG_DEBUG_KOBJECT_RELEASE
 70         struct delayed_work     release;
 71 #endif
 72         unsigned int state_initialized:1;
 73         unsigned int state_in_sysfs:1;
 74         unsigned int state_add_uevent_sent:1;
 75         unsigned int state_remove_uevent_sent:1;
 76         unsigned int uevent_suppress:1;
 77 };

컀널 λ¬Έμ„œ(https://www.kernel.org/doc/Documentation/kobject.txt)에 λ”°λ₯΄λ©΄ kobjects와 λ”λΆˆμ–΄ ksets, ktypes 에 λŒ€ν•΄ μ•„λž˜μ™€ 같이 κΈ°μˆ ν•˜κ³  μžˆλ‹€.

A kobject is an object of type struct kobject. Kobjects have a name and a reference count. A kobject also has a parent pointer (allowing objects to be arranged into hierarchies), a specific type, and, usually, a representation in the sysfs virtual filesystem.

Kobjects are generally not interesting on their own; instead, they are usually embedded within some other structure which contains the stuff the code is really interested in

A ktype is the type of object that embeds a kobject. Every structure that embeds a kobject needs a corresponding ktype. The ktype controls what happens to the kobject when it is created and destroyed.

A kset is a group of kobjects. These kobjects can be of the same ktype or belong to different ktypes. The kset is the basic container type for collections of kobjects. Ksets contain their own kobjects, but you can safely ignore that implementation detail as the kset core code handles this kobject automatically.

KobjectλŠ” 이름과 참쑰횟수λ₯Ό 가지고 μžˆλŠ” κ°μ²΄λ‘œμ„œ 자기 μžμ‹ μ— λŒ€ν•΄ 관심을 κ°€μ§€λŠ” 것이 μ•„λ‹ˆλΌ λ‹€λ₯Έ ꡬ쑰체에 embedded λ˜μ–΄ κ΄€λ ¨ μ½”λ“œμ—μ„œ ν•„μš”λ‘œ ν•˜λŠ” λ‚΄μš©λ“€μ„ μ €μž₯ν•˜λŠ” μš©λ„λ‘œ μ‚¬μš©ν•œλ‹€. kobjects μžμ²΄λŠ” 계측 ꡬ쑰둜 ꡬ성할 수 μžˆλ„λ‘ λΆ€λͺ¨ 포인터λ₯Ό 가지며 νŠΉμ • μœ ν˜•μ΄λ‚˜ sysfs 등에도 μ‚¬μš©λœλ‹€.

ktype은 kobject에 λŒ€ν•œ 도메인(μ •μ˜μ—­)이라 μƒκ°ν•˜λ©΄ μ΄ν•΄ν•˜κΈ° 쉽닀. μ„œλ‘œ λ‹€λ₯Έ κ°’λ“€λ‘œ ꡬ성할 수 μžˆλŠ” 도메인은 κ·Έ 값에 λŒ€ν•œ νƒ€μž… μ‹œμŠ€ν…œμœΌλ‘œ ꡬ성할 수 있으며 μ΄λŸ¬ν•œ νƒ€μž…μ‹œμŠ€ν…œμ— λŒ€ν•œ κ°œλ…μ΄ 여기에도 κ·ΈλŒ€λ‘œ λ¬»μ–΄λ‚˜λŠ” 것을 넀이밍을 톡해 λ‹¨λ²ˆμ— μ•Œ 수 μžˆλ‹€.

kset은 kobject, 즉 λ‹¨μˆœν•œ 집합이닀. λ•Œλ¬Έμ— μ„œλ‘œ λ‹€λ₯Έ ktype듀을 가지고 μžˆμ„ μˆ˜λ„ 있고 λͺ¨λ‘ 같은 ktypeλ“€λ‘œ ꡬ성할 μˆ˜λ„ μžˆλ‹€.

μ •λ¦¬ν•˜λ©΄, kobjects, ksets, ktypes 듀을 μ΄μš©ν•˜μ—¬ 컀널 λ‚΄μ—μ„œ 객체λ₯Ό μ΄μš©ν•œ μž‘μ€ νƒ€μž…μ‹œμŠ€ν…œμ΄λΌ 생각할 수 μžˆλ‹€. Functional Programming μ—μ„œ μ–˜κΈ°ν•˜λŠ” νƒ€μž…μ‹œμŠ€ν…œμ„ μ΄ν•΄ν•˜κ³  μžˆλ‹€λ©΄ κ°œλ…μ μœΌλ‘œ λ‹¨λ²ˆμ— 이해가 κ°€λŠ₯ν•  것이라 μƒκ°λœλ‹€. κ°œλ…μ μœΌλ‘œ νƒ€μž…μ‹œμŠ€ν…œμ„ κ΅¬μ„±ν•˜κ³  이λ₯Ό sysfs 와 같은 파일 μ‹œμŠ€ν…œμ— μ μš©ν•˜μ—¬, ν•΄λ‹Ή μ„œλΈŒμ‹œμŠ€ν…œ(?)이 κ°€μ§ˆ 수 μžˆλŠ” 데이터듀에 λŒ€ν•œ νƒ€μž…μ‹œμŠ€ν…œμ„ μΆ”μƒν™”ν•˜μ—¬ 일관성 있게 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ κ³ λ―Όν•œ 흔적듀을 μ—Ώλ³Ό 수 μžˆλ‹€.

μ•Œλ©΄ μ•Œμˆ˜λ‘, λͺ¨λ₯΄λŠ” 게 정말 λ§Žλ‹€.

좜처 πŸ”—