public Process(Switch Ns, KProcessScheduler Scheduler, int ProcessId) { this.Ns = Ns; this.Scheduler = Scheduler; this.ProcessId = ProcessId; Memory = new AMemory(); HandleTable = new KProcessHandleTable(); AppletState = new AppletStateMgr(); SvcHandler = new SvcHandler(Ns, this); TlsSlots = new ConcurrentDictionary <int, AThread>(); ThreadsByTpidr = new ConcurrentDictionary <long, KThread>(); Executables = new List <Executable>(); ImageBase = MemoryRegions.AddrSpaceStart; MapRWMemRegion( MemoryRegions.TlsPagesAddress, MemoryRegions.TlsPagesSize, MemoryType.ThreadLocal); }
public Process(Switch Device, KProcessScheduler Scheduler, int ProcessId, Npdm MetaData) { this.Device = Device; this.Scheduler = Scheduler; this.MetaData = MetaData; this.ProcessId = ProcessId; Memory = new AMemory(Device.Memory.RamPointer); MemoryManager = new KMemoryManager(this); TlsPages = new List <KTlsPageManager>(); ThreadArbiterList = new List <KThread>(); ThreadSyncLock = new object(); HandleTable = new KProcessHandleTable(); AppletState = new AppletStateMgr(); SvcHandler = new SvcHandler(Device, this); Threads = new ConcurrentDictionary <long, KThread>(); Executables = new List <Executable>(); ImageBase = MemoryManager.CodeRegionStart; }
public Process(Switch Device, int ProcessId, Npdm MetaData) { this.Device = Device; this.MetaData = MetaData; this.ProcessId = ProcessId; Memory = new AMemory(Device.Memory.RamPointer); Memory.InvalidAccess += CpuInvalidAccessHandler; MemoryManager = new KMemoryManager(this); TlsPages = new List <KTlsPageManager>(); int HandleTableSize = 1024; if (MetaData != null) { foreach (KernelAccessControlItem Item in MetaData.ACI0.KernelAccessControl.Items) { if (Item.HasHandleTableSize) { HandleTableSize = Item.HandleTableSize; break; } } } HandleTable = new KProcessHandleTable(Device.System, HandleTableSize); AppletState = new AppletStateMgr(Device.System); SvcHandler = new SvcHandler(Device, this); Threads = new ConcurrentDictionary <long, KThread>(); Executables = new List <Executable>(); ImageBase = MemoryManager.CodeRegionStart; }