Skip to main content

Write the simulation program to implement demand paging and show the page scheduling and total number of page faults for the following given page reference string. Give input n as the number of memory frames. Reference String: 2,5,2,8,5,4,1,2,3,2,6,1,2,5,9,8 Implement Second Chance Page Replacement.

 

#include <stdio.h>
#include <stdlib.h>

// Structure to represent a page frame in memory
typedef struct PageFrame {
    int pageNumber;  // Page number
    int referenceBit; // Reference bit (0 or 1)
} PageFrame;

// Function to simulate demand paging with Second Chance (Clock) page replacement
void demandPagingSecondChance(int referenceString[], int n, int numFrames) {
    PageFrame frames[numFrames];
    int pageFaults = 0;
    int currentIndex = 0;

    for (int i = 0; i < numFrames; i++) {
        frames[i].pageNumber = -1; // Initialize frames to empty
        frames[i].referenceBit = 0; // Initialize reference bit to 0
    }

    printf("Page Schedule:\n");
    for (int i = 0; i < n; i++) {
        int page = referenceString[i];
        int found = 0;
        int replacedIndex = -1;

        // Search for the page in the frames
        for (int j = 0; j < numFrames; j++) {
            if (frames[j].pageNumber == page) {
                frames[j].referenceBit = 1; // Set reference bit to 1
                found = 1;
                break;
            }
        }

        if (!found) {
            // Search for an empty frame
            for (int j = 0; j < numFrames; j++) {
                if (frames[currentIndex].pageNumber == -1) {
                    replacedIndex = currentIndex;
                    currentIndex = (currentIndex + 1) % numFrames; // Move to the next frame in a circular manner
                    break;
                } else if (frames[currentIndex].referenceBit == 0) {
                    replacedIndex = currentIndex;
                    currentIndex = (currentIndex + 1) % numFrames; // Move to the next frame in a circular manner
                    break;
                } else {
                    frames[currentIndex].referenceBit = 0; // Reset reference bit to 0
                    currentIndex = (currentIndex + 1) % numFrames; // Move to the next frame in a circular manner
                }
            }

            // Replace the frame at the selected index
            frames[replacedIndex].pageNumber = page;
            frames[replacedIndex].referenceBit = 0;
            pageFaults++;

            printf("Page %d -> ", page);
            for (int j = 0; j < numFrames; j++) {
                if (frames[j].pageNumber == -1) {
                    printf("M ");
                } else {
                    printf("%d ", frames[j].pageNumber);
                }
            }
            printf(" (Page Fault)\n");
        } else {
            printf("Page %d -> ", page);
            for (int j = 0; j < numFrames; j++) {
                if (frames[j].pageNumber == -1) {
                    printf("M ");
                } else {
                    printf("%d ", frames[j].pageNumber);
                }
            }
            printf("\n");
        }
    }

    printf("\nTotal Page Faults: %d\n", pageFaults);
}

int main() {
    int numFrames;
    int n;

    printf("Enter the number of memory frames: ");
    scanf("%d", &numFrames);

    printf("Enter the number of pages in the reference string: ");
    scanf("%d", &n);

    int referenceString[n];
    printf("Enter the reference string (separated by spaces): ");
    for (int i = 0; i < n; i++) {
        scanf("%d", &referenceString[i]);
    }

    demandPagingSecondChance(referenceString, n, numFrames);

    return 0;
}

Comments

Popular posts from this blog

Write a program to read book information (bookid, bookname, bookprice, bookqty) in file “book.dat”. Write a menu driven program to perform the following operations using Random access file: i. Search for a specific book by name. ii. Display all book and total cost

  import java . io .*; import java . util .*; class Book {       String name , id ;       int qty ;       double price , total ;       Book ( String i , String n , String p , String q )      {               name = n ;               id = i ;               qty = Integer . parseInt ( q );               price = Double . parseDouble ( p );               total = qty * price ;      }       public String toString ()      {               System . out . println ( "name\t id\t qty\t price\t total" );               String s = name + "\t" + id + "\t" + qty + "\t" + price + "\t" + total ;           ...

Write a Java program to design a screen using Awt that will take a user name and password. If the user name and password are not same, raise an Exception with appropriate message. User can have 3 login chances only. Use clear button to clear the TextFields.

  import java . awt .*; import java . awt . event .*; import javax . swing .*; class InvalidPasswordException extends Exception {       InvalidPasswordException ()       {             System . out . println ( "Username and password is not same" );       } } public class Password extends Frame implements ActionListener {       Label uname , upass ;       TextField nametext ;       TextField passtext , msg ;       Button login , Clear ;       Panel p ;       int attempt = 0 ;       char c = '*' ;             public void login ()       {             p = new Panel ();             uname = new Label ( "Username : " , Label . CENTER );             upass = n...

) Create the following GUI screen using appropriate layout managers. Accept the name, class , hobbies of the user and apply the changes and display the selected options in a text box.

  import javax.swing.*; import java.awt.*; import java.awt.event.*; class Swing2 extends JFrame implements ActionListener {     JLabel l1 , l2 , l3 ;         JButton b ;         JRadioButton r1 , r2 , r3 ;         JCheckBox c1 , c2 , c3 ;         JTextField t1 , t2 ;         ButtonGroup b1 ;         JPanel p1 , p2 ;     static int cnt ;         private StringBuffer s1 = new StringBuffer ();                 Swing2 ()         {                             b1= new ButtonGroup ();                 p1= new JPanel ();                 p2= new JPanel ();               ...