Saturday, 15 December 2012

OS LRU PROGRAM


#include<stdio.h>
main()
{
int q[20],p[50],c=0,c1,d,f,i,j,k=0,n,r,t,b[20],c2[20];
printf("Enter no of pages:");
scanf("%d",&n);
printf("Enter the reference string:");
for(i=0;i<n;i++)
            scanf("%d",&p[i]);
printf("Enter no of frames:");
scanf("%d",&f);
q[k]=p[k];
printf("\n\t%d\n",q[k]);
c++;
k++;
for(i=1;i<n;i++)
            {
 c1=0;
  for(j=0;j<f;j++)
{
    if(p[i]!=q[j])
      c1++;
     }
      if(c1==f)
      {
     c++;
   if(k<f)
   {
   q[k]=p[i];
                                       
  k++;   
for(j=0;j<k;j++)
 printf("\t%d",q[j]);
                                                
printf("\n");
   }
  else
  {
  for(r=0;r<f;r++)
   {
 c2[r]=0
 for(j=i-1;j<n;j--)
  {                                                            if(q[r]!=p[j])
 c2[r]++;
    else
   break;
   }
    }
 for(r=0;r<f;r++)
  b[r]=c2[r];
    for(r=0;r<f;r++)
     {
     for(j=r;j<f;j++)
 {
  if(b[r]<b[j])
 {
                                                                        t=b[r];
                                                                        b[r]=b[j];
                                                                        b[j]=t;
   }
                                              
 }
                                 
  }
                                  
 for(r=0;r<f;r++)
                                   
 {
                                             
  if(c2[r]==b[0])
                                             
  q[r]=p[i];

                                             
  printf("\t%d",q[r]);
                                    
}
                                  
 printf("\n");
                      
 }
          
 }
}
printf("\nThe no of page faults is %d",c);
}


Tuesday, 4 December 2012

Fs Kway merge


#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class coseq
{
public:    
      string list[8][100];
      string outlist[100];
      int count[8];
      int current[8];

      void load_list();
      void read_file(int);
      void sort_list(int);
      void merge();
};

void coseq::read_file(int i)
{
      fstream file;
      string name;
      switch(i){
            case 1: file.open("name1.txt");break;
            case 2: file.open("name2.txt");break;
            case 3: file.open("name3.txt");break;
            case 4: file.open("name4.txt");break;
            case 5: file.open("name5.txt");break;
            case 6: file.open("name6.txt");break;
            case 7: file.open("name7.txt");break;
            case 8: file.open("name8.txt");break;
            }
      while (!file.eof()){
            name.erase();          
            getline(file,name);
            list[i][++count[i]]=name;
            }
      file.close();
}


void coseq::load_list()
{
      for (int i=1;i<=8;i++)
      {
            count[i]=-1;
            read_file(i);
            sort_list(i);    
      }

}

void coseq::sort_list(int k)
{
      int i,j;
      string temp;     
      for (i=0;i<=count[k];i++)
      {
        for (j=i+1;j<=count[k];j++)
        {
            if (list[k][i]>list[k][j])
            {
              temp=list[k][i];
              list[k][i]=list[k][j];
              list[k][j]=temp;
            }}}
}

void coseq::merge()
{
      string smallest;
      int small_list, t=-1,start=1,avail[8],avail_lists=8;
      for (int i=1;i<=8;i++) {avail[i]=1;current[i]=1;}

      while (avail_lists>1)
      {          
            if (!avail[start]) {start++; continue;}        
            small_list=start;      
            smallest=list[start][current[start]];
        for (int i=start+1;i<=7;i++)     
        {  
            if (!avail[i]) continue;
                 
            if (list[i][current[i]]<smallest)
            {
                  smallest=list[i][current[i]];
                  small_list=i;          
            }
         }
        current[small_list]++;
        if (current[small_list]>count[small_list]) {avail[small_list]=0;avail_lists--;}
        outlist[++t]=smallest;
        for (int j=1;j<=8;j++)
            if (j!=small_list) {if (list[j][current[j]]==smallest){current[j]++;}}
      }
      for (int i=1;i<=8;i++) if (avail[i]) { for (int j=current[i];j<=count[i];j++) outlist[++t]=list[i][j];}
      cout<<"\nThe Merged List:";
      for (int i=0;i<=t+1;i++) cout<<"\n"<<outlist[i];
           

}

                 
     
int main()
{
      coseq c1;
      c1.load_list();
      c1.merge();
      return 0;
}