GodOfSass Ответов: 1

Как я могу принимать логические адресные данные?


Эй Ребята ,
Я закодировал небольшой фрагмент кода, который демонстрирует концепцию подкачки в операционных системах. Я предположил, что размер кадра и страницы составляет 4 байта.
Проблема в том, что я не могу ввести логические значения адресов!
Запросите помощь по тому же вопросу:
#include<iostream>
#include<conio.h>
#include<time.h>
using namespace std;
int main()
{       
    char* logical[16]; 
    char* physical[33];
    int ft[4]; int pg=0; 
    int s[2]; int i,j; int page_move=0; int frame=0;
    int test[8]={0,4,8,12,16,20,24,28}; //Used for the random selection of frame numbers assuming the frame size to be 4 bytes
    time_t t;
    srand((unsigned) time(&t));
    s[0]=test[rand()%8]; i=s[0];  // We need two random frames to be occupied to represent a real scenario better !
    s[1]=test[rand()%8]; j=s[1];  // 's' contains those two frame numbers which will be made 'Full' later.
    cout<<"\n"<<s[0]<<" "<<s[1];
    for(int i=0;i<32;i++)// initialize all addresses to Empty
    { 
      physical[i]="Empty";
      logical[i]="Empty";
    }
    printf("\nThe Logical Address is Now->\n");
    for(int i=0;i<16;i++)
    {
      cout<<"\n"<<i<<" "<<logical[i];
    }
    for(int k=0;k<4;k++) // For filling in two random frames 
    { 
      physical[i]="Full";
      physical[j]="Full";
      ++i;
      ++j;
    }
    cout<<"\nEnter the Logical Address Data->\n";
    for(int i=0;i<16;i++)   // Entering Logical Data ( Doesn't Work!!!)
    {
       if(i%4==0){cout<<"\n---Page "<<page_move++<<"----\n";}
       cin>>logical[i];  
    }
    i=0;page_move=0;
    while(i<=28)   // Constructing The Frame Table
    {
       if(physical[i]=="Empty" && page_move!=4)
       {
         ft[page_move]=frame;
         ++page_move; 
       }
       ++frame;
       i=i+4;
    }
   
    cout<<"\n::::FRAME TABLE::::\n";
    cout<<"\n Page Frame\n";
    for(int i=0;i<4;i++)  // Display The Frame Table Created Above
    { 
      cout<<"\n  "<<i<<"  "<<ft[i];
    }
    printf("\nThe Physical Address is Now->\n");
    for(int i=0;i<32;i++)  //Display Physical Addresses and their Data
    {
      cout<<"\n"<<i<<" "<<physical[i];
    }
    
    getch();    
}


Что я уже пробовал:

Я попытался изменить способ принятия логических адресных данных.
1.) использовал другое слово char* , а затем назначил его логическому[i]...не сработало
2.) использовал char*s= logical; а затем ввел s, за которым следует ++s; не сработало

1 Ответов

Рейтинг:
1

Richard MacCutchan

У вас есть следующее утверждение:

cin>>logical[i];

но logical представляет собой массив char* таким образом, вы не можете напрямую записать некоторый текст в одну из его ячеек. Вам нужно прочитать данные в новую символьную строку, а затем поместить ее адрес в элемент массива. Вы также не должны использовать такие выражения, как:
if(physical[i]=="Empty"

Поскольку это не является допустимым сравнением строк. Вы должны использовать strcmp или одно из его производных.