Exemple #1
0
        private static unsafe uint sys_brk(int len)
        {
            var Process = Scheduler.RunningProcess;

            uint directory = Process.PageDirectory;
            uint current   = Process.HeapCurrent;
            uint end       = Process.HeapEndAddress;

            // Assert EAX == sys_brk

            uint addr = current;

            current += (uint)len;

            if (current > 0xA5000000)
            {
                Debug.Write("sys_brk failed\n");
                return(0);
            }

            // Assert end should be page aligned

            while (current > end)
            {
                Paging.AllocateFrame(Paging.GetPage((uint *)directory, end, true), 0, true);
                Paging.InvalidatePageAt(end);
                end += Paging.PageSize;
            }

            Process.HeapCurrent    = current;
            Process.HeapEndAddress = end;

            return(addr);
        }