public KThread(Kernel kernel, KModule module, KPartition partition, string name, uint entryAddress, int priority, KThreadAttributes attributes, uint stackSize) { Debug.Assert(partition != null); Kernel = kernel; Name = name; EntryAddress = entryAddress; InitialPriority = priority; Priority = priority; Attributes = attributes; Module = module; State = KThreadState.Stopped; ExitWaiters = new FastLinkedList <KThread>(); NotifiedCallbacks = new FastLinkedList <KCallback>(); //if( stackSize < 65535 ) //{ // Log.WriteLine( Verbosity.Normal, Feature.Bios, "KThread: attempt to allocate thread with a stack of {0} - forcing up to the minimum of 64K", stackSize ); // stackSize = 65535; //} RunClocks = 0; InterruptPreemptionCount = 0; ThreadPreemptionCount = 0; Partition = partition; StackBlock = partition.Allocate(string.Format("Thread '{0}' Stack", name), KAllocType.High, 0, stackSize); Debug.Assert(StackBlock != null); TlsBlock = partition.Allocate(string.Format("Thread '{0}' TLS", name), KAllocType.High, 0, 0x4000); // 16k of thread local storage --- enough? Debug.Assert(TlsBlock != null); }
public KFixedPool( Kernel kernel, KPartition partition, string name, uint attributes, uint blockSize, int blockCount ) : base(kernel, partition, name, attributes, blockSize) { Debug.Assert( blockCount > 0 ); Debug.Assert( blockSize > 0 ); this.BlockCount = blockCount; }
public KFixedPool(Kernel kernel, KPartition partition, string name, uint attributes, uint blockSize, int blockCount) : base(kernel, partition, name, attributes, blockSize) { Debug.Assert(blockCount > 0); Debug.Assert(blockSize > 0); this.BlockCount = blockCount; }
public KMessagePipe(Kernel kernel, KPartition partition, string name, int size) { Kernel = kernel; Partition = partition; Name = name; Stream = new System.IO.MemoryStream(size); WaitingThreads = new FastLinkedList <KThread>(); }
public KMessagePipe( Kernel kernel, KPartition partition, string name, int size ) { Kernel = kernel; Partition = partition; Name = name; Stream = new System.IO.MemoryStream(size); WaitingThreads = new FastLinkedList<KThread>(); }
public KMemoryBlock(KPartition partition, uint address, uint size, bool isFree) { Partition = partition; Address = address; Size = size; IsFree = isFree; }
public KMemoryBlock( KPartition partition, uint address, uint size, bool isFree ) { Partition = partition; Address = address; Size = size; IsFree = isFree; }
public KPool(Kernel kernel, KPartition partition, string name, uint attributes, uint blockSize) { Debug.Assert(partition != null); Debug.Assert(name != null); Debug.Assert(blockSize > 0); Kernel = kernel; Name = name; Attributes = attributes; BlockSize = blockSize; Partition = partition; Blocks = new FastLinkedList <KMemoryBlock>(); UsedBlocks = new FastLinkedList <KMemoryBlock>(); FreeBlocks = new FastLinkedList <KMemoryBlock>(); WaitingThreads = new FastLinkedList <KThread>(); }
public KPool( Kernel kernel, KPartition partition, string name, uint attributes, uint blockSize ) { Debug.Assert( partition != null ); Debug.Assert( name != null ); Debug.Assert( blockSize > 0 ); Kernel = kernel; Name = name; Attributes = attributes; BlockSize = blockSize; Partition = partition; Blocks = new FastLinkedList<KMemoryBlock>(); UsedBlocks = new FastLinkedList<KMemoryBlock>(); FreeBlocks = new FastLinkedList<KMemoryBlock>(); WaitingThreads = new FastLinkedList<KThread>(); }
internal void PrintMemoryInfo() { // Partition 2 and 6 are what we care about StringBuilder sb = new StringBuilder(); sb.Append("=== Memory Info ==="); sb.Append(Environment.NewLine); int[] partitions = new int[] { 2, 6 }; for (int n = 0; n < partitions.Length; n++) { KPartition partition = this.Partitions[partitions[n]]; sb.AppendFormat("-- [{0}] -- {1:X8}-{2:X8} - {3}b/{4}b ({5}b free)", partitions[n], partition.BaseAddress, partition.UpperBound, partition.Size - partition.FreeSize, partition.Size, partition.FreeSize); sb.Append(Environment.NewLine); LinkedListEntry <KMemoryBlock> e = partition.Blocks.HeadEntry; while (e != null) { KMemoryBlock block = e.Value; sb.AppendFormat(" {0:X8}-{1:X8} - {2,10}b taken: {3} - {4}", block.Address, block.UpperBound, block.Size, !block.IsFree ? 1 : 0, block.Name); sb.Append(Environment.NewLine); e = e.Next; } } Debug.WriteLine(sb.ToString()); }
public KThread( Kernel kernel, KModule module, KPartition partition, string name, uint entryAddress, int priority, KThreadAttributes attributes, uint stackSize ) { Debug.Assert( partition != null ); Kernel = kernel; Name = name; EntryAddress = entryAddress; InitialPriority = priority; Priority = priority; Attributes = attributes; Module = module; State = KThreadState.Stopped; ExitWaiters = new FastLinkedList<KThread>(); NotifiedCallbacks = new FastLinkedList<KCallback>(); //if( stackSize < 65535 ) //{ // Log.WriteLine( Verbosity.Normal, Feature.Bios, "KThread: attempt to allocate thread with a stack of {0} - forcing up to the minimum of 64K", stackSize ); // stackSize = 65535; //} RunClocks = 0; InterruptPreemptionCount = 0; ThreadPreemptionCount = 0; Partition = partition; StackBlock = partition.Allocate( string.Format( "Thread '{0}' Stack", name ), KAllocType.High, 0, stackSize ); Debug.Assert( StackBlock != null ); TlsBlock = partition.Allocate( string.Format( "Thread '{0}' TLS", name ), KAllocType.High, 0, 0x4000 ); // 16k of thread local storage --- enough? Debug.Assert( TlsBlock != null ); }
public KVariablePool(Kernel kernel, KPartition partition, string name, uint attributes, uint blockSize) : base(kernel, partition, name, attributes, blockSize) { }
public KVariablePool( Kernel kernel, KPartition partition, string name, uint attributes, uint blockSize ) : base(kernel, partition, name, attributes, blockSize) { }