Example #1
0
  def __init__(self, raw_mem, cpu, path_mgr):
    self.raw_mem = raw_mem
    self.ram_size = raw_mem.ram_size
    self.cpu = cpu
    self.path_mgr = path_mgr

    # create a label manager and error tracker
    self.label_mgr = LabelManager()
    self.error_tracker = ErrorTracker(cpu, self.label_mgr)
    self.label_mgr.error_tracker = self.error_tracker

    # set a label for first two dwords
    label = LabelRange("zero_page",0,8)
    self.label_mgr.add_label(label)
    
    # create memory access
    self.mem = MainMemory(self.raw_mem, self.error_tracker)
    self.mem.ctx = self

    # create memory allocator
    self.mem_begin = 0x1000
    self.alloc = MemoryAlloc(self.mem, 0, self.ram_size, self.mem_begin, self.label_mgr)
    
    # create segment loader
    self.seg_loader = SegmentLoader( self.mem, self.alloc, self.label_mgr, self.path_mgr )

    # lib manager
    self.lib_mgr = LibManager( self.label_mgr )
    
    # no current process right now
    self.process = None
    self.proc_list = []
    self.tr_list = []
Example #2
0
    def __init__(self, raw_mem, cpu, traps, cfg):
        self.raw_mem = raw_mem
        self.ram_size = raw_mem.get_ram_size() * 1024  # in bytes
        self.cpu = cpu
        self.cpu_type = cfg.cpu
        self.traps = traps
        self.cfg = cfg
        #sys.settrace(Tracer().traceit)

        # too much RAM requested?
        # our "custom chips" start at $BFxxxx so we allow RAM only to be below
        if self.ram_size >= 0xbf0000 and self.cfg.hw_access != "disable":
            raise VamosConfigError(
                "Too much RAM configured! Only up to $BF0000 allowed.")

        # setup custom chips
        if self.cfg.hw_access != "disable":
            self.hw_access = HardwareAccess(raw_mem)
            self._setup_hw_access()

        # path manager
        self.path_mgr = PathManager(cfg)

        # create a label manager and error tracker
        if self.cfg.label_mgr != "disable":
            self.label_mgr = LabelManager()
        else:
            self.label_mgr = None
        self.error_tracker = ErrorTracker(cpu, self.label_mgr)
        if self.label_mgr != None:
            self.label_mgr.error_tracker = self.error_tracker

        # set a label for first two dwords
        if self.label_mgr != None:
            label = LabelRange("zero_page", 0, 8)
            self.label_mgr.add_label(label)

        # create memory access
        self.mem = MainMemory(raw_mem, self.error_tracker)
        self.mem.ctx = self
        self._setup_memory(raw_mem)

        # create memory allocator
        self.mem_begin = 0x1000
        self.alloc = MemoryAlloc(self.mem, 0, self.ram_size, self.mem_begin,
                                 self.label_mgr)

        # create segment loader
        self.seg_loader = SegmentLoader(self.mem, self.alloc, self.label_mgr,
                                        self.path_mgr)

        # lib manager
        self.lib_mgr = LibManager(self.label_mgr, cfg)

        # no current process right now
        self.process = None
        self.proc_list = []
Example #3
0
    def __init__(self, hilillos_to_run, quantum):

        self.__pcb = PCBDataStructure()
        self.threads_barrier = Barrier(2)
        self.__dead_barrier = False
        self.__killing_lock = Lock()  # Lock used to kill the barrier
        self.__waiting_lock = Lock()
        self.__system_main_memory = MainMemory(self.__pcb, hilillos_to_run)
        self.__simulation_statistics = SimulationStatistics()
        self.__core0 = Core(0, self)
        self.__core1 = Core(1, self)
        self.__core_count = 2
        self.running_cores = 2
        self.__system_clock = 0
        self.__default_quantum = quantum
        self.__core_finished = False
        self.__core_finished_counter = 0

        # Data buss, instruction buss, cache 0, cache 1
        self.__locks = [Lock(), Lock(), Lock(), Lock()]
        self.__lock_owner = [-1, -1, -1, -1]
Example #4
0
 def __init__(self):
     self.memory = MainMemory()
     self.registers = Registers()
    # If we have a second #, check the same things
    if len(byte) == 4:
        if byte[3].isalpha():
            if byte[3].upper() > 'F':
                return False
        elif not byte[3].isdigit():
            return False

    return True


# Start the simulator, initialize the physical memory with bytes in hexadecimal provided in input.txt
print("*** Welcome to the cache simulator ***")
print("initialize the RAM:")
print("init-ram 0x00 0xFF")
ourRam = MainMemory()
ourRam.readFromFile(sys.argv[1])
print("ram successfully initialized!")

# Get values from user on cache specifics (check validity)
print("configure the cache:")

# C
cacheSize = input("cache size: ")
if not isCorrectInput(cacheSize, 8, 256):
    sys.exit("Invalid cache size!")

# B
blockSize = input("data block size: ")
if not isCorrectInput(blockSize, 1, int(cacheSize)):
    sys.exit("Invalid block size!")