resourcemanagerimpl.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 159 行
JAVA
159 行
/*
* $Id: ResourceManagerImpl.java,v 1.2 2004/01/20 19:30:18 epr Exp $
*/
package org.jnode.vm;
import javax.naming.NamingException;
import org.jnode.naming.InitialNaming;
import org.jnode.system.IOResource;
import org.jnode.system.IRQHandler;
import org.jnode.system.IRQResource;
import org.jnode.system.MemoryResource;
import org.jnode.system.ResourceManager;
import org.jnode.system.ResourceNotFreeException;
import org.jnode.system.ResourceOwner;
import org.jnode.system.SimpleResourceOwner;
/**
* Default implementation of ResourceManager.
*
* @author Ewout Prangsma (epr@users.sourceforge.net)
*/
final class ResourceManagerImpl implements ResourceManager {
/**
* Hidden constructor.
*/
private ResourceManagerImpl() {
}
protected static ResourceManager initialize() {
try {
final Address kernelStart = Unsafe.getKernelStart();
final Address kernelEnd = Unsafe.getKernelEnd();
final long kernelSize = Address.distance(kernelStart, kernelEnd);
MemoryResourceImpl.claimMemoryResource(new SimpleResourceOwner("kernel"), kernelStart, kernelSize, MEMMODE_NORMAL);
final Address bootHeapStart = Unsafe.getBootHeapStart();
final Address bootHeapEnd = Unsafe.getBootHeapEnd();
final long bootHeapSize = Address.distance(bootHeapStart, bootHeapEnd);
MemoryResourceImpl.claimMemoryResource(new SimpleResourceOwner("bootheap"), bootHeapStart, bootHeapSize, MEMMODE_NORMAL);
ResourceManager rm = new ResourceManagerImpl();
InitialNaming.bind(NAME, rm);
return rm;
} catch (NamingException ex) {
throw new Error("Cannot initialize ResourceManager");
} catch (ResourceNotFreeException ex) {
throw new Error("Claim kernel memory");
}
}
/**
* Claim a range of IO ports
* @param owner
* @param startPort
* @param length
* @return The claimed resource
* @throws ResourceNotFreeException
*/
public IOResource claimIOResource(ResourceOwner owner, int startPort, int length)
throws ResourceNotFreeException {
return IOResourceImpl.claimIOResource(owner, startPort, length);
}
/**
* Claim a memory region
* @param owner
* @param start
* @param size
* @param mode
* @return The claimed resource
* @throws ResourceNotFreeException
*/
public MemoryResource claimMemoryResource(ResourceOwner owner, Address start, long size, int mode)
throws ResourceNotFreeException {
return MemoryResourceImpl.claimMemoryResource(owner, start, size, mode);
}
/**
* Register an interrupt handler for a given irq number.
*
* @param owner
* @param irq
* @param handler
* @param shared
* @return True is the handler was set, false if there was already a handler for the given irq
* number set.
* @throws ResourceNotFreeException
*/
public IRQResource claimIRQ(ResourceOwner owner, int irq, IRQHandler handler, boolean shared)
throws ResourceNotFreeException {
return Unsafe.getCurrentProcessor().getIRQManager().claimIRQ(owner, irq, handler, shared);
}
/**
* Create a MemoryResource wrapper around a given byte-array.
* @param data
* @return The claimed resource
*/
public MemoryResource asMemoryResource(byte[] data) {
return new MemoryResourceImpl(data, data.length, 1);
}
/**
* Create a MemoryResource wrapper around a given array.
* @param data
* @return The claimed resource
*/
public MemoryResource asMemoryResource(char[] data) {
return new MemoryResourceImpl(data, data.length, 2);
}
/**
* Create a MemoryResource wrapper around a given array.
* @param data
* @return The claimed resource
*/
public MemoryResource asMemoryResource(short[] data) {
return new MemoryResourceImpl(data, data.length, 2);
}
/**
* Create a MemoryResource wrapper around a given array.
* @param data
* @return The claimed resource
*/
public MemoryResource asMemoryResource(int[] data) {
return new MemoryResourceImpl(data, data.length, 4);
}
/**
* Create a MemoryResource wrapper around a given array.
* @param data
* @return The claimed resource
*/
public MemoryResource asMemoryResource(long[] data) {
return new MemoryResourceImpl(data, data.length, 8);
}
/**
* Create a MemoryResource wrapper around a given array.
* @param data
* @return The claimed resource
*/
public MemoryResource asMemoryResource(float[] data) {
return new MemoryResourceImpl(data, data.length, 4);
}
/**
* Create a MemoryResource wrapper around a given array.
* @param data
* @return The claimed resource
*/
public MemoryResource asMemoryResource(double[] data) {
return new MemoryResourceImpl(data, data.length, 8);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?