COMPILATION LISTING OF SEGMENT db_fnp_scheduler_ Compiled by: Multics PL/I Compiler, Release 27d, of October 11, 1982 Compiled at: Honeywell LISD Phoenix, System M Compiled on: 11/15/82 1618.3 mst Mon Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 4* * * 5* * Copyright (c) 1972 by Massachusetts Institute of * 6* * Technology and Honeywell Information Systems, Inc. * 7* * * 8* *********************************************************** */ 9 10 11 /* DB_FNP_SCHEDULER_ - Implements various command related to the scheduler */ 12 13 /* Written January 1979 by Larry Johnson */ 14 /* Modified December 1981 by Robert Coren for revised idle meters */ 15 /* Modified March 1982 by Robert Coren to add meters for time spent in buffer management */ 16 17 /* format: style4,delnl,insnl,^ifthendo */ 18 db_fnp_scheduler_: 19 proc; 20 21 /* Parameters */ 22 23 dcl arg_corep ptr; 24 dcl arg_fnp fixed bin; 25 dcl arg_expr_infop ptr; 26 dcl arg_cmd_infop ptr; 27 dcl arg_code fixed bin (35); 28 29 /* Automatic */ 30 31 dcl corep ptr; 32 dcl fnp fixed bin; 33 dcl theoretical_max fixed bin (35); 34 dcl x float bin; 35 dcl total_count fixed bin (71); 36 dcl (i, j) fixed bin; 37 dcl min_j fixed bin; 38 dcl mix_offset fixed bin; 39 dcl offset fixed bin; 40 dcl module_counts (50) fixed bin (71); 41 dcl icmdat_addr fixed bin; 42 dcl icmdat_addr_known bit (1) init ("0"b); 43 dcl skdata_addr fixed bin; 44 dcl code fixed bin (35); 45 dcl buf_meter_addr fixed bin; 46 dcl data_high fixed bin; 47 dcl datap ptr init (null); 48 dcl table_base fixed bin; 49 dcl table_mult fixed bin; 50 dcl min_offset fixed bin; 51 dcl ic_addr fixed bin; 52 dcl line_length fixed bin; 53 dcl hist_len fixed bin; 54 dcl max_hits fixed bin (35); 55 dcl scale float bin; 56 dcl edited_addr char (32) var; 57 dcl fraction_to_print float bin; 58 dcl hits_removed fixed bin (71); 59 dcl hits_to_remove fixed bin (71); 60 dcl min_hits fixed bin (35); 61 dcl n_min_hits fixed bin; 62 dcl fnp_word (1) fixed bin (17) unal; 63 dcl something_printed bit (1); 64 dcl first_exec_found bit (1); 65 dcl dsptabp ptr; 66 dcl savtabp ptr; 67 dcl skdata_count fixed bin; 68 dcl sched_dsptabp ptr init (null); 69 dcl sched_savtabp ptr init (null); 70 dcl reset_sw bit (1); 71 dcl delta_cycles fixed bin (35); 72 dcl delta_idle_count fixed bin (35); 73 dcl alloc_time fixed bin (35); 74 dcl alloc_updates fixed bin (35); 75 dcl alloc_more_than_1 fixed bin (35); 76 dcl free_time fixed bin (35); 77 dcl free_updates fixed bin (35); 78 dcl free_more_than_1 fixed bin (35); 79 dcl total_time fixed bin (35); 80 dcl avg_alloc_time float bin; 81 dcl avg_free_time float bin; 82 dcl avg_all_time float bin; 83 dcl pct_alloc float bin; 84 dcl pct_free float bin; 85 dcl pct_alloc_non_idle float bin; 86 dcl pct_free_non_idle float bin; 87 dcl idle_fraction float bin; 88 89 dcl 1 modch aligned, 90 2 nmodules fixed bin, 91 2 entries (50), 92 3 name char (4), 93 3 address fixed bin; 94 95 dcl 1 skdata, /* Format of data block in scheduler, pointed to by .crskd */ 96 2 total_idle_count bit (36), /* Cumulative total of idle count */ 97 2 idle_increments bit (36), /* Number of increments to idle counter */ 98 2 max_idle_count bit (36), /* Maximum value of idle counter */ 99 2 min_idle_count bit (36), /* Minimum value of idle counter */ 100 2 interval bit (18), /* Number of millisecond to start timer with */ 101 2 icmdat_addr bit (18), /* Address of icmdat in ic_sampler module */ 102 2 count bit (18), /* Number of master dispatcher levels */ 103 2 dsptab_addr bit (18), /* Address of master dispatcher table */ 104 2 savtab_addr bit (18); /* Address of master dispatcher save area */ 105 106 dcl 1 icmdat, /* Format of data block in ic_sampler */ 107 2 action bit (18), /* Set code here to request action */ 108 2 confirm bit (18), /* Result of action reported here */ 109 2 enable bit (18), /* If non-zero, ic_sampling enabled */ 110 2 table_addr bit (18), /* Address of table of results */ 111 2 table_len bit (18), /* Length of table in words */ 112 2 shift bit (18), /* Amount addresses are shifted before counting */ 113 2 base bit (18), /* Lowest address monitored */ 114 2 pad bit (18), 115 2 out_of_range bit (36), /* Count of ic's out of bucket range */ 116 2 discnt bit (36); /* Count of ic's and scheduler dis instruction */ 117 118 dcl 1 buf_meters aligned, 119 2 allocate like subr_time_meters, 120 2 free like subr_time_meters; 121 122 /* Based */ 123 124 dcl system_area area based (areap); 125 dcl data (0:data_high) bit (36) based (datap); 126 127 dcl 1 sched_dsptab unal based (sched_dsptabp), /* Master dispatchers control table */ 128 2 dsptab (skdata_count) unal like dsptab; 129 130 dcl 1 dsptab unal based (dsptabp), 131 2 request bit (1), /* Level requested to run */ 132 2 execution bit (1), /* Level in execution, or interrupted */ 133 2 secondary_entry_present bit (1), 134 2 suppression bit (15), 135 2 primary_entry bit (18), 136 2 secondary_entry bit (18), 137 2 request_count bit (18); 138 139 dcl 1 sched_savtab unal based (sched_savtabp), /* Master dispatchers register save area */ 140 2 savtab (skdata_count) unal like savtab; 141 142 dcl 1 savtab unal based (savtabp), 143 2 x1 bit (18), 144 2 x2 bit (18), 145 2 x3 bit (18), 146 2 a bit (18), 147 2 q bit (18), 148 2 ind bit (18), 149 2 ic bit (18), 150 2 pad bit (18); 151 152 dcl 1 subr_time_meters based aligned, 153 2 total_time fixed bin (35), 154 2 increments fixed bin (35), 155 2 instances_over_1 fixed bin (35), 156 2 maximum_time fixed bin; 157 158 /* External */ 159 160 dcl ioa_ entry options (variable); 161 dcl com_err_ entry options (variable); 162 dcl sub_err_ entry options (variable); 163 dcl get_system_free_area_ entry returns (ptr); 164 dcl timer_manager_$sleep entry (fixed bin (71), bit (2)); 165 dcl get_line_length_$switch entry (ptr, fixed bin (35)) returns (fixed bin); 166 dcl db_fnp_sym_util_$get_value entry (char (*)) returns (fixed bin); 167 dcl db_fnp_util_$get_special_modch entry (ptr, fixed bin, ptr, fixed bin (35)); 168 dcl db_fnp_memory_$fetch entry (ptr, fixed bin, fixed bin, fixed bin, ptr, fixed bin (35)); 169 dcl db_fnp_memory_$store entry (ptr, fixed bin, fixed bin, fixed bin, ptr, char (*), fixed bin, fixed bin (35)); 170 dcl db_fnp_reader_$get_operand entry (ptr); 171 dcl db_fnp_util_$edit_module_addr_force entry (ptr, fixed bin, fixed bin, char (*) var, fixed bin (35)); 172 173 dcl iox_$user_output ext ptr; 174 dcl error_table_$unimplemented_version ext fixed bin (35); 175 176 dcl cleanup condition; 177 dcl conversion condition; 178 179 dcl (addr, bin, bit, divide, fixed, float, hbound, lbound, length, max, min, null, string) builtin; 180 181 /* Static */ 182 183 dcl crskd fixed bin int static; 184 dcl crbtm fixed bin int static; 185 dcl etmb fixed bin int static; 186 dcl areap ptr int static init (null); 187 dcl constants_setup bit (1) int static init ("0"b); 188 dcl saved_idle_increments (8) fixed bin (35) int static init ((8) 0); 189 dcl saved_idle_count (8) fixed bin (35) int static init ((8) 0); 190 191 dcl 1 saved_buf_meters (8) aligned internal static like buf_meters; 192 193 /* Constants */ 194 195 dcl name char (17) int static options (constant) init ("db_fnp_scheduler_"); 196 197 dcl mdisp_desc (7) char (20) int static options (constant) init ( 198 /* Names of master dispatcher levels */ 199 "lsla", "dia terminate", "dia special", "hsla", "interval timer", "console", "secondary dispatcher"); 200 201 dcl state_msgs (0:7) char (32) int static options (constant) init ( 202 /* State descriptions derived from some bits */ 203 /* Req exec first_exec_fnd */ 204 "", /* 0 0 0 */ 205 "", /* 0 0 1 */ 206 "In execution", /* 0 1 0 */ 207 "Interrupt", /* 0 1 1 */ 208 "Requested", /* 1 0 0 */ 209 "Requested", /* 1 0 1 */ 210 "Requested, in execution", /* 1 1 0 */ 211 "Requested, interrupted"); /* 1 1 1 */ 212 213 /* Entry to read and print the idle time accumulated in the fnp */ 214 215 idle_time: 216 entry (arg_corep, arg_fnp, arg_cmd_infop, arg_expr_infop); 217 218 call setup; 219 220 call get_operand; 221 if cmd_info.endline 222 then reset_sw = "0"b; 223 else if operand = "-reset" | operand = "-rs" 224 then do; 225 if corep ^= null () 226 then do; 227 call ioa_ ("Option -reset only allowed on running FNP."); 228 go to error_return; 229 end; 230 reset_sw = "1"b; 231 end; 232 else do; 233 call ioa_ ("Invalid operand: ^a", operand); 234 go to error_return; 235 end; 236 237 call read_skdata; 238 239 call fetch (crbtm, 1, addr (fnp_word)); 240 buf_meter_addr = bin (fnp_word (1)); 241 if buf_meter_addr = 0 242 then do; 243 call ioa_ ("Buffer management meters not available."); 244 return; 245 end; 246 247 call fetch (buf_meter_addr, 16, addr (buf_meters)); 248 249 if corep = null () 250 then do; /* Live fnp */ 251 delta_cycles = bin (skdata.idle_increments) - saved_idle_increments (fnp); 252 delta_idle_count = bin (skdata.total_idle_count) - saved_idle_count (fnp); 253 alloc_time = buf_meters.allocate.total_time - saved_buf_meters (fnp).allocate.total_time; 254 alloc_updates = buf_meters.allocate.increments - saved_buf_meters (fnp).allocate.increments; 255 alloc_more_than_1 = 256 buf_meters.allocate.instances_over_1 - saved_buf_meters (fnp).allocate.instances_over_1; 257 free_time = buf_meters.free.total_time - saved_buf_meters (fnp).free.total_time; 258 free_updates = buf_meters.free.increments - saved_buf_meters (fnp).free.increments; 259 free_more_than_1 = buf_meters.free.instances_over_1 - saved_buf_meters (fnp).free.instances_over_1; 260 end; 261 else do; 262 delta_cycles = bin (skdata.idle_increments); 263 delta_idle_count = bin (skdata.total_idle_count); 264 alloc_time = buf_meters.allocate.total_time; 265 alloc_updates = buf_meters.allocate.increments; 266 alloc_more_than_1 = buf_meters.allocate.instances_over_1; 267 free_time = buf_meters.free.total_time; 268 free_updates = buf_meters.free.increments; 269 free_more_than_1 = buf_meters.free.instances_over_1; 270 end; 271 theoretical_max = delta_cycles * bin (skdata.max_idle_count, 36); 272 if theoretical_max = 0 273 then call ioa_ ("No samples"); 274 else do; 275 idle_fraction = float (delta_idle_count) / float (theoretical_max); 276 call ioa_ ("Idle time: ^.1f%", 1.0e2 * idle_fraction); 277 end; 278 279 total_time = delta_cycles * 1000; 280 avg_alloc_time = float (alloc_time) / float (alloc_updates); 281 avg_free_time = float (free_time) / float (free_updates); 282 avg_all_time = float (alloc_time + free_time) / float (alloc_updates + free_updates); 283 pct_alloc = 1.0e2 * float (alloc_time) / float (total_time); 284 pct_free = 1.0e2 * float (free_time) / float (total_time); 285 pct_alloc_non_idle = pct_alloc / (1.0 - idle_fraction); 286 pct_free_non_idle = pct_free / (1.0 - idle_fraction); 287 288 call ioa_ ("Time in buffer management routines^/^32tallocate^44tfree^53ttotal"); 289 call ioa_ ("Average time per call (msec.)^35t^4.1f^44t^4.1f^54t^4.1f", avg_alloc_time, avg_free_time, 290 avg_all_time); 291 call ioa_ ("Percent of FNP^35t^4.1f^44t^4.1f^54t^4.1f", pct_alloc, pct_free, pct_alloc + pct_free); 292 call ioa_ ("Percent of non-idle^35t^4.1f^44t^4.1f^54t^4.1f", pct_alloc_non_idle, pct_free_non_idle, 293 pct_alloc_non_idle + pct_free_non_idle); 294 call ioa_ ("Percent of calls > 1 msec.^35t^4.1f^44t^4.1f^54t^4.1f", 295 1.0e2 * float (alloc_more_than_1) / float (alloc_updates), 296 1.0e2 * float (free_more_than_1) / float (free_updates), 297 1.0e2 * float (alloc_more_than_1 + free_more_than_1) / float (alloc_updates + free_updates)); 298 call ioa_ ("Maximum single call (msec.)^35t^4d^44t^4d", buf_meters.allocate.maximum_time, 299 buf_meters.free.maximum_time); 300 301 if reset_sw 302 then do; 303 saved_idle_increments (fnp) = bin (skdata.idle_increments); 304 saved_idle_count (fnp) = bin (skdata.total_idle_count); 305 saved_buf_meters (fnp) = buf_meters; 306 end; 307 308 return; 309 310 /* SAMPLE_TIME Command - Sets or prints the scheduler sampling interval */ 311 312 sample_time: 313 entry (arg_corep, arg_fnp, arg_cmd_infop, arg_expr_infop); 314 315 call setup; 316 317 call get_operand; 318 if cmd_info.endline 319 then do; /* No operands - so print it */ 320 call read_skdata; 321 call ioa_ ("Sample interval: ^d msec.", bin (skdata.interval)); 322 return; 323 end; 324 325 on conversion go to bad_interval; 326 i = bin (operand); /* Get new time */ 327 if i < 1 | i > 1000 328 then do; 329 bad_interval: 330 call ioa_ ("Bad sample interval: ^a", operand); 331 go to error_return; 332 end; 333 334 if corep ^= null () 335 then do; 336 call ioa_ ("Sample time can only be set on running FNP."); 337 go to error_return; 338 end; 339 340 call read_skdata; /* Just to be sure its the right scheduler */ 341 fnp_word (1) = -i; /* elapsed timer counts up, so this has to be negative */ 342 call store (skdata_addr + fnp_offset (addr (skdata), addr (skdata.interval)), 1, addr (fnp_word)); 343 return; 344 345 /* IC_SAMPLE Command - Summarize data in various ways */ 346 347 ic_sample: 348 entry (arg_corep, arg_fnp, arg_cmd_infop, arg_expr_infop); 349 350 call setup; 351 call get_operand; 352 if cmd_info.endline 353 then do; 354 call ioa_ ("Argument missing."); 355 go to error_return; 356 end; 357 358 if operand = "start" 359 then call perform_action (1); 360 else if operand = "stop" 361 then call perform_action (2); 362 else if operand = "reset" 363 then call perform_action (3); 364 else if operand = "module" 365 then go to ic_sample_module; 366 else if operand = "histogram" | operand = "hist" 367 then go to ic_sample_hist; 368 else do; 369 call ioa_ ("Unrecognized option: ^a", operand); 370 go to error_return; 371 end; 372 return; 373 374 /* Summarize data by module */ 375 376 ic_sample_module: 377 on cleanup call clean_up; 378 modch.nmodules = hbound (modch.entries, 1); 379 call db_fnp_util_$get_special_modch (corep, fnp, addr (modch), code); 380 if code ^= 0 381 then do; 382 call com_err_ (code, name, "Unable to get module chain."); 383 go to error_return; 384 end; 385 386 call read_data; 387 388 module_counts (*) = 0; 389 total_count = bin (icmdat.discnt) + bin (icmdat.out_of_range); 390 391 do i = lbound (data, 1) to hbound (data, 1); /* Check each entry */ 392 if data (i) ^= "0"b 393 then do; 394 total_count = total_count + bin (data (i)); 395 ic_addr = i * table_mult + table_base; /* Address represented by bucket */ 396 min_offset = 100000; 397 min_j = -1; 398 do j = 1 to modch.nmodules; /* Find which module it is in */ 399 offset = ic_addr - modch.address (j); 400 if offset >= 0 & offset < min_offset 401 then do; 402 min_offset = offset; 403 min_j = j; 404 end; 405 end; 406 if min_j > 0 407 then module_counts (min_j) = module_counts (min_j) + bin (data (i)); 408 end; 409 end; 410 411 if total_count = 0 412 then do; 413 call ioa_ ("No data collected."); 414 go to ic_sample_module_return; 415 end; 416 do i = 1 to modch.nmodules; 417 if module_counts (i) > 0 418 then call ioa_ ("^6a^5.1f%", modch.name (i), 1.00e2 * float (module_counts (i)) / float (total_count)); 419 end; 420 421 if icmdat.out_of_range ^= "0"b 422 then call ioa_ ("^/^6a^5.1f%", "orange", 1.00e2 * float (bin (icmdat.out_of_range)) / float (total_count)); 423 424 call ioa_ ("^/^6a^5.1f%", "idle", 1.00e2 * float (bin (icmdat.discnt)) / float (total_count)); 425 426 ic_sample_module_return: 427 call clean_up; 428 return; 429 430 /* Print a histogram of all data buckets */ 431 432 ic_sample_hist: 433 call get_operand; 434 if cmd_info.endline 435 then fraction_to_print = 1.0; /* Print entire histogram */ 436 else do; 437 on conversion go to bad_fraction; 438 fraction_to_print = float (operand); 439 if fraction_to_print < 0.0 | fraction_to_print > 1.0 440 then do; 441 bad_fraction: 442 call ioa_ ("Invalid fraction to print: ^a", operand); 443 go to error_return; 444 end; 445 end; 446 447 on cleanup call clean_up; 448 449 call read_data; 450 451 line_length = get_line_length_$switch (iox_$user_output, code); 452 if code ^= 0 453 then line_length = 132; 454 if line_length < 20 455 then do; 456 call ioa_ ("Line length (^d) is too short.", line_length); 457 go to ic_sample_hist_return; 458 end; 459 hist_len = line_length - 18; /* Amount of line available for chart */ 460 461 max_hits = 0; /* Find largest bucket */ 462 total_count = 0; 463 do i = lbound (data, 1) to hbound (data, 1); 464 if bin (data (i)) > max_hits 465 then max_hits = bin (data (i)); 466 total_count = total_count + bin (data (i)); 467 end; 468 469 if max_hits = 0 470 then do; 471 call ioa_ ("No data collected."); 472 go to ic_sample_hist_return; 473 end; 474 scale = float (max_hits) / float (hist_len); 475 476 if fraction_to_print < 1.0 477 then do; /* Must trim small buckets */ 478 hits_to_remove = (1.0 - fraction_to_print) * float (total_count); 479 hits_removed = 0; 480 do while (hits_removed < hits_to_remove); 481 min_hits = max_hits; /* First, find smallest number */ 482 n_min_hits = 0; 483 do i = lbound (data, 1) to hbound (data, 1); 484 if data (i) ^= "0"b 485 then if bin (data (i)) < min_hits 486 then do; 487 min_hits = bin (data (i)); 488 n_min_hits = 1; 489 end; 490 else if bin (data (i)) = min_hits 491 then n_min_hits = n_min_hits + 1; 492 end; 493 hits_removed = hits_removed + n_min_hits * min_hits; 494 if hits_removed <= hits_to_remove 495 then /* Remove all instances of the minimum */ 496 do i = lbound (data, 1) to hbound (data, 1); 497 /* Unless it would go over limit */ 498 if bin (data (i)) = min_hits 499 then data (i) = "0"b; 500 end; 501 end; 502 end; 503 504 do i = lbound (data, 1) to hbound (data, 1); 505 if data (i) ^= "0"b 506 then do; 507 j = fixed (float (bin (data (i))) / scale); 508 j = min (max (1, j), hist_len); /* Keep it in range */ 509 ic_addr = table_base + i * table_mult; 510 call db_fnp_util_$edit_module_addr_force (corep, fnp, ic_addr, edited_addr, code); 511 if code ^= 0 512 then do; 513 call com_err_ (code, name, "Unable to convert address ^o.", ic_addr); 514 go to ic_sample_hist_return; 515 end; 516 x = 1.00e2 * float (bin (data (i))) / float (total_count); 517 call ioa_ ("^12a^5.1f ^v(*^)", edited_addr, x, j); 518 end; 519 end; 520 521 ic_sample_hist_return: 522 call clean_up; 523 return; 524 525 /* MDISP_DATA - Command to print master dispatcher data bases */ 526 527 mdisp_data: 528 entry (arg_corep, arg_fnp, arg_cmd_infop, arg_expr_infop); 529 530 call setup; 531 on cleanup call clean_up; 532 533 call read_skdata; 534 skdata_count = bin (skdata.count); /* Number of dispatcher levels */ 535 allocate sched_dsptab in (system_area); 536 allocate sched_savtab in (system_area); 537 538 i = divide (length (string (sched_dsptab)), 18, 17, 0); 539 call fetch (bin (skdata.dsptab_addr), i, sched_dsptabp); 540 i = divide (length (string (sched_savtab)), 18, 17, 0); 541 call fetch (bin (skdata.savtab_addr), i, sched_savtabp); 542 543 first_exec_found = "0"b; /* Remember previous instances of dsptab.exec */ 544 something_printed = "0"b; 545 do i = 1 to skdata_count; 546 dsptabp = addr (sched_dsptab.dsptab (i)); 547 if dsptab.request | dsptab.execution 548 then do; 549 savtabp = addr (sched_savtab.savtab (i)); 550 something_printed = "1"b; 551 call ioa_ ("Level ^d: ^a", i, mdisp_desc (i)); 552 j = bin (dsptab.request || dsptab.execution || first_exec_found); 553 /* Compute msg index */ 554 call ioa_ (" ^a", state_msgs (j)); 555 if dsptab.execution & first_exec_found 556 then do; /* Found interrupted level */ 557 call ioa_ (" aq ^.3b ^.3b", savtab.a, savtab.q); 558 call ioa_ (" x1 ^.3b", savtab.x1); 559 call ioa_ (" x2 ^.3b", savtab.x2); 560 call ioa_ (" x3 ^.3b", savtab.x3); 561 call ioa_ (" i ^.3b", savtab.ind); 562 call ioa_ (" ic ^.3b", savtab.ic); 563 end; 564 if dsptab.execution 565 then first_exec_found = "1"b; 566 end; 567 end; 568 569 if ^something_printed 570 then call ioa_ ("FNP was idling"); 571 call clean_up; 572 return; 573 574 /* Setup arguments */ 575 576 setup: 577 proc; 578 579 corep = arg_corep; 580 fnp = arg_fnp; 581 expr_infop = arg_expr_infop; 582 cmd_infop = arg_cmd_infop; 583 call setup_constants; 584 return; 585 586 end setup; 587 588 setup_constants: 589 proc; 590 591 if constants_setup 592 then return; 593 594 crskd = db_fnp_sym_util_$get_value (".crskd"); 595 crbtm = db_fnp_sym_util_$get_value (".crbtm"); 596 etmb = db_fnp_sym_util_$get_value ("etmb"); 597 areap = get_system_free_area_ (); 598 unspec (saved_buf_meters) = "0"b; 599 constants_setup = "1"b; 600 return; 601 602 end setup_constants; 603 604 clean_up: 605 proc; 606 607 if datap ^= null () 608 then free data; 609 if sched_dsptabp ^= null () 610 then free sched_dsptab; 611 if sched_savtabp ^= null () 612 then free sched_savtab; 613 return; 614 615 end clean_up; 616 617 error_return: /* Non-local error exit */ 618 call clean_up; 619 cmd_info.flush = "1"b; 620 return; 621 622 /* Read and write memory words */ 623 624 fetch: 625 proc (a, n, p); 626 627 dcl a fixed bin; 628 dcl n fixed bin; 629 dcl p ptr; 630 631 call db_fnp_memory_$fetch (corep, fnp, a, n, p, code); 632 if code = 0 633 then return; 634 if n = 1 635 then call com_err_ (code, name, "Unable to read location ^o.", a); 636 else call com_err_ (code, name, "Unable to read locations ^o thru ^o", a, a + n - 1); 637 go to error_return; 638 639 store: 640 entry (a, n, p); 641 642 call db_fnp_memory_$store (corep, fnp, a, n, p, name, 0, code); 643 if code = 0 644 then return; 645 if n = 1 646 then call com_err_ (code, name, "Unable to write location ^o.", a); 647 else call com_err_ (code, name, "Unable to write locations ^o thru ^o", a, a + n - 1); 648 go to error_return; 649 650 end fetch; 651 652 /* Get next operand from command line */ 653 654 get_operand: 655 proc; 656 657 call db_fnp_reader_$get_operand (cmd_infop); 658 if cmd_info.error 659 then go to error_return; 660 return; 661 662 end get_operand; 663 664 /* Read data block in scheduler module */ 665 666 read_skdata: 667 proc; 668 669 dcl i fixed bin; 670 dcl fnp_word (1) bit (18) unal; 671 672 call fetch (crskd, 1, addr (fnp_word)); 673 skdata_addr = bin (fnp_word (1)); /* Address of table */ 674 if skdata_addr = 0 675 then do; 676 call ioa_ ("Scheduler data not found."); /* Probably old core image */ 677 go to error_return; 678 end; 679 i = divide (length (string (skdata)), 18, 17, 0); /* Number of fnp words to read */ 680 call fetch (skdata_addr, i, addr (skdata)); 681 icmdat_addr = bin (skdata.icmdat_addr); 682 icmdat_addr_known = "1"b; 683 return; 684 685 end read_skdata; 686 687 /* Read data table in ic_sampler module */ 688 689 read_icmdat: 690 proc; 691 692 dcl i fixed bin; 693 dcl fnp_word (1) bit (18) unal; 694 695 if ^icmdat_addr_known 696 then call read_skdata; 697 if icmdat_addr = 0 698 then do; 699 call ioa_ ("IC sampling module not configured."); 700 go to error_return; 701 end; 702 703 i = divide (length (string (icmdat)), 18, 17, 0); 704 call fetch (icmdat_addr, i, addr (icmdat)); 705 return; 706 707 end read_icmdat; 708 709 /* Read the acutal table of ic samples */ 710 711 read_data: 712 proc; 713 714 call read_icmdat; 715 if icmdat.table_addr = "0"b | icmdat.table_len = "0"b 716 then do; 717 call ioa_ ("No ic sample table found."); 718 go to error_return; 719 end; 720 721 data_high = divide (bin (icmdat.table_len), 2, 17, 0) - 1; 722 allocate data in (system_area); 723 call fetch (bin (icmdat.table_addr), bin (icmdat.table_len), datap); 724 table_base = bin (icmdat.base); 725 table_mult = 2 ** bin (icmdat.shift); 726 return; 727 728 end read_data; 729 730 /* Procedure to perform an order to the ic_sampler module */ 731 /* We store an action for it to do, and wait for it to notice it */ 732 733 perform_action: 734 proc (act); 735 736 dcl act fixed bin; 737 738 dcl i fixed bin; 739 dcl fnp_word (1) bit (18) unal; 740 741 if corep ^= null () 742 then do; 743 call ioa_ ("Only valid on running FNP."); 744 go to error_return; 745 end; 746 747 call read_icmdat; 748 fnp_word (1) = "0"b; /* Reset the conformation word */ 749 call store (icmdat_addr + fnp_offset (addr (icmdat), addr (icmdat.confirm)), 1, addr (fnp_word)); 750 fnp_word (1) = bit (bin (act, 18), 18); /* Set action */ 751 call store (icmdat_addr + fnp_offset (addr (icmdat), addr (icmdat.action)), 1, addr (fnp_word)); 752 call fetch (etmb, 1, addr (fnp_word)); /* Read remaining time in timer */ 753 i = min (1000, 262144 - bin (fnp_word (1))); /* Compute sleep time */ 754 call timer_manager_$sleep (1000 * (i + 50), "10"b); 755 call read_icmdat; 756 if icmdat.confirm = "000001"b3 757 then return; /* It worked */ 758 if icmdat.confirm = "000000"b3 759 then do; 760 call ioa_ ("FNP did not respond to action ^d.", act); 761 go to error_return; 762 end; 763 call ioa_ ("FNP gave error confirmation ^d.", bin (icmdat.confirm)); 764 go to error_return; 765 766 end perform_action; 767 768 /* Procedure that computes the offset between two Multics pointers in terms of 769* 18-bit FNP words. */ 770 771 fnp_offset: 772 proc (p1, p2) returns (fixed bin); 773 774 dcl (p1, p2) ptr; 775 dcl fnp_mem (0:127) bit (18) unal based (p1); /* A piece of FNP memory */ 776 dcl i fixed bin; 777 778 do i = lbound (fnp_mem, 1) to hbound (fnp_mem, 1); 779 if addr (fnp_mem (i)) = p2 780 then return (i); 781 end; 782 call sub_err_ (code, name, "s", null (), (0), "Unable to compute the offset between ^p and ^p", p1, p2); 783 return (100000); 784 785 end fnp_offset; 786 1 1 /* Begin include file ..... debug_fnp_data.incl.pl1 */ 1 2 1 3 /* Describes various structures used by the debug_fnp command */ 1 4 1 5 /* Written February 1977 by Larry Johnson */ 1 6 1 7 /* Structures describing a symbol table used by the debug_fnp command, 1 8* to find values for common FNP symbols. */ 1 9 1 10 dcl db_fnp_symbols_$db_fnp_symbols_ ext; 1 11 1 12 dcl symbol_tablep ptr; 1 13 1 14 dcl 1 symbol_table aligned based (symbol_tablep), 1 15 2 cnt fixed bin, /* Number of entries */ 1 16 2 maxcnt fixed bin, /* Max count */ 1 17 2 entry (symbol_table.cnt) unal, 1 18 3 one_symbol like sym unal; 1 19 1 20 dcl symp ptr; /* Pointer to one symbol */ 1 21 1 22 dcl 1 sym unal based (symp), 1 23 2 name char (6), 1 24 2 value fixed bin (17), 1 25 2 len fixed bin (17), /* Number of words */ 1 26 2 reloc fixed bin (17), 1 27 2 type fixed bin (17), 1 28 2 flag_mem char (6), /* If non blank, name of word in which this is a flag */ 1 29 2 explain bit (18), /* Offset to explanation for symbol */ 1 30 2 pad bit (18); 1 31 1 32 dcl exptextp ptr; 1 33 1 34 dcl 1 exptext aligned based (exptextp), /* Symbol explanation entry */ 1 35 2 len fixed bin (8) unal, 1 36 2 data char (exptext.len) unal; 1 37 1 38 /* Values for sym.reloc, which is relocation required to find the symbol */ 1 39 1 40 dcl (reloc_abs init (0), /* Value is absolute */ 1 41 reloc_tib init (1), /* Value is relative to current tib addr */ 1 42 reloc_hwcm init (2), /* Value is relative to current hwcm */ 1 43 reloc_sfcm init (3), /* Value is relative to software comm region */ 1 44 reloc_meters init (4)) /* Value is relative to tib meters */ 1 45 int static options (constant); 1 46 1 47 /* Values for sym.type, which is the mode to be used in displaying symbol */ 1 48 1 49 dcl (type_oct init (0), /* Octal, default for most symbols */ 1 50 type_char init (1), /* Ascii characters */ 1 51 type_addr init (2), /* Address to be converted to mod|offset */ 1 52 type_clock init (3), /* Multics clock value */ 1 53 type_inst init (4), /* Machine instruction */ 1 54 type_op init (5), /* Interpreter opblock format */ 1 55 type_dec init (6), /* Decimal */ 1 56 type_bit init (7), /* In bits */ 1 57 type_ebcdic init (8)) /* 8-bit ebcdic characters */ 1 58 int static options (constant); 1 59 1 60 dcl long_type_names (0:8) char (12) int static options (constant) init ( 1 61 "octal", "character", "address", "clock", "instruction", "opblock", "decimal", "bit", "ebcdic"); 1 62 dcl short_type_names (0:8) char (4) int static options (constant) init ( 1 63 "oct", "ch", "addr", "ck", "inst", "op", "dec", "bit", "ebc"); 1 64 1 65 1 66 /* Structure of suplmental data used in evaluating expressions */ 1 67 1 68 dcl expr_infop ptr; 1 69 1 70 dcl 1 expr_info aligned based (expr_infop), 1 71 2 flags, 1 72 3 star_known bit (1) unal, /* Value of "*" is known */ 1 73 3 tib_known bit (1) unal, /* TIB addresses may be used */ 1 74 3 hwcm_known bit (1) unal, /* HWCM address may be used */ 1 75 3 sfcm_known bit (1) unal, /* SFCM address may be used */ 1 76 3 pad bit (32) unal, 1 77 2 star_addr fixed bin, /* Value of "*" */ 1 78 2 tib_addr fixed bin, /* Address of TIB */ 1 79 2 hwcm_addr fixed bin, /* Address of HWCM */ 1 80 2 sfcm_addr fixed bin, /* Address of SFCM */ 1 81 2 type fixed bin, /* Expression type (mode for printing) */ 1 82 2 len fixed bin, /* Implied length of expression */ 1 83 2 user_tablep ptr; /* Pointer to a user symbol table */ 1 84 1 85 1 86 /* Structure of opcode table of machine instructions */ 1 87 1 88 dcl db_fnp_opcodes_$ ext; 1 89 1 90 dcl optablep ptr; 1 91 1 92 dcl 1 optable aligned based (optablep), 1 93 2 cnt fixed bin, 1 94 2 entry (optable.cnt) unal, 1 95 3 one_op like op; 1 96 1 97 dcl opp ptr; 1 98 1 99 dcl 1 op unal based (opp), 1 100 2 name char (6), /* The mneumonic */ 1 101 2 code bit (12), /* The opcode */ 1 102 2 mask bit (12), /* Mask that says where the opcode is */ 1 103 2 type fixed bin (11), /* Type of display required */ 1 104 2 pad bit (18); 1 105 1 106 /* Values for op.type are: 1 107* 0 - storage reference 1 108* 1 - non-storage reference (immediate), 1 109* 2 - non-storage reference (iacxn only), 1 110* 3 - non-storage reference (shifts), 1 111* 4 - non-storage reference (no operands) */ 1 112 1 113 1 114 /* Stuctures used while parsing commands into operands */ 1 115 1 116 dcl cmd_infop ptr; 1 117 1 118 dcl 1 cmd_info aligned based (cmd_infop), 1 119 2 inbuf char (256), /* For reading lines */ 1 120 2 opbuf char (256), /* Used for operand in undoubling quotes */ 1 121 2 commandp ptr, /* Address of unparsed part of command */ 1 122 2 commandl fixed bin, /* Length of unparsed part */ 1 123 2 operandp ptr, /* Address of current operand */ 1 124 2 operandl fixed bin, /* And its length */ 1 125 2 error bit (1), /* Set if error parsing operand */ 1 126 2 endline bit (1), /* Set if no more operands on line */ 1 127 2 opstring bit (1), /* Set if operand was unquoted string */ 1 128 2 flush bit (1), /* If set, rest of input line will be ignored */ 1 129 2 envp ptr; /* Pointer to the debug_fnp environment structure */ 1 130 1 131 dcl command char (cmd_info.commandl) based (cmd_info.commandp); 1 132 dcl operand char (cmd_info.operandl) based (cmd_info.operandp); 1 133 1 134 /* The following structure describes the current debug_fnp environment. */ 1 135 /* It specifies whether we are working on a dump, fnp, core image, etc. */ 1 136 1 137 dcl envp ptr; 1 138 1 139 dcl 1 env aligned based (envp), 1 140 2 corep ptr, /* Ptr to current dump or core-image. Null means live FNP */ 1 141 2 fnp fixed bin, /* Current fnp number */ 1 142 2 dump_dir char (168) unal, /* Directory where dumps are found */ 1 143 2 dir char (168) unal, /* Directory for current dump or core image */ 1 144 2 ename char (32) unal, /* Ename for current dump or core image */ 1 145 2 tty_name char (32), /* Name of current channel */ 1 146 2 segp ptr, /* Pointer to base of current segment */ 1 147 2 flags unal, 1 148 3 fnps_configured bit (8), /* Says which FNP's appear in config deck */ 1 149 3 fnp_sw bit (1), /* 1 if currently working on fnp */ 1 150 3 image_sw bit (1), /* 1 if currently working on a core-image */ 1 151 3 dump_sw bit (1), /* 1 if current working on a dump */ 1 152 3 fdump_sw bit (1), /* 1 if current dump is a fdump */ 1 153 3 pad bit (24), 1 154 2 dump_time fixed bin (71); /* Clock time dump occured */ 1 155 1 156 /* Structure of data defining table of interpreter opblock names */ 1 157 1 158 dcl db_fnp_opblocks_$ ext; 1 159 1 160 dcl opblock_tablep ptr; 1 161 1 162 dcl 1 opblock_table aligned based (opblock_tablep), 1 163 2 cnt fixed bin, 1 164 2 name (0:opblock_table.cnt) char (6) unal; 1 165 1 166 /* End include file ..... debug_fnp_data.incl.pl1 */ 787 788 789 end db_fnp_scheduler_; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/15/82 1449.4 db_fnp_scheduler_.pl1 >dumps>old>recomp>db_fnp_scheduler_.pl1 787 1 06/19/81 2115.0 debug_fnp_data.incl.pl1 >ldd>include>debug_fnp_data.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. a 1(18) based bit(18) level 2 in structure "savtab" packed unaligned dcl 142 in procedure "db_fnp_scheduler_" set ref 557* a parameter fixed bin(17,0) dcl 627 in procedure "fetch" set ref 624 631* 634* 636* 636 639 642* 645* 647* 647 act parameter fixed bin(17,0) dcl 736 set ref 733 750 760* action 000534 automatic bit(18) level 2 packed unaligned dcl 106 set ref 751 751 addr builtin function dcl 179 ref 239 239 247 247 342 342 342 342 342 342 379 379 546 549 672 672 680 680 704 704 749 749 749 749 749 749 751 751 751 751 751 751 752 752 779 address 2 000360 automatic fixed bin(17,0) array level 3 dcl 89 set ref 399 alloc_more_than_1 000343 automatic fixed bin(35,0) dcl 75 set ref 255* 266* 294 294 alloc_time 000341 automatic fixed bin(35,0) dcl 73 set ref 253* 264* 280 282 283 alloc_updates 000342 automatic fixed bin(35,0) dcl 74 set ref 254* 265* 280 282 294 294 allocate 000542 automatic structure level 2 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" allocate 000037 internal static structure array level 2 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" areap 000014 internal static pointer initial dcl 186 set ref 535 536 597* 722 arg_cmd_infop parameter pointer dcl 26 ref 215 312 347 527 582 arg_corep parameter pointer dcl 23 ref 215 312 347 527 579 arg_expr_infop parameter pointer dcl 25 ref 215 312 347 527 581 arg_fnp parameter fixed bin(17,0) dcl 24 ref 215 312 347 527 580 avg_all_time 000352 automatic float bin(27) dcl 82 set ref 282* 289* avg_alloc_time 000350 automatic float bin(27) dcl 80 set ref 280* 289* avg_free_time 000351 automatic float bin(27) dcl 81 set ref 281* 289* base 3 000534 automatic bit(18) level 2 packed unaligned dcl 106 set ref 724 bin builtin function dcl 179 ref 240 251 252 262 263 271 303 304 321 321 326 389 389 394 406 421 424 464 464 466 484 487 490 498 507 516 534 539 539 541 541 552 673 681 721 723 723 723 723 724 725 750 753 763 763 bit builtin function dcl 179 ref 750 buf_meter_addr 000264 automatic fixed bin(17,0) dcl 45 set ref 240* 241 247* buf_meters 000542 automatic structure level 1 dcl 118 set ref 247 247 305 cleanup 000552 stack reference condition dcl 176 ref 376 447 531 cmd_info based structure level 1 dcl 1-118 cmd_infop 000570 automatic pointer dcl 1-116 set ref 221 223 223 223 223 233 233 233 318 326 326 329 329 329 352 358 358 360 360 362 362 364 364 366 366 366 366 369 369 369 434 438 438 441 441 441 582* 619 657* 658 code 000263 automatic fixed bin(35,0) dcl 44 set ref 379* 380 382* 451* 452 510* 511 513* 631* 632 634* 636* 642* 643 645* 647* 782* com_err_ 000144 constant entry external dcl 161 ref 382 513 634 636 645 647 confirm 0(18) 000534 automatic bit(18) level 2 packed unaligned dcl 106 set ref 749 749 756 758 763 763 constants_setup 000016 internal static bit(1) initial unaligned dcl 187 set ref 591 599* conversion 000560 stack reference condition dcl 177 ref 325 437 corep 000100 automatic pointer dcl 31 set ref 225 249 334 379* 510* 579* 631* 642* 741 count 5 000525 automatic bit(18) level 2 packed unaligned dcl 95 set ref 534 crbtm 000011 internal static fixed bin(17,0) dcl 184 set ref 239* 595* crskd 000010 internal static fixed bin(17,0) dcl 183 set ref 594* 672* data based bit(36) array unaligned dcl 125 set ref 391 391 392 394 406 463 463 464 464 466 483 483 484 484 487 490 494 494 498 498* 504 504 505 507 516 607 722 data_high 000265 automatic fixed bin(17,0) dcl 46 set ref 391 463 483 494 504 607 721* 722 datap 000266 automatic pointer initial dcl 47 set ref 47* 391 391 392 394 406 463 463 464 464 466 483 483 484 484 487 490 494 494 498 498 504 504 505 507 516 607 607 722* 723* db_fnp_memory_$fetch 000162 constant entry external dcl 168 ref 631 db_fnp_memory_$store 000164 constant entry external dcl 169 ref 642 db_fnp_reader_$get_operand 000166 constant entry external dcl 170 ref 657 db_fnp_sym_util_$get_value 000156 constant entry external dcl 166 ref 594 595 596 db_fnp_util_$edit_module_addr_force 000170 constant entry external dcl 171 ref 510 db_fnp_util_$get_special_modch 000160 constant entry external dcl 167 ref 379 delta_cycles 000337 automatic fixed bin(35,0) dcl 71 set ref 251* 262* 271 279 delta_idle_count 000340 automatic fixed bin(35,0) dcl 72 set ref 252* 263* 275 discnt 5 000534 automatic bit(36) level 2 packed unaligned dcl 106 set ref 389 424 divide builtin function dcl 179 ref 538 540 679 703 721 dsptab based structure level 1 packed unaligned dcl 130 in procedure "db_fnp_scheduler_" dsptab based structure array level 2 in structure "sched_dsptab" packed unaligned dcl 127 in procedure "db_fnp_scheduler_" set ref 546 dsptab_addr 5(18) 000525 automatic bit(18) level 2 packed unaligned dcl 95 set ref 539 539 dsptabp 000324 automatic pointer dcl 65 set ref 546* 547 547 552 552 555 564 edited_addr 000300 automatic varying char(32) dcl 56 set ref 510* 517* endline 210 based bit(1) level 2 dcl 1-118 ref 221 318 352 434 entries 1 000360 automatic structure array level 2 dcl 89 set ref 378 error 207 based bit(1) level 2 dcl 1-118 ref 658 etmb 000012 internal static fixed bin(17,0) dcl 185 set ref 596* 752* execution 0(01) based bit(1) level 2 packed unaligned dcl 130 ref 547 552 555 564 expr_infop 000566 automatic pointer dcl 1-68 set ref 581* first_exec_found 000322 automatic bit(1) unaligned dcl 64 set ref 543* 552 555 564* fixed builtin function dcl 179 ref 507 float builtin function dcl 179 ref 275 275 280 280 281 281 282 282 283 283 284 284 294 294 294 294 294 294 417 417 421 421 424 424 438 474 474 478 507 516 516 flush 212 based bit(1) level 2 dcl 1-118 set ref 619* fnp 000102 automatic fixed bin(17,0) dcl 32 set ref 251 252 253 254 255 257 258 259 303 304 305 379* 510* 580* 631* 642* fnp_mem based bit(18) array unaligned dcl 775 set ref 778 778 779 fnp_word 000671 automatic bit(18) array unaligned dcl 739 in procedure "perform_action" set ref 748* 749 749 750* 751 751 752 752 753 fnp_word 000643 automatic bit(18) array unaligned dcl 670 in procedure "read_skdata" set ref 672 672 673 fnp_word 000320 automatic fixed bin(17,0) array unaligned dcl 62 in procedure "db_fnp_scheduler_" set ref 239 239 240 341* 342 342 fraction_to_print 000311 automatic float bin(27) dcl 57 set ref 434* 438* 439 439 476 478 free 4 000037 internal static structure array level 2 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" free 4 000542 automatic structure level 2 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" free_more_than_1 000346 automatic fixed bin(35,0) dcl 78 set ref 259* 269* 294 294 free_time 000344 automatic fixed bin(35,0) dcl 76 set ref 257* 267* 281 282 284 free_updates 000345 automatic fixed bin(35,0) dcl 77 set ref 258* 268* 281 282 294 294 get_line_length_$switch 000154 constant entry external dcl 165 ref 451 get_system_free_area_ 000150 constant entry external dcl 163 ref 597 hbound builtin function dcl 179 ref 378 391 463 483 494 504 778 hist_len 000275 automatic fixed bin(17,0) dcl 53 set ref 459* 474 508 hits_removed 000312 automatic fixed bin(71,0) dcl 58 set ref 479* 480 493* 493 494 hits_to_remove 000314 automatic fixed bin(71,0) dcl 59 set ref 478* 480 494 i 000652 automatic fixed bin(17,0) dcl 692 in procedure "read_icmdat" set ref 703* 704* i 000670 automatic fixed bin(17,0) dcl 738 in procedure "perform_action" set ref 753* 754 i 000110 automatic fixed bin(17,0) dcl 36 in procedure "db_fnp_scheduler_" set ref 326* 327 327 341 391* 392 394 395 406* 416* 417 417 417* 463* 464 464 466* 483* 484 484 487 490* 494* 498 498* 504* 505 507 509 516* 538* 539* 540* 541* 545* 546 549 551* 551* i 000642 automatic fixed bin(17,0) dcl 669 in procedure "read_skdata" set ref 679* 680* i 000700 automatic fixed bin(17,0) dcl 776 in procedure "fnp_offset" set ref 778* 779 779* ic 3 based bit(18) level 2 packed unaligned dcl 142 set ref 562* ic_addr 000273 automatic fixed bin(17,0) dcl 51 set ref 395* 399 509* 510* 513* icmdat 000534 automatic structure level 1 packed unaligned dcl 106 set ref 703 704 704 749 749 751 751 icmdat_addr 4(18) 000525 automatic bit(18) level 2 in structure "skdata" packed unaligned dcl 95 in procedure "db_fnp_scheduler_" set ref 681 icmdat_addr 000260 automatic fixed bin(17,0) dcl 41 in procedure "db_fnp_scheduler_" set ref 681* 697 704* 749 751 icmdat_addr_known 000261 automatic bit(1) initial unaligned dcl 42 set ref 42* 682* 695 idle_fraction 000357 automatic float bin(27) dcl 87 set ref 275* 276 285 286 idle_increments 1 000525 automatic bit(36) level 2 packed unaligned dcl 95 set ref 251 262 303 increments 5 000037 internal static fixed bin(35,0) array level 3 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" set ref 258 increments 1 000037 internal static fixed bin(35,0) array level 3 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" set ref 254 increments 5 000542 automatic fixed bin(35,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 258 268 increments 1 000542 automatic fixed bin(35,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 254 265 ind 2(18) based bit(18) level 2 packed unaligned dcl 142 set ref 561* instances_over_1 2 000037 internal static fixed bin(35,0) array level 3 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" set ref 255 instances_over_1 2 000542 automatic fixed bin(35,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 255 266 instances_over_1 6 000542 automatic fixed bin(35,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 259 269 instances_over_1 6 000037 internal static fixed bin(35,0) array level 3 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" set ref 259 interval 4 000525 automatic bit(18) level 2 packed unaligned dcl 95 set ref 321 321 342 342 ioa_ 000142 constant entry external dcl 160 ref 227 233 243 272 276 288 289 291 292 294 298 321 329 336 354 369 413 417 421 424 441 456 471 517 551 554 557 558 559 560 561 562 569 676 699 717 743 760 763 iox_$user_output 000172 external static pointer dcl 173 set ref 451* j 000111 automatic fixed bin(17,0) dcl 36 set ref 398* 399 403* 507* 508* 508 517* 552* 554 lbound builtin function dcl 179 ref 391 463 483 494 504 778 length builtin function dcl 179 ref 538 540 679 703 line_length 000274 automatic fixed bin(17,0) dcl 52 set ref 451* 452* 454 456* 459 max builtin function dcl 179 ref 508 max_hits 000276 automatic fixed bin(35,0) dcl 54 set ref 461* 464 464* 469 474 481 max_idle_count 2 000525 automatic bit(36) level 2 packed unaligned dcl 95 set ref 271 maximum_time 7 000542 automatic fixed bin(17,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 298* maximum_time 3 000542 automatic fixed bin(17,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 298* mdisp_desc 000100 constant char(20) initial array unaligned dcl 197 set ref 551* min builtin function dcl 179 ref 508 753 min_hits 000316 automatic fixed bin(35,0) dcl 60 set ref 481* 484 487* 490 493 498 min_j 000112 automatic fixed bin(17,0) dcl 37 set ref 397* 403* 406 406 406 min_offset 000272 automatic fixed bin(17,0) dcl 50 set ref 396* 400 402* modch 000360 automatic structure level 1 dcl 89 set ref 379 379 module_counts 000114 automatic fixed bin(71,0) array dcl 40 set ref 388* 406* 406 417 417 n parameter fixed bin(17,0) dcl 628 set ref 624 631* 634 636 639 642* 645 647 n_min_hits 000317 automatic fixed bin(17,0) dcl 61 set ref 482* 488* 490* 490 493 name 000143 constant char(17) initial unaligned dcl 195 in procedure "db_fnp_scheduler_" set ref 382* 513* 634* 636* 642* 645* 647* 782* name 1 000360 automatic char(4) array level 3 in structure "modch" dcl 89 in procedure "db_fnp_scheduler_" set ref 417* nmodules 000360 automatic fixed bin(17,0) level 2 dcl 89 set ref 378* 398 416 null builtin function dcl 179 ref 47 68 69 225 249 334 607 609 611 741 782 782 offset 000113 automatic fixed bin(17,0) dcl 39 set ref 399* 400 400 402 op based structure level 1 packed unaligned dcl 1-99 operand based char unaligned dcl 1-132 set ref 223 223 233* 326 329* 358 360 362 364 366 366 369* 438 441* operandl 206 based fixed bin(17,0) level 2 dcl 1-118 ref 223 223 233 233 326 329 329 358 360 362 364 366 366 369 369 438 441 441 operandp 204 based pointer level 2 dcl 1-118 ref 223 223 233 326 329 358 360 362 364 366 366 369 438 441 out_of_range 4 000534 automatic bit(36) level 2 packed unaligned dcl 106 set ref 389 421 421 p parameter pointer dcl 629 set ref 624 631* 639 642* p1 parameter pointer dcl 774 set ref 771 778 778 779 782* p2 parameter pointer dcl 774 set ref 771 779 782* pct_alloc 000353 automatic float bin(27) dcl 83 set ref 283* 285 291* 291 pct_alloc_non_idle 000355 automatic float bin(27) dcl 85 set ref 285* 292* 292 pct_free 000354 automatic float bin(27) dcl 84 set ref 284* 286 291* 291 pct_free_non_idle 000356 automatic float bin(27) dcl 86 set ref 286* 292* 292 q 2 based bit(18) level 2 packed unaligned dcl 142 set ref 557* request based bit(1) level 2 packed unaligned dcl 130 ref 547 552 reset_sw 000336 automatic bit(1) unaligned dcl 70 set ref 221* 230* 301 saved_buf_meters 000037 internal static structure array level 1 dcl 191 set ref 305* 598* saved_idle_count 000027 internal static fixed bin(35,0) initial array dcl 189 set ref 252 304* saved_idle_increments 000017 internal static fixed bin(35,0) initial array dcl 188 set ref 251 303* savtab based structure array level 2 in structure "sched_savtab" packed unaligned dcl 139 in procedure "db_fnp_scheduler_" set ref 549 savtab based structure level 1 packed unaligned dcl 142 in procedure "db_fnp_scheduler_" savtab_addr 6 000525 automatic bit(18) level 2 packed unaligned dcl 95 set ref 541 541 savtabp 000326 automatic pointer dcl 66 set ref 549* 557 557 558 559 560 561 562 scale 000277 automatic float bin(27) dcl 55 set ref 474* 507 sched_dsptab based structure level 1 packed unaligned dcl 127 set ref 535 538 609 sched_dsptabp 000332 automatic pointer initial dcl 68 set ref 68* 535* 538 539* 546 609 609 sched_savtab based structure level 1 packed unaligned dcl 139 set ref 536 540 611 sched_savtabp 000334 automatic pointer initial dcl 69 set ref 69* 536* 540 541* 549 611 611 shift 2(18) 000534 automatic bit(18) level 2 packed unaligned dcl 106 set ref 725 skdata 000525 automatic structure level 1 packed unaligned dcl 95 set ref 342 342 679 680 680 skdata_addr 000262 automatic fixed bin(17,0) dcl 43 set ref 342 673* 674 680* skdata_count 000330 automatic fixed bin(17,0) dcl 67 set ref 534* 535 536 538 540 545 609 611 something_printed 000321 automatic bit(1) unaligned dcl 63 set ref 544* 550* 569 state_msgs 000000 constant char(32) initial array unaligned dcl 201 set ref 554* string builtin function dcl 179 ref 538 540 679 703 sub_err_ 000146 constant entry external dcl 162 ref 782 subr_time_meters based structure level 1 dcl 152 sym based structure level 1 packed unaligned dcl 1-22 system_area based area(1024) dcl 124 ref 535 536 722 table_addr 1(18) 000534 automatic bit(18) level 2 packed unaligned dcl 106 set ref 715 723 723 table_base 000270 automatic fixed bin(17,0) dcl 48 set ref 395 509 724* table_len 2 000534 automatic bit(18) level 2 packed unaligned dcl 106 set ref 715 721 723 723 table_mult 000271 automatic fixed bin(17,0) dcl 49 set ref 395 509 725* theoretical_max 000103 automatic fixed bin(35,0) dcl 33 set ref 271* 272 275 timer_manager_$sleep 000152 constant entry external dcl 164 ref 754 total_count 000106 automatic fixed bin(71,0) dcl 35 set ref 389* 394* 394 411 417 421 424 462* 466* 466 478 516 total_idle_count 000525 automatic bit(36) level 2 packed unaligned dcl 95 set ref 252 263 304 total_time 000037 internal static fixed bin(35,0) array level 3 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" set ref 253 total_time 000347 automatic fixed bin(35,0) dcl 79 in procedure "db_fnp_scheduler_" set ref 279* 283 284 total_time 4 000542 automatic fixed bin(35,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 257 267 total_time 4 000037 internal static fixed bin(35,0) array level 3 in structure "saved_buf_meters" dcl 191 in procedure "db_fnp_scheduler_" set ref 257 total_time 000542 automatic fixed bin(35,0) level 3 in structure "buf_meters" dcl 118 in procedure "db_fnp_scheduler_" set ref 253 264 x 000104 automatic float bin(27) dcl 34 set ref 516* 517* x1 based bit(18) level 2 packed unaligned dcl 142 set ref 558* x2 0(18) based bit(18) level 2 packed unaligned dcl 142 set ref 559* x3 1 based bit(18) level 2 packed unaligned dcl 142 set ref 560* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. arg_code automatic fixed bin(35,0) dcl 27 command based char unaligned dcl 1-131 db_fnp_opblocks_$ external static fixed bin(17,0) dcl 1-158 db_fnp_opcodes_$ external static fixed bin(17,0) dcl 1-88 db_fnp_symbols_$db_fnp_symbols_ external static fixed bin(17,0) dcl 1-10 env based structure level 1 dcl 1-139 envp automatic pointer dcl 1-137 error_table_$unimplemented_version external static fixed bin(35,0) dcl 174 expr_info based structure level 1 dcl 1-70 exptext based structure level 1 dcl 1-34 exptextp automatic pointer dcl 1-32 fnp_word automatic bit(18) array unaligned dcl 693 long_type_names internal static char(12) initial array unaligned dcl 1-60 mix_offset automatic fixed bin(17,0) dcl 38 opblock_table based structure level 1 dcl 1-162 opblock_tablep automatic pointer dcl 1-160 opp automatic pointer dcl 1-97 optable based structure level 1 dcl 1-92 optablep automatic pointer dcl 1-90 reloc_abs internal static fixed bin(17,0) initial dcl 1-40 reloc_hwcm internal static fixed bin(17,0) initial dcl 1-40 reloc_meters internal static fixed bin(17,0) initial dcl 1-40 reloc_sfcm internal static fixed bin(17,0) initial dcl 1-40 reloc_tib internal static fixed bin(17,0) initial dcl 1-40 short_type_names internal static char(4) initial array unaligned dcl 1-62 symbol_table based structure level 1 dcl 1-14 symbol_tablep automatic pointer dcl 1-12 symp automatic pointer dcl 1-20 type_addr internal static fixed bin(17,0) initial dcl 1-49 type_bit internal static fixed bin(17,0) initial dcl 1-49 type_char internal static fixed bin(17,0) initial dcl 1-49 type_clock internal static fixed bin(17,0) initial dcl 1-49 type_dec internal static fixed bin(17,0) initial dcl 1-49 type_ebcdic internal static fixed bin(17,0) initial dcl 1-49 type_inst internal static fixed bin(17,0) initial dcl 1-49 type_oct internal static fixed bin(17,0) initial dcl 1-49 type_op internal static fixed bin(17,0) initial dcl 1-49 NAMES DECLARED BY EXPLICIT CONTEXT. bad_fraction 002742 constant label dcl 441 ref 437 bad_interval 002010 constant label dcl 329 ref 325 clean_up 004306 constant entry internal dcl 604 ref 376 426 447 521 531 571 617 db_fnp_scheduler_ 000767 constant entry external dcl 18 error_return 004157 constant label dcl 617 ref 228 234 331 337 355 370 383 443 637 648 658 677 700 718 744 761 764 fetch 004355 constant entry internal dcl 624 ref 239 247 539 541 672 680 704 723 752 fnp_offset 005327 constant entry internal dcl 771 ref 342 749 751 get_operand 004646 constant entry internal dcl 654 ref 220 317 351 432 ic_sample 002107 constant entry external dcl 347 ic_sample_hist 002667 constant label dcl 432 ref 366 ic_sample_hist_return 003462 constant label dcl 521 ref 457 472 514 ic_sample_module 002243 constant label dcl 376 ref 364 ic_sample_module_return 002662 constant label dcl 426 ref 414 idle_time 001003 constant entry external dcl 215 mdisp_data 003471 constant entry external dcl 527 perform_action 005103 constant entry internal dcl 733 ref 358 360 362 read_data 004774 constant entry internal dcl 711 ref 386 449 read_icmdat 004741 constant entry internal dcl 689 ref 714 747 755 read_skdata 004662 constant entry internal dcl 666 ref 237 320 340 533 695 sample_time 001712 constant entry external dcl 312 setup 004167 constant entry internal dcl 576 ref 218 315 350 530 setup_constants 004206 constant entry internal dcl 588 ref 583 store 004501 constant entry internal dcl 639 ref 342 749 751 NAME DECLARED BY CONTEXT OR IMPLICATION. unspec builtin function ref 598 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 6112 6306 5602 6122 Length 6602 5602 174 257 310 130 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME db_fnp_scheduler_ 960 external procedure is an external procedure. on unit on line 325 64 on unit on unit on line 376 64 on unit on unit on line 437 64 on unit on unit on line 447 64 on unit on unit on line 531 64 on unit setup internal procedure shares stack frame of external procedure db_fnp_scheduler_. setup_constants internal procedure shares stack frame of external procedure db_fnp_scheduler_. clean_up 64 internal procedure is called by several nonquick procedures. fetch internal procedure shares stack frame of external procedure db_fnp_scheduler_. get_operand internal procedure shares stack frame of external procedure db_fnp_scheduler_. read_skdata internal procedure shares stack frame of external procedure db_fnp_scheduler_. read_icmdat internal procedure shares stack frame of external procedure db_fnp_scheduler_. read_data internal procedure shares stack frame of external procedure db_fnp_scheduler_. perform_action internal procedure shares stack frame of external procedure db_fnp_scheduler_. fnp_offset internal procedure shares stack frame of external procedure db_fnp_scheduler_. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 crskd db_fnp_scheduler_ 000011 crbtm db_fnp_scheduler_ 000012 etmb db_fnp_scheduler_ 000014 areap db_fnp_scheduler_ 000016 constants_setup db_fnp_scheduler_ 000017 saved_idle_increments db_fnp_scheduler_ 000027 saved_idle_count db_fnp_scheduler_ 000037 saved_buf_meters db_fnp_scheduler_ STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME db_fnp_scheduler_ 000100 corep db_fnp_scheduler_ 000102 fnp db_fnp_scheduler_ 000103 theoretical_max db_fnp_scheduler_ 000104 x db_fnp_scheduler_ 000106 total_count db_fnp_scheduler_ 000110 i db_fnp_scheduler_ 000111 j db_fnp_scheduler_ 000112 min_j db_fnp_scheduler_ 000113 offset db_fnp_scheduler_ 000114 module_counts db_fnp_scheduler_ 000260 icmdat_addr db_fnp_scheduler_ 000261 icmdat_addr_known db_fnp_scheduler_ 000262 skdata_addr db_fnp_scheduler_ 000263 code db_fnp_scheduler_ 000264 buf_meter_addr db_fnp_scheduler_ 000265 data_high db_fnp_scheduler_ 000266 datap db_fnp_scheduler_ 000270 table_base db_fnp_scheduler_ 000271 table_mult db_fnp_scheduler_ 000272 min_offset db_fnp_scheduler_ 000273 ic_addr db_fnp_scheduler_ 000274 line_length db_fnp_scheduler_ 000275 hist_len db_fnp_scheduler_ 000276 max_hits db_fnp_scheduler_ 000277 scale db_fnp_scheduler_ 000300 edited_addr db_fnp_scheduler_ 000311 fraction_to_print db_fnp_scheduler_ 000312 hits_removed db_fnp_scheduler_ 000314 hits_to_remove db_fnp_scheduler_ 000316 min_hits db_fnp_scheduler_ 000317 n_min_hits db_fnp_scheduler_ 000320 fnp_word db_fnp_scheduler_ 000321 something_printed db_fnp_scheduler_ 000322 first_exec_found db_fnp_scheduler_ 000324 dsptabp db_fnp_scheduler_ 000326 savtabp db_fnp_scheduler_ 000330 skdata_count db_fnp_scheduler_ 000332 sched_dsptabp db_fnp_scheduler_ 000334 sched_savtabp db_fnp_scheduler_ 000336 reset_sw db_fnp_scheduler_ 000337 delta_cycles db_fnp_scheduler_ 000340 delta_idle_count db_fnp_scheduler_ 000341 alloc_time db_fnp_scheduler_ 000342 alloc_updates db_fnp_scheduler_ 000343 alloc_more_than_1 db_fnp_scheduler_ 000344 free_time db_fnp_scheduler_ 000345 free_updates db_fnp_scheduler_ 000346 free_more_than_1 db_fnp_scheduler_ 000347 total_time db_fnp_scheduler_ 000350 avg_alloc_time db_fnp_scheduler_ 000351 avg_free_time db_fnp_scheduler_ 000352 avg_all_time db_fnp_scheduler_ 000353 pct_alloc db_fnp_scheduler_ 000354 pct_free db_fnp_scheduler_ 000355 pct_alloc_non_idle db_fnp_scheduler_ 000356 pct_free_non_idle db_fnp_scheduler_ 000357 idle_fraction db_fnp_scheduler_ 000360 modch db_fnp_scheduler_ 000525 skdata db_fnp_scheduler_ 000534 icmdat db_fnp_scheduler_ 000542 buf_meters db_fnp_scheduler_ 000566 expr_infop db_fnp_scheduler_ 000570 cmd_infop db_fnp_scheduler_ 000642 i read_skdata 000643 fnp_word read_skdata 000652 i read_icmdat 000670 i perform_action 000671 fnp_word perform_action 000700 i fnp_offset THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. fx1_to_fl2 call_ext_out_desc call_ext_out call_int_this call_int_other return fl2_to_fx2 tra_ext mpfx2 enable ext_entry int_entry real_to_real_rd any_to_any_rd any_to_any_tr divide_fx3 alloc_based free_based THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. com_err_ db_fnp_memory_$fetch db_fnp_memory_$store db_fnp_reader_$get_operand db_fnp_sym_util_$get_value db_fnp_util_$edit_module_addr_force db_fnp_util_$get_special_modch decimal_exp2_ get_line_length_$switch get_system_free_area_ ioa_ sub_err_ timer_manager_$sleep THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. iox_$user_output LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 42 000757 47 000760 68 000762 69 000763 18 000766 215 000775 218 001011 220 001012 221 001013 223 001020 225 001032 227 001036 228 001052 230 001053 231 001055 233 001056 234 001101 237 001102 239 001103 240 001122 241 001125 243 001126 244 001142 247 001143 249 001151 251 001155 252 001165 253 001173 254 001204 255 001212 257 001220 258 001226 259 001234 260 001242 262 001243 263 001246 264 001251 265 001253 266 001255 267 001257 268 001261 269 001263 271 001265 272 001274 275 001314 276 001322 279 001350 280 001353 281 001363 282 001373 283 001410 284 001417 285 001423 286 001430 288 001433 289 001447 291 001475 292 001526 294 001557 298 001644 301 001667 303 001671 304 001676 305 001701 308 001707 312 001710 315 001720 317 001721 318 001722 320 001725 321 001726 322 001751 325 001752 326 001771 327 002004 329 002010 331 002037 334 002040 336 002044 337 002060 340 002061 341 002062 342 002065 343 002104 347 002105 350 002115 351 002116 352 002117 354 002122 355 002141 358 002142 360 002155 362 002166 364 002177 366 002203 369 002213 370 002241 372 002242 376 002243 378 002265 379 002267 380 002306 382 002310 383 002334 386 002335 388 002336 389 002351 391 002360 392 002366 394 002373 395 002402 396 002410 397 002412 398 002414 399 002423 400 002430 402 002433 403 002434 405 002436 406 002440 409 002455 411 002457 413 002461 414 002475 416 002476 417 002505 419 002552 421 002554 424 002620 426 002662 428 002666 432 002667 434 002670 437 002676 438 002715 439 002736 441 002742 443 002766 447 002767 449 003011 451 003012 452 003025 454 003031 456 003034 457 003054 459 003055 461 003057 462 003060 463 003062 464 003070 466 003105 467 003110 469 003112 471 003114 472 003130 474 003131 476 003140 478 003143 479 003154 480 003156 481 003161 482 003163 483 003164 484 003172 487 003206 488 003210 489 003212 490 003213 492 003215 493 003217 494 003223 498 003233 500 003253 501 003255 504 003256 505 003264 507 003271 508 003305 509 003314 510 003322 511 003352 513 003354 514 003404 516 003405 517 003425 519 003460 521 003462 523 003466 527 003467 530 003477 531 003500 533 003522 534 003523 535 003526 536 003540 538 003552 539 003557 540 003564 541 003571 543 003576 544 003577 545 003600 546 003607 547 003613 549 003623 550 003630 551 003632 552 003662 554 003702 555 003722 557 003731 558 003762 559 004003 560 004027 561 004051 562 004076 564 004120 567 004127 569 004131 571 004152 572 004156 617 004157 619 004163 620 004166 576 004167 579 004170 580 004174 581 004176 582 004201 583 004204 584 004205 588 004206 591 004207 594 004213 595 004231 596 004250 597 004267 598 004276 599 004302 600 004304 604 004305 607 004313 609 004324 611 004340 613 004354 624 004355 631 004357 632 004401 634 004404 636 004441 637 004500 639 004501 642 004503 643 004546 645 004551 647 004606 648 004645 654 004646 657 004647 658 004656 660 004661 666 004662 672 004663 673 004702 674 004705 676 004707 677 004723 679 004724 680 004727 681 004733 682 004736 683 004740 689 004741 695 004742 697 004745 699 004747 700 004763 703 004764 704 004767 705 004773 711 004774 714 004775 715 004776 717 005006 718 005022 721 005023 722 005031 723 005040 724 005050 725 005053 726 005102 733 005103 741 005105 743 005111 744 005125 747 005126 748 005127 749 005131 750 005152 751 005160 752 005177 753 005216 754 005231 755 005251 756 005252 758 005260 760 005262 761 005303 763 005304 764 005326 771 005327 778 005331 779 005335 781 005352 782 005354 783 005430 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved