示例#1
0
        /// <summary>
        /// Initialise the Memory Manager, this should not be called anymore since it is done very early during the boot process.
        /// </summary>
        public static unsafe void Init()
        {
            if (StartedMemoryManager)
            {
                return;
            }
            StartedMemoryManager = true;

            var largestBlock = CPU.GetLargestMemoryBlock();

            if (largestBlock != null)
            {
                memPtr    = (byte *)largestBlock->Address;
                memLength = largestBlock->Length;
                if ((uint)memPtr < CPU.GetEndOfKernel() + 1024)
                {
                    memPtr     = (byte *)CPU.GetEndOfKernel() + 1024;
                    memPtr    += RAT.PageSize - (uint)memPtr % RAT.PageSize;
                    memLength  = largestBlock->Length - ((uint)memPtr - (uint)largestBlock->Address);
                    memLength += RAT.PageSize - memLength % RAT.PageSize;
                }
            }
            else
            {
                memPtr    = (byte *)CPU.GetEndOfKernel() + 1024;
                memPtr   += RAT.PageSize - (uint)memPtr % RAT.PageSize;
                memLength = (128 * 1024 * 1024);
            }
            RAT.Init(memPtr, (uint)memLength);
        }