Kernel: Difference between revisions

m Hexkyz moved page Kernel objects to Kernel: Use this page for general kernel documentation
 
(12 intermediate revisions by 2 users not shown)
Line 36: Line 36:
| 8 || u32 || ReferenceCount
| 8 || u32 || ReferenceCount
|-
|-
| 0x10 || u64 || ?
| 0x10 || [[#KRedBlackTreeNode]] || Intrusive red-black tree node, replaces the Intrusive list node from previous versions.
|-
| 0x18 || ptr || ?
|-
| 0x20 || u64 || ?
|-
| 0x28 || u64 || ?
|}
|}


Line 151: Line 145:
|-
|-
| 8 || [[#KLinkedListNode]] || Bounds (first, last)
| 8 || [[#KLinkedListNode]] || Bounds (first, last)
|}
= KRedBlackTreeNode =
Size: 0x20
Note: This is BSD sys/tree.h's RB_ENTRY(...).
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || KRedBlackTreeNode* || Left Child
|-
| 8 || KRedBlackTreeNode* || Right Child
|-
| 0x10 || KRedBlackTreeNode* || Parent
|-
| 0x18 || int || Color
|}
= KRedBlackTree =
Size: 0x8
Note: This is BSD sys/tree.h's RB_HEAD(..., KRedBlackTreeNode);
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || KRedBlackTreeNode* || Root
|-
|}
|}


Line 218: Line 243:
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore
| 0x5A8 || KLinkedListNode || NodeFor__ThreadsOnSameCore
|-
|-
| 0x5B8 || u64 ||
| 0x5B8 || [[#KThread]]* ||
|-
|-
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr
| 0x5C0 || [[#KThread]]* || CondVar_SelfPtr
Line 578: Line 603:
[2.0.0] Size: 8
[2.0.0] Size: 8


[6.0.0]? Size: 0x10
[5.0.0] Size: 0x10


<div style="display: inline-block">
<div style="display: inline-block">
Line 609: Line 634:
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! 6.0.0 Offset || Type || Description
! 5.0.0 Offset || Type || Description
|-
|-
| 0 || u16 || HandleId
| 0 || u16 || HandleId
|-
|-
| 2 || u8 || ObjectType
| 2 || u16 || ObjectType
|-
|-
| 4 || u32 || ObjectCompressedPtr
| 8 || [[#KAutoObject]]* || object
|-
| 8 || ptr || ?
|}
|}
</div>
</div>
Line 1,045: Line 1,068:


= KPort =
= KPort =
Size: 0xA8
[1.0.0] Size: 0xA8
 
[7.0.0] Size: 0x110


Inherits from: [[#KAutoObject]]
Inherits from: [[#KAutoObject]]


<div style="display: inline-block;">
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
! Offset
! 1.0.0 Offset
! Type
! Type
! Description
! Description
Line 1,067: Line 1,094:
| 0xA1 || bool || IsLight
| 0xA1 || bool || IsLight
|}
|}
</div>
<div style="display: inline-block; vertical-align:top;">
{| class="wikitable" border="1"
|-
! 7.0.0 Offset
! Type
! Description
|-
| 0 || [[#KAutoObject]] || Inheritance
|-
| 0x30 || [[#KServerPort]] || ServerSide
|-
| 0xA0 || [[#KClientPort]] || ClientSide
|-
| 0xF8 || u64 ||
|-
| 0x100 || char* || NamePtr
|-
| 0x108 || bool || HasInited
|-
| 0x109 || bool || IsLight
|}
</div>


== KServerPort ==
== KServerPort ==
Line 1,147: Line 1,198:
| 0x50 || [[#KSessionRequest]]* || ActiveRequest
| 0x50 || [[#KSessionRequest]]* || ActiveRequest
|-
|-
| 0x58 || ||
| 0x58 || [[#KMutex]] || lock
|}
|}


=== KSessionRequest ===
=== KSessionRequest ===
Size: 0x158
Size: 0x158
Inherits from: [[#KAutoObject]]


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 1,157: Line 1,210:
! Offset || Type || Description
! Offset || Type || Description
|-
|-
| 0 || * || Vtable
| 0 || [[#KAutoObject]] || Inheritance
|-
|-
| 0x10 || KLinkedListNode ||  NodeFor__RequestList
| 0x10 || KLinkedListNode ||  NodeFor__RequestList
Line 1,700: Line 1,753:
! Offset || Type || Description
! Offset || Type || Description
|-
|-
| 0 || [[#KIrqReciever*]] || Receiver
| 0 || [[#KInterruptReceiver]]* || Receiver
|-
|-
| 8 || u8 || State0
| 8 || u8 || State0
Line 1,745: Line 1,798:
|-
|-
| 0x20 || ... || ...
| 0x20 || ... || ...
|}
= KManagedPort =
Size: 0x28
{| class="wikitable" border="1"
|-
! Offset || Type || Description
|-
| 0 || [[#KLinkedListNode]]<[[#KManagedPort]] *> || NodeFor__ManagedPortList
|-
| 0x10 || char[12] || PortName
|-
| 0x20 || [[#KClientPort]]* || ClientPort
|}
= Slab Information =
The Horizon/NX kernel keeps all objects in slab allocators, that can allocate a fixed amount of each. Attempting to allocate an object when the slab heap is full will result in an error 0xCE01 (Resource Exhaustion).
{| class="wikitable" border="1"
|-
! Object || Slab Count
|-
| KEvent || 600
|-
| KInterruptEvent || 100
|-
| KProcess || 80
|-
| KThread || 700
|-
| KPort || 200
|-
| KSharedMemory || 80
|-
| KTransferMemory || 200
|-
| KDeviceAddressSpace || 300
|-
| KDebug || 4
|-
| KSession || 800
|-
| KLightSession || 100
|-
| KLinkedListEntry<void*> || 17 231
|-
| KLinkedListNode || 4 000
|-
| KMemoryBlock (System) || 20 000
|-
| KMemoryBlock (Other) || 10 000
|-
| KTlsPageManager || 167
|-
| KManagedPort || 7
|-
| KDebugEvent || 704
|-
| KSessionRequest || 1 600
|-
| KResourceLimit || 5
|}
|}