Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.05 KB | None | 0 0
  1. // Patricia Estrada
  2. // Assignment 1
  3. // CS780
  4. //
  5. // This is a simple disk simulator which accepts a set of basic
  6. // parameters and prints them. computes some derived parameters,
  7. // and repeatedly accept transfer requests, calculating things about
  8. // each set and outputting them.
  9.  
  10. #include <stdio.h>
  11. #include <math.h>
  12.  
  13. void outputBasic(double value, char* label, char* unit);
  14. void calculateDerivedParameters();
  15. void outputDerivedParameters();
  16.  
  17. //basic parameters//////////////////
  18. double sectorSize = 0;
  19. double sectorsPerTrack = 0;
  20. double tracksPerCylinder = 0;
  21. double cylindersPerDisk = 0;
  22. double spindleSpeed = 0;
  23. float averageSeekTime = 0;
  24. float singleHeadSwitchTime = 0;
  25. float singleCylinderSwitchTime = 0;
  26.  
  27. //derived parameters////////////
  28. double trackSize = 0;
  29. double cylinderSize = 0;
  30. double diskSize = 0;
  31. double diskSizeGig = 0;
  32. double sectorsPerCylinder = 0;
  33. double sectorsPerDisk = 0;
  34. double fullLatencyTime = 0;
  35. double averageLatencyTime = 0;
  36. double effectiveDataTransferRate = 0;
  37. double singleByteTransferTime = 0;
  38. double sectorTransferTime = 0;
  39. double headSkew = 0;
  40. double cylinderSkew = 0;
  41.  
  42. int main ( int argc, char *argv[] )
  43. {
  44. char label[50];
  45. char unit[10];
  46.  
  47. if ( argc != 2 )
  48. {
  49. printf( "usage: %s filename", argv[0] );
  50. }
  51. else
  52. {
  53. FILE *file = fopen( argv[1], "r" );
  54.  
  55. if ( file == 0 )
  56. {
  57. printf( "Failure in opening file\n" );
  58. }
  59. else
  60. {
  61. int tempSize = 0;
  62. fscanf(file, "%d %s %s", &tempSize, label, unit);
  63. outputBasic(sectorSize, label, unit);
  64. sectorSize = tempSize;
  65.  
  66. fscanf(file, "%d %s %s", &tempSize, label, unit);
  67. outputBasic(sectorsPerTrack, label, unit);
  68. sectorsPerTrack = tempSize;
  69.  
  70. fscanf(file, "%d %s %s", &tracksPerCylinder, label, unit);
  71. outputBasic(tracksPerCylinder, label, unit);
  72.  
  73. fscanf(file, "%d %s %s", &cylindersPerDisk, label, unit);
  74. outputBasic(cylindersPerDisk, label, unit);
  75.  
  76. fscanf(file, "%d %s %s", &spindleSpeed, label, unit);
  77. outputBasic(spindleSpeed, label, unit);
  78.  
  79. fscanf(file, "%f %s %s", &averageSeekTime, label, unit);
  80. fprintf(stdout, "%s in %s: %f\n", label, unit, averageSeekTime);
  81.  
  82. fscanf(file, "%f %s %s", &singleHeadSwitchTime, label, unit);
  83. fprintf(stdout, "%s in %s: %f\n", label, unit, singleHeadSwitchTime);
  84.  
  85. fscanf(file, "%f %s %s", &singleCylinderSwitchTime, label, unit);
  86. fprintf(stdout, "%s in %s: %f\n", label, unit, singleCylinderSwitchTime);
  87.  
  88. trackSize = sectorSize * sectorsPerTrack;
  89. fprintf(stdout, "\ntemp2: %d\n", trackSize);
  90.  
  91. calculateDerivedParameters();
  92. outputDerivedParameters();
  93.  
  94. fclose( file );
  95. }
  96. }
  97. }
  98.  
  99. void outputBasic(double value, char* label, char* unit)
  100. {
  101. fprintf(stdout, "%s in %s: %d\n", label, unit, value);
  102. }
  103.  
  104. void calculateDerivedParameters()
  105. {
  106. trackSize = sectorSize * sectorsPerTrack;
  107. fprintf(stdout, "\ntemp: %d\n", sectorSize);
  108. fprintf(stdout, "\ntemp: %d\n", sectorsPerTrack);
  109. fprintf(stdout, "\ntemp2: %f\n", trackSize);
  110. fprintf(stdout, "\ntemp2: %d\n", trackSize);
  111.  
  112. double temp = sectorSize;
  113. double temp2 = sectorsPerTrack;
  114. trackSize = temp * temp2;
  115. fprintf(stdout, "\ntemp3: %f\n", trackSize);
  116.  
  117.  
  118. cylinderSize = trackSize * tracksPerCylinder;
  119. diskSize = cylinderSize * cylindersPerDisk;
  120. diskSizeGig = diskSize/1000000000;
  121. sectorsPerCylinder = sectorsPerTrack * tracksPerCylinder;
  122. sectorsPerDisk = sectorsPerCylinder * cylindersPerDisk;
  123. fullLatencyTime = 1/spindleSpeed * 60;
  124. averageLatencyTime = fullLatencyTime/2;
  125. effectiveDataTransferRate = trackSize/fullLatencyTime;
  126. singleByteTransferTime = 1/effectiveDataTransferRate;
  127. sectorTransferTime = sectorSize/effectiveDataTransferRate;
  128. ceil(singleHeadSwitchTime/sectorTransferTime);
  129. ceil(singleCylinderSwitchTime/sectorTransferTime);
  130. }
  131.  
  132. void outputDerivedParameters()
  133. {
  134. fprintf(stdout, "\nDerived Parameters\n");
  135. fprintf(stdout, "%s in %s: %f\n", "track_size", "bytes", trackSize);
  136. fprintf(stdout, "%s in %s: %d\n", "cylinder_size", "bytes", cylinderSize);
  137. fprintf(stdout, "%s in %s: %d\n", "disk_size", "bytes", diskSize);
  138. fprintf(stdout, "%s in %s: %d\n", "disk_size", "gigabytes", diskSizeGig);
  139. fprintf(stdout, "%s in %s: %d\n", "sectors_per_cylinder", "sectors", sectorsPerCylinder);
  140. fprintf(stdout, "%s in %s: %d\n", "sectors_per_disk", "sectors", sectorsPerDisk);
  141. fprintf(stdout, "%s in %s: %d\n", "full_latency_time", "msec", fullLatencyTime);
  142. fprintf(stdout, "%s in %s: %d\n", "average_latency_time", "msec", averageLatencyTime);
  143. fprintf(stdout, "%s in %s: %d\n", "effective_data_transfer_rate", "megabytes per second", effectiveDataTransferRate);
  144. fprintf(stdout, "%s in %s: %d\n", "single_byte_transfer_time", "msec", singleByteTransferTime);
  145. fprintf(stdout, "%s in %s: %d\n", "sector_transfer_time", "msec", sectorTransferTime);
  146. fprintf(stdout, "%s in %s: %d\n", "head_skew", "sectors", headSkew);
  147. fprintf(stdout, "%s in %s: %d\n", "cylinder_skew", "sectors", cylinderSkew);
  148.  
  149. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement