/**
   * FIFO-Algorithmus: Auswahl = Listenkopf (1. Element) Anschließend Listenkopf löschen, neue Seite
   * (newPte) an Liste anhängen
   */
  private PageTableEntry fifoAlgorithm(PageTableEntry newPte) {
    PageTableEntry pte; // Auswahl

    pte = (PageTableEntry) pteRAMlist.getFirst();
    os.testOut("Prozess " + pid + ": FIFO-Algorithmus hat pte ausgewählt: " + pte.virtPageNum);
    pteRAMlist.removeFirst();
    pteRAMlist.add(newPte);
    return pte;
  }
  /** RANDOM-Algorithmus: Zufällige Auswahl */
  private PageTableEntry randomAlgorithm(PageTableEntry newPte) {
    /* TODO:RANDOM Algorithmus */

    PageTableEntry pte; // Auswahl

    final int randomIndex = new Random().nextInt(pteRAMlist.size());
    pte = (PageTableEntry) pteRAMlist.get(randomIndex);
    os.testOut("Prozess " + pid + ": Random-Algorithmus hat pte ausgewählt: " + pte.virtPageNum);
    pteRAMlist.remove(randomIndex);
    pteRAMlist.add(newPte);
    return pte;
  }
  /**
   * CLOCK-Algorithmus (Second-Chance): Nächstes Listenelement, ausgehend vom aktuellen Index, mit
   * Referenced-Bit = 0 (false) auswählen Sonst R-Bit auf 0 setzen und nächstes Element in der
   * pteRAMlist untersuchen. Anschließend die ausgewählte Seite durch die neue Seite (newPte) am
   * selben Listenplatz ersetzen
   */
  private PageTableEntry clockAlgorithm(PageTableEntry newPte) {
    PageTableEntry pte; // Aktuell untersuchter Seitentabelleneintrag

    // Immer ab altem "Uhrzeigerstand" weitersuchen
    pte = (PageTableEntry) pteRAMlist.get(pteRAMlistIndex);

    // Suche den nächsten Eintrag mit referenced == false (R-Bit = 0)
    while (pte.referenced == true) {
      // Seite wurde referenziert, also nicht auswählen, sondern R-Bit
      // zurücksetzen
      os.testOut(
          "Prozess "
              + pid
              + ": CLOCK-Algorithmus! --- pte.vpn: "
              + pte.virtPageNum
              + " ref: "
              + pte.referenced);
      pte.referenced = false;
      incrementPteRAMlistIndex();
      pte = (PageTableEntry) pteRAMlist.get(pteRAMlistIndex);
    }

    // Seite ausgewählt! (--> pteRAMlistIndex)
    // Alte Seite gegen neue in pteRAMlist austauschen
    pteRAMlist.remove(pteRAMlistIndex);
    pteRAMlist.add(pteRAMlistIndex, newPte);
    // Index auf Nachfolger setzen
    incrementPteRAMlistIndex();
    os.testOut(
        "Prozess "
            + pid
            + ": CLOCK-Algorithmus hat pte ausgewählt: "
            + pte.virtPageNum
            + "  Neuer pteRAMlistIndex ist "
            + pteRAMlistIndex);

    return pte;
  }
 /** Pte in pteRAMlist eintragen, wenn sich die Zahl der RAM-Seiten des Prozesses erhöht hat. */
 public void pteRAMlistInsert(PageTableEntry pte) {
   os.testOut(
       "pteRAMlistInsert in Prozess " + pid + ": pte mit vpn " + pte.virtPageNum + " angefügt!");
   pteRAMlist.add(pte);
 }