Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- semaphore full=1, full2=5, full3=1;
- semaphore mutex=1, mutex2=1, mutex3=1;
- semaphore IOREQ=0, reqservice=1, requestpending=0, physicalIO=0, OP_COMPLETE=1;
- semaphore print;
- int ADDR, B_ADDR, Temp_ADDR,D_ADDR, seek;
- int ID, B_ID, Temp_ID, D_ID, DISK_ID;
- //Producer
- void User()
- {
- ID=1;
- ADDR=random(200);
- p(full);
- p(mutex);
- B_ID=ID;
- B_ADDR=ADDR;
- v(mutex);
- p(print);
- cout << "User 1 Executes system call SIO or DOIO" <<endl;
- v(print);
- v(IOREQ);
- p(reqservice);
- p(print);
- cout << "Driver signal User 1 (operation complete)" << endl;
- v(print);
- }
- //Consumer
- void DOIO()
- {
- int Temp_ID;
- int Temp_ADDR;
- int IORQ1;
- int IORQ2;
- int buffersize=5;
- int i;
- p(IOREQ);
- p(mutex);
- Temp_ID=B_ID;
- Temp_ADDR=B_ADDR;
- v(mutex);
- v(full);
- //Communicating with driver(like producer)//
- for(i=0; i<6; i++)
- {
- p(full2);
- p(mutex2);
- IORQ1=Temp_ID;
- IORQ2=Temp_ADDR;
- IORQ1++;
- IORQ2++;
- p(print);
- cout << "User 1 Executes system call SIO or DOIO" <<endl;
- v(print);
- if(IORQ1==buffersize);
- IORQ1=0;
- if(IORQ2==buffersize);
- IORQ2=0;
- }
- v(mutex2);
- v(requestpending);
- }
- //Consumer
- void Driver()
- {
- int buffersize=5;
- int Temp2_ID, Temp2_ADDR;
- int IORQ1, IORQ2;
- int i;
- for(i=0; i<6; i++){
- p(requestpending);
- p(mutex2);
- Temp2_ID=IORQ1;
- Temp2_ADDR=IORQ2;
- IORQ1++;
- IORQ2++;
- if(IORQ1==buffersize)
- IORQ1=0;
- if(IORQ2==buffersize)
- IORQ2=0;
- }
- v(mutex2);
- v(full2);
- //Producer
- p(full3);
- p(mutex3);
- D_ADDR=Temp2_ADDR;
- v(mutex3);
- v(physicalIO);
- p(OP_COMPLETE);
- v(reqservice);
- }
- void Disk()
- {
- int i;
- p(physicalIO);
- p(mutex3);
- seek=D_ADDR;
- v(mutex);
- v(full3);
- for(i=1; i<seek; i++)
- {
- v(OP_COMPLETE);
- }
- }
- void main()
- {
- int i;
- for(i=0;i<10;i++)
- {
- cobegin
- {
- User();
- DOIO();
- Driver();
- Disk();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement