Exemplo n.º 1
0
    def initialize(self, canvas):

        canvas.update()
        canvas.delete('all')

        # instantiate and create grid
        grd = Memory()
        grd.create_grid(canvas)

        proc_list = []
        mem_seg = []
        mem_seg_free = []

        # processes color
        proc_color = 'green'

        for i in range(50):
            # random number for burst time
            rdn_bt = random.randint(3, 7)
            # random number for arrival time
            rdn_at = random.randint(1, 50)
            # random number for size
            rdn_size = random.randint(1, 40)
            # set process name
            p_name = "p" + str(i)
            p = Process(id_p=i,
                        name=p_name,
                        burst_time=rdn_bt,
                        color=proc_color,
                        arrival_time=rdn_at,
                        size=rdn_size)
            proc_list.append(p)

        # prepare memory/create 4 segments already filled
        x = 100
        x_bfr = 50
        for i in range(4):
            rdn_x1 = random.randint(x_bfr, x_bfr + 100)
            rdn_x2 = random.randint(rdn_x1, rdn_x1 + 100)
            seg = canvas.create_rectangle(rdn_x1,
                                          20,
                                          rdn_x2,
                                          70,
                                          fill='#4785e8')
            print("I: ", str(i))
            print("X1: ", str(rdn_x1))
            print("X2: ", str(rdn_x2))
            dif_size = rdn_x2 - rdn_x1
            mg = Mem_Seg(name_ms="f" + str(i),
                         id_ms=i,
                         space=dif_size,
                         x1=rdn_x1,
                         x2=rdn_x2)
            mem_seg.append(mg)

            x_bfr = rdn_x2
            x = x + 100

        # define memory segmentation with these settings
        for idx in range(len(mem_seg)):
            # verify if it is the first occupied segment/OK
            if idx == 0:
                if mem_seg[idx].x1 > 50:
                    segment = Mem_Seg(name_ms="f" + str(i + 3),
                                      id_ms=i + 3,
                                      space=mem_seg[idx].x1 - 50,
                                      x1=50,
                                      x2=mem_seg[idx].x1)
                    mem_seg_free.append(segment)
            else:
                # if the segment is in the middle/OK
                if mem_seg[idx].x1 > mem_seg[idx - 1].x2:
                    segment = Mem_Seg(name_ms="f" + str(i + 3),
                                      id_ms=i + 3,
                                      space=mem_seg[idx].x1 -
                                      mem_seg[idx - 1].x2,
                                      x1=mem_seg[idx - 1].x2,
                                      x2=mem_seg[idx].x1)
                    mem_seg_free.append(segment)
                # if it is the last segment
                if idx == len(mem_seg) - 1:
                    if mem_seg[idx].x2 != 800:
                        segment = Mem_Seg(name_ms="f" + str(i + 3),
                                          id_ms=i + 3,
                                          space=800 - mem_seg[idx].x2,
                                          x1=mem_seg[idx].x2,
                                          x2=800)
                        mem_seg_free.append(segment)

        return mem_seg_free, proc_list, mem_seg