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 + -
显示快捷键?