Phase 2
Phase 2
Roll No. 36
PRN : 12210870
OS Phase-2:
Code:
#include <bits/stdc++.h>
using namespace std;
struct PCB
{
int job_id;
int TTL;
int TLL;
int TTC ;
int TLC ;
};
struct PCB P;
int ptr;
int visited[30];
char M[300][4];
char IR[4];
char R[4];
int IC;
bool C;
int SI;
int VA;
int RA;
int PI;
int TI;
int EM;
fstream inFile;
fstream outFile;
void init();
void LOAD();
void EXECUTE();
void MOS();
int ALLOCATE();
int ADDRESSMAP(int);
int TERMINATE(int);
void init()
{
for (int i = 0; i < 300; i++)
{
for (int j = 0; j < 4; j++)
{
M[i][j] = ' ';
}
}
for(int i=0;i<30;i++)
{
visited[i]=0;
}
IR[4] = {'-'};
R[4] = {'-'};
IC = 0;
C = false;
ptr = 0;
VA = 0;
PI = 0;
TI = 0;
EM = 0;
}
int ALLOCATE()
{
return (rand() % 30);
}
if (M[pte][0] == '*')
{
cout << "Page Fault" << endl;
return -1;
}
else
{
for (int i = 0; i < 4; i++)
{
if(M[pte][i]!=' ')
temp += M[pte][i];
}
return ((stoi(temp) * 10) + (va % 10));
}
}
void MOS()
{
if (SI == 1)
{
string line;
getline(inFile, line);
visited[frame] = 1;
int i = ptr;
i = i*10;
cout<<"\n\nPTR = "<<ptr<<endl;
while (M[i][0] != '*')
{
i++;
}
int l = 0;
frame = frame * 10;
for (int i = 0; i < line.length() && line.length() < 40; i++)
{
M[frame][l++] = line[i];
if (l == 4)
{
l = 0;
frame += 1;
}
}
}
else if (SI == 2)
{
P.TLC+=1;
if(P.TLC > P.TLL)
{
EM = 2;
TERMINATE(2);
return;
}
int ra = ADDRESSMAP(add);
if (ra != -1)
{
string out;
else
{
EM = 6;
TERMINATE(6);
PI=3;
}
}
else if (SI == 3)
{
outFile<<"\nProgram Terminated successfully"<<"\n";
outFile<<"IC = "<<IC<<"\tToggle: "<<C<<"\tTLC: "<<P.TLC<<"\tTTC:
"<<P.TTC<<"\tTTL"<<P.TTL<<"\tTLL"<<P.TLL;
for(int i=0;i<3;i++)
{
outFile<<"\t"<<IR[i];
}
}
}
void EXECUTE()
{
while (true)
{
if(PI!=0 || TI!=0 || EM!=0)
{
outFile<<"IC = "<<IC<<"\tToggle: "<<C<<"\tTLC: "<<P.TLC<<"\tTTC:
"<<P.TTC<<"\tTTL"<<P.TTL<<"\tTLL"<<P.TLL;
for(int i=0;i<3;i++)
{
outFile<<"\t"<<IR[i];
}
break;
}
RA = ADDRESSMAP(IC);
if(ra!=-1)
{
for (int i = 0; i < 4; i++)
M[ra][i] = R[i];
}
else
{
int frame = ALLOCATE();
while (visited[frame] != 0)
{
frame = ALLOCATE();
}
visited[frame] = 1;
int i = ptr;
i = i*10;
while (M[i][0] != '*')
{
i++;
}
int ra = ADDRESSMAP(add);
if(ra = -1)
{
EM=6;
TERMINATE(6);
}
else
{
for (int i = 0; i < 4; i++)
{
if (R[i] != M[ra][i])
flag = 1;
}
if (flag == 1)
C = false;
else
C = true;
}
}
else if (IR[0] == 'B' && IR[1] == 'T')
{
if (C == true)
IC = add;
}
else
{
EM = 4;
TERMINATE(EM);
outFile<<"IC = "<<IC<<"\tToggle: "<<C<<"\tTLC: "<<P.TLC<<"\tTTC:
"<<P.TTC<<"\tTTL: "<<P.TTL<<"\tTLL: "<<P.TLL;
for(int i=0;i<3;i++)
{
outFile<<"\t"<<IR[i]<<"\n\n\n";
}
break;
}
}
}
void LOAD()
{
cout<<"\nReading Data..."<<endl;
int m = 0;
string line;
while (getline(inFile, line))
{
string str = "";
for (int i = 0; i < 4; i++)
{
str += line[i];
}
if (str == "$AMJ")
{
init();
ptr = ALLOCATE();
for (int i = ptr * 10; i < ptr * 10 + 10; i++)
{
for (int j = 0; j < 4; j++)
{
M[i][j] = '*';
}
}
visited[ptr] = 1;
//Initialize PCB
string jobid_str = "";
string TTL_str = "";
string TLL_str = "";
for (int i = 0; i < 4; i++)
{
jobid_str += line[i + 4];
TTL_str += line[i + 8];
TLL_str += line[i + 12];
}
P.job_id = stoi(jobid_str);
P.TTL = stoi(TTL_str);
P.TLL = stoi(TLL_str);
P.TLC = 0;
P.TTC = 0;
}
cout<<endl;
}
cout << "\n**************Halt**************\n\n" <<endl;
else
{
int frameNo = ALLOCATE();
while (visited[frameNo] != 0)
{
frameNo = ALLOCATE();
}
visited[frameNo] = 1;
int i = ptr;
while (M[i][0] != '*')
{
i++;
}
int len = 0;
for (int i = frameNo * 10; i < frameNo * 10 + 10 && len <
line.length(); i++)
{
for (int j = 0; j < 4 && len < line.length(); j++)
{
if (line[len] == 'H')
{
M[i][j] = line[len++];
break;
}
else
{
M[i][j] = line[len++];
}
}
}
line.clear();
}
}
int main()
{
inFile.open("input2.txt", ios::in);
outFile.open("Output2.txt", ios::out);
if (!inFile)
{
cout << "The file is not present!" << endl;
}
else
{
cout << "File opened successfully!" << endl;
}
LOAD();
return 0;
}
Terminal Output:
Output Text File:
HELLO