Пример #1
0
        protected override MemoryRegion AllocRawMemory(uint size)
        {
            var kmap = PhysicalPageManager.AllocateRegion(size);

            KernelMemoryMapManager.Header->Used.Add(new KernelMemoryMap(kmap.Start, kmap.Size, BootInfoMemoryType.PageFrameAllocator, AddressSpaceKind.Virtual));
            PageTable.KernelTable.Map(kmap.Start, kmap.Start, PhysicalPageManager.GetAllocatorByAddr(kmap.Start), flush: true);
            PageTable.KernelTable.SetWritable(kmap.Start, kmap.Size);
            kmap.Clear();
            return(kmap);
        }
Пример #2
0
        private static uint Cmd_RequestMemory(SysCallContext *context, SystemMessage *args)
        {
            var size = args->Arg1;

            size = KMath.AlignValueCeil(size, 4096);
            var proc     = Scheduler.GetCurrentThread().Process;
            var map      = PhysicalPageManager.AllocateRegion(size);
            var virtAddr = proc.UserPageAllocator.AllocatePagesAddr(size / 4096);

            Scheduler.GetCurrentThread().Process.PageTable.Map(virtAddr, map.Start, PhysicalPageManager.GetAllocatorByAddr(map.Start));
            return(virtAddr);
        }