Esempio n. 1
0
class OperatingSystem(object):
    def __init__(self):

        malloc_strategy = PaginationStrategy(the_memory, 4)
        self.kernel = Kernel(malloc_strategy, SchedulerFifo, False, 2)
        self.__boot()

    def __boot(self):
        self.kernel.set_cpu(the_cpu)
        self.kernel.set_memory(the_memory )
        self.kernel.set_hard_drive(the_disk)
        self.kernel.boot()
        self.__load_default_programs()
        self.kernel.login()

    def __load_default_programs(self):
        self.install_program(fifa)
        self.install_program(pes)
        self.install_program(starcraft)
        self.install_program(fireFox)
        self.install_program(office)
        self.install_program(vnc)
        self.install_program(tomboy)

    def get_kernel(self):
        return self.kernel

    def instance_shell(self):
        self.shell = Shell()
        self.shell.set_kernel(self.get_kernel())

    def get_shell(self):
        return self.shell

    def install_program(self, program):
        self.get_kernel().install_program(program.get_name(), program)
Esempio n. 2
0
    def __init__(self, address=None, port=6541):
        self.__kernel = Kernel()

        #socket service comands
        self.__BUFFER_SIZE = 2048
        self.__server_socket = socket.socket(socket.AF_INET,
                                             socket.SOCK_STREAM)

        self.__app_port = 6543
        self.__app_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.__file_man_port = 6542
        self.__file_man_socket = socket.socket(socket.AF_INET,
                                               socket.SOCK_STREAM)

        #http_bind_address
        self.__address = socket.gethostname(
        ) if address == None else address  #set default address it's not given
        try:
            bind_address = (self.__address, port)
            self.__server_socket.bind(bind_address)
        except OSError as e:
            print(f"# Server bind failed: {e}")
            sys.exit(1)
Esempio n. 3
0
    def __init__(self):

        malloc_strategy = PaginationStrategy(the_memory, 4)
        self.kernel = Kernel(malloc_strategy, SchedulerFifo, False, 2)
        self.__boot()
Esempio n. 4
0
class Server:
    """
    Class which manages initialization, communication and completion stages.
    It manages kernel connections to and from any module into its communication stage.
    """
    def __init__(self, address=None, port=6541):
        self.__kernel = Kernel()

        #socket service comands
        self.__BUFFER_SIZE = 2048
        self.__server_socket = socket.socket(socket.AF_INET,
                                             socket.SOCK_STREAM)

        self.__app_port = 6543
        self.__app_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        self.__file_man_port = 6542
        self.__file_man_socket = socket.socket(socket.AF_INET,
                                               socket.SOCK_STREAM)

        #http_bind_address
        self.__address = socket.gethostname(
        ) if address == None else address  #set default address it's not given
        try:
            bind_address = (self.__address, port)
            self.__server_socket.bind(bind_address)
        except OSError as e:
            print(f"# Server bind failed: {e}")
            sys.exit(1)

    def start(self):
        """
        Connects to each module (FILE and APP) and start listening on server socket
        """
        self.__connect()
        self.__listen()

    def __connect(self):
        #Connecting to APP socket
        try:
            print(f"# Connecting to APP on {self.__address}:{self.__app_port}")
            self.__app_socket.connect((self.__address, self.__app_port))
            print("# Connected!")

            print(
                f"# Connecting to FILE_MAN on {self.__address}:{self.__file_man_port}"
            )
            self.__file_man_socket.connect(
                (self.__address, self.__file_man_port))
            print("# Connected!")
        except ConnectionRefusedError as e:
            print(
                f"# Connection refused, please make sure all of the servers are running: {e}"
            )
            sys.exit(1)
        except InterruptedError as e:
            print(f"# Connection interrupted: {e}")
            sys.exit(1)

    def __listen(self):
        # become a server socket
        self.__server_socket.listen(10)
        print('# Server listening')
        while True:
            try:
                # accept connections from outside
                client, address = self.__server_socket.accept()
                # Start a session with the client
                # in this case, we'll pretend this is a processed server
                self.__session(client, address)
            except KeyboardInterrupt:
                print("\n# Closing connection")
                client.close()
                self.__server_socket.close()
                self.__app_socket.close()
                self.__file_man_socket.close()
                sys.exit()
            except Exception as e:
                print(f"# Disconnected due interrupted connection. : {e}")
                client.close()
                self.__server_socket.close()
                self.__app_socket.close()
                self.__file_man_socket.close()
                sys.exit(1)

    def __session(self, client, address):
        while True:
            data = client.recv(self.__BUFFER_SIZE)
            if data:
                request = data.decode('UTF-8').replace(
                    '\n', '')  # convert to string (Python 3 only)
                print(f"< {address}: {request}")
                response = self.__execute(request)
                client.send(response.encode())
                if "Close. BYE" in response:
                    client.close()
                    self.__server_socket.close()
                    sys.exit(0)
            else:
                print(f"# Disconnected: {address}")
                break
        client.close()

    def __execute(self, request):
        request_obj = Message(request)

        #send request log
        request_log = self.__kernel.generate_log(request_obj)
        self.__file_man_socket.send(request_log.encode())
        print("< request log response: " + self.__file_man_socket.recv(
            self.__BUFFER_SIZE).decode('UTF-8').replace('\n', ''))

        cmd = request_obj.get_cmd()
        dst = request_obj.get_dst()
        response = ""
        if cmd == "info":
            if dst == "APP":
                self.__app_socket.send(request.encode())
                response = self.__app_socket.recv(
                    self.__BUFFER_SIZE).decode('UTF-8').replace('\n', '')
            elif dst == "FILE_MAN":
                self.__file_man_socket.send(request.encode())
                response = self.__file_man_socket.recv(
                    self.__BUFFER_SIZE).decode('UTF-8').replace('\n', '')
            else:
                response_msg = {
                    "body":
                    f"error: no such destination {dst} for command {cmd}"
                }
                response = Message.format("send", "KERNEL",
                                          request_obj.get_src(), response_msg)
        elif cmd == "stop":
            if dst == "KERNEL":
                #closing FILE_MAN
                request = Message.format("stop", "KERNEL", "FILE_MAN",
                                         {"body": "Close. BYE"})
                self.__file_man_socket.send(request.encode())
                response = self.__file_man_socket.recv(
                    self.__BUFFER_SIZE).decode('UTF-8').replace('\n', '')
                print(f"< {response}")

                #closing APP
                request = Message.format("stop", "KERNEL", "APP",
                                         {"body": "Close. BYE"})
                self.__app_socket.send(request.encode())
                response = self.__app_socket.recv(
                    self.__BUFFER_SIZE).decode('UTF-8').replace('\n', '')
                print(f"< {response}")

                #send response to close GUI
                response = Message.format("stop", "KERNEL", "GUI",
                                          {"body": "Close. BYE"})

                self.__app_socket.close()
                self.__file_man_socket.close()
            else:
                response_msg = {
                    "body": f"error: you cannot stop single modules"
                }
                response = Message.format("send", "KERNEL",
                                          request_obj.get_src(), response_msg)
        else:
            response_msg = {"body": f"error: no such command {cmd}"}
            response = Message.format("send", "KERNEL", request_obj.get_src(),
                                      response_msg)

        body = request_obj.get_msg()
        method = body['method']

        # it can be closed if the request cmd is 'stop'
        if not self.__file_man_socket._closed and method != "readLogFile":
            print(f"< {self.__address}: {response}")
            #Send response log
            response_obj = Message(response)
            response_log = self.__kernel.generate_log(response_obj)
            self.__file_man_socket.send(response_log.encode())
            print("< response log response: " + self.__file_man_socket.recv(
                self.__BUFFER_SIZE).decode('UTF-8').replace('\n', ''))

        return response