%!PS-Adobe- PostScript translation of Interpress master
%%DocumentFonts: unknown
%%Creator: weiser
%%Pages: 27
%%EndComments
% Simple procedures (others defined as needed)
/width {stringwidth pop} bind def                   % stack: text
/vec {moveto lineto stroke} bind def                % stack: x y
/nsp {0 exch {32 eq {1 add} if} forall} bind def    % stack: txt -> #spaces
/try {dup where {exch get} {pop 0} ifelse} bind def % stack: value                         
%%EndProlog

%%page 1
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      /Times-Roman findfont 10.0375 scalefont
      /font0 exch def
      font0 setfont
      315.6182 50.589 moveto
      (1) show
      220.4398 713.8666 moveto
      /Times-Bold findfont 10.0375 scalefont
      /font1 exch def
      font1 setfont
      (Weiser, ) show
      font0 setfont
      (August 4, 1993 2:39 pm PDT) show
      223.2288 695.7994 moveto
      font0 setfont
      (Chauser, August 4, 1993 2:50 pm PDT) show
      72.26999 635.5745 moveto
      /Helvetica-Bold findfont 16.06 scalefont
      /font2 exch def
      font2 setfont
      (Using Threads in Interactive Systems: A Case Study  ) show
      72.26999 599.4394 moveto
      /Helvetica findfont 12.045 scalefont
      /font3 exch def
      font3 setfont
      (Carl Hauser, Christian Jacobi, Marvin Theimer, Brent Welch and Mark Weiser) show
      72.26999 587.3943 moveto
      72.26999 575.3494 moveto
      font3 setfont
      (Xerox PARC) show
      72.26999 563.3043 moveto
      font3 setfont
      (3333 Coyote Hill Road) show
      72.26999 551.2595 moveto
      font3 setfont
      (Palo Alto, California  94304) show
      72.26999 515.1245 moveto
      font3 setfont
      (Correspondence should be addressed to:) show
      72.26999 478.9894 moveto
      font3 setfont
      (Mark Weiser) show
      72.26999 466.9444 moveto
      font3 setfont
      (Xerox PARC) show
      72.26999 454.8995 moveto
      font3 setfont
      (3333 Coyote Hill Road) show
      72.26999 442.8546 moveto
      font3 setfont
      (Palo Alto, California  94304) show
      72.26999 430.8095 moveto
      72.26999 418.7644 moveto
      font3 setfont
      (weiser@xerox.com) show
      72.26999 86.72403 moveto
      grestore
   grestore
% end page 1
showpage
%%page 2
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.5476 746.79 moveto
      (2) show
      72.26999 713.8666 moveto
      font2 setfont
      (Using Threads in Interactive Systems: A Case Study  ) show
      72.26999 675.1622 moveto
      /colwidth 466.9821 def
      gsave
         /Helvetica-Bold findfont 10.0375 scalefont
         /font4 exch def
         /Helvetica findfont 10.0375 scalefont
         /font5 exch def
         
/execget {arindex get dup null eq {pop} {exec} ifelse} bind def
/mixedjustify {
    /excess colwidth totwidth sub def
    0 1 npiece {
        /arindex exch def
        opsbef execget                   % exec any accumu before ops
        nspaces arindex get              % stack: nspaces
        dup 0 eq {                       % stack: nspaces
            pop texts arindex get        % stack: text
            show                         % stack: NULL
            }{ 
            weights arindex get          % stack: nspaces weight
            totwt div excess mul         % stack: nspaces share-excess
            exch div 0 32                % stack: spaceadd 0 32
            texts arindex get            % stack: spaceadd 0 32 text
            widthshow                    % stack: NULL
            } ifelse
        opsaft execget                   % exec any accumulated after ops
        } for
    /totwidth 0 def /totwt 0.0 def
    } bind def
/buf {                                   % stack: text npiece
    /npiece exch def                     % stack: text
    dup nsp /ns exch def                 % stack: text
    dup texts npiece 3 -1 roll put       % stack: text
    nspaces npiece ns put width          % stack: width
    totwidth add /totwidth exch def      % stack: NULL
    ns 0 ne {
       ( ) width ns mul                  % stack: weight
       dup totwt add /totwt exch def     % stack: weight
       weights npiece 3 -1 roll put      % stack: NULL
       } if
    } bind def
/texts 250 array def
/nspaces 250 array def
/weights 250 array def
/opsbef 250 array def
/opsaft 250 array def
/totwidth 0 def
/totwt 0.0 def

font4 setfont
         opsbef 0 {font4 setfont} put
         (Abstract. ) 0 buf
         opsaft 0 null put
         font5 setfont
         opsbef 1 {font5 setfont} put
         (We describe the results of examining two large research and commercial systems for the) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      72.26999 663.1174 moveto
      /colwidth 466.9818 def
      gsave
         
/justify {                               % stack: text
    dup nsp /ns exch def                 % stack: text
    ns 0 eq {show} {                     % stack: text
        dup width /totwidth try add      % stack: text width
        colwidth exch sub                % stack: text excess
        ns div                           % stack: text spaceadd
        0 32 4 -1 roll                   % stack: spaceadd 0 32 text
        widthshow /totwidth 0 def        % stack: NULL
        } ifelse
    } bind def

font5 setfont
         (ways that they use threads. We used two methods: reading the code and doing microsecond analysis) justify
         grestore
      72.26999 651.0724 moveto
      /colwidth 466.9821 def
      gsave
         /Helvetica-Oblique findfont 10.0375 scalefont
         /font6 exch def
         font5 setfont
         opsbef 0 {font5 setfont} put
         (of interthread events. We identify ten different paradigms of thread usage: ) 0 buf
         opsaft 0 null put
         font6 setfont
         opsbef 1 {font6 setfont} put
         (defer work, general) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      72.26999 639.0274 moveto
      gsave
         font6 setfont
         (pumps, slack processes, sleepers, one-shots, deadlock avoidance, rejuvenation, serializers,) justify
         grestore
      72.26999 626.9821 moveto
      gsave
         /Helvetica findfont 10.0375 scalefont
         /font7 exch def
         font6 setfont
         opsbef 0 {font6 setfont} put
         (encapsulated fork) 0 buf
         opsaft 0 null put
         font7 setfont
         opsbef 1 {font7 setfont} put
         ( and) 1 buf
         opsaft 1 null put
         font5 setfont
         opsbef 2 {font5 setfont} put
         ( ) 2 buf
         opsaft 2 null put
         font6 setfont
         opsbef 3 {font6 setfont} put
         (exploiting parallelism) 3 buf
         opsaft 3 null put
         font5 setfont
         opsbef 4 {font5 setfont} put
         (.  While some, like ) 4 buf
         opsaft 4 null put
         font6 setfont
         opsbef 5 {font6 setfont} put
         (defer work) 5 buf
         opsaft 5 null put
         font5 setfont
         opsbef 6 {font5 setfont} put
         (, are well known, others) 6 buf
         opsaft 6 null put
         mixedjustify
         grestore
      72.26999 614.9375 moveto
      /colwidth 466.9818 def
      gsave
         font5 setfont
         (have not been previously described. Most of the paradigms cause few problems for programmers) justify
         grestore
      72.26999 602.8924 moveto
      gsave
         font5 setfont
         opsbef 0 {font5 setfont} put
         (and help keep the resulting system implementation understandable. The ) 0 buf
         opsaft 0 null put
         font6 setfont
         opsbef 1 {font6 setfont} put
         (slack process) 1 buf
         opsaft 1 null put
         font5 setfont
         opsbef 2 {font5 setfont} put
         ( paradigm is) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      72.26999 590.8474 moveto
      /colwidth 466.9821 def
      gsave
         font5 setfont
         (both particularly effective in improving system performance and particularly difficult to make work) justify
         grestore
      72.26999 578.8026 moveto
      gsave
         font5 setfont
         (well.  We observe that thread priorities are difficult to use and may interfere in unanticipated ways) justify
         grestore
      72.26999 566.7576 moveto
      gsave
         font5 setfont
         (with other thread primitives and paradigms.  Finally, we glean from the practices in this code several) justify
         grestore
      72.26999 554.7124 moveto
      font5 setfont
      (possible future research topics in the area of thread abstractions.) show
      82.3075 535.1032 moveto
      72.26999 484.8676 moveto
      /Times-Bold findfont 12.045 scalefont
      /font8 exch def
      font8 setfont
      (1.  Introduction  ) show
      82.3075 458.7222 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         (Threads sharing an address space are becoming more widely available in popular operating) justify
         grestore
      82.3075 446.6769 moveto
      gsave
         font0 setfont
         (systems such as Solaris 2.x, OS2/2.x, Windows NT and SysVR4 [Powell91][Custer93]. Xerox) justify
         grestore
      82.3075 434.632 moveto
      gsave
         /Times-Italic findfont 10.0375 scalefont
         /font9 exch def
         font0 setfont
         opsbef 0 {font0 setfont} put
         (PARC's ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Cedar) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( programming environment and Xerox's ) 2 buf
         opsaft 2 null put
         font9 setfont
         opsbef 3 {font9 setfont} put
         (STAR) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         (, ) 4 buf
         opsaft 4 null put
         font9 setfont
         opsbef 5 {font9 setfont} put
         (ViewPoint) 5 buf
         opsaft 5 null put
         font0 setfont
         opsbef 6 {font0 setfont} put
         (, ) 6 buf
         opsaft 6 null put
         font9 setfont
         opsbef 7 {font9 setfont} put
         (GlobalView for X) 7 buf
         opsaft 7 null put
         mixedjustify
         grestore
      82.3075 422.587 moveto
      /colwidth 446.6571 def
      gsave
         font9 setfont
         opsbef 0 {font9 setfont} put
         (Windows) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {font0 setfont} put
         ( and ) 1 buf
         opsaft 1 null put
         font9 setfont
         opsbef 2 {font9 setfont} put
         (DocuPrint) 2 buf
         opsaft 2 null put
         font0 setfont
         opsbef 3 {font0 setfont} put
         ( products have used lightweight threads for over 10 years) 3 buf
         opsaft 3 null put
         mixedjustify
         grestore
      82.3075 410.542 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         ([Smith82][Swinehart86]. This paper reports on an inspection and analysis of the code developed at) justify
         grestore
      82.3075 398.4969 moveto
      gsave
         font0 setfont
         (Xerox in an attempt to detect common paradigms and common mistakes of programming with) justify
         grestore
      82.3075 386.452 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (threads) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (. ) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (Our analysis is both static, from reading many lines of ancient and modern modules, and) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 374.4068 moveto
      gsave
         font0 setfont
         (dynamic, using a number of tools we built for detailed thread inspection.  We distinguish two) justify
         grestore
      82.3075 362.3619 moveto
      gsave
         font0 setfont
         (systems that developed independently although most of our remarks apply to both.  One, originally) justify
         grestore
      82.3075 350.3168 moveto
      gsave
         font0 setfont
         (a research system but now underlying a number of products as well, we call Cedar. The other, a) justify
         grestore
      82.3075 338.2718 moveto
      gsave
         font0 setfont
         (product system originally derived from the same base as Cedar but relatively unconnected to it for) justify
         grestore
      82.3075 326.2268 moveto
      font0 setfont
      (over ten years, we call GVX.) show
      82.3075 306.6176 moveto
      gsave
         font0 setfont
         (We believe that the systems we examined are the largest and longest-used thread-based) justify
         grestore
      82.3075 294.5726 moveto
      gsave
         font0 setfont
         (interactive systems in everyday use in the world.  They are both in use and under continual) justify
         grestore
      82.3075 282.5276 moveto
      gsave
         font0 setfont
         (development. They contain approximately 2.5 million lines of code, in 10,000 modules written by) justify
         grestore
      82.3075 270.4825 moveto
      gsave
         font0 setfont
         (hundreds of people, declaring more than 1000 monitors and monitored record types and over 300) justify
         grestore
      82.3075 258.4375 moveto
      gsave
         font0 setfont
         (condition variables. They mostly run as very large \050working sets of 10's of megabytes\051 shared-) justify
         grestore
      82.3075 246.3925 moveto
      gsave
         font0 setfont
         (memory, multi-application systems. They have been ported to a variety of processors and) justify
         grestore
      82.3075 234.3476 moveto
      gsave
         font0 setfont
         (multiprocessors, including the .25 to 5 MIPS Xerox D-machines in the 1980's and 5 to 100 MIPS) justify
         grestore
      82.3075 222.3026 moveto
      gsave
         font0 setfont
         (processors of the early 1990's. Our examination of them reveals the kinds of thread facilities and) justify
         grestore
      82.3075 210.2576 moveto
      gsave
         font0 setfont
         (practices that the programmers of these systems found useful and also the kinds of thread) justify
         grestore
      82.3075 198.2126 moveto
      font0 setfont
      (programming mistakes that even this experienced community still makes.) show
      82.3075 178.6033 moveto
      gsave
         font0 setfont
         (Our analysis is subject to two unavoidable biases. First, the programmers of these systems may not) justify
         grestore
      82.3075 166.5584 moveto
      gsave
         font0 setfont
         (be representative -- for instance, one community consisted primarily of PhD researchers. Second,) justify
         grestore
      82.3075 154.5133 moveto
      gsave
         font0 setfont
         (any group of people develop habits of work--idioms--that may be unrelated to best practice, but) justify
         grestore
      82.3075 142.4684 moveto
      gsave
         font0 setfont
         (are simply \042how we do it here\042. Although our report draws on code written by two relatively) justify
         grestore
      82.3075 130.4233 moveto
      font0 setfont
      (independent communities, comparing and contrasting the two is beyond the scope of this paper.) show
      82.3075 110.8141 moveto
      gsave
         font0 setfont
         (We examined the systems running on the Portable Common Runtime on top of Unix [Weiser89].) justify
         grestore
      82.3075 98.76911 moveto
      gsave
         font0 setfont
         (PCR provides the usual primitives: threads sharing a single address space, monitor locks, condition) justify
         grestore
      82.3075 86.72413 moveto
      font0 setfont
      (variables, fork and join. Section 2 describes the primitives in more detail.  ) show
      grestore
   grestore
% end page 2
showpage
%%page 3
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.5476 746.79 moveto
      (3) show
      82.3075 713.8666 moveto
      gsave
         font0 setfont
         (Although these systems do run on multiprocessors, this paper emphasizes the role of threads in) justify
         grestore
      82.3075 701.8220 moveto
      font0 setfont
      (program structuring rather than how they are used to exploit multiprocessors [Owicki89].) show
      82.3075 681.293 moveto
      gsave
         font0 setfont
         (This paper is not, for the most part, a statistical analysis of thread behavior. Instead of using the) justify
         grestore
      82.3075 669.248 moveto
      gsave
         font0 setfont
         (aggregate view provided by statistics we choose the microscopic view of individual paradigms and) justify
         grestore
      82.3075 657.2031 moveto
      gsave
         font0 setfont
         (critical path performance. For example, the time between when a key is pressed and the) justify
         grestore
      82.3075 645.1582 moveto
      gsave
         font0 setfont
         (corresponding glyph is echoed to a window is very important to the usability of these systems.) justify
         grestore
      82.3075 633.1132 moveto
      gsave
         font0 setfont
         (Developing an understanding of how threads are interacting in accomplishing this task helps to) justify
         grestore
      82.3075 621.0682 moveto
      font0 setfont
      (understand the observed performance.) show
      82.3075 600.5393 moveto
      gsave
         font0 setfont
         (Information for this paper came from two sources. While the system is running we gather) justify
         grestore
      82.3075 588.4942 moveto
      gsave
         font0 setfont
         (microsecond-resolution information about events in the threads and the Unix kernel. Section 3) justify
         grestore
      82.3075 576.4492 moveto
      gsave
         font0 setfont
         (provides summaries of the data and a micro-behavior example.  Section 7 describes the tools we) justify
         grestore
      82.3075 564.4042 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (used to gather and present the data. To develop the database of static uses of threads we used ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (grep) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      82.3075 552.3594 moveto
      gsave
         /Times-Roman findfont 8.029999 scalefont
         /font10 exch def
         font0 setfont
         opsbef 0 {font0 setfont} put
         (to locate all uses of thread primitives) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         ( ) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (and then read the surrounding code. This reading led us to) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 540.3142 moveto
      gsave
         font0 setfont
         (further searching for uses of modules that provide specialized access to threads \050for example, the) justify
         grestore
      82.3075 528.2694 moveto
      gsave
         font0 setfont
         (Cedar package PeriodicalFork\051.  This reading and understanding eventually led to the) justify
         grestore
      82.3075 516.2246 moveto
      font0 setfont
      (classifications of thread paradigms described in Section 4.) show
      82.3075 495.6957 moveto
      gsave
         font0 setfont
         (Sections 5 and 6 present some engineering lessons -- both for implementors using threads and for) justify
         grestore
      82.3075 483.6506 moveto
      gsave
         font0 setfont
         (implementors of thread systems -- from this study. We conclude with some suggestions for future) justify
         grestore
      82.3075 471.6056 moveto
      font0 setfont
      (work and a request for more detailed descriptions of large systems.) show
      72.26999 420.1437 moveto
      font8 setfont
      (2.  Thread model) show
      82.3075 392.772 moveto
      gsave
         font0 setfont
         (Lampson and Redell describe the Mesa language's thread model and provide rationale for many of) justify
         grestore
      82.3075 380.7269 moveto
      font0 setfont
      (the design choices [Lampson80].  Here, we summarize the salient features as used in our systems.) show
      82.3075 360.198 moveto
      gsave
         font0 setfont
         (The Mesa thread model supports multiple, light-weight, pre-emptively scheduled threads that) justify
         grestore
      82.3075 348.1531 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (share an address space.  The ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (FORK) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( operation creates a new thread to carry out the ) 2 buf
         opsaft 2 null put
         font10 setfont
         opsbef 3 {font10 setfont} put
         (FORK) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ('s) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 336.1081 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (procedure-invocation argument.  ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (FORK) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( returns a thread value.  The ) 2 buf
         opsaft 2 null put
         font10 setfont
         opsbef 3 {font10 setfont} put
         (JOIN) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( operation on a thread) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 324.063 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (value returns the value returned by the corresponding ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (FORK) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ('s procedure invocation.  A thread may) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 312.0179 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (be ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (JOIN) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (ed at most once.  If a thread will not be ) 2 buf
         opsaft 2 null put
         font10 setfont
         opsbef 3 {font10 setfont} put
         (JOIN) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         (ed it should be ) 4 buf
         opsaft 4 null put
         font10 setfont
         opsbef 5 {font10 setfont} put
         (DETACH) 5 buf
         opsaft 5 null put
         font0 setfont
         opsbef 6 {font0 setfont} put
         (ed, which tells the thread) 6 buf
         opsaft 6 null put
         mixedjustify
         grestore
      82.3075 299.973 moveto
      font0 setfont
      (implementation that it can recover the resources of the thread when it terminates.  ) show
      82.3075 279.4441 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (The language provides ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (monitors) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( and ) 2 buf
         opsaft 2 null put
         font9 setfont
         opsbef 3 {font9 setfont} put
         (condition variables) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( for synchronizing thread activities.  A) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 267.3991 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (monitor is a set of procedures, or ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (module) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (, that share a mutual exclusion lock, or ) 2 buf
         opsaft 2 null put
         font9 setfont
         opsbef 3 {font9 setfont} put
         (mutex) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         (.  The mutex) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 255.3542 moveto
      gsave
         font0 setfont
         (protects any data managed by the module by ensuring that only a single thread is executing within) justify
         grestore
      82.3075 243.3091 moveto
      gsave
         font0 setfont
         (the module at any instant.  Other threads wanting to enter the monitor are enqueued on the mutex.) justify
         grestore
      82.3075 231.2642 moveto
      gsave
         font0 setfont
         (The Mesa compiler automatically inserts locking code into monitored procedures.  A variant on this) justify
         grestore
      82.3075 219.2191 moveto
      gsave
         font0 setfont
         (scheme, associating locks with data structures instead of with modules, is occasionally used in order) justify
         grestore
      82.3075 207.1741 moveto
      gsave
         font0 setfont
         (to obtain finer grain locking.  Condition variables \050CVs\051 give more explicit control of thread) justify
         grestore
      82.3075 195.1291 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (scheduling.  Each CV represents a state of the module's data structures \050a ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (condition) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (\051 and a queue of) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 183.0842 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (threads waiting for that condition to become true.   A thread uses the ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (WAIT) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( operation on a CV if it) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 171.0391 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (has to wait until the condition holds.  ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (WAIT) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( operations may time out depending on the timeout) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 158.9941 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (interval associated with the CV.  A thread uses ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( or ) 2 buf
         opsaft 2 null put
         font10 setfont
         opsbef 3 {font10 setfont} put
         (BROADCAST) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( to signal waiting threads that) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 146.9492 moveto
      gsave
         font0 setfont
         (the condition has been achieved.  The compiler enforces the rule that CV operations are only) justify
         grestore
      82.3075 134.9041 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (invoked with the monitor lock held.  The ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (WAIT) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( operation atomically releases the monitor lock and) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 122.8592 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (adds its calling thread to the CV's wait queue.  ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( causes a single thread that is waiting on the) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 110.8142 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (CV's wait queue to become runnable--) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (exactly one waiter wakens) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( behavior.  \050Note that some thread) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 98.76912 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (packages define their analog of ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( to have ) 2 buf
         opsaft 2 null put
         font9 setfont
         opsbef 3 {font9 setfont} put
         (at least one waiter wakens) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( behavior [Birrell91].\051) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 86.72413 moveto
      gsave
         font10 setfont
         opsbef 0 {font10 setfont} put
         (BROADCAST) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {font0 setfont} put
         ( causes all threads that are waiting on the CV to become runnable. In either case,) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      grestore
   grestore
% end page 3
showpage
%%page 4
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.336 746.79 moveto
      (4) show
      82.3075 713.8666 moveto
      font0 setfont
      (threads must compete for the monitor's mutex before reentering the monitor.) show
      82.3075 694.4231 moveto
      gsave
         font0 setfont
         (Unlike the monitors originally described by Hoare [Hoare74], the Mesa thread model does not) justify
         grestore
      82.3075 682.3777 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (guarantee that the condition associated with a CV is satisfied when a ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (WAIT) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( completes.  If) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 670.3329 moveto
      gsave
         font10 setfont
         opsbef 0 {font10 setfont} put
         (BROADCAST) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {font0 setfont} put
         ( is used, for example, a different thread might acquire the monitor lock first and change) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      82.3075 658.2881 moveto
      gsave
         font0 setfont
         (the state of the program.  Therefore a thread is responsible for rechecking the condition after each) justify
         grestore
      82.3075 646.2429 moveto
      gsave
         font10 setfont
         opsbef 0 {font10 setfont} put
         (WAIT) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {font0 setfont} put
         (.  Thus, the prototypical use of ) 1 buf
         opsaft 1 null put
         font10 setfont
         opsbef 2 {font10 setfont} put
         (WAIT) 2 buf
         opsaft 2 null put
         font0 setfont
         opsbef 3 {font0 setfont} put
         ( is inside a ) 3 buf
         opsaft 3 null put
         font10 setfont
         opsbef 4 {font10 setfont} put
         (WHILE) 4 buf
         opsaft 4 null put
         font0 setfont
         opsbef 5 {font0 setfont} put
         ( loop that checks the condition, ) 5 buf
         opsaft 5 null put
         font9 setfont
         opsbef 6 {font9 setfont} put
         (not) 6 buf
         opsaft 6 null put
         font0 setfont
         opsbef 7 {font0 setfont} put
         ( inside) 7 buf
         opsaft 7 null put
         mixedjustify
         grestore
      82.3075 634.198 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (an ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (IF) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( statement that would only check the condition once.  Programs that obey the \042) 2 buf
         opsaft 2 null put
         font10 setfont
         opsbef 3 {font10 setfont} put
         (WAIT) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( only in a) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 622.153 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (loop\042 convention are insensitve to whether ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( has ) 2 buf
         opsaft 2 null put
         font9 setfont
         opsbef 3 {font9 setfont} put
         ( at least one waiter wakens) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( behavior or) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 610.1081 moveto
      gsave
         font9 setfont
         opsbef 0 {font9 setfont} put
         (exactly one waiter wakens ) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {font0 setfont} put
         (behavior as described above.  Indeed, under this convention ) 1 buf
         opsaft 1 null put
         font10 setfont
         opsbef 2 {font10 setfont} put
         (BROADCAST) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 598.063 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (can be substituted for ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( without affecting program correctness, so ) 2 buf
         opsaft 2 null put
         font10 setfont
         opsbef 3 {font10 setfont} put
         (NOTIFY) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( is just a) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 586.0179 moveto
      font0 setfont
      (performance hint. ) show
      82.3075 566.5741 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Threads have ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (priorities) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( that affect the scheduler.  The scheduler runs the highest priority runnable) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 554.5289 moveto
      gsave
         font0 setfont
         (thread and if there are several runnable threads at the highest priority then round-robin is used) justify
         grestore
      82.3075 542.4839 moveto
      gsave
         font0 setfont
         (among them.  If a system event causes a higher priority thread to become runnable, the scheduler) justify
         grestore
      82.3075 530.439 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (will ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (preempt) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( the currently running thread, even if it holds monitor locks.  There are 7 priorities in) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      82.3075 518.394 moveto
      gsave
         font0 setfont
         (all, with the default being the middle priority \0504\051.  Typically lower priority is used for long running,) justify
         grestore
      82.3075 506.3488 moveto
      gsave
         font0 setfont
         (background work, while higher priority is used for threads associated with devices or aspects of the) justify
         grestore
      82.3075 494.3039 moveto
      gsave
         font0 setfont
         (user interface, keeping the system responsive for interactive work.  A thread's initial priority is set) justify
         grestore
      82.3075 482.259 moveto
      font0 setfont
      (when it is created.  It can change its own priority.) show
      82.3075 462.8148 moveto
      gsave
         font0 setfont
         (The timeslice interval and the CV timeout granularity in the current implementation are each 50) justify
         grestore
      82.3075 450.7699 moveto
      gsave
         font0 setfont
         (milliseconds.  The scheduler runs at least that often, but also runs each time a thread blocks on a) justify
         grestore
      82.3075 438.725 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (mutex, waits on a CV, or calls the ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (YIELD ) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (primitive. The only purpose of the ) 2 buf
         opsaft 2 null put
         font10 setfont
         opsbef 3 {font10 setfont} put
         (YIELD) 3 buf
         opsaft 3 null put
         font0 setfont
         opsbef 4 {font0 setfont} put
         ( primitive is to) 4 buf
         opsaft 4 null put
         mixedjustify
         grestore
      82.3075 426.6797 moveto
      gsave
         font0 setfont
         (cause the scheduler to run \050but see discussion later of YieldButNotToMe\051.  The scheduler takes less) justify
         grestore
      82.3075 414.635 moveto
      font0 setfont
      (than 50 microseconds to switch between threads on a Sparcstation-2.) show
      72.26999 364.6194 moveto
      font8 setfont
      (3.  Dynamic thread behavior) show
      82.3075 338.6939 moveto
      gsave
         font0 setfont
         (Section 3.1 describes the large-scale behavior of our thread systems:  how many threads are there,) justify
         grestore
      82.3075 326.649 moveto
      gsave
         font0 setfont
         (how often are threads created and destroyed, how often are monitor locks and condition variables) justify
         grestore
      82.3075 314.604 moveto
      gsave
         font0 setfont
         (used.  It is intended to give the reader an intuitive feel for the physical and temporal scale of the) justify
         grestore
      82.3075 302.5588 moveto
      font0 setfont
      (system.) show
      82.3075 283.1148 moveto
      gsave
         font0 setfont
         (Section 3.2 provides a microscopic look at a thread misbehavior.  It is intended to introduce the) justify
         grestore
      82.3075 271.0698 moveto
      font0 setfont
      (notion of microscopic examination and to provide an example for  discussion later in the paper.          ) show
      82.3075 245.1444 moveto
      font1 setfont
      (3.1 Macro-behavior) show
      92.345 219.219 moveto
      /colwidth 446.907 def
      gsave
         font0 setfont
         (One of the original motivations for our work was a desire to understand the dynamic behavior of) justify
         grestore
      92.345 207.1739 moveto
      gsave
         font0 setfont
         (user-level threads.  For this purpose, we constructed an instrumented version of PCR that) justify
         grestore
      92.345 195.129 moveto
      gsave
         font0 setfont
         (measured the number of threads in the system, thread lifetimes, the run length distribution of) justify
         grestore
      92.345 183.084 moveto
      gsave
         font0 setfont
         (threads and the rate at which monitor locks and condition variables are used.  Analysis of the) justify
         grestore
      92.345 171.0389 moveto
      gsave
         font0 setfont
         (data obtained from this instrumented system led to the realization that there were a number of) justify
         grestore
      92.345 158.9939 moveto
      gsave
         font0 setfont
         (consistent patterns of thread usage, which led to the static analysis on which this paper is) justify
         grestore
      92.345 146.949 moveto
      gsave
         font0 setfont
         (focused.  To give the reader some background and context for  this static analysis, we present a) justify
         grestore
      92.345 134.904 moveto
      gsave
         font0 setfont
         (summary of our dynamic data below.  This data is based on a set of benchmarks intended to be) justify
         grestore
      92.345 122.859 moveto
      gsave
         font0 setfont
         (typical of user activity, including compilation, formatting a document into a page description) justify
         grestore
      92.345 110.814 moveto
      gsave
         font0 setfont
         (language \050like Postscript\051, previewing pages described by a page description language and user) justify
         grestore
      92.345 98.76898 moveto
      gsave
         font0 setfont
         (interface tasks \050keyboarding, mousing and scrolling windows\051.  All data was taken on a) justify
         grestore
      92.345 86.724 moveto
      font0 setfont
      (Sparcstation-2 running SunOS-4.1.3.) show
      grestore
   grestore
% end page 4
showpage
%%page 5
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.5476 746.79 moveto
      (5) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (Looking at the dynamic thread behavior, we observed several different classes of  threads.  There) justify
         grestore
      92.345 701.8220 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (were ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (eternal) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( threads that repeatedly waited on a condition variable and then ran briefly before) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 689.7769 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (waiting again.  There were ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (worker) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( threads that were forked to perform some activity, such as) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 677.7321 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (formatting a document.  Finally, there were short-lived ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (transient) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( threads that were forked by) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 665.687 moveto
      font0 setfont
      (some long-lived thread, would run for a relatively short while and then exit.) show
      92.345 644.9238 moveto
      gsave
         font0 setfont
         (A Cedar or GVX world uses a moderate number of threads. Consider Cedar first:  an idle Cedar) justify
         grestore
      92.345 632.8788 moveto
      gsave
         font0 setfont
         (system has about 35 eternal threads running in it and forks a transient thread once a second on) justify
         grestore
      92.345 620.8338 moveto
      gsave
         font0 setfont
         (average.  Keyboard activity can cause up to 5 thread forks per second, although most  other user-) justify
         grestore
      92.345 608.7887 moveto
      gsave
         font0 setfont
         (interface  activity causes much smaller increases in thread forking rates.  While one of our) justify
         grestore
      92.345 596.7439 moveto
      gsave
         font0 setfont
         (benchmark applications \050document formatting\051 employed large numbers of transient threads) justify
         grestore
      92.345 584.6988 moveto
      gsave
         font0 setfont
         (\050forking 3.6 threads/sec.\051, the other two compute-intensive applications we examined caused) justify
         grestore
      92.345 572.6540 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (thread-forking activity to ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (decrease) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( by more than a factor of 3.  In all our benchmarks, the) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 560.6087 moveto
      gsave
         font0 setfont
         (maximum number of threads concurrently existing in the system never exceeded 41, although) justify
         grestore
      92.345 548.564 moveto
      gsave
         font0 setfont
         (users employ two to three times this many in everyday work.  Transient threads are by far the) justify
         grestore
      92.345 536.519 moveto
      gsave
         font0 setfont
         (most numerous resulting in an average lifetime for non-eternal threads that is well under 1) justify
         grestore
      92.345 524.4739 moveto
      font0 setfont
      (second.) show
      92.345 503.7106 moveto
      gsave
         font0 setfont
         (An idle GVX world exhibits noticeably different behavior than just described.  An idle system) justify
         grestore
      92.345 491.6656 moveto
      gsave
         font0 setfont
         (contains 22 eternal threads and forks no additional threads.  In fact, no additional threads are) justify
         grestore
      92.345 479.6207 moveto
      font0 setfont
      (forked for any user interface activity, be it keyboard, mouse, or windowing activity.) show
      92.345 458.8574 moveto
      gsave
         font0 setfont
         (The Appendix contains a brief description of each eternal thread seen in the Cedar and GVX) justify
         grestore
      92.345 446.8124 moveto
      font0 setfont
      (benchmarks.) show
      203.1544 426.0492 moveto
      font1 setfont
      (Table 1: Forking and thread-switching rates) show
      92.345 405.2857 moveto
      /Times-Bold findfont 8.029999 scalefont
      /font11 exch def
      font11 setfont
      0.0 4.015 rmoveto
      (Cedar) show
      0.0 -4.015 rmoveto
      font10 setfont
      0.0 4.015 rmoveto
      30.77533 0.0 rmoveto
      0.0 -4.015 rmoveto
      0.0 4.015 rmoveto
      55.75825 0.0 rmoveto
      0.0 -4.015 rmoveto
      0.0 4.015 rmoveto
      55.75825 0.0 rmoveto
      0.0 -4.015 rmoveto
      font11 setfont
      0.0 4.015 rmoveto
      (Forks/sec) show
      0.0 -4.015 rmoveto
      font10 setfont
      0.0 4.015 rmoveto
      16.49962 0.0 rmoveto
      0.0 -4.015 rmoveto
      font11 setfont
      0.0 4.015 rmoveto
      (Thread Switches/sec) show
      0.0 -4.015 rmoveto
      font0 setfont
      28.09135 0.0 rmoveto
      92.345 393.2408 moveto
      font1 setfont
      (Idle Cedar) show
      font0 setfont
      57.98253 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    0.9) show
      32.89484 0.0 rmoveto
      (        132) show
      92.345 381.1956 moveto
      font1 setfont
      (Keyboard input) show
      font0 setfont
      31.2156 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    5.0) show
      32.89484 0.0 rmoveto
      (        269) show
      92.345 369.1507 moveto
      font1 setfont
      (Mouse movement) show
      font0 setfont
      22.85133 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    1.0) show
      32.89484 0.0 rmoveto
      (        191) show
      92.345 357.1058 moveto
      font1 setfont
      (Window scrolling) show
      font0 setfont
      22.85238 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    0.7) show
      32.89484 0.0 rmoveto
      (        172) show
      92.345 345.0606 moveto
      font1 setfont
      (Document formatting) show
      font0 setfont
      57.97753 0.0 rmoveto
      (    3.6) show
      32.89484 0.0 rmoveto
      (        171) show
      92.345 333.0156 moveto
      font1 setfont
      (Document previewing) show
      font0 setfont
      55.18812 0.0 rmoveto
      (    1.6) show
      32.89484 0.0 rmoveto
      (        222) show
      92.345 320.9706 moveto
      font1 setfont
      (Make program) show
      font0 setfont
      36.23532 0.0 rmoveto
      ( ) show
      53.5279 0.0 rmoveto
      (    0.3) show
      32.89484 0.0 rmoveto
      (        170) show
      92.345 308.9257 moveto
      font1 setfont
      (Compile) show
      font0 setfont
      13.37796 0.0 rmoveto
      55.75825 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    0.3) show
      32.89484 0.0 rmoveto
      (        135) show
      92.345 296.8806 moveto
      92.345 284.8356 moveto
      font11 setfont
      0.0 4.015 rmoveto
      (GVX) show
      0.0 -4.015 rmoveto
      92.345 272.7907 moveto
      font1 setfont
      (Idle GVX) show
      font0 setfont
      8.917311 0.0 rmoveto
      55.75825 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    0) show
      41.26008 0.0 rmoveto
      (         33) show
      92.345 260.7456 moveto
      font1 setfont
      (Keyboard input) show
      font0 setfont
      31.2156 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    0) show
      41.26008 0.0 rmoveto
      (         60) show
      92.345 248.7007 moveto
      font1 setfont
      (Mouse movement) show
      font0 setfont
      22.85133 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    0) show
      41.26008 0.0 rmoveto
      (         34) show
      92.345 236.6556 moveto
      font1 setfont
      (Window scrolling) show
      font0 setfont
      22.85238 0.0 rmoveto
      55.75825 0.0 rmoveto
      (    0) show
      41.26008 0.0 rmoveto
      (         43) show
      92.345 215.8923 moveto
      gsave
         font0 setfont
         (The rate at which a Cedar system switches among running threads varies from 130/sec. for an) justify
         grestore
      92.345 203.8474 moveto
      gsave
         font0 setfont
         (idle system to around 270/sec for a system experiencing heavy keyboard/mouse input activity.) justify
         grestore
      92.345 191.8023 moveto
      gsave
         font0 setfont
         (Thread execution intervals \050the lengths of time between thread switches\051 exhibit a peak at about) justify
         grestore
      92.345 179.7574 moveto
      gsave
         font0 setfont
         (3 milliseconds, with about 75% of all execution intervals being between 0 and 5 milliseconds in) justify
         grestore
      92.345 167.7123 moveto
      gsave
         font0 setfont
         (length.  This is due to the very short execution intervals of most eternal and transient threads.  A) justify
         grestore
      92.345 155.6674 moveto
      gsave
         font0 setfont
         (second peak is around 45 milliseconds, which is related to the PCR time-slice period, which is 50) justify
         grestore
      92.345 143.6224 moveto
      gsave
         font0 setfont
         (milliseconds.  Transient and eternal thread activity steals the first part of a timeslice with the) justify
         grestore
      92.345 131.5774 moveto
      font0 setfont
      (remainder going to worker threads.) show
      92.345 110.8141 moveto
      gsave
         font0 setfont
         (While most execution intervals are short, longer execution intervals account for most of the total) justify
         grestore
      92.345 98.76912 moveto
      gsave
         font0 setfont
         (execution time in our systems.  Between 20% and 50% of the total execution time during any) justify
         grestore
      92.345 86.72413 moveto
      gsave
         font0 setfont
         (period is accumulated by threads running for periods of 45 to 50 milliseconds. We also examined) justify
         grestore
      grestore
   grestore
% end page 5
showpage
%%page 6
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.5476 746.79 moveto
      (6) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (the total execution time contribution as a function of thread priority.  Only two patterns were) justify
         grestore
      92.345 701.8220 moveto
      gsave
         font0 setfont
         (evident: of the 7 available priority levels one wasn't used at all,  and user interface activity) justify
         grestore
      92.345 689.7769 moveto
      font0 setfont
      (tended to use higher priorities for its threads than did user-initiated tasks such as compiling.) show
      92.345 671.7097 moveto
      gsave
         font0 setfont
         (GVX switches among threads at a decidely lower rate: an idle system switches only 33 times per) justify
         grestore
      92.345 659.6645 moveto
      gsave
         font0 setfont
         (second, while heavy keyboard activity will drive the rate up to 60/sec. The same bi-modal) justify
         grestore
      92.345 647.6196 moveto
      gsave
         font0 setfont
         (distribution of execution intervals is exhibited as in Cedar: between 50% and 70% of all execution) justify
         grestore
      92.345 635.5745 moveto
      gsave
         font0 setfont
         (intervals are between 0 and 5 milliseconds in length with a second peak around 45 milliseconds.) justify
         grestore
      92.345 623.5294 moveto
      gsave
         font0 setfont
         (Between 30% and 80% of the total execution time during any period is accumulated by threads) justify
         grestore
      92.345 611.4845 moveto
      font0 setfont
      (running for periods of 45 to 50 milliseconds.  ) show
      92.345 593.417 moveto
      gsave
         font0 setfont
         (GVX's use of thread priorities was  noticeably different than Cedar's.  While Cedar's core of long-) justify
         grestore
      92.345 581.372 moveto
      gsave
         font0 setfont
         (lived threads are relatively evenly distributed over the four \042standard\042 priority values of 1 to 4,) justify
         grestore
      92.345 569.327 moveto
      gsave
         font0 setfont
         (GVX sets almost all of its threads to priority level 3; using the lower two priority levels only for a) justify
         grestore
      92.345 557.282 moveto
      gsave
         font0 setfont
         (few background helper tasks.  Two of the five low-priority threads in fact never actually ran) justify
         grestore
      92.345 545.2371 moveto
      gsave
         font0 setfont
         (during our experiments.  As with Cedar, one of the 7 priority levels is never used.  However, while) justify
         grestore
      92.345 533.1924 moveto
      gsave
         font0 setfont
         (Cedar uses level 7 for interrupt handling and doesn't use level 5, GVX does the opposite.  In both) justify
         grestore
      92.345 521.147 moveto
      gsave
         font0 setfont
         (systems, priority level 6 gets used by the system daemon that does proportional scheduling.) justify
         grestore
      92.345 509.102 moveto
      font0 setfont
      (Cedar also uses level 6 for its garbage collection daemon.) show
      92.345 491.0347 moveto
      gsave
         font0 setfont
         (One interesting behavior that our Cedar thread data exhibited was a variety of different forking) justify
         grestore
      92.345 478.9896 moveto
      gsave
         font0 setfont
         (patterns.  An idle Cedar system forks a transient thread about once every 2 seconds.  Each forked) justify
         grestore
      92.345 466.9444 moveto
      gsave
         font0 setfont
         (thread, in turn, forks another transient thread.  Keyboard activity causes a transient thread to be) justify
         grestore
      92.345 454.8996 moveto
      gsave
         font0 setfont
         (forked by the command-shell thread for every keystroke.  On the other hand, simply moving the) justify
         grestore
      92.345 442.8546 moveto
      gsave
         font0 setfont
         (mouse around causes no threads to be forked.  Even clicking a mouse button \050e.g. to scroll a) justify
         grestore
      92.345 430.8095 moveto
      gsave
         font0 setfont
         (window\051 causes no additional forking activity.  \050However, both keyboard activity and mouse) justify
         grestore
      92.345 418.7645 moveto
      gsave
         font0 setfont
         (motion cause significant increases in activity by eternal threads.\051  Scrolling a text window 10) justify
         grestore
      92.345 406.7195 moveto
      gsave
         font0 setfont
         (times causes 3 transient threads to be forked, one of which is the child of one of the other) justify
         grestore
      92.345 394.6744 moveto
      font0 setfont
      (transients.) show
      92.345 376.6072 moveto
      gsave
         font0 setfont
         (Document formatting causes a great number of transient threads to be forked by the main) justify
         grestore
      92.345 364.562 moveto
      gsave
         font0 setfont
         (formatting worker thread, whereas compilation and document previewing cause a moderate) justify
         grestore
      92.345 352.517 moveto
      gsave
         font0 setfont
         (number of transient forks.  While the compiler's and previewer's transient threads simply run to) justify
         grestore
      92.345 340.4719 moveto
      gsave
         font0 setfont
         (completion, each of the document formatter's transient threads fork one or more additional) justify
         grestore
      92.345 328.427 moveto
      gsave
         font0 setfont
         (transient threads themselves.  However, third generation forked threads do not occur.  In fact,) justify
         grestore
      92.345 316.3818 moveto
      gsave
         font0 setfont
         (none of our benchmarks exhibited forking generations greater than 2.  That is, every transient) justify
         grestore
      92.345 304.337 moveto
      font0 setfont
      (thread was either the child or grandchild of some worker or long-lived thread.) show
      92.345 286.2695 moveto
      gsave
         font0 setfont
         (Checking whether a program needs recompiling \050the Make program\051 does not cause any threads) justify
         grestore
      92.345 274.2245 moveto
      gsave
         font0 setfont
         (to be forked \050the command-shell thread gets used as the main worker thread\051, except for garbage) justify
         grestore
      92.345 262.1795 moveto
      gsave
         font0 setfont
         (collection and finalization of collected data objects.  Each of these activities causes a moderate) justify
         grestore
      92.345 250.1344 moveto
      font0 setfont
      (number of first-generation transient threads to be forked.) show
      82.3075 86.72418 moveto
      grestore
   grestore
% end page 6
showpage
%%page 7
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.5476 746.79 moveto
      (7) show
      210.6834 713.8666 moveto
      font1 setfont
      (Table 2: Wait-CV and monitor entry rates) show
      92.345 693.6582 moveto
      font11 setfont
      0.0 4.015 rmoveto
      (Cedar) show
      0.0 -4.015 rmoveto
      font10 setfont
      0.0 4.015 rmoveto
      30.77533 0.0 rmoveto
      0.0 -4.015 rmoveto
      0.0 4.015 rmoveto
      55.75825 0.0 rmoveto
      0.0 -4.015 rmoveto
      font11 setfont
      0.0 4.015 rmoveto
      (Wait-CVs/sec) show
      0.0 -4.015 rmoveto
      font10 setfont
      0.0 4.015 rmoveto
      55.30574 0.0 rmoveto
      0.0 -4.015 rmoveto
      font11 setfont
      0.0 4.015 rmoveto
      (% of CV that timeout        ML-enters/sec) show
      0.0 -4.015 rmoveto
      font0 setfont
      10.69002 0.0 rmoveto
      92.345 681.6129 moveto
      font1 setfont
      (Idle Cedar) show
      font0 setfont
      57.98253 0.0 rmoveto
      (        121) show
      21.18509 0.0 rmoveto
      55.75825 0.0 rmoveto
      55.75825 0.0 rmoveto
      (82%) show
      36.24035 0.0 rmoveto
      (  414) show
      92.345 669.5681 moveto
      font1 setfont
      (Keyboard input) show
      font0 setfont
      31.2156 0.0 rmoveto
      (        185) show
      21.18509 0.0 rmoveto
      55.75825 0.0 rmoveto
      55.75825 0.0 rmoveto
      (48%) show
      36.24035 0.0 rmoveto
      (2557) show
      92.345 657.523 moveto
      font1 setfont
      (Mouse movement) show
      font0 setfont
      22.85133 0.0 rmoveto
      (        163) show
      21.18509 0.0 rmoveto
      ( ) show
      53.5279 0.0 rmoveto
      55.75825 0.0 rmoveto
      (58%) show
      36.24035 0.0 rmoveto
      (1025) show
      92.345 645.4783 moveto
      font1 setfont
      (Window scrolling) show
      font0 setfont
      22.85238 0.0 rmoveto
      (        115) show
      21.18509 0.0 rmoveto
      ( ) show
      53.5279 0.0 rmoveto
      55.75825 0.0 rmoveto
      (69%) show
      36.24035 0.0 rmoveto
      (2032) show
      92.345 633.4334 moveto
      font1 setfont
      (Document formatting) show
      font0 setfont
      (         130) show
      21.17404 0.0 rmoveto
      ( ) show
      53.5279 0.0 rmoveto
      55.75825 0.0 rmoveto
      (72%) show
      36.24035 0.0 rmoveto
      (2739) show
      92.345 621.3882 moveto
      font1 setfont
      (Document previewing) show
      font0 setfont
      (        157) show
      20.61497 0.0 rmoveto
      (  ) show
      51.29756 0.0 rmoveto
      55.75825 0.0 rmoveto
      (56%) show
      36.24035 0.0 rmoveto
      (1335) show
      92.345 609.3432 moveto
      font1 setfont
      (Make program) show
      font0 setfont
      36.23532 0.0 rmoveto
      (        158) show
      21.18509 0.0 rmoveto
      (   ) show
      49.06722 0.0 rmoveto
      55.75825 0.0 rmoveto
      (61%) show
      36.24035 0.0 rmoveto
      (2218) show
      92.345 597.2982 moveto
      font1 setfont
      (Compile) show
      font0 setfont
      13.37796 0.0 rmoveto
      55.75825 0.0 rmoveto
      (        119) show
      21.18509 0.0 rmoveto
      (   ) show
      49.06722 0.0 rmoveto
      55.75825 0.0 rmoveto
      (82%) show
      36.24035 0.0 rmoveto
      (1365) show
      92.345 585.2534 moveto
      92.345 573.2083 moveto
      font11 setfont
      0.0 4.015 rmoveto
      (GVX) show
      0.0 -4.015 rmoveto
      92.345 561.1633 moveto
      font1 setfont
      (Idle GVX) show
      font0 setfont
      8.917311 0.0 rmoveto
      55.75825 0.0 rmoveto
      (         32) show
      24.53158 0.0 rmoveto
      (   ) show
      49.06722 0.0 rmoveto
      55.75825 0.0 rmoveto
      (99%) show
      36.24035 0.0 rmoveto
      (  366) show
      92.345 549.1184 moveto
      font1 setfont
      (Keyboard input) show
      font0 setfont
      31.2156 0.0 rmoveto
      (         38) show
      24.53158 0.0 rmoveto
      (    ) show
      46.83691 0.0 rmoveto
      55.75825 0.0 rmoveto
      (42%) show
      36.24035 0.0 rmoveto
      (1436) show
      92.345 537.0732 moveto
      font1 setfont
      (Mouse movement) show
      font0 setfont
      22.85133 0.0 rmoveto
      (         33) show
      24.53158 0.0 rmoveto
      (    ) show
      46.83691 0.0 rmoveto
      55.75825 0.0 rmoveto
      (96%) show
      36.24035 0.0 rmoveto
      (  410) show
      92.345 525.0285 moveto
      font1 setfont
      (Window scrolling) show
      font0 setfont
      22.85238 0.0 rmoveto
      (         25) show
      24.53158 0.0 rmoveto
      (    ) show
      46.83691 0.0 rmoveto
      55.75825 0.0 rmoveto
      (61%) show
      36.24035 0.0 rmoveto
      (  691) show
      92.345 504.8196 moveto
      gsave
         font0 setfont
         (The rate at which locking and condition variable primitives are used is another measure of) justify
         grestore
      92.345 492.7747 moveto
      gsave
         font0 setfont
         (thread activity. Table 2 shows the rates for each benchmark.  The rate of waiting on CVs in Cedar) justify
         grestore
      92.345 480.7297 moveto
      gsave
         font0 setfont
         (ranged from 115/second to 185/second, with 50% to 80% of these waits timing out rather than) justify
         grestore
      92.345 468.6845 moveto
      gsave
         font0 setfont
         (receiving a wakeup notification. Monitors are entered much more frequently, reflecting their use) justify
         grestore
      92.345 456.6396 moveto
      gsave
         font0 setfont
         (to protect data structures \050especially in reusable library packages\051. Entry rates varied from) justify
         grestore
      92.345 444.5946 moveto
      gsave
         font0 setfont
         (400/second for an idle system to 2500/sec for a system experiencing heavy keyboard activity to) justify
         grestore
      92.345 432.5494 moveto
      gsave
         font0 setfont
         (2700/second for document formatting. Contention was low, however, occuring on 0.01% to 0.1% of) justify
         grestore
      92.345 420.5045 moveto
      font0 setfont
      (all entries to monitors.) show
      92.345 400.2957 moveto
      gsave
         font0 setfont
         (For GVX, the rate of waiting on CVs ranged from 32/second to 38/second, with 42% to 99% of) justify
         grestore
      92.345 388.2507 moveto
      gsave
         font0 setfont
         (these waits timing out rather than receiving a wakeup notification.  Monitors are entered at rates) justify
         grestore
      92.345 376.2056 moveto
      gsave
         font0 setfont
         (between 366/sec and 1436/sec.  Interestingly, contention for monitor locks was sometimes) justify
         grestore
      92.345 364.1607 moveto
      gsave
         font0 setfont
         (significantly higher in GVX than in Cedar, occuring 0.4% of the time when scrolling a window) justify
         grestore
      92.345 352.1156 moveto
      font0 setfont
      (and 0.2% of the time when heavy keyboard traffic was present.) show
      172.7634 331.9068 moveto
      font1 setfont
      (Table 3: Number of different CVs and monitor locks used) show
      92.345 311.6981 moveto
      font11 setfont
      0.0 4.015 rmoveto
      (Cedar) show
      0.0 -4.015 rmoveto
      font10 setfont
      0.0 4.015 rmoveto
      30.77533 0.0 rmoveto
      0.0 -4.015 rmoveto
      0.0 4.015 rmoveto
      55.75825 0.0 rmoveto
      0.0 -4.015 rmoveto
      font11 setfont
      0.0 4.015 rmoveto
      (# CVs) show
      0.0 -4.015 rmoveto
      font10 setfont
      0.0 4.015 rmoveto
      30.77612 0.0 rmoveto
      0.0 -4.015 rmoveto
      font11 setfont
      0.0 4.015 rmoveto
      (# MLs) show
      0.0 -4.015 rmoveto
      font0 setfont
      29.884 0.0 rmoveto
      92.345 299.6531 moveto
      font1 setfont
      (Idle Cedar) show
      font0 setfont
      57.98253 0.0 rmoveto
      (  22) show
      40.14391 0.0 rmoveto
      (  554) show
      92.345 287.6081 moveto
      font1 setfont
      (Keyboard input) show
      font0 setfont
      31.2156 0.0 rmoveto
      (  32) show
      40.14391 0.0 rmoveto
      (  918) show
      92.345 275.563 moveto
      font1 setfont
      (Mouse movement) show
      font0 setfont
      22.85133 0.0 rmoveto
      (  26) show
      40.14391 0.0 rmoveto
      (  734) show
      92.345 263.518 moveto
      font1 setfont
      (Window scrolling) show
      font0 setfont
      22.85238 0.0 rmoveto
      (  30) show
      40.14391 0.0 rmoveto
      (  797) show
      92.345 251.473 moveto
      font1 setfont
      (Document formatting) show
      font0 setfont
      (   46) show
      40.13287 0.0 rmoveto
      (1060) show
      92.345 239.428 moveto
      font1 setfont
      (Document previewing) show
      font0 setfont
      (  32) show
      39.5738 0.0 rmoveto
      (  938) show
      92.345 227.383 moveto
      font1 setfont
      (Make program) show
      font0 setfont
      36.23532 0.0 rmoveto
      (  24) show
      40.14391 0.0 rmoveto
      (1296) show
      92.345 215.338 moveto
      font1 setfont
      (Compile) show
      font0 setfont
      13.37796 0.0 rmoveto
      55.75825 0.0 rmoveto
      (  36) show
      40.14391 0.0 rmoveto
      (2900) show
      92.345 203.2929 moveto
      92.345 191.2479 moveto
      font11 setfont
      0.0 4.015 rmoveto
      (GVX) show
      0.0 -4.015 rmoveto
      92.345 179.203 moveto
      font1 setfont
      (Idle GVX) show
      font0 setfont
      8.917311 0.0 rmoveto
      55.75825 0.0 rmoveto
      (   5) show
      43.49040 0.0 rmoveto
      (   48) show
      92.345 167.158 moveto
      font1 setfont
      (Keyboard input) show
      font0 setfont
      31.2156 0.0 rmoveto
      (   7) show
      43.49040 0.0 rmoveto
      (  204) show
      92.345 155.113 moveto
      font1 setfont
      (Mouse movement) show
      font0 setfont
      22.85133 0.0 rmoveto
      (   5) show
      43.49040 0.0 rmoveto
      (   52) show
      92.345 143.068 moveto
      font1 setfont
      (Window scrolling) show
      font0 setfont
      22.85238 0.0 rmoveto
      (   6) show
      43.49040 0.0 rmoveto
      (  209) show
      92.345 122.8592 moveto
      gsave
         font0 setfont
         (Typically, most of the monitor/condition variable traffic is observed in about 10 to 15 different) justify
         grestore
      92.345 110.8142 moveto
      gsave
         font0 setfont
         (threads, with the worker thread of a benchmark activity dominating the numbers.  The other) justify
         grestore
      92.345 98.76922 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (active threads exhibit approximately equal traffic.  The number of ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (different) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( monitors entered) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 86.7242 moveto
      gsave
         font0 setfont
         (during the benchmarks varies from 500 to 3000 as shown in Table 3.  In contrast, only about 20 to) justify
         grestore
      grestore
   grestore
% end page 7
showpage
%%page 8
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.5476 746.79 moveto
      (8) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (50 different condition variables are waited for in the course of the benchmarks.  GVX uses fewer) justify
         grestore
      92.345 701.8220 moveto
      font0 setfont
      (monitors and CVs. ) show
      82.3075 667.293 moveto
      font1 setfont
      (3.2 Micro-behavior) show
      92.345 632.7639 moveto
      gsave
         font0 setfont
         (The dynamic information described in the previous section is not fully satisfying, because it fails) justify
         grestore
      92.345 620.7188 moveto
      gsave
         font0 setfont
         (to show details of individual threads, and is not sufficient to understand the behaviors we) justify
         grestore
      92.345 608.6739 moveto
      gsave
         font0 setfont
         (experienced in our large systems. For instance, our systems had subtle problems: sometimes less) justify
         grestore
      92.345 596.629 moveto
      gsave
         font0 setfont
         (performance than we expected, sometimes large amounts of idle time in what should have been a) justify
         grestore
      92.345 584.584 moveto
      gsave
         font0 setfont
         (compute-bound process, sometimes rare lockups of the system.  For years none of these were) justify
         grestore
      92.345 572.539 moveto
      gsave
         font0 setfont
         (frequent or annoying enough to warrant urgent attention.  But eventually we felt we needed to) justify
         grestore
      92.345 560.494 moveto
      gsave
         font0 setfont
         (understand them.  The problems were not easily amenable to discovery via conventional) justify
         grestore
      92.345 548.449 moveto
      gsave
         font0 setfont
         (debugging or profiling methods \050which we tried\051 or dynamic statistics.  We needed new tools that) justify
         grestore
      92.345 536.4042 moveto
      font0 setfont
      (could show us detailed scheduling and process interaction.) show
      92.345 510.5075 moveto
      gsave
         font0 setfont
         (When we built these tools, we found a fascinating world of microscopic thread behavior had) justify
         grestore
      92.345 498.4625 moveto
      gsave
         font0 setfont
         (opened up to us.  We think that micro-visualization tools for understanding operating systems) justify
         grestore
      92.345 486.4174 moveto
      gsave
         font0 setfont
         (are underutilized and could be a source of considerable insight.  In this section we illustrate some) justify
         grestore
      92.345 474.3724 moveto
      gsave
         font0 setfont
         (of this world through one of the examples that led us to look for the thread paradigms described) justify
         grestore
      92.345 462.3272 moveto
      font0 setfont
      (later in this paper.) show
      92.345 436.4305 moveto
      gsave
         font0 setfont
         (Good X window system performance when painting large regions with many requests requires) justify
         grestore
      92.345 424.3857 moveto
      gsave
         font0 setfont
         (batching and merging overlapping requests.  Good interactive performance, such as keystroke) justify
         grestore
      92.345 412.3404 moveto
      gsave
         font0 setfont
         (echoing, requires that paint requests be sent to the server with very little delay.  In the fall of) justify
         grestore
      92.345 400.2954 moveto
      gsave
         font0 setfont
         (1992 Cedar was painting large regions too slowly and we did not know why.  We saw more) justify
         grestore
      92.345 388.2506 moveto
      gsave
         font0 setfont
         (frequent X communication than we expected, even though we had a batching mechanism in) justify
         grestore
      92.345 376.2055 moveto
      font0 setfont
      (place. What was going wrong?  The answer is easy to see and explain with the proper tools.) show
      92.345 341.6765 moveto
      font9 setfont
      (3.2.1 Example of micro-behavior visualization) show
      102.3825 307.1476 moveto
      /colwidth 436.8696 def
      gsave
         font0 setfont
         (Figure 1 shows 100 milliseconds of micro-behavior. It focuses on two Unix processes, one of) justify
         grestore
      102.3825 295.1026 moveto
      gsave
         font0 setfont
         (which is running two independent threads inside itself.  The first Unix process is the X server.) justify
         grestore
      102.3825 283.0576 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (The other one is a Cedar ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Virtual Processor) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( \050VP\051, which runs the Portable Common Runtime) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 271.0127 moveto
      gsave
         font0 setfont
         (\050PCR\051, and so can be assigned to run any number of threads. For our example, we focus on two) justify
         grestore
      102.3825 258.9675 moveto
      gsave
         font0 setfont
         (of those threads: a worker thread producing an image and an I/O thread that is buffering the) justify
         grestore
      102.3825 246.9225 moveto
      gsave
         font0 setfont
         (image commands to the X server. \050The I/O thread is an example of what we will call in the next) justify
         grestore
      102.3825 234.8775 moveto
      font0 setfont
      (section a \042slack process\042\051.) show
      102.3825 208.9808 moveto
      gsave
         font0 setfont
         (In Figure 1 the top two horizontal lines represent the Unix processes, the two at the bottom) justify
         grestore
      102.3825 196.9358 moveto
      gsave
         font0 setfont
         (represent the threads running within the second Unix process. Many other Unix processes and) justify
         grestore
      102.3825 184.8909 moveto
      font0 setfont
      (Cedar threads running at the same time are not shown.) show
      102.3825 158.9941 moveto
      gsave
         font0 setfont
         (Let's look first at the two Unix processes.  Where they show a slim horizontal grey line, they are) justify
         grestore
      102.3825 146.9492 moveto
      gsave
         font0 setfont
         (idle, unscheduled by the Unix kernel.  Where they show a wider red horizontal line, they have) justify
         grestore
      102.3825 134.9041 moveto
      gsave
         font0 setfont
         (actually acquired a CPU.  When they have a CPU, they may cause kernel activity, shown as) justify
         grestore
      102.3825 122.8592 moveto
      gsave
         font0 setfont
         (short vertical strokes. For this figure we were interested in possible overhead caused by system) justify
         grestore
      102.3825 110.8141 moveto
      gsave
         font0 setfont
         (calls and page faults, so only those kernel events are shown, page faults in red, system calls in) justify
         grestore
      102.3825 98.76912 moveto
      gsave
         font0 setfont
         (blue. Figure 1 shows that the X window server acquired and lost the CPU eleven times in the) justify
         grestore
      102.3825 86.72413 moveto
      font0 setfont
      (100 milliseconds; the VP ten times.) show
      font1 setfont
      ( ) show
      grestore
   grestore
% end page 8
showpage
%%page 9
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      558.5476 746.79 moveto
      (9) show
      99.05297 37.62591 moveto
      gsave
         currentpoint translate
         2834.645 dup matrix scale concat
         gsave
            3.527776e-4 dup matrix scale concat
            gsave
               -47.03191 52.57746 matrix translate concat
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 189.3791 274.1677 208.4098 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 424.7808 274.1677 429.7455 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 349.4855 274.1677 359.001 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 229.5092 274.1677 262.6062 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 386.7197 274.1677 395.8214 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 307.7008 274.1677 321.353 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 455.3959 274.1677 471.5303 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 499.6627 274.1677 508.7647 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 540.207 274.1677 549.3081 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               274.1677 579.0956 274.1677 588.1974 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 189.2411 185.4112 212.685 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 588.1974 274.1677 616.3293 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 588.1974 274.1677 588.1974 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 549.3081 274.1677 579.0956 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 549.3081 274.1677 549.3081 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 508.7647 274.1677 540.207 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 508.7647 274.1677 508.7647 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 471.5303 274.1677 499.6627 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 471.5303 274.1677 471.5303 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 429.7455 274.1677 455.3959 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 429.7455 274.1677 429.7455 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 395.8214 274.1677 424.7808 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 395.8214 274.1677 395.8214 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 359.001 274.1677 386.7197 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 359.001 274.1677 359.001 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 321.353 274.1677 349.4855 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 321.353 274.1677 321.353 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 262.6062 274.1677 307.7008 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 262.6062 274.1677 262.6062 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               274.1677 205.09 274.1677 230.7403 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 189.4725 283.9595 189.4725 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 599.7812 162.921 614.675 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 599.7812 162.921 599.7812 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 560.8925 162.921 577.4407 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 560.8925 162.921 560.8925 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 524.0724 162.921 538.5523 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 524.0724 162.921 524.0724 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 483.1143 162.921 498.0084 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 483.1143 162.921 483.1143 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 441.3298 162.921 453.741 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 441.3298 162.921 441.3298 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 408.6463 162.921 423.1264 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 408.6463 162.921 408.6463 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 370.585 162.921 385.0645 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 370.585 162.921 370.585 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 333.3509 162.921 347.8305 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 333.3509 162.921 333.3509 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 284.533 162.921 306.0456 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 284.533 162.921 284.533 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 274.1902 162.921 278.3272 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 274.1902 162.921 274.1902 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 215.443 162.921 227.8542 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               162.921 215.443 162.921 215.443 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 577.8545 185.4112 599.3676 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 577.8545 185.4112 577.8545 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 538.9659 185.4112 560.4788 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 538.9659 185.4112 538.9659 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 498.4222 185.4112 523.2444 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 498.4222 185.4112 498.4222 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 454.1543 185.4112 482.701 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 454.1543 185.4112 454.1543 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 423.54 185.4112 440.5022 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 423.54 185.4112 423.54 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 385.4788 185.4112 408.2325 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 385.4788 185.4112 385.4788 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 348.2444 185.4112 370.1714 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 348.2444 185.4112 348.2444 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 306.4596 185.4112 332.5235 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 306.4596 185.4112 306.4596 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 228.268 185.4112 273.3625 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               185.4112 228.268 185.4112 228.268 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 577.4407 162.921 599.7812 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 538.5523 162.921 560.8925 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 498.0084 162.921 524.0724 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 453.741 162.921 483.1143 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 423.1264 162.921 441.3298 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 385.0645 162.921 408.6463 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 347.8305 162.921 370.585 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 306.0456 162.921 333.3509 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 278.3272 162.921 284.533 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 227.8542 162.921 274.1902 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               162.921 187.7242 162.921 215.443 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 599.3676 185.4112 615.0886 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 560.4788 185.4112 577.8545 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 523.2444 185.4112 538.9659 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 482.701 185.4112 498.4222 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 440.5022 185.4112 454.1543 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 408.2325 185.4112 423.54 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 370.1714 185.4112 385.4788 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 332.5235 185.4112 348.2444 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 273.3625 185.4112 306.4596 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               185.4112 212.685 185.4112 228.268 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 604.3318 153.2677 604.3318 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 604.3318 162.921 604.3318 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 602.8148 153.2677 602.8148 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 602.8148 162.921 602.8148 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 602.4016 153.2677 602.4016 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 602.4016 162.921 602.4016 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 601.4363 153.2677 601.4363 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 601.4363 162.921 601.4363 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 601.0222 153.2677 601.0222 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 601.0222 162.921 601.0222 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 576.6132 153.2677 576.6132 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 576.6132 162.921 576.6132 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 576.2 153.2677 576.2 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 576.2 162.921 576.2 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 573.993 153.2677 573.993 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 573.993 162.921 573.993 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 572.6143 153.2677 572.6143 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 572.6143 162.921 572.6143 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 571.235 153.2677 571.235 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 571.235 162.921 571.235 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 567.5117 153.2677 567.5117 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 567.5117 162.921 567.5117 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 565.5814 153.2677 565.5814 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 565.5814 162.921 565.5814 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 565.1671 153.2677 565.1671 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 565.1671 162.921 565.1671 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 564.6158 153.2677 564.6158 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 564.6158 162.921 564.6158 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 564.2016 153.2677 564.2016 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 564.2016 162.921 564.2016 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 538.0005 153.2677 538.0005 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 538.0005 162.921 538.0005 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 537.587 153.2677 537.587 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 537.587 162.921 537.587 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 535.38 153.2677 535.38 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 535.38 162.921 535.38 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 534.0011 153.2677 534.0011 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 534.0011 162.921 534.0011 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 532.6222 153.2677 532.6222 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 532.6222 162.921 532.6222 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 528.4849 153.2677 528.4849 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 528.4849 162.921 528.4849 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 527.3818 153.2677 527.3818 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 527.3818 162.921 527.3818 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 526.9683 153.2677 526.9683 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 526.9683 162.921 526.9683 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 525.5893 153.2677 525.5893 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 525.5893 162.921 525.5893 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 525.1754 153.2677 525.1754 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 525.1754 162.921 525.1754 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 498.0084 153.2677 498.0084 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 498.0084 162.921 498.0084 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 497.5946 153.2677 497.5946 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 497.5946 162.921 497.5946 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 495.3877 153.2677 495.3877 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 495.3877 162.921 495.3877 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 494.0088 153.2677 494.0088 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 494.0088 162.921 494.0088 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 492.6301 153.2677 492.6301 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 492.6301 162.921 492.6301 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 488.4925 153.2677 488.4925 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 488.4925 162.921 488.4925 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 486.9762 153.2677 486.9762 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 486.9762 162.921 486.9762 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 486.5622 153.2677 486.5622 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 486.5622 162.921 486.5622 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 486.0104 153.2677 486.0104 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 486.0104 162.921 486.0104 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 485.5968 153.2677 485.5968 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 485.5968 162.921 485.5968 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 453.741 153.2677 453.741 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 453.741 162.921 453.741 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 453.3276 153.2677 453.3276 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 453.3276 162.921 453.3276 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 452.9136 153.2677 452.9136 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 452.9136 162.921 452.9136 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 448.5007 153.2677 448.5007 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 448.5007 162.921 448.5007 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 445.7425 153.2677 445.7425 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 445.7425 162.921 445.7425 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 444.6391 153.2677 444.6391 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 444.6391 162.921 444.6391 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 444.2258 153.2677 444.2258 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 444.2258 162.921 444.2258 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 442.8467 153.2677 442.8467 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 442.8467 162.921 442.8467 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 442.4328 153.2677 442.4328 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 442.4328 162.921 442.4328 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 422.1613 153.2677 422.1613 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 422.1613 162.921 422.1613 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 421.7474 153.2677 421.7474 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 421.7474 162.921 421.7474 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 419.5405 153.2677 419.5405 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 419.5405 162.921 419.5405 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 418.1618 153.2677 418.1618 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 418.1618 162.921 418.1618 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 416.7827 153.2677 416.7827 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 416.7827 162.921 416.7827 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 412.6459 153.2677 412.6459 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 412.6459 162.921 412.6459 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 413.6111 153.2677 413.6111 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 413.6111 162.921 413.6111 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 413.1972 153.2677 413.1972 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 413.1972 162.921 413.1972 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 412.7837 153.2677 412.7837 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 412.7837 162.921 412.7837 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 412.3699 153.2677 412.3699 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 412.3699 162.921 412.3699 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 383.6857 153.2677 383.6857 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 383.6857 162.921 383.6857 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 383.548 153.2677 383.548 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 383.548 162.921 383.548 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 383.1341 153.2677 383.1341 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 383.1341 162.921 383.1341 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 380.9277 153.2677 380.9277 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 380.9277 162.921 380.9277 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 379.5488 153.2677 379.5488 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 379.5488 162.921 379.5488 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 375.4112 153.2677 375.4112 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 375.4112 162.921 375.4112 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 373.8945 153.2677 373.8945 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 373.8945 162.921 373.8945 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 373.481 153.2677 373.481 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 373.481 162.921 373.481 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 372.5156 153.2677 372.5156 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 372.5156 162.921 372.5156 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 372.1017 153.2677 372.1017 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 372.1017 162.921 372.1017 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 346.4516 153.2677 346.4516 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 346.4516 162.921 346.4516 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 346.3137 153.2677 346.3137 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 346.3137 162.921 346.3137 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 345.9002 153.2677 345.9002 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 345.9002 162.921 345.9002 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 343.6936 153.2677 343.6936 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 343.6936 162.921 343.6936 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 342.3146 153.2677 342.3146 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 342.3146 162.921 342.3146 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 338.1774 153.2677 338.1774 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 338.1774 162.921 338.1774 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 335.4196 153.2677 335.4196 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 335.4196 162.921 335.4196 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 336.5226 153.2677 336.5226 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 336.5226 162.921 336.5226 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 336.1091 153.2677 336.1091 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 336.1091 162.921 336.1091 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 335.6951 153.2677 335.6951 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 335.6951 162.921 335.6951 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 304.9426 153.2677 304.9426 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 304.9426 162.921 304.9426 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 304.529 153.2677 304.529 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 304.529 162.921 304.529 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 302.3222 153.2677 302.3222 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 302.3222 162.921 302.3222 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 296.8061 153.2677 296.8061 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 296.8061 162.921 296.8061 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 296.5303 153.2677 296.5303 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 296.5303 162.921 296.5303 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 296.1169 153.2677 296.1169 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 296.1169 162.921 296.1169 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 295.7031 153.2677 295.7031 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 295.7031 162.921 295.7031 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 291.2901 153.2677 291.2901 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 291.2901 162.921 291.2901 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 289.9109 153.2677 289.9109 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 289.9109 162.921 289.9109 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 287.153 153.2677 287.153 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 287.153 162.921 287.153 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 285.7738 153.2677 285.7738 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 285.7738 162.921 285.7738 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 277.3619 153.2677 277.3619 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 277.3619 162.921 277.3619 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 276.9482 153.2677 276.9482 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 276.9482 162.921 276.9482 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 275.9829 153.2677 275.9829 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 275.9829 162.921 275.9829 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 275.569 153.2677 275.569 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 275.569 162.921 275.569 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 226.475 153.2677 226.475 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 226.475 162.921 226.475 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 226.3374 153.2677 226.3374 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 226.3374 162.921 226.3374 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 225.9237 153.2677 225.9237 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 225.9237 162.921 225.9237 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 222.3381 153.2677 222.3381 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               162.921 222.3381 162.921 222.3381 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 219.5799 153.2677 219.5799 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 219.5799 162.921 219.5799 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 219.3042 153.2677 219.3042 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 219.3042 162.921 219.3042 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 218.8906 153.2677 218.8906 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 218.8906 162.921 218.8906 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 218.4764 153.2677 218.4764 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 218.4764 162.921 218.4764 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 215.443 153.2677 215.443 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               162.921 215.443 162.921 215.443 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 597.4371 175.7578 597.4371 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 597.4371 185.4112 597.4371 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 594.6786 175.7578 594.6786 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 594.6786 185.4112 594.6786 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 595.7818 175.7578 595.7818 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 595.7818 185.4112 595.7818 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 595.3684 175.7578 595.3684 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 595.3684 185.4112 595.3684 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 591.7826 175.7578 591.7826 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 591.7826 185.4112 591.7826 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 589.0244 175.7578 589.0244 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 589.0244 185.4112 589.0244 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 586.4047 175.7578 586.4047 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 586.4047 185.4112 586.4047 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 585.0254 175.7578 585.0254 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 585.0254 185.4112 585.0254 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 580.8889 175.7578 580.8889 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 580.8889 185.4112 580.8889 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 579.5098 175.7578 579.5098 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 579.5098 185.4112 579.5098 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 559.2372 175.7578 559.2372 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 559.2372 185.4112 559.2372 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 556.0655 175.7578 556.0655 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 556.0655 185.4112 556.0655 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 557.1695 175.7578 557.1695 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 557.1695 185.4112 557.1695 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 556.7551 175.7578 556.7551 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 556.7551 185.4112 556.7551 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 553.1702 175.7578 553.1702 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 553.1702 185.4112 553.1702 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 550.4115 175.7578 550.4115 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 550.4115 185.4112 550.4115 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 547.7917 175.7578 547.7917 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 547.7917 185.4112 547.7917 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 546.4127 175.7578 546.4127 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 546.4127 185.4112 546.4127 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 542.2755 175.7578 542.2755 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 542.2755 185.4112 542.2755 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 540.8964 175.7578 540.8964 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 540.8964 185.4112 540.8964 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 522.0035 175.7578 522.0035 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 522.0035 185.4112 522.0035 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 520.0732 175.7578 520.0732 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 520.0732 185.4112 520.0732 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 519.6591 175.7578 519.6591 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 519.6591 185.4112 519.6591 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 517.4524 175.7578 517.4524 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 517.4524 185.4112 517.4524 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 517.7286 175.7578 517.7286 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 517.7286 185.4112 517.7286 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 517.315 175.7578 517.315 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 517.315 185.4112 517.315 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 515.9353 175.7578 515.9353 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 515.9353 185.4112 515.9353 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 513.3152 175.7578 513.3152 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 513.3152 185.4112 513.3152 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 513.177 175.7578 513.177 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 513.177 185.4112 513.177 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 510.4196 175.7578 510.4196 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 510.4196 185.4112 510.4196 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 507.6616 175.7578 507.6616 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 507.6616 185.4112 507.6616 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 507.2477 175.7578 507.2477 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 507.2477 185.4112 507.2477 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 500.9040 175.7578 500.9040 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 500.9040 185.4112 500.9040 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 499.5246 175.7578 499.5246 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 499.5246 185.4112 499.5246 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 480.2187 175.7578 480.2187 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 480.2187 185.4112 480.2187 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 478.8393 175.7578 478.8393 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 478.8393 185.4112 478.8393 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 478.7018 175.7578 478.7018 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 478.7018 185.4112 478.7018 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 476.0816 175.7578 476.0816 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 476.0816 185.4112 476.0816 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 475.9434 175.7578 475.9434 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 475.9434 185.4112 475.9434 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 473.1852 175.7578 473.1852 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 473.1852 185.4112 473.1852 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 470.8412 175.7578 470.8412 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 470.8412 185.4112 470.8412 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 470.4271 175.7578 470.4271 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 470.4271 185.4112 470.4271 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 464.9111 175.7578 464.9111 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 464.9111 185.4112 464.9111 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 464.4972 175.7578 464.4972 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 464.4972 185.4112 464.4972 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 462.2911 175.7578 462.2911 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 462.2911 185.4112 462.2911 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 462.1533 175.7578 462.1533 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 462.1533 185.4112 462.1533 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 461.7397 175.7578 461.7397 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 461.7397 185.4112 461.7397 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 459.533 175.7578 459.533 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 459.533 185.4112 459.533 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 459.395 175.7578 459.395 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 459.395 185.4112 459.395 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 458.9815 175.7578 458.9815 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 458.9815 185.4112 458.9815 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 458.0159 175.7578 458.0159 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 458.0159 185.4112 458.0159 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 457.6022 175.7578 457.6022 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 457.6022 185.4112 457.6022 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 455.3959 175.7578 455.3959 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 455.3959 185.4112 455.3959 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 439.2611 175.7578 439.2611 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 439.2611 185.4112 439.2611 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 436.0893 175.7578 436.0893 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 436.0893 185.4112 436.0893 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 437.1926 175.7578 437.1926 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 437.1926 185.4112 437.1926 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 436.7789 175.7578 436.7789 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 436.7789 185.4112 436.7789 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 433.1932 175.7578 433.1932 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 433.1932 185.4112 433.1932 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 431.8144 175.7578 431.8144 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 431.8144 185.4112 431.8144 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 427.8152 175.7578 427.8152 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 427.8152 185.4112 427.8152 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 426.4359 175.7578 426.4359 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 426.4359 185.4112 426.4359 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 425.0571 175.7578 425.0571 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 425.0571 185.4112 425.0571 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 405.7504 175.7578 405.7504 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 405.7504 185.4112 405.7504 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 404.3716 175.7578 404.3716 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 404.3716 185.4112 404.3716 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 403.2683 175.7578 403.2683 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 403.2683 185.4112 403.2683 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 400.2338 175.7578 400.2338 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 400.2338 185.4112 400.2338 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 400.0965 175.7578 400.0965 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 400.0965 185.4112 400.0965 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 397.3382 175.7578 397.3382 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 397.3382 185.4112 397.3382 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 394.5803 175.7578 394.5803 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 394.5803 185.4112 394.5803 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 394.1667 175.7578 394.1667 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 394.1667 185.4112 394.1667 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 389.2018 175.7578 389.2018 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 389.2018 185.4112 389.2018 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 386.4438 175.7578 386.4438 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 386.4438 185.4112 386.4438 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 368.9302 175.7578 368.9302 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 368.9302 185.4112 368.9302 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 365.758 175.7578 365.758 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 365.758 185.4112 365.758 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 366.8616 175.7578 366.8616 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 366.8616 185.4112 366.8616 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 366.4477 175.7578 366.4477 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 366.4477 185.4112 366.4477 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 362.862 175.7578 362.862 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 362.862 185.4112 362.862 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 360.1045 175.7578 360.1045 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 360.1045 185.4112 360.1045 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 357.3464 175.7578 357.3464 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 357.3464 185.4112 357.3464 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 356.9324 175.7578 356.9324 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 356.9324 185.4112 356.9324 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 351.9677 175.7578 351.9677 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 351.9677 185.4112 351.9677 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 349.2097 175.7578 349.2097 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 349.2097 185.4112 349.2097 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 329.903 175.7578 329.903 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 329.903 185.4112 329.903 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 328.5242 175.7578 328.5242 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 328.5242 185.4112 328.5242 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 328.3864 175.7578 328.3864 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 328.3864 185.4112 328.3864 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 325.7662 175.7578 325.7662 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 325.7662 185.4112 325.7662 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 325.6283 175.7578 325.6283 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 325.6283 185.4112 325.6283 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 322.8704 175.7578 322.8704 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 322.8704 185.4112 322.8704 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 319.2845 175.7578 319.2845 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 319.2845 185.4112 319.2845 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 313.3545 175.7578 313.3545 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 313.3545 185.4112 313.3545 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 313.217 175.7578 313.217 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 313.217 185.4112 313.217 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 312.8033 175.7578 312.8033 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 312.8033 185.4112 312.8033 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 311.0106 175.7578 311.0106 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 311.0106 185.4112 311.0106 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 309.2176 175.7578 309.2176 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 309.2176 185.4112 309.2176 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 307.8384 175.7578 307.8384 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 307.8384 185.4112 307.8384 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 270.6044 175.7578 270.6044 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 270.6044 185.4112 270.6044 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 269.2253 175.7578 269.2253 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 269.2253 185.4112 269.2253 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 270.3288 175.7578 270.3288 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 270.3288 185.4112 270.3288 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 269.9152 175.7578 269.9152 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 269.9152 185.4112 269.9152 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 266.3298 175.7578 266.3298 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 266.3298 185.4112 266.3298 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 263.5716 175.7578 263.5716 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 263.5716 185.4112 263.5716 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 262.1925 175.7578 262.1925 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 262.1925 185.4112 262.1925 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 261.7786 175.7578 261.7786 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 261.7786 185.4112 261.7786 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 259.572 175.7578 259.572 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 259.572 185.4112 259.572 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 259.4344 175.7578 259.4344 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 259.4344 185.4112 259.4344 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 259.0205 175.7578 259.0205 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 259.0205 185.4112 259.0205 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 256.8142 175.7578 256.8142 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 256.8142 185.4112 256.8142 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 256.676 175.7578 256.676 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 256.676 185.4112 256.676 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 256.2625 175.7578 256.2625 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 256.2625 185.4112 256.2625 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 254.4697 175.7578 254.4697 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 254.4697 185.4112 254.4697 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 254.332 175.7578 254.332 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 254.332 185.4112 254.332 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 253.9182 175.7578 253.9182 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 253.9182 185.4112 253.9182 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 251.7117 175.7578 251.7117 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 251.7117 185.4112 251.7117 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 249.9189 175.7578 249.9189 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 249.9189 185.4112 249.9189 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 249.7812 175.7578 249.7812 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 249.7812 185.4112 249.7812 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 249.3673 175.7578 249.3673 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 249.3673 185.4112 249.3673 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 247.1609 175.7578 247.1609 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 247.1609 185.4112 247.1609 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 245.7817 175.7578 245.7817 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 245.7817 185.4112 245.7817 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 244.4028 175.7578 244.4028 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 244.4028 185.4112 244.4028 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 243.0238 175.7578 243.0238 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 243.0238 185.4112 243.0238 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 244.127 175.7578 244.127 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 244.127 185.4112 244.127 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 243.7134 175.7578 243.7134 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 243.7134 185.4112 243.7134 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 243.2996 175.7578 243.2996 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 243.2996 185.4112 243.2996 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 241.369 175.7578 241.369 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 241.369 185.4112 241.369 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 240.9552 175.7578 240.9552 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 240.9552 185.4112 240.9552 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 237.5075 175.7578 237.5075 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 237.5075 185.4112 237.5075 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 236.5422 175.7578 236.5422 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 236.5422 185.4112 236.5422 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 231.991 175.7578 231.991 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 231.991 185.4112 231.991 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 229.2334 175.7578 229.2334 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 229.2334 185.4112 229.2334 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 212.685 175.7578 212.685 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 212.685 185.4112 212.685 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 209.9266 175.7578 209.9266 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 209.9266 185.4112 209.9266 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 211.03 175.7578 211.03 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 211.03 185.4112 211.03 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 210.6162 175.7578 210.6162 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 210.6162 185.4112 210.6162 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 208.4098 175.7578 208.4098 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 208.4098 185.4112 208.4098 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 205.6519 175.7578 205.6519 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 205.6519 185.4112 205.6519 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 201.6524 175.7578 201.6524 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 201.6524 185.4112 201.6524 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 200.2734 175.7578 200.2734 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               185.4112 200.2734 185.4112 200.2734 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 198.8942 175.7578 198.8942 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 198.8942 185.4112 198.8942 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 198.7565 175.7578 198.7565 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 198.7565 185.4112 198.7565 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 198.3428 175.7578 198.3428 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 198.3428 185.4112 198.3428 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 196.1364 175.7578 196.1364 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 196.1364 185.4112 196.1364 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 195.1711 175.7578 195.1711 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 195.1711 185.4112 195.1711 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 193.3782 175.7578 193.3782 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 193.3782 185.4112 193.3782 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 193.2405 175.7578 193.2405 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 193.2405 185.4112 193.2405 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 192.8266 175.7578 192.8266 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 192.8266 185.4112 192.8266 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 191.8614 175.7578 191.8614 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 191.8614 185.4112 191.8614 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 191.4477 175.7578 191.4477 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 191.4477 185.4112 191.4477 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 189.2411 175.7578 189.2411 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               185.4112 189.2411 185.4112 189.2411 vec
               gsave
                  /Helvetica findfont 1.0 scalefont
                  /font12 exch def
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate 323.1818 170.1531 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (0.0s) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate 323.1818 376.3754 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (0.05) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate 323.1818 583.2312 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (0.10) show
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 459.1053 -222.6162 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     180.0458 227.0412 moveto
                     /colwidth 146.2684 def
                     gsave
                        /Times-Roman findfont 10.0375 scalefont
                        /font13 exch def
                        font13 setfont
                        (This thread is converting the) justify
                        grestore
                     180.0458 214.9963 moveto
                     /colwidth 146.2684 def
                     gsave
                        font13 setfont
                        (contents of a text file to a bitmap) justify
                        grestore
                     180.0458 202.9512 moveto
                     font13 setfont
                     (for display on the screen ) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  265.9783 -50.22803 moveto
                  212.6005 -50.22803 lineto
                  212.6005 118.4061 lineto
                  265.9783 118.4061 lineto
                  265.9783 -50.22803 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 742.2222 -317.0034 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     272.496 453.609 moveto
                     /colwidth 146.9019 def
                     gsave
                        font13 setfont
                        (This is a slack thread that pumps) justify
                        grestore
                     272.496 441.5641 moveto
                     font13 setfont
                     (bitmaps to the X server) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  311.269 -50.87037 moveto
                  265.9782 -50.87037 lineto
                  265.9782 118.4062 lineto
                  311.269 118.4062 lineto
                  311.269 -50.87037 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 424.7864 172.1386 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     62.12601 325.383 moveto
                     /colwidth 58.1206 def
                     gsave
                        font13 setfont
                        (Unix process) justify
                        grestore
                     62.12601 313.3379 moveto
                     font13 setfont
                     (not running) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  122.4668 224.9564 moveto
                  78.56329 224.9564 lineto
                  78.56329 304.2088 lineto
                  122.4668 304.2088 lineto
                  122.4668 224.9564 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 453.1004 392.6555 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     -9.934903 382.7186 moveto
                     /colwidth 202.4789 def
                     gsave
                        font13 setfont
                        (Unix process running. To illustrate the) justify
                        grestore
                     -9.934903 370.6735 moveto
                     gsave
                        font13 setfont
                        (granularity of our information gathering, we) justify
                        grestore
                     -9.934903 358.6285 moveto
                     gsave
                        font13 setfont
                        (show system calls \050blue strokes\051 and page faults) justify
                        grestore
                     -9.934903 346.5836 moveto
                     gsave
                        font13 setfont
                        (\050red strokes\051. Other detail has been suppressed) justify
                        grestore
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  121.183 372.4035 moveto
                  48.739 372.4035 lineto
                  48.739 598.0351 lineto
                  121.183 598.0351 lineto
                  121.183 372.4035 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 820.7495 -285.2067 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     255.3088 459.6363 moveto
                     /Times-Roman findfont 10.0375 scalefont
                     /font14 exch def
                     font14 setfont
                     (Thin grey line indicates) show
                     261.3088 447.5915 moveto
                     font14 setfont
                     (thread blocked on) show
                     261.3088 435.5465 moveto
                     font14 setfont
                     (condition variable or) show
                     261.3088 423.5015 moveto
                     font14 setfont
                     (monitor lock) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  410.1803 -36.50172 moveto
                  343.4861 -36.50172 lineto
                  343.4861 91.63571 lineto
                  410.1803 91.63571 lineto
                  410.1803 -36.50172 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 824.5697 -33.738 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     269.0615 455.345 moveto
                     /colwidth 249.9906 def
                     gsave
                        font13 setfont
                        (Light red indicates that the thread is ready-to-run.  Dark) justify
                        grestore
                     269.0615 443.3 moveto
                     gsave
                        font13 setfont
                        (red indicates that the thread is scheduled on the VP and) justify
                        grestore
                     269.0615 431.255 moveto
                     /colwidth 249.9908 def
                     gsave
                        font13 setfont
                        (will run if the VP is executed by the Unix process) justify
                        grestore
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  406.5021 228.9123 moveto
                  346.5652 228.9123 lineto
                  346.5652 502.7209 lineto
                  406.5021 502.7209 lineto
                  406.5021 228.9123 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 830.2045 251.9436 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     264.9456 478.68 moveto
                     /colwidth 89.12613 def
                     gsave
                        font13 setfont
                        (Red vertical lines) justify
                        grestore
                     264.9456 466.635 moveto
                     /colwidth 84.74642 def
                     gsave
                        font13 setfont
                        (indicate condition) justify
                        grestore
                     264.9456 454.5898 moveto
                     /colwidth 91.98068 def
                     gsave
                        font13 setfont
                        (variable notification) justify
                        grestore
                     264.9456 442.5448 moveto
                     /colwidth 71.87671 def
                     gsave
                        font13 setfont
                        (unblocking the) justify
                        grestore
                     264.9456 430.4998 moveto
                     font13 setfont
                     (waiting thread) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  412.6497 510.4203 moveto
                  328.5381 510.4203 lineto
                  328.5381 624.0068 lineto
                  412.6497 624.0068 lineto
                  412.6497 510.4203 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 834.3149 -168.4896 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     271.1754 463.3882 moveto
                     /colwidth 103.5091 def
                     gsave
                        font13 setfont
                        (Yellow flags indicate) justify
                        grestore
                     271.1754 451.3433 moveto
                     /colwidth 78.83099 def
                     gsave
                        font13 setfont
                        (thread scheduler) justify
                        grestore
                     271.1754 439.2982 moveto
                     /colwidth 103.5091 def
                     gsave
                        font13 setfont
                        (invocation by a Yield) justify
                        grestore
                     271.1754 427.2532 moveto
                     font13 setfont
                     (call.) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  416.2489 96.30433 moveto
                  348.1548 96.30433 lineto
                  348.1548 221.5806 lineto
                  416.2489 221.5806 lineto
                  416.2489 96.30433 lineto
                  closepath stroke
                  grestore
               0.0 0.0 0.8 setrgbcolor
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     120.9666 249.18 moveto
                     164.421 249.18 lineto
                     164.421 261.8264 lineto
                     120.9666 261.8264 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     122.4666 260.3263 162.921 250.68 vec
                     grestore
                  grestore
               0.8 0.0 0.0 setrgbcolor
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     119.895 447.0007 moveto
                     154.7677 447.0007 lineto
                     154.7677 474.0464 lineto
                     119.895 474.0464 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     121.395 472.5463 153.2677 448.5007 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     272.6676 90.13572 moveto
                     344.9861 90.13572 lineto
                     344.9861 199.7372 lineto
                     272.6676 199.7372 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     343.4861 91.63571 274.1677 198.2372 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     237.7949 465.6875 moveto
                     348.0653 465.6875 lineto
                     348.0653 504.221 lineto
                     237.7949 504.221 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     346.5654 502.7209 239.2949 467.1875 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     272.6676 501.2206 moveto
                     348.0653 501.2206 lineto
                     348.0653 510.2646 lineto
                     272.6676 510.2646 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     346.5654 502.7209 274.1677 508.7647 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     272.6676 220.0806 moveto
                     349.6548 220.0806 lineto
                     349.6548 271.0014 lineto
                     272.6676 271.0014 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     348.1548 221.5806 274.1677 269.5014 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     254.0594 562.5512 moveto
                     330.0382 562.5512 lineto
                     330.0382 590.1106 lineto
                     254.0594 590.1106 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     328.5381 573.6834 moveto
                     322.1154 569.9186 315.6924 566.1535 309.2491 564.7288 curveto
                     291.4562 560.7932 273.5077 574.7021 255.5594 588.6108 curveto
                     stroke
                     grestore
                  grestore
               gsave
                  /Helvetica findfont 1.0 scalefont
                  /font15 exch def
                  font15 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate 439.8178 -12.47726 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (Figure 1) show
                  grestore
               0.8 0.0 0.0 setrgbcolor
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     119.895 471.0463 moveto
                     186.9112 471.0463 lineto
                     186.9112 511.9196 lineto
                     119.895 511.9196 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     121.395 472.5463 185.4112 510.4196 vec
                     grestore
                  grestore
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               235.1306 187.4428 235.1306 616.8511 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 603.1842 283.9595 603.1842 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 561.813 283.9595 561.813 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 520.4415 283.9595 520.4415 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 479.0708 283.9595 479.0708 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 437.6992 283.9595 437.6992 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 396.3281 283.9595 396.3281 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 354.957 283.9595 354.957 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 313.5857 283.9595 313.5857 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 272.2145 283.9595 272.2145 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               297.7498 230.8437 283.9595 230.8437 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 580.75 235.5545 592.7482 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 541.8615 235.5545 553.8594 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 501.7317 235.5545 513.3152 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 464.4972 235.5545 476.0816 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 426.4359 235.5545 434.2963 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 388.3742 235.5545 400.3725 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 351.1404 235.5545 363.9656 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 313.0788 235.5545 325.9041 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 259.7102 235.5545 267.157 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 231.1642 235.5545 241.5068 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               235.5545 199.3084 235.5545 208.4098 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 594.8172 274.1677 617.9841 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 592.7482 274.1677 594.8172 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 555.9276 274.1677 580.75 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 553.8594 274.1677 555.9276 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 515.3842 274.1677 541.8615 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 513.3152 274.1677 515.3842 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 478.15 274.1677 501.7317 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 476.0816 274.1677 478.15 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 436.365 274.1677 457.878 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 434.2963 274.1677 436.365 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 403.6819 274.1677 426.4359 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 400.3725 274.1677 403.6819 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 365.6205 274.1677 388.3742 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 363.9656 274.1677 365.6205 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 327.9726 274.1677 351.1404 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 325.9041 274.1677 327.9726 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 268.8115 274.1677 309.3556 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 267.157 274.1677 268.8115 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 210.4786 274.1677 231.1642 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               274.1677 208.4098 274.1677 210.4786 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 591.3692 225.901 591.3692 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 591.3692 235.5545 591.3692 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 552.7561 225.901 552.7561 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 552.7561 235.5545 552.7561 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 512.7636 225.901 512.7636 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 512.7636 235.5545 512.7636 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 475.5301 225.901 475.5301 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 475.5301 235.5545 475.5301 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 432.7798 225.901 432.7798 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 432.7798 235.5545 432.7798 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 399.6825 225.901 399.6825 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 399.6825 235.5545 399.6825 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 362.4485 225.901 362.4485 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 362.4485 235.5545 362.4485 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 325.2146 225.901 325.2146 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 325.2146 235.5545 325.2146 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 265.9158 225.901 265.9158 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 265.9158 235.5545 265.9158 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 207.9962 225.901 207.9962 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               235.5545 207.9962 235.5545 207.9962 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 594.9551 264.5143 594.9551 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 594.9551 274.1677 594.9551 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 556.3415 264.5143 556.3415 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 556.3415 274.1677 556.3415 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 515.522 264.5143 515.522 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 515.522 274.1677 515.522 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 478.2881 264.5143 478.2881 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 478.2881 274.1677 478.2881 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 436.365 264.5143 436.365 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 436.365 274.1677 436.365 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 402.8545 264.5143 402.8545 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 402.8545 274.1677 402.8545 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 366.0339 264.5143 366.0339 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 366.0339 274.1677 366.0339 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 327.9726 264.5143 327.9726 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 327.9726 274.1677 327.9726 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 269.5014 264.5143 269.5014 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 269.5014 274.1677 269.5014 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 210.2022 264.5143 210.2022 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               274.1677 210.2022 274.1677 210.2022 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 588.6109 270.0306 588.6109 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 588.6109 236.9335 588.6109 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 549.998 270.0306 549.998 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 549.998 236.9335 549.998 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 510.006 270.0306 510.006 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 510.006 236.9335 510.006 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 472.7724 270.0306 472.7724 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 472.7724 236.9335 472.7724 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 431.4005 270.0306 431.4005 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 431.4005 236.9335 431.4005 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 396.9245 270.0306 396.9245 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 396.9245 236.9335 396.9245 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 359.6906 270.0306 359.6906 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 359.6906 236.9335 359.6906 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 322.4565 270.0306 322.4565 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 322.4565 236.9335 322.4565 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 263.1578 270.0306 263.1578 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 263.1578 236.9335 263.1578 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 205.2381 270.0306 205.2381 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               236.9335 205.2381 236.9335 205.2381 vec
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     272.1677 187.3791 moveto
                     276.1677 187.3791 lineto
                     276.1677 191.3791 lineto
                     272.1677 191.3791 lineto
                     clip newpath
                     0.0 setgray
                     2.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     274.1677 189.3791 moveto
                     274.1677 189.3791 lineto
                     274.1677 189.3791 lineto
                     274.1677 189.3791 lineto
                     stroke
                     grestore
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 352.3497 -222.6162 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     180.0458 217.019 moveto
                     /colwidth 146.2684 def
                     gsave
                        font13 setfont
                        (This is the X window system) justify
                        grestore
                     180.0458 204.9741 moveto
                     font13 setfont
                     (server Unix process.) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  159.2228 -50.2279 moveto
                  116.0075 -50.2279 lineto
                  116.0075 118.4062 lineto
                  159.2228 118.4062 lineto
                  159.2228 -50.2279 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 405.7272 -225.1205 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     182.5153 227.0412 moveto
                     /colwidth 146.2684 def
                     gsave
                        font13 setfont
                        (This is the PCR virtual processor) justify
                        grestore
                     182.5153 214.9963 moveto
                     /colwidth 146.2684 def
                     gsave
                        font13 setfont
                        (\050VP\051 Unix process that is running) justify
                        grestore
                     182.5153 202.9512 moveto
                     font13 setfont
                     (the two threads below.) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  212.6004 -50.22792 moveto
                  159.2226 -50.22792 lineto
                  159.2226 118.4062 lineto
                  212.6004 118.4062 lineto
                  212.6004 -50.22792 lineto
                  closepath stroke
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     272.6676 116.1375 moveto
                     289.2877 116.1375 lineto
                     289.2877 190.8792 lineto
                     272.6676 190.8792 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     287.7876 117.6375 274.1677 189.3791 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     233.6306 116.9063 moveto
                     237.6992 116.9063 lineto
                     237.6992 188.9428 lineto
                     233.6306 188.9428 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     236.1992 118.4062 235.1306 187.4428 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     182.4227 116.9063 moveto
                     186.9112 116.9063 lineto
                     186.9112 190.741 lineto
                     182.4227 190.741 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     183.9227 118.4062 185.4112 189.2411 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     134.2732 116.9063 moveto
                     164.421 116.9063 lineto
                     164.421 189.2242 lineto
                     134.2732 189.2242 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     135.7732 118.4062 162.921 187.7242 vec
                     grestore
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  13.16219 dup matrix scale 90.0 matrix rotate 164.9661 171.0997 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (X) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  13.16219 dup matrix scale 90.0 matrix rotate 188.7376 162.6555 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (VP) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  13.16219 dup matrix scale 90.0 matrix rotate 239.6384 146.5897 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (image) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  13.16219 dup matrix scale 90.0 matrix rotate 279.1436 150.4403 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (buffer) show
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 856.6655 374.927 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     -13.62074 423.9844 moveto
                     /colwidth 216.6487 def
                     gsave
                        /Times-Roman findfont 8.029999 scalefont
                        /font16 exch def
                        font16 setfont
                        (Note: Our data collector reports \042unknown state\042 for processes) justify
                        grestore
                     -13.62074 413.9468 moveto
                     gsave
                        font16 setfont
                        (at the beginning of a capture interval.  For clarity we added by) justify
                        grestore
                     -13.62074 403.9094 moveto
                     gsave
                        font16 setfont
                        (hand the state color in two places: the first red \042running\042) justify
                        grestore
                     -13.62074 393.8718 moveto
                     font16 setfont
                     (region in VP, and the pink \042ready-to-run\042 region in image.) show
                     grestore
                  grestore
               gsave
                  font15 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate 462.0180 -44.64196 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (example of micro-visualization) show
                  grestore
               gsave
                  font15 setfont
                  0.0 setgray
                  10.0 dup matrix scale 90.0 matrix rotate 336.5581 167.7614 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (\050scale: 15mm = approx. 10 milliseconds\051) show
                  grestore
               grestore
            grestore
         grestore
      grestore
   grestore
% end page 9
showpage
%%page 10
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (10) show
      102.3825 713.8666 moveto
      /colwidth 436.8694 def
      gsave
         font0 setfont
         (Now look at the two threads, the third and fourth lines in figure 1. Again a slim grey line shows) justify
         grestore
      102.3825 701.8220 moveto
      /colwidth 436.8696 def
      gsave
         font0 setfont
         (they are idle.  A broader pink line indicates the thread is ready to run. As with the Unix) justify
         grestore
      102.3825 689.7769 moveto
      gsave
         font0 setfont
         (processes, a broad red area shows that the thread has actually acquired a virtual processor.) justify
         grestore
      102.3825 677.7321 moveto
      gsave
         font0 setfont
         (Within the threads, again vertical strokes indicate \042kernel\042 activity, in this case requests to) justify
         grestore
      102.3825 665.687 moveto
      gsave
         font0 setfont
         (the underlying thread mechanism running in the VP.  Long vertical strokes from thread-to-) justify
         grestore
      102.3825 653.642 moveto
      gsave
         font0 setfont
         (thread indicate inter-thread communication, in this case notification via a condition variable) justify
         grestore
      102.3825 641.597 moveto
      gsave
         font0 setfont
         (that a thread should wake up. The sender of the communication has a dot at the beginning of) justify
         grestore
      102.3825 629.552 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (the stroke. Short yellow strokes indicate a ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (YIELD) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( call, in which  a thread offers to voluntarily) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 617.5073 moveto
      gsave
         font0 setfont
         (give up the processor to anyone who may want it. Although PCR has a pre-emptive scheduler) justify
         grestore
      102.3825 605.4621 moveto
      font0 setfont
      (so yields are not strictly necessary, threads sometimes yield for performance reasons.  ) show
      102.3825 585.4839 moveto
      /colwidth 436.8694 def
      gsave
         font0 setfont
         (Finally, notice the relationship between the red areas in the VP, meaning it has acquired a real) justify
         grestore
      102.3825 573.4386 moveto
      /colwidth 436.8696 def
      gsave
         font0 setfont
         (processor, and the red areas in the threads, meaning they have acquired the VP.  A thread only) justify
         grestore
      102.3825 561.394 moveto
      gsave
         font0 setfont
         (can do real work when two conditions are met: it has acquired a VP, indicated by a red area in) justify
         grestore
      102.3825 549.3488 moveto
      gsave
         font0 setfont
         (the thread, and the VP has itself acquired the real processor, indicated by red in the VP.  Thus) justify
         grestore
      102.3825 537.3036 moveto
      gsave
         font0 setfont
         (threads sometimes become red for quite a while, but are making no progress because their VP) justify
         grestore
      102.3825 525.2586 moveto
      gsave
         font0 setfont
         (does not have the processor.  This is particularly apparent in the second thread \050fourth line\051 in) justify
         grestore
      102.3825 513.2138 moveto
      font0 setfont
      (figure 1.) show
      92.345 486.5757 moveto
      font9 setfont
      (3.2.2 A problem revealed by micro-behavior visualization) show
      102.3825 459.9379 moveto
      gsave
         font0 setfont
         (Figure 1a shows a 10 millisecond slice from Figure 1.  Starting from the top left, the X server) justify
         grestore
      102.3825 447.8929 moveto
      gsave
         font0 setfont
         (process is idle, the VP process is about to acquire the processor \050indicated by turning red\051, the) justify
         grestore
      102.3825 435.8478 moveto
      font0 setfont
      (image thread is ready-to-run but not scheduled on the VP and the buffer thread is idle.) show
      247.9447 291.1997 moveto
      gsave
         currentpoint translate
         2834.645 dup matrix scale concat
         gsave
            3.527776e-4 dup matrix scale concat
            gsave
               -172.0006 -876.1892 matrix translate concat
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               212.0 998.0681 308.9531 998.0681 vec
               0.5 setgray
               eofill
               gsave
                  gsave
                     -120.9615 808.1351 moveto
                     currentpoint translate
                     330.0875 130.0615 moveto
                     436.5767 130.0615 lineto
                     436.5767 138.0615 lineto
                     330.0875 138.0615 lineto
                     clip newpath
                     0.88 0.52 0.52 setrgbcolor
                     6.0 setlinewidth
                     0 setlinecap
                     1 setlinejoin
                     432.5764 134.0615 334.0875 134.0615 vec
                     grestore
                  grestore
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               210.4639 980.7681 308.9531 980.7681 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               215.5004 980.7681 269.6014 980.7681 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               251.8 912.543 310.9924 912.543 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               249.3253 912.543 249.2342 912.4942 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               275.9663 998.0681 304.6076 998.0681 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               275.9663 998.0681 275.9663 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               301.4246 998.0681 301.4246 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               301.4246 998.0681 301.4246 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               301.1072 998.0681 301.1072 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               301.1072 998.0681 301.1072 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               300.1526 998.0681 300.1526 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               300.1526 998.0681 300.1526 998.0681 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               291.8784 998.0681 291.8784 1005.494 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               291.8784 998.0681 291.8784 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               285.5128 998.0681 285.5128 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               285.5128 998.0681 285.5128 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               284.8767 998.0681 284.8767 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               284.8767 998.0681 284.8767 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               283.9222 998.0681 283.9222 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               283.9222 998.0681 283.9222 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               282.9664 998.0681 282.9664 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               282.9664 998.0681 282.9664 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               275.9663 998.0681 275.9663 1005.494 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               275.9663 998.0681 275.9663 998.0681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               269.6014 980.7681 269.6014 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               269.6014 980.7681 269.6014 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               263.2364 980.7681 263.2364 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               263.2364 980.7681 263.2364 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               265.7826 980.7681 265.7826 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               265.7826 980.7681 265.7826 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               264.828 980.7681 264.828 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               264.828 980.7681 264.828 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               259.736 980.7681 259.736 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               259.736 980.7681 259.736 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               253.3712 980.7681 253.3712 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               253.3712 980.7681 253.3712 980.7681 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               244.142 980.7681 244.142 988.1944 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               244.142 980.7681 244.142 980.7681 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               240.9594 980.7681 240.9594 988.1944 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               240.9594 980.7681 240.9594 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               237.7767 980.7681 237.7767 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               237.7767 980.7681 237.7767 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               237.4594 980.7681 237.4594 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               237.4594 980.7681 237.4594 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               236.5047 980.7681 236.5047 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               236.5047 980.7681 236.5047 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               231.4127 980.7681 231.4127 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               231.4127 980.7681 231.4127 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               229.185 980.7681 229.185 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               229.185 980.7681 229.185 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               225.0476 980.7681 225.0476 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               225.0476 980.7681 225.0476 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               224.7297 980.7681 224.7297 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               224.7297 980.7681 224.7297 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               223.7746 980.7681 223.7746 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               223.7746 980.7681 223.7746 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               221.5472 980.7681 221.5472 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               221.5472 980.7681 221.5472 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               220.5926 980.7681 220.5926 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               220.5926 980.7681 220.5926 980.7681 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               215.5004 980.7681 215.5004 988.1944 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               215.5004 980.7681 215.5004 980.7681 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               238.7322 942.1961 259.736 942.1961 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               264.5096 912.4942 312.2456 912.4942 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               259.736 912.4942 264.5096 912.4942 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               215.819 912.4942 251.8 912.543 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               258.7816 942.1961 258.7816 949.6223 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               258.7816 942.1961 258.7816 942.1961 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               263.8726 912.4942 263.8726 919.92 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               263.8726 912.4942 263.8726 912.4942 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               252.4162 941.1357 252.4162 915.6765 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               252.4162 941.1357 252.4162 941.1357 vec
               0.5 setgray
               eofill
               gsave
                  gsave
                     -58.34868 723.1153 moveto
                     currentpoint translate
                     272.1677 187.3791 moveto
                     276.1677 187.3791 lineto
                     276.1677 191.3791 lineto
                     272.1677 191.3791 lineto
                     clip newpath
                     0.0 setgray
                     2.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     274.1677 189.3791 moveto
                     274.1677 189.3791 lineto
                     274.1677 189.3791 lineto
                     274.1677 189.3791 lineto
                     stroke
                     grestore
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  12.0 dup matrix scale 0.4889224 matrix rotate 226.9918 884.4314 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (figure 1a) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  12.0 dup matrix scale 0.4889224 matrix rotate 193.6054 995.2703 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (X) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  12.0 dup matrix scale 0.4889224 matrix rotate 186.9508 978.4118 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (VP) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  12.0 dup matrix scale 0.4889224 matrix rotate 178.0778 939.815 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (image) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  12.0 dup matrix scale 0.4889224 matrix rotate 178.9942 909.3456 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (buffer) show
                  grestore
               2.0 setlinewidth
               0.0 setgray
               gsave
                  1.0 setlinewidth
                  2 setlinecap
                  1 setlinejoin
                  172.0006 876.1892 moveto
                  172.0006 1010.393 lineto
                  317.7458 1010.393 lineto
                  317.7458 876.1892 lineto
                  172.0006 876.1892 lineto
                  closepath stroke
                  grestore
               grestore
            grestore
         grestore
      102.3825 271.2212 moveto
      gsave
         font0 setfont
         (When the VP starts running, it eventually runs the image thread.  After some work, the image) justify
         grestore
      102.3825 259.1762 moveto
      /colwidth 436.8694 def
      gsave
         font0 setfont
         (thread tells the buffer thread that there is some image data to transmit by notifying a condition) justify
         grestore
      102.3825 247.1312 moveto
      /colwidth 436.8696 def
      gsave
         font0 setfont
         (variable \050CV\051.  This notification \050shown by the long red stroke from the image to buffer thread\051) justify
         grestore
      102.3825 235.0862 moveto
      gsave
         font0 setfont
         (immediately makes the buffer thread ready-to-run \050shown by the pink color\051. The buffer) justify
         grestore
      102.3825 223.0412 moveto
      gsave
         font0 setfont
         (thread does not run immediately upon being notified because the image thread is still holding) justify
         grestore
      102.3825 210.9962 moveto
      gsave
         font0 setfont
         (the monitor lock. \050See Section 6.1\051  When the image thread leaves the monitor \050indicated by the) justify
         grestore
      102.3825 198.9512 moveto
      font0 setfont
      (blue stroke at the end of the dark red region\051, the buffer thread runs.) show
      102.3825 178.9727 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (The buffer thread runs only briefly and then ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (YIELD) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (s, shown by the short yellow stroke. The) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 166.9277 moveto
      gsave
         font10 setfont
         opsbef 0 {font10 setfont} put
         (YIELD) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {font0 setfont} put
         ( does nothing, the buffer thread continues to run and begins to communicate to the X) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      102.3825 154.8827 moveto
      gsave
         font0 setfont
         (server, which we deduce from the fact that the X server now starts to run \050top line\051. The buffer) justify
         grestore
      102.3825 142.8377 moveto
      font0 setfont
      (thread continues to run for some time and eventually this cycle repeats.) show
      102.3825 122.8593 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Why is that ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (YIELD) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( there and what is supposed to be happening? The buffer thread is supposed to) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 110.8142 moveto
      gsave
         font0 setfont
         (be storing up paint requests, merging overlapping requests and sending them only occasionally) justify
         grestore
      102.3825 98.76922 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (to the X server. It does the ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (YIELD) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( when it determines that it should not yet communicate to the) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 86.72425 moveto
      /colwidth 436.8694 def
      gsave
         font0 setfont
         (X server, instead offering to give up the processor to any other thread that desires it. In this) justify
         grestore
      grestore
   grestore
% end page 10
showpage
%%page 11
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      553.3894 746.79 moveto
      (11) show
      102.3825 713.8666 moveto
      /colwidth 436.8696 def
      gsave
         font0 setfont
         (case, the scheduler decided to continue running the buffer process so it proceeded to) justify
         grestore
      102.3825 701.8220 moveto
      font0 setfont
      (communicate with the X server anyway.  ) show
      102.3825 682.8176 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (The ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (YIELD) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( by the buffer thread invokes the scheduler to choose the highest priority ready-to-) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 670.7727 moveto
      gsave
         font0 setfont
         (run thread.  The image thread is ready-to-run as shown by its pink color but it has lower) justify
         grestore
      102.3825 658.7276 moveto
      gsave
         font0 setfont
         (priority than the buffer thread \050deduced from the figure and confirmed in the source code\051.  So) justify
         grestore
      102.3825 646.6826 moveto
      font0 setfont
      (in this case the ) show
      font10 setfont
      (YIELD) show
      font0 setfont
      ( in the buffer thread accomplishes nothing.) show
      102.3825 627.6786 moveto
      gsave
         font0 setfont
         (As can be seen in microcosm in Figure 1a, and repeatedly in Figure 1, this failure to yield) justify
         grestore
      102.3825 615.6334 moveto
      /colwidth 436.8694 def
      gsave
         font0 setfont
         (means that every time the image thread wakes up and signals the buffer thread, the buffer) justify
         grestore
      102.3825 603.5882 moveto
      /colwidth 436.8696 def
      gsave
         font0 setfont
         (thread runs and wakes up the X server.  The failure to merge overlapping requests and the) justify
         grestore
      102.3825 591.5434 moveto
      font0 setfont
      (frequent thread and process switches are costly in performance.) show
      102.3825 572.539 moveto
      font0 setfont
      (We will return to this problem in Section 5.2.) show
      72.26999 523.1098 moveto
      font8 setfont
      (4.  Thread paradigms ) show
      82.3075 497.7709 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         (Birrell provides a good introduction to some of the basic paradigms for thread use [Birrell91]. Here) justify
         grestore
      82.3075 485.7258 moveto
      gsave
         font0 setfont
         (we go further into more advanced paradigms, their necessity and frequency in practice and the) justify
         grestore
      82.3075 473.6809 moveto
      font0 setfont
      (problems of performance and correctness entailed by these advanced usages.) show
      82.3075 454.6765 moveto
      gsave
         font0 setfont
         (Birrell suggests that forking a new thread is useful in several situations: to exploit concurrency on) justify
         grestore
      82.3075 442.6316 moveto
      gsave
         font0 setfont
         (a multiprocessor \050including waiting for I/O, where one processor is the I/O device\051; to satisfy a) justify
         grestore
      82.3075 430.5866 moveto
      gsave
         font0 setfont
         (human user by making progress on several tasks at once; to provide network service to multiple) justify
         grestore
      82.3075 418.5414 moveto
      font0 setfont
      (clients simultaneously; and to defer work to a less busy time [Birrell91, p. 109].) show
      82.3075 399.537 moveto
      gsave
         font0 setfont
         (We examined about 650 different code fragments that create threads.  We gradually developed a) justify
         grestore
      82.3075 387.492 moveto
      gsave
         font0 setfont
         (collection of categories that we could use to explain how thread uses were similar to one another) justify
         grestore
      82.3075 375.447 moveto
      font0 setfont
      (and how they differed.  Our final list of categories is:) show
      112.42 360.7701 moveto
      font0 setfont
      (- defer work \050same as Birrell's\051) show
      112.42 346.093 moveto
      /colwidth 414.8684 def
      gsave
         font0 setfont
         (- pumps \050components of Birrell's pipelines. He describes them for exploiting) justify
         grestore
      142.5325 334.0481 moveto
      font0 setfont
      (multiprocessing, but we saw them mostly used for structuring.\051) show
      112.42 319.371 moveto
      font0 setfont
      (- slack processes, a kind of specialized pump \050new\051) show
      112.42 304.694 moveto
      /colwidth 426.832 def
      gsave
         font0 setfont
         (- sleepers and one-shots \050common uses probably omitted by Birrell because synchronization) justify
         grestore
      142.5325 292.649 moveto
      font0 setfont
      (problems in them are rare\051) show
      112.42 277.9718 moveto
      font0 setfont
      (- deadlock avoiders \050new\051) show
      112.42 263.2949 moveto
      font0 setfont
      (- task rejuvenation \050new\051) show
      112.42 248.6178 moveto
      font0 setfont
      (- serializers, another kind of specialized pump \050new\051) show
      112.42 233.9407 moveto
      font0 setfont
      (- concurrency exploiters \050same as Birrell's\051) show
      112.42 219.2637 moveto
      /colwidth 426.8318 def
      gsave
         font0 setfont
         (- encapsulated forks, which are forks in packages that capture certain paradigms and whose) justify
         grestore
      142.5325 207.2188 moveto
      font0 setfont
      (uses are themselves counted in the other categories.) show
      82.3075 188.2144 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         (These static categories complement the thread lifetime characterization in Section 3.1.  The eternal) justify
         grestore
      82.3075 176.1694 moveto
      gsave
         font0 setfont
         (threads tend to be sleepers, pumps and serializers with nothing to do.  Worker threads are often) justify
         grestore
      82.3075 164.1244 moveto
      gsave
         font0 setfont
         (work deferrers and transient threads are often deadlock avoiders. But the reader is cautioned that) justify
         grestore
      82.3075 152.0794 moveto
      font0 setfont
      (the static paradigm can't be predicted from the dynamic lifetime.  ) show
      112.42 137.4023 moveto
      font0 setfont
      ( ) show
      82.3075 112.0632 moveto
      font1 setfont
      (4.1 Defer work) show
      92.345 86.7241 moveto
      /colwidth 446.907 def
      gsave
         font0 setfont
         (Deferring work is the single most common use of forking in these systems.  A procedure can often) justify
         grestore
      grestore
   grestore
% end page 11
showpage
%%page 12
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (12) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (reduce the latency seen by its clients by forking a thread to do work not required for the) justify
         grestore
      92.345 701.8220 moveto
      gsave
         font0 setfont
         (procedure's return value.  Sometimes work can be deferred to times when the system is under less) justify
         grestore
      92.345 689.7769 moveto
      gsave
         font0 setfont
         (load [Birrell91].  Cedar practice has been to introduce work deferrers freely as the opportunity to) justify
         grestore
      92.345 677.7321 moveto
      gsave
         font0 setfont
         (use them is noticed.  Many commands fork an activity whose results will be reported in a separate) justify
         grestore
      92.345 665.687 moveto
      gsave
         font0 setfont
         (window: control in the originating thread returns immediately to the user, an example of latency) justify
         grestore
      92.345 653.642 moveto
      font0 setfont
      (reduction for the human client. Some examples of work deferrers are:) show
      132.495 639.5898 moveto
      font0 setfont
      (- forking to print a document) show
      132.495 625.537 moveto
      font0 setfont
      (- forking to send a mail message) show
      132.495 611.4845 moveto
      font0 setfont
      (- forking to create a new window) show
      132.495 597.4321 moveto
      font0 setfont
      (- forking to update the contents of a window) show
      92.345 579.3645 moveto
      gsave
         font0 setfont
         (Some threads are themselves so critical to system responsiveness that they fork to defer almost) justify
         grestore
      92.345 567.3194 moveto
      gsave
         font0 setfont
         (any work at all beyond noticing what work needs to be done. These critical threads play the role) justify
         grestore
      92.345 555.2745 moveto
      gsave
         font0 setfont
         (of interrupt handlers.  Forking the real work allows it to be done in a lower priority thread and) justify
         grestore
      92.345 543.2295 moveto
      gsave
         font0 setfont
         (frees the critical thread to respond to the next event.  The keyboard-and-mouse watching) justify
         grestore
      92.345 531.1846 moveto
      font0 setfont
      (process, called the Notifier, is such a critical, high priority thread in both Cedar and GVX.) show
      82.3075 507.0946 moveto
      font1 setfont
      (4.2 Pumps ) show
      92.345 483.0046 moveto
      gsave
         font0 setfont
         (Pumps are components of pipelines. They pick up input from one place, possibly transform it in) justify
         grestore
      92.345 470.9596 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (some way and produce it as output someplace else.) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont 0.0 4.015 rmoveto} put
         (1) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {0.0 -4.015 rmoveto font0 setfont} put
         (   Bounded buffers and external devices are) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 458.9146 moveto
      gsave
         font0 setfont
         (two common sources and sinks. The former occur in several implementations in our systems for) justify
         grestore
      92.345 446.8696 moveto
      gsave
         font0 setfont
         (connecting threads together, while the latter are accessed with system calls \050read, write\051 and) justify
         grestore
      92.345 434.8246 moveto
      font0 setfont
      (shared memory \050raw screen IO and memory shared with an external X server\051.  ) show
      92.345 416.7571 moveto
      gsave
         font0 setfont
         (Though Birrell suggests creating pipelines to exploit parallelism on a multiprocessor, we find) justify
         grestore
      92.345 404.7122 moveto
      gsave
         font0 setfont
         (them most commonly used in our systems as a programming convenience, another reflection of) justify
         grestore
      92.345 392.667 moveto
      gsave
         font0 setfont
         (the uniprocessor heritage of the systems.  This is also their primary use in the well-known Unix) justify
         grestore
      92.345 380.6222 moveto
      gsave
         font0 setfont
         (shell pipelines.  For example, in our systems all user input is filtered through a pipeline thread) justify
         grestore
      92.345 368.5769 moveto
      gsave
         font0 setfont
         (that preprocesses events and puts them into another queue, rather than have each reader thread) justify
         grestore
      92.345 356.532 moveto
      gsave
         font0 setfont
         (preprocess on demand. Neither approach necessarily provides a more efficient system, but the) justify
         grestore
      92.345 344.487 moveto
      gsave
         font0 setfont
         (pipeline is conceptually simpler: tokens just appear in a queue. The programmer needs to) justify
         grestore
      92.345 332.442 moveto
      font0 setfont
      (understand less about the pieces being connected.) show
      92.345 314.3745 moveto
      gsave
         font0 setfont
         (One interesting kind of pump is the slack process. A slack process explicitly adds latency to a) justify
         grestore
      92.345 302.3294 moveto
      gsave
         font0 setfont
         (pipeline in the hope of reducing the total amount of work done, either by merging input or) justify
         grestore
      92.345 290.2844 moveto
      gsave
         font0 setfont
         (replacing earlier data with later data before placing it on its output.  Slack processes are useful) justify
         grestore
      92.345 278.2394 moveto
      gsave
         font0 setfont
         (when the downstream consumer of the data incurs high per-transaction costs. The buffer thread) justify
         grestore
      92.345 266.1944 moveto
      font0 setfont
      (discussed in Sections 3.2 and 5.2 is an example of a slack process. ) show
      82.3075 242.1045 moveto
      font1 setfont
      (4.3 Sleepers and oneshots) show
      92.345 218.0145 moveto
      gsave
         font0 setfont
         (Sleepers are processes that repeatedly wait for a triggering event and then execute. Often the) justify
         grestore
      92.345 205.9694 moveto
      gsave
         font0 setfont
         (triggering event is a timeout. Examples include:  call this procedure in K seconds; blink the) justify
         grestore
      92.345 193.9244 moveto
      gsave
         font0 setfont
         (cursor in M milliseconds; check for network connection timeout every T seconds. Other common) justify
         grestore
      92.345 181.8794 moveto
      gsave
         font0 setfont
         (events are external input and service callbacks from other activities. For instance, our systems) justify
         grestore
      92.345 138.9191 moveto
      font0 setfont
      currentpoint /undery exch def /underx exch def
      (                                         ) show
      1.0 setlinewidth
      currentpoint currentpoint pop
      undery 1.2 sub dup underx exch
      vec moveto
      92.345 122.8592 moveto
      gsave
         font10 setfont
         opsbef 0 {font10 setfont 0.0 4.015 rmoveto} put
         (1) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {0.0 -4.015 rmoveto font0 setfont} put
         (We use the term ) 1 buf
         opsaft 1 null put
         font9 setfont
         opsbef 2 {font9 setfont} put
         (pump) 2 buf
         opsaft 2 null put
         font0 setfont
         opsbef 3 {font0 setfont} put
         (, rather than the more common ) 3 buf
         opsaft 3 null put
         font9 setfont
         opsbef 4 {font9 setfont} put
         (filter) 4 buf
         opsaft 4 null put
         font0 setfont
         opsbef 5 {font0 setfont} put
         ( because data transformation, ala) 5 buf
         opsaft 5 null put
         mixedjustify
         grestore
      92.345 110.8142 moveto
      gsave
         font0 setfont
         (filters, is just one of the things that pumps can do.  In general, pumps control both the data) justify
         grestore
      92.345 98.76915 moveto
      gsave
         font0 setfont
         (transformation and the timing of the transfer.  We also like the connotation of an active entity) justify
         grestore
      92.345 86.72413 moveto
      font0 setfont
      (conveyed by ) show
      font9 setfont
      (pump) show
      font0 setfont
      ( as opposed to the passivity of ) show
      font9 setfont
      (filter) show
      font0 setfont
      (.) show
      grestore
   grestore
% end page 12
showpage
%%page 13
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (13) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (use callbacks from the garbage collector to finalize objects and callbacks from the filesystem) justify
         grestore
      92.345 701.8220 moveto
      gsave
         font0 setfont
         (when files change state. These callbacks are removed from time-critical paths in the garbage) justify
         grestore
      92.345 689.7769 moveto
      gsave
         font0 setfont
         (collector and filesystem by putting an event in a work queue serviced by a sleeper thread.  The) justify
         grestore
      92.345 677.7321 moveto
      font0 setfont
      (client's code is then called from the sleeper.) show
      92.345 658.2881 moveto
      gsave
         font0 setfont
         (Sleepers frequently do very little work before sleeping again. For instance, various cache) justify
         grestore
      92.345 646.2429 moveto
      font0 setfont
      (managers in our systems simply throw away aged values in a cache then go back to sleep.) show
      92.345 626.7988 moveto
      gsave
         font0 setfont
         (Another kind of sleeper is the garbage collector's background thread which cleans pages dirtied) justify
         grestore
      92.345 614.7539 moveto
      gsave
         font0 setfont
         (by other threads. If it gets too far behind in its work it could cause virtual memory thrashing by) justify
         grestore
      92.345 602.709 moveto
      gsave
         font0 setfont
         (cleaning pages no longer resident in physical memory. Its rate of awakening must depend on the) justify
         grestore
      92.345 590.6639 moveto
      font0 setfont
      (amount of page dirtying which depends on the workload of all the other threads in the system.) show
      92.345 571.2198 moveto
      gsave
         font0 setfont
         (OneShots are sleeper processes that sleep for a while, run and then go away. This paradigm is) justify
         grestore
      92.345 559.175 moveto
      gsave
         font0 setfont
         (used repeatedly in Cedar, for example, to implement guarded buttons of several kinds. \050A) justify
         grestore
      92.345 547.1299 moveto
      gsave
         font0 setfont
         (guarded button must be pressed twice, in close, but not too close succession.  They usually look) justify
         grestore
      92.345 535.0847 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (like \042) 0 buf
         opsaft 0 null put
         opsbef 1 {
             currentpoint /undery exch def /underx exch def
             font0 setfont} put
         (Button) 1 buf
         opsaft 1 {
             1.0 setlinewidth
             currentpoint currentpoint pop
             undery -2.3 sub dup underx exch
             vec moveto} put
         opsbef 2 {font0 setfont} put
         (\042 on the screen.\051  After a one-shot is forked it sleeps for an arming period that must) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 523.04 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (pass before a second click is acceptable.  Then it changes the button appearance from \042) 0 buf
         opsaft 0 null put
         opsbef 1 {
             currentpoint /undery exch def /underx exch def
             font0 setfont} put
         (Button) 1 buf
         opsaft 1 {
             1.0 setlinewidth
             currentpoint currentpoint pop
             undery -2.3 sub dup underx exch
             vec moveto} put
         opsbef 2 {font0 setfont} put
         (\042 to) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 510.9948 moveto
      gsave
         font0 setfont
         (\042Button\042 and sleeps a second time.  During this period a second click invokes a procedure) justify
         grestore
      92.345 498.95 moveto
      gsave
         font0 setfont
         (associated with the button, but if the timeout expires without a second click, the one-shot just) justify
         grestore
      92.345 486.9047 moveto
      font0 setfont
      (repaints the guarded button.) show
      82.3075 460.9794 moveto
      font1 setfont
      (4.4 Deadlock avoiders) show
      92.345 435.054 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Cedar often uses ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (FORK) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( to avoid violating lock order constraints.  The window manager makes) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 423.009 moveto
      gsave
         font0 setfont
         (heavy use of this paradigm. For example, after adjusting the boundary between two windows the) justify
         grestore
      92.345 410.9639 moveto
      gsave
         font0 setfont
         (contents of the windows must be repainted. The boundary-moving thread forks new threads to do) justify
         grestore
      92.345 398.9189 moveto
      gsave
         font0 setfont
         (the repainting because it already holds some, but not all of the locks needed for the repainting.) justify
         grestore
      92.345 386.8739 moveto
      gsave
         font0 setfont
         (Acquiring these locks would require unwinding the adjusting process far enough to release locks) justify
         grestore
      92.345 374.829 moveto
      gsave
         font0 setfont
         (that would violate locking order, then reacquiring all the necessary locks in the right order. It is) justify
         grestore
      92.345 362.7839 moveto
      gsave
         font0 setfont
         (far simpler to fork the painting processes, unwind the adjuster completely and let the painters) justify
         grestore
      92.345 350.7389 moveto
      font0 setfont
      (acquire the locks that they need in separate processes.) show
      92.345 331.2949 moveto
      gsave
         font0 setfont
         (Another case of deadlock avoidance is forking the callbacks from a service module to a client) justify
         grestore
      92.345 319.2498 moveto
      gsave
         font0 setfont
         (module. Forking permits the service thread to proceed, eventually releasing locks it holds that) justify
         grestore
      92.345 307.2048 moveto
      gsave
         font0 setfont
         (will be needed by the client. The fork also insulates the service from things that may go wrong in) justify
         grestore
      92.345 295.1597 moveto
      gsave
         font0 setfont
         (the client callback. For instance, Cedar permits clients to register callback procedures with the) justify
         grestore
      92.345 283.1148 moveto
      gsave
         font0 setfont
         (garbage collector that are called to finalize \050clean up\051 data structures.  The finalization service) justify
         grestore
      92.345 271.0698 moveto
      font0 setfont
      (thread forks each callback.) show
      82.3075 245.1444 moveto
      font1 setfont
      (4.5 Task rejuvenation) show
      92.345 219.219 moveto
      gsave
         font0 setfont
         (Sometimes threads get into bad states, such as arise from uncaught exceptions or stack overflow,) justify
         grestore
      92.345 207.1739 moveto
      gsave
         font0 setfont
         (from which recovery is impossible within the thread itself. In many cases, however, cleanup and) justify
         grestore
      92.345 195.1289 moveto
      gsave
         font0 setfont
         (recovery is possible if a new \042task rejuvenation\042 thread is forked. For uncaught errors, an) justify
         grestore
      92.345 183.084 moveto
      gsave
         font0 setfont
         (exception handler may simply fork a new copy of the service. For stack overflow, a new thread is) justify
         grestore
      92.345 171.0389 moveto
      gsave
         font0 setfont
         (forked to report the stack overflow. Using threads for task rejuvenation can be tricky and is a bit) justify
         grestore
      92.345 158.9939 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (counter-intuitive \050This thread is in trouble. Ok let's make ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (two ) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (of them!\051 However, it is a) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 146.949 moveto
      gsave
         font0 setfont
         (paradigm that adds significantly to the robustness of our systems and its use is growing. A recent) justify
         grestore
      92.345 134.904 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (addition is a task-rejuvenating ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (FORK ) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (that was added to the input event dispatcher in Cedar. The) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 122.859 moveto
      gsave
         font0 setfont
         (dispatcher makes unforked callbacks to client procedures because \050a\051 this code is on the critical) justify
         grestore
      92.345 110.814 moveto
      gsave
         font0 setfont
         (path for user-visible performance and \050b\051 most callbacks are very short \050e.g. enqueue an event\051) justify
         grestore
      92.345 98.76895 moveto
      gsave
         font0 setfont
         (and so a fork overhead would be significant. But not forking makes the dispatcher vulnerable to) justify
         grestore
      92.345 86.72391 moveto
      gsave
         font0 setfont
         (uncaught runtime errors that occur in the callbacks. Using task rejuvenation, the new copy of the) justify
         grestore
      grestore
   grestore
% end page 13
showpage
%%page 14
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.759 746.79 moveto
      (14) show
      92.345 713.8666 moveto
      font0 setfont
      (dispatcher keeps running.) show
      92.345 693.9067 moveto
      gsave
         font0 setfont
         (Task rejuvenation is a controversial paradigm.  It's ability to mask underlying design problems) justify
         grestore
      92.345 681.8615 moveto
      font0 setfont
      (suggests that it be used with caution.) show
      82.3075 655.248 moveto
      font1 setfont
      (4.6 Serializers) show
      92.345 628.6342 moveto
      gsave
         font0 setfont
         (A serializer is a queue and a thread that processes the work on the queue. The queue acts as a) justify
         grestore
      92.345 616.5893 moveto
      gsave
         font0 setfont
         (point of serialization in the system. The primary example is in the window system where input) justify
         grestore
      92.345 604.5443 moveto
      gsave
         font0 setfont
         (events can arrive from a number of different sources. They are handled by a single thread in order) justify
         grestore
      92.345 592.4993 moveto
      gsave
         font0 setfont
         (to preserve their ordering. This same paradigm is present in most other window systems and in) justify
         grestore
      92.345 580.4545 moveto
      gsave
         font0 setfont
         (many cases it is the only paradigm. In the Macintosh, Microsoft Windows, and X programming) justify
         grestore
      92.345 568.4095 moveto
      gsave
         font0 setfont
         (models, for example, each application runs in a serializer thread that pulls events from a queue) justify
         grestore
      92.345 556.3644 moveto
      font0 setfont
      (associated with the application's window.) show
      82.3075 529.7507 moveto
      font1 setfont
      (4.7 Concurrency exploiters) show
      92.345 503.137 moveto
      gsave
         font0 setfont
         (Concurrency exploiters are threads created specifically to make use of multiple processors.  They) justify
         grestore
      92.345 491.092 moveto
      gsave
         font0 setfont
         (tend to be very problem-specific in their details.  Since our systems have only relatively recently) justify
         grestore
      92.345 479.0468 moveto
      gsave
         font0 setfont
         (begun to run on multiprocessors we were not surprised to find very few concurrency exploiters in) justify
         grestore
      92.345 467.0019 moveto
      font0 setfont
      (them.    ) show
      82.3075 440.3882 moveto
      font1 setfont
      (4.8 Encapsulated forks) show
      92.345 413.7745 moveto
      gsave
         font0 setfont
         (One way that our systems promote use of common thread paradigms is by providing modules that) justify
         grestore
      92.345 401.7293 moveto
      gsave
         font0 setfont
         (encapsulate the paradigms. This section describes three such packages used frequently in our) justify
         grestore
      92.345 389.6844 moveto
      font0 setfont
      (systems. ) show
      92.345 363.0707 moveto
      font9 setfont
      (DelayedFork and PeriodicalFork) show
      102.3825 336.4572 moveto
      /colwidth 436.8696 def
      gsave
         font0 setfont
         (DelayedFork expresses the paradigm of a one-shot. It calls a procedure at some time in the) justify
         grestore
      102.3825 324.412 moveto
      gsave
         font0 setfont
         (future. Although one-shots are common in our system, DelayedFork is only used in our) justify
         grestore
      102.3825 312.3671 moveto
      font0 setfont
      (window systems. \050Its limited use might be because it appeared only recently.\051) show
      102.3825 292.4068 moveto
      gsave
         font0 setfont
         (PeriodicalFork is simply a DelayedFork that repeats over and over again at fixed intervals.  It) justify
         grestore
      102.3825 280.3617 moveto
      gsave
         font0 setfont
         (encapsulates the sleeper paradigm where the wakeups are prompted solely by the passage of) justify
         grestore
      102.3825 268.3167 moveto
      font0 setfont
      (time. ) show
      92.345 241.703 moveto
      font9 setfont
      (MBQueue) show
      102.3825 215.0893 moveto
      gsave
         font0 setfont
         (The module MBQueue \050the name means Menu/Button Queue\051 encapsulates the serializer) justify
         grestore
      102.3825 203.0442 moveto
      gsave
         font0 setfont
         (paradigm in our systems. MBQueue creates a queue as a serialization context and a thread to) justify
         grestore
      102.3825 190.9993 moveto
      gsave
         font0 setfont
         (process it. Mouse clicks and key strokes cause procedures to be enqueued for the context: the) justify
         grestore
      102.3825 178.9543 moveto
      font0 setfont
      (thread then calls the procedures in the order received.  ) show
      102.3825 158.994 moveto
      gsave
         font0 setfont
         (We consider a queue together with a thread processing it an important building block of user) justify
         grestore
      102.3825 146.949 moveto
      gsave
         font0 setfont
         (interfaces.  This is borne out by the fact that our system actually contains several minor) justify
         grestore
      102.3825 134.904 moveto
      gsave
         font0 setfont
         (variations of MBQueue.  Why is there not a more general package?  It seems that each instance) justify
         grestore
      102.3825 122.859 moveto
      gsave
         font0 setfont
         (adds serialization to a specific interface already familiar to the programmer.  Furthermore, the) justify
         grestore
      102.3825 110.814 moveto
      gsave
         font0 setfont
         (serialization is often on a critical interactive performance path.  Keeping a familiar interface to) justify
         grestore
      102.3825 98.76902 moveto
      gsave
         font0 setfont
         (the programmer and reducing latency cause new variations to be preferred over a single) justify
         grestore
      102.3825 86.72403 moveto
      font0 setfont
      (generic implementation.) show
      grestore
   grestore
% end page 14
showpage
%%page 15
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (15) show
      92.345 713.8666 moveto
      font9 setfont
      (Miscellaneous) show
      102.3825 689.7769 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Many modules that do callbacks offer a ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (fork) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( boolean parameter in their interface, indicating) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 677.7319 moveto
      gsave
         font0 setfont
         (whether or not the called-back procedure is to be called directly or in a forked thread.  The) justify
         grestore
      102.3825 665.6869 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (default is almost always ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (TRUE) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (, meaning the callback will be forked. Unforked callbacks are) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      102.3825 653.6418 moveto
      gsave
         font0 setfont
         (usually intended for experts, because they make future execution of the calling thread within) justify
         grestore
      102.3825 641.5968 moveto
      font0 setfont
      (the module dependent on successful completion of the client callback. ) show
      82.3075 617.507 moveto
      font1 setfont
      (4.9 Paradigm summary) show
      92.345 593.417 moveto
      /colwidth 446.907 def
      gsave
         font0 setfont
         (Table 4 summarizes the absolute and relative frequencies of the paradigms in our systems.  Note) justify
         grestore
      92.345 581.372 moveto
      gsave
         font0 setfont
         (that in keeping with our emphasis on using threads as program structuring devices this is a static) justify
         grestore
      92.345 569.327 moveto
      gsave
         font0 setfont
         (count.  \050Threads may be counted in more than one category because they change their behavior.\051) justify
         grestore
      92.345 557.282 moveto
      gsave
         font0 setfont
         (Some threads seem not to fit easily into any category. These are captured in the \042Unknown or) justify
         grestore
      92.345 545.2368 moveto
      font0 setfont
      (other\042 entries.) show
      216.2592 527.1695 moveto
      font1 setfont
      (Table 4.   Static Counts, Cedar and GVX) show
      92.345 509.102 moveto
      font0 setfont
      44.60656 0.0 rmoveto
      font1 setfont
      44.60656 0.0 rmoveto
      44.60656 0.0 rmoveto
      (     Cedar ) show
      44.60253 0.0 rmoveto
      (    GVX ) show
      font0 setfont
      8.919297 0.0 rmoveto
      92.345 491.0344 moveto
      font1 setfont
      (Defer work) show
      font0 setfont
      31.77564 0.0 rmoveto
      44.60656 0.0 rmoveto
      ( 108) show
      25.64575 0.0 rmoveto
      (  31%) show
      20.62802 0.0 rmoveto
      (   77) show
      26.7619 0.0 rmoveto
      ( 33%) show
      22.85836 0.0 rmoveto
      92.345 478.9894 moveto
      font1 setfont
      (Pumps) show
      font0 setfont
      8.917294 0.0 rmoveto
      92.345 466.9444 moveto
      font1 setfont
      (    General pumps) show
      font0 setfont
      2.779373 0.0 rmoveto
      (   ) show
      37.91559 0.0 rmoveto
      (  48) show
      28.99225 0.0 rmoveto
      (  14%) show
      20.62802 0.0 rmoveto
      (   33) show
      26.7619 0.0 rmoveto
      (14%) show
      25.08869 0.0 rmoveto
      92.345 454.8995 moveto
      font1 setfont
      (    Slack processes) show
      font0 setfont
      ( ) show
      42.36618 0.0 rmoveto
      (     7) show
      27.87809 0.0 rmoveto
      (     2%) show
      19.51385 0.0 rmoveto
      (      2) show
      25.64775 0.0 rmoveto
      (  1%) show
      26.20485 0.0 rmoveto
      92.345 442.8546 moveto
      font1 setfont
      (Sleepers) show
      font0 setfont
      45.71572 0.0 rmoveto
      44.60656 0.0 rmoveto
      (   67) show
      26.7619 0.0 rmoveto
      (  19%) show
      20.62802 0.0 rmoveto
      (   15) show
      26.7619 0.0 rmoveto
      (  6%) show
      26.20485 0.0 rmoveto
      92.345 430.8095 moveto
      font1 setfont
      (Oneshots) show
      font0 setfont
      41.81313 0.0 rmoveto
      44.60656 0.0 rmoveto
      (   25) show
      26.7619 0.0 rmoveto
      (     7%) show
      19.51385 0.0 rmoveto
      (   11) show
      26.7619 0.0 rmoveto
      (  5%) show
      92.345 418.7644 moveto
      font1 setfont
      (Deadlock avoidance) show
      font0 setfont
      30.65544 0.0 rmoveto
      (   35) show
      26.7619 0.0 rmoveto
      (  10%) show
      20.62802 0.0 rmoveto
      (     6) show
      27.87809 0.0 rmoveto
      (  3%) show
      26.20485 0.0 rmoveto
      92.345 406.7193 moveto
      font1 setfont
      (Task rejuvenation) show
      font0 setfont
      41.25103 0.0 rmoveto
      (   11) show
      26.7619 0.0 rmoveto
      (    3%) show
      21.74419 0.0 rmoveto
      (     0) show
      27.87809 0.0 rmoveto
      (  0%) show
      26.20485 0.0 rmoveto
      92.345 394.6744 moveto
      font1 setfont
      (Serializers) show
      font0 setfont
      35.12216 0.0 rmoveto
      44.60656 0.0 rmoveto
      (     5) show
      27.87809 0.0 rmoveto
      (   1%) show
      23.97452 0.0 rmoveto
      (     7) show
      27.87809 0.0 rmoveto
      (  3%) show
      26.20485 0.0 rmoveto
      92.345 382.6293 moveto
      font1 setfont
      (Encapsulated) show
      font0 setfont
      ( ) show
      font1 setfont
      (fork) show
      font0 setfont
      ( ) show
      37.34643 0.0 rmoveto
      (  14) show
      28.99225 0.0 rmoveto
      (   4%) show
      23.97452 0.0 rmoveto
      (     5) show
      27.87809 0.0 rmoveto
      (  2%) show
      26.20485 0.0 rmoveto
      92.345 370.5844 moveto
      font0 setfont
      44.60656 0.0 rmoveto
      92.345 358.5394 moveto
      font1 setfont
      (Concurrency exploiters) show
      font0 setfont
      13.92497 0.0 rmoveto
      (     3) show
      27.87809 0.0 rmoveto
      (   1%) show
      23.97452 0.0 rmoveto
      (     0) show
      27.87809 0.0 rmoveto
      (  0%) show
      92.345 346.4942 moveto
      font1 setfont
      (Unknown or other) show
      font10 setfont
      0.0 4.015 rmoveto
      (2) show
      0.0 -4.015 rmoveto
      font0 setfont
      36.23148 0.0 rmoveto
      (   25) show
      26.7619 0.0 rmoveto
      (   7%) show
      23.97452 0.0 rmoveto
      (   78) show
      26.7619 0.0 rmoveto
      (33%) show
      25.08869 0.0 rmoveto
      92.345 328.4268 moveto
      font1 setfont
      (TOTAL) show
      font0 setfont
      6.130904 0.0 rmoveto
      44.60656 0.0 rmoveto
      44.60656 0.0 rmoveto
      (348) show
      27.87608 0.0 rmoveto
      (100%) show
      19.51185 0.0 rmoveto
      (234          100% ) show
      92.345 310.3594 moveto
      gsave
         font0 setfont
         (Our categories seem to apply well to other systems. For instance, Lampson and Redell describe) justify
         grestore
      92.345 298.3143 moveto
      gsave
         font0 setfont
         (the applications Pilot, Violet and Gateway \050which although Mesa-based share no code with the) justify
         grestore
      92.345 286.2692 moveto
      gsave
         font0 setfont
         (systems we examined\051, but do not identify general types of threads [Lampson80]. Yet from the) justify
         grestore
      92.345 274.2243 moveto
      font0 setfont
      (published description one can deduce the following:) show
      122.4575 260.1719 moveto
      font0 setfont
      (Pilot: almost all sleepers.) show
      122.4575 246.1194 moveto
      font0 setfont
      (Violet: sleepers, one-shots and work deferral.) show
      122.4575 232.0668 moveto
      font0 setfont
      (Gateway: sleepers and pumps.) show
      72.26999 183.8868 moveto
      font8 setfont
      (5.  Issues in thread use ) show
      82.3075 159.7968 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         (Given a modern platform providing threads, system builders have the option of using thread) justify
         grestore
      92.345 114.8291 moveto
      font0 setfont
      currentpoint /undery exch def /underx exch def
      (                                         ) show
      1.0 setlinewidth
      currentpoint currentpoint pop
      undery 1.2 sub dup underx exch
      vec moveto
      92.345 98.76906 moveto
      /colwidth 446.907 def
      gsave
         font10 setfont
         opsbef 0 {font10 setfont 0.0 4.015 rmoveto} put
         (2) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {0.0 -4.015 rmoveto font0 setfont} put
         (The large number of unknown threads in GVX is due to our unfamiliarity with this code, rather) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      92.345 86.72406 moveto
      font0 setfont
      (reflecting any significant difference in paradigm use.) show
      grestore
   grestore
% end page 15
showpage
%%page 16
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (16) show
      82.3075 713.8666 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         (primitives to accomplish tasks that they would have used other techniques to accomplish on other) justify
         grestore
      82.3075 701.8220 moveto
      gsave
         font0 setfont
         (platforms.  The designer must balance the modest cost of creating a thread against the benefits in) justify
         grestore
      82.3075 689.7769 moveto
      gsave
         font0 setfont
         (structural simplification and concurrency that would accrue from its introduction.  In addition to) justify
         grestore
      82.3075 677.7321 moveto
      gsave
         font0 setfont
         (the cost of creating it, a thread incurs a modest ongoing cost for the virtual memory occupied by its) justify
         grestore
      82.3075 665.687 moveto
      gsave
         font0 setfont
         (stack.  Our PCR thread implementation allocates virtual memory for the maximum possible stack) justify
         grestore
      82.3075 653.642 moveto
      gsave
         font0 setfont
         (size of each thread.  If there is very little state associated with a thread this may be a very) justify
         grestore
      82.3075 641.597 moveto
      font0 setfont
      (inefficient use of memory [Draves91]. ) show
      82.3075 600.1851 moveto
      font1 setfont
      (5.1 Easy thread uses ) show
      92.345 558.7734 moveto
      /colwidth 446.907 def
      gsave
         font0 setfont
         (Our programmers have become very adept at using the sleeper, oneshot, pump \050in paths without) justify
         grestore
      92.345 546.7284 moveto
      gsave
         font0 setfont
         (critical timing constraints\051 and work deferrer paradigms.  For the most part these require little) justify
         grestore
      92.345 534.6834 moveto
      gsave
         font0 setfont
         (interaction between threads beyond taking care to provide mutual exclusion \050monitors\051 for) justify
         grestore
      92.345 522.6383 moveto
      gsave
         font0 setfont
         (shared data.  Pump threads interact with threads on either side of them in pipelines, but the) justify
         grestore
      92.345 510.5932 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (interactions generally follow well-known producer-consumer patterns.  Using ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (FORK) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( to create) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 498.5484 moveto
      gsave
         font0 setfont
         (sleeper threads has fallen into disfavor with the advent of PCR thread implementation:  100) justify
         grestore
      92.345 486.5034 moveto
      gsave
         font0 setfont
         (kilobytes for each of hundreds of sleepers' stacks is just too expensive.  The PeriodicalProcess for) justify
         grestore
      92.345 474.4584 moveto
      gsave
         font0 setfont
         (timeout driven sleepers and other sleeper encapsulations often can accomplish the same thing) justify
         grestore
      92.345 462.4132 moveto
      font0 setfont
      (using closures to maintain the little bit of state necessary between activations.  ) show
      92.345 431.3544 moveto
      gsave
         font0 setfont
         (Deadlock avoiders also are usually very simple, but the overall locking schemes in which they are) justify
         grestore
      92.345 419.3095 moveto
      font0 setfont
      (involved are often very, very complicated \050and far beyond the scope of this paper\051. ) show
      82.3075 377.8976 moveto
      font1 setfont
      (5.2 Hard thread uses ) show
      92.345 336.4857 moveto
      gsave
         font0 setfont
         (Some of the thread paradigms seem much more difficult.  First, there is little guidance in the) justify
         grestore
      92.345 324.4406 moveto
      gsave
         font0 setfont
         (literature and in our experience for using concurrency exploiters in interactive systems.  The) justify
         grestore
      92.345 312.3957 moveto
      gsave
         font0 setfont
         (arrival of relatively low-cost workstations and operating systems supporting multiprocessing) justify
         grestore
      92.345 300.3506 moveto
      font0 setfont
      (offers new incentives to understand this paradigm better. ) show
      92.345 269.2918 moveto
      gsave
         font0 setfont
         (Second, designing slack processes and other pumps in paths with timing constraints continues to) justify
         grestore
      92.345 257.2468 moveto
      gsave
         font0 setfont
         (challenge both the slack process implementors and the PCR implementors.  Bad  performance in) justify
         grestore
      92.345 245.2018 moveto
      gsave
         font0 setfont
         (the pipelines that provide feedback for typing \050character echoing\051 and mouse motion is) justify
         grestore
      92.345 233.1568 moveto
      font0 setfont
      (immediately apparent to the user, yet improving the performance is often very difficult.  ) show
      92.345 202.0979 moveto
      gsave
         font0 setfont
         (The buffer thread of Figure 1 and Section 3.2 is an example of a poorly performing slack) justify
         grestore
      92.345 190.053 moveto
      gsave
         font0 setfont
         (process--though it's supposed to introduce slack in sending requests to X server, it is not doing so) justify
         grestore
      92.345 178.008 moveto
      font0 setfont
      (because when it tries to yield the processor, as the highest priority thread it gets it right back.   ) show
      92.345 146.949 moveto
      gsave
         font0 setfont
         (Fixing the problem by lowering the priority of the buffer thread is clearly wrong, since that could) justify
         grestore
      92.345 134.9041 moveto
      gsave
         font0 setfont
         (cause starvation of screen painting. We believe that the architecture of having a producer thread) justify
         grestore
      92.345 122.8591 moveto
      gsave
         font0 setfont
         (notify a consumer \050buffer\051 thread periodically of work to do is a good one, so we did not consider) justify
         grestore
      92.345 110.8141 moveto
      gsave
         font0 setfont
         (changing the basic paradigm by which these two threads interact.  Rewriting the buffer thread to) justify
         grestore
      92.345 98.76908 moveto
      gsave
         font0 setfont
         (simply sleep waiting for a timeout before sending its events doesn't work either, for reasons) justify
         grestore
      92.345 86.72408 moveto
      font0 setfont
      (discussed in Section 6.3.) show
      grestore
   grestore
% end page 16
showpage
%%page 17
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (17) show
      138.5052 123.8657 moveto
      gsave
         currentpoint translate
         2834.645 dup matrix scale concat
         gsave
            3.527776e-4 dup matrix scale concat
            gsave
               331.28 -61.54845 matrix translate concat
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -321.1688 188.0466 moveto
                     -317.1688 188.0466 lineto
                     -317.1688 617.3424 lineto
                     -321.1688 617.3424 lineto
                     clip newpath
                     0.4 0.4 0.4 setrgbcolor
                     2.0 setlinewidth
                     0 setlinecap
                     1 setlinejoin
                     -319.1688 190.0466 -319.1688 615.3425 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -291.9067 187.8862 moveto
                     -287.9067 187.8862 lineto
                     -287.9067 618.851 lineto
                     -291.9067 618.851 lineto
                     clip newpath
                     0.4 0.4 0.4 setrgbcolor
                     2.0 setlinewidth
                     0 setlinecap
                     1 setlinejoin
                     -289.9067 189.8862 -289.9067 616.8511 vec
                     grestore
                  grestore
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.606 0.52 setrgbcolor
               -289.9067 189.8862 -289.9067 317.7231 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 192.0926 -289.9067 220.9146 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 299.2439 -289.9067 316.2062 vec
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -199.2889 187.8862 moveto
                     -195.2889 187.8862 lineto
                     -195.2889 618.4234 lineto
                     -199.2889 618.4234 lineto
                     clip newpath
                     0.4 0.4 0.4 setrgbcolor
                     2.0 setlinewidth
                     0 setlinecap
                     1 setlinejoin
                     -197.2889 189.8862 -197.2889 616.4234 vec
                     grestore
                  grestore
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 577.9482 -197.2889 616.4234 vec
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 577.9482 -197.2889 577.9482 vec
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 459.2125 -197.2889 545.6786 vec
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 459.2125 -197.2889 459.2125 vec
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 391.3636 -197.2889 429.0119 vec
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 391.3636 -197.2889 391.3636 vec
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 213.4679 -197.2889 353.716 vec
               5.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -197.2889 213.4679 -197.2889 213.4679 vec
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -239.9018 178.7574 moveto
                     -231.9018 178.7574 lineto
                     -231.9018 620.8508 lineto
                     -239.9018 620.8508 lineto
                     clip newpath
                     0.88 0.52 0.52 setrgbcolor
                     6.0 setlinewidth
                     0 setlinecap
                     1 setlinejoin
                     -235.9018 182.7574 -235.9018 616.8511 vec
                     grestore
                  grestore
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -235.9018 563.8818 -235.9018 582.9123 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -235.9018 488.5862 -235.9018 509.6854 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -235.9018 430.6666 -235.9018 486.1040 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -235.9018 365.7143 -235.9018 396.7421 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -235.9018 220.9146 -235.9018 301.5884 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -235.9018 193.1961 -235.9018 218.8462 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 590.7732 -197.2889 618.0781 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 582.9123 -197.2889 584.9812 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 519.201 -197.2889 547.7466 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 486.1040 -197.2889 488.5862 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 402.5342 -197.2889 430.6666 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 396.7421 -197.2889 398.8106 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 311.1037 -197.2889 353.716 vec
               9.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -197.2889 218.8462 -197.2889 220.9146 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.606 0.52 setrgbcolor
               -197.2889 189.8862 -197.2889 191.1275 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 580.9818 -245.5551 580.9818 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 580.9818 -235.9018 580.9818 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 487.3451 -245.5551 487.3451 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 487.3451 -235.9018 487.3451 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 396.4662 -245.5551 396.4662 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 396.4662 -235.9018 396.4662 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 216.0879 -245.5551 216.0879 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -235.9018 216.0879 -235.9018 216.0879 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 582.4988 -206.942 582.4988 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 582.4988 -197.2889 582.4988 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 485.9661 -206.942 485.9661 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 485.9661 -197.2889 485.9661 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 400.4656 -206.942 400.4656 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 400.4656 -197.2889 400.4656 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 220.5008 -206.942 220.5008 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.8 0.0 setrgbcolor
               -197.2889 220.5008 -197.2889 220.5008 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -234.5227 576.9825 -201.4258 576.9825 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -234.5227 576.9825 -234.5227 576.9825 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -234.5227 460.04 -201.4258 460.04 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -234.5227 460.04 -234.5227 460.04 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -237.2809 393.7084 -201.4258 393.7084 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -237.2809 393.7084 -237.2809 393.7084 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -234.5227 212.916 -201.4258 212.916 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -234.5227 212.916 -234.5227 212.916 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 603.1844 -191.7727 603.1844 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 561.8135 -191.7727 561.8135 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 520.4419 -191.7727 520.4419 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 479.0708 -191.7727 479.0708 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 437.6996 -191.7727 437.6996 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 396.3284 -191.7727 396.3284 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 354.9572 -191.7727 354.9572 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 313.5862 -191.7727 313.5862 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 272.2149 -191.7727 272.2149 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 230.8437 -191.7727 230.8437 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 setgray
               -177.9822 189.4725 -191.7727 189.4725 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 596.3116 -319.1688 615.3425 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 596.3116 -319.1688 596.3116 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 525.1532 -319.1688 544.5974 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 525.1532 -319.1688 525.1532 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 468.061 -319.1688 480.8857 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 468.061 -319.1688 468.061 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 408.4861 -319.1688 427.9306 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 408.4861 -319.1688 408.4861 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 318.7108 -319.1688 352.6354 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -319.1688 318.7108 -319.1688 318.7108 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 587.05 -289.9067 595.3243 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 587.05 -289.9067 587.05 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 544.4375 -289.9067 586.2222 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 544.4375 -289.9067 544.4375 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 482.3806 -289.9067 524.1653 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 482.3806 -289.9067 482.3806 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 427.7709 -289.9067 462.1087 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 427.7709 -289.9067 427.7709 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 352.475 -289.9067 407.0851 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -289.9067 352.475 -289.9067 352.475 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 602.103 -328.8218 602.103 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 602.103 -319.1688 602.103 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 600.5862 -328.8218 600.5862 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 600.5862 -319.1688 600.5862 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 600.1729 -328.8218 600.1729 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 600.1729 -319.1688 600.1729 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 599.7586 -328.8218 599.7586 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 599.7586 -319.1688 599.7586 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 598.7937 -328.8218 598.7937 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 598.7937 -319.1688 598.7937 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 544.5974 -328.8218 544.5974 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 544.5974 -319.1688 544.5974 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 544.1836 -328.8218 544.1836 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 544.1836 -319.1688 544.1836 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 540.3226 -328.8218 540.3226 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 540.3226 -319.1688 540.3226 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 537.5645 -328.8218 537.5645 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 537.5645 -319.1688 537.5645 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 536.1855 -328.8218 536.1855 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 536.1855 -319.1688 536.1855 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 531.7725 -328.8218 531.7725 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 531.7725 -319.1688 531.7725 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 527.7734 -328.8218 527.7734 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 527.7734 -319.1688 527.7734 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 527.2218 -328.8218 527.2218 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 527.2218 -319.1688 527.2218 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 526.8082 -328.8218 526.8082 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 526.8082 -319.1688 526.8082 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 526.394 -328.8218 526.394 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 526.394 -319.1688 526.394 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 480.3344 -328.8218 480.3344 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 480.3344 -319.1688 480.3344 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 479.9208 -328.8218 479.9208 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 479.9208 -319.1688 479.9208 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 476.8867 -328.8218 476.8867 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 476.8867 -319.1688 476.8867 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 473.0256 -328.8218 473.0256 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 473.0256 -319.1688 473.0256 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 470.2676 -328.8218 470.2676 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 470.2676 -319.1688 470.2676 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 469.8533 -328.8218 469.8533 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 469.8533 -319.1688 469.8533 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 471.7844 -328.8218 471.7844 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 471.7844 -319.1688 471.7844 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 471.3708 -328.8218 471.3708 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 471.3708 -319.1688 471.3708 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 429.5858 -328.8218 429.5858 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 429.5858 -319.1688 429.5858 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 425.7245 -328.8218 425.7245 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 425.7245 -319.1688 425.7245 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 425.3104 -328.8218 425.3104 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 425.3104 -319.1688 425.3104 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 422.9661 -328.8218 422.9661 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 422.9661 -319.1688 422.9661 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 413.3133 -328.8218 413.3133 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 413.3133 -319.1688 413.3133 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 410.1412 -328.8218 410.1412 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 410.1412 -319.1688 410.1412 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 409.7276 -328.8218 409.7276 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 409.7276 -319.1688 409.7276 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 409.314 -328.8218 409.314 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 409.314 -319.1688 409.314 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 409.1757 -328.8218 409.1757 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 409.1757 -319.1688 409.1757 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 350.0152 -328.8218 350.0152 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 350.0152 -319.1688 350.0152 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 349.0498 -328.8218 349.0498 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 349.0498 -319.1688 349.0498 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 348.6361 -328.8218 348.6361 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 348.6361 -319.1688 348.6361 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 347.1192 -328.8218 347.1192 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 347.1192 -319.1688 347.1192 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 344.7747 -328.8218 344.7747 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -319.1688 344.7747 -319.1688 344.7747 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 324.503 -328.8218 324.503 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 324.503 -319.1688 324.503 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 322.1586 -328.8218 322.1586 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 322.1586 -319.1688 322.1586 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 321.7449 -328.8218 321.7449 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 321.7449 -319.1688 321.7449 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 320.3658 -328.8218 320.3658 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 320.3658 -319.1688 320.3658 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 319.9518 -328.8218 319.9518 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -319.1688 319.9518 -319.1688 319.9518 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 592.152 -299.56 592.152 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 592.152 -289.9067 592.152 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 593.2551 -299.56 593.2551 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 593.2551 -289.9067 593.2551 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 590.2216 -299.56 590.2216 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 590.2216 -289.9067 590.2216 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 589.2564 -299.56 589.2564 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 589.2564 -289.9067 589.2564 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 590.3594 -299.56 590.3594 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 590.3594 -289.9067 590.3594 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 586.36 -299.56 586.36 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 586.36 -289.9067 586.36 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 583.3261 -299.56 583.3261 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 583.3261 -289.9067 583.3261 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 582.9123 -299.56 582.9123 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 582.9123 -289.9067 582.9123 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 581.3956 -299.56 581.3956 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 581.3956 -289.9067 581.3956 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 577.3962 -299.56 577.3962 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 577.3962 -289.9067 577.3962 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 574.0865 -299.56 574.0865 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 574.0865 -289.9067 574.0865 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 567.1914 -299.56 567.1914 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 567.1914 -289.9067 567.1914 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 563.606 -299.56 563.606 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 563.606 -289.9067 563.606 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 563.1924 -299.56 563.1924 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 563.1924 -289.9067 563.1924 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 562.227 -299.56 562.227 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 562.227 -289.9067 562.227 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 561.8135 -299.56 561.8135 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 561.8135 -289.9067 561.8135 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 561.6754 -299.56 561.6754 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 561.6754 -289.9067 561.6754 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 559.4691 -299.56 559.4691 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 559.4691 -289.9067 559.4691 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 559.055 -299.56 559.055 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 559.055 -289.9067 559.055 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 560.572 -299.56 560.572 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 560.572 -289.9067 560.572 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 558.7796 -299.56 558.7796 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 558.7796 -289.9067 558.7796 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 554.918 -299.56 554.918 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 554.918 -289.9067 554.918 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 555.1935 -299.56 555.1935 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 555.1935 -289.9067 555.1935 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 552.1603 -299.56 552.1603 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 552.1603 -289.9067 552.1603 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 553.677 -299.56 553.677 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 553.677 -289.9067 553.677 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 553.2632 -299.56 553.2632 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 553.2632 -289.9067 553.2632 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 551.3325 -299.56 551.3325 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 551.3325 -289.9067 551.3325 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 550.919 -299.56 550.919 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 550.919 -289.9067 550.919 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 549.1265 -299.56 549.1265 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 549.1265 -289.9067 549.1265 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 546.5059 -299.56 546.5059 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 546.5059 -289.9067 546.5059 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 521.6829 -299.56 521.6829 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 521.6829 -289.9067 521.6829 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 519.0633 -299.56 519.0633 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 519.0633 -289.9067 519.0633 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 519.6144 -299.56 519.6144 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 519.6144 -289.9067 519.6144 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 519.201 -299.56 519.201 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 519.201 -289.9067 519.201 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 514.9259 -299.56 514.9259 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 514.9259 -289.9067 514.9259 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 513.9608 -299.56 513.9608 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 513.9608 -289.9067 513.9608 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 513.8226 -299.56 513.8226 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 513.8226 -289.9067 513.8226 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 513.4091 -299.56 513.4091 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 513.4091 -289.9067 513.4091 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 512.0298 -299.56 512.0298 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 512.0298 -289.9067 512.0298 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 512.3056 -299.56 512.3056 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 512.3056 -289.9067 512.3056 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 511.8919 -299.56 511.8919 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 511.8919 -289.9067 511.8919 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 509.2716 -299.56 509.2716 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 509.2716 -289.9067 509.2716 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 509.548 -299.56 509.548 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 509.548 -289.9067 509.548 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 506.1 -299.56 506.1 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 506.1 -289.9067 506.1 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 505.6866 -299.56 505.6866 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 505.6866 -289.9067 505.6866 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 504.0317 -299.56 504.0317 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 504.0317 -289.9067 504.0317 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 488.9997 -299.56 488.9997 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 488.9997 -289.9067 488.9997 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 486.7935 -299.56 486.7935 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 486.7935 -289.9067 486.7935 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 486.38 -299.56 486.38 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 486.38 -289.9067 486.38 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 487.7586 -299.56 487.7586 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 487.7586 -289.9067 487.7586 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 460.4538 -299.56 460.4538 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 460.4538 -289.9067 460.4538 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 449.973 -299.56 449.973 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 449.973 -289.9067 449.973 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 448.1805 -299.56 448.1805 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 448.1805 -289.9067 448.1805 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 429.839 -299.56 429.839 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 429.839 -289.9067 429.839 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 430.5288 -299.56 430.5288 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 430.5288 -289.9067 430.5288 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 407.4989 -299.56 407.4989 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 407.4989 -289.9067 407.4989 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 402.6719 -299.56 402.6719 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 402.6719 -289.9067 402.6719 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 403.3617 -299.56 403.3617 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 403.3617 -289.9067 403.3617 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 402.948 -299.56 402.948 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 402.948 -289.9067 402.948 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 399.0867 -299.56 399.0867 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 399.0867 -289.9067 399.0867 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 398.9485 -299.56 398.9485 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 398.9485 -289.9067 398.9485 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 401.2931 -299.56 401.2931 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 401.2931 -289.9067 401.2931 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 400.8793 -299.56 400.8793 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 400.8793 -289.9067 400.8793 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 396.88 -299.56 396.88 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 396.88 -289.9067 396.88 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 394.1221 -299.56 394.1221 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 394.1221 -289.9067 394.1221 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 383.2276 -299.56 383.2276 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 383.2276 -289.9067 383.2276 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 380.6076 -299.56 380.6076 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 380.6076 -289.9067 380.6076 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 365.0242 -299.56 365.0242 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 365.0242 -289.9067 365.0242 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 364.6107 -299.56 364.6107 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 364.6107 -289.9067 364.6107 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 364.059 -299.56 364.059 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 364.059 -289.9067 364.059 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 363.6452 -299.56 363.6452 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 363.6452 -289.9067 363.6452 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 363.0938 -299.56 363.0938 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 363.0938 -289.9067 363.0938 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 361.7145 -299.56 361.7145 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 361.7145 -289.9067 361.7145 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 361.9905 -299.56 361.9905 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 361.9905 -289.9067 361.9905 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 361.5765 -299.56 361.5765 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 361.5765 -289.9067 361.5765 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 358.9565 -299.56 358.9565 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 358.9565 -289.9067 358.9565 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 358.8188 -299.56 358.8188 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 358.8188 -289.9067 358.8188 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 354.9572 -299.56 354.9572 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 354.9572 -289.9067 354.9572 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 352.1992 -299.56 352.1992 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 352.1992 -289.9067 352.1992 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 316.2062 -299.56 316.2062 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 316.2062 -289.9067 316.2062 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 313.8617 -299.56 313.8617 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 313.8617 -289.9067 313.8617 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 311.242 -299.56 311.242 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 311.242 -289.9067 311.242 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 311.1039 -299.56 311.1039 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 311.1039 -289.9067 311.1039 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 310.6902 -299.56 310.6902 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 310.6902 -289.9067 310.6902 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 310.5523 -299.56 310.5523 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 310.5523 -289.9067 310.5523 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 310.0006 -299.56 310.0006 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 310.0006 -289.9067 310.0006 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 306.1394 -299.56 306.1394 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 306.1394 -289.9067 306.1394 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 305.7258 -299.56 305.7258 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 305.7258 -289.9067 305.7258 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 304.7603 -299.56 304.7603 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 304.7603 -289.9067 304.7603 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 304.2085 -299.56 304.2085 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 304.2085 -289.9067 304.2085 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 303.2434 -299.56 303.2434 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 303.2434 -289.9067 303.2434 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 302.8296 -299.56 302.8296 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 302.8296 -289.9067 302.8296 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 302.4158 -299.56 302.4158 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 302.4158 -289.9067 302.4158 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 299.2439 -299.56 299.2439 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 299.2439 -289.9067 299.2439 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 299.9338 -299.56 299.9338 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 299.9338 -289.9067 299.9338 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 299.5198 -299.56 299.5198 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 299.5198 -289.9067 299.5198 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 220.225 -299.56 220.225 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 220.225 -289.9067 220.225 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 221.3285 -299.56 221.3285 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 221.3285 -289.9067 221.3285 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 220.9146 -299.56 220.9146 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 220.9146 -289.9067 220.9146 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 216.5018 -299.56 216.5018 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 216.5018 -289.9067 216.5018 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 213.33 -299.56 213.33 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 213.33 -289.9067 213.33 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 210.9857 -299.56 210.9857 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 210.9857 -289.9067 210.9857 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 209.6064 -299.56 209.6064 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -289.9067 209.6064 -289.9067 209.6064 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 193.058 -299.56 193.058 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 193.058 -289.9067 193.058 vec
               0.1 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 192.0926 -299.56 192.0926 vec
               0.1 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.0 0.0 0.8 setrgbcolor
               -289.9067 192.0926 -289.9067 192.0926 vec
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate -149.2114 170.1534 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (0.0s) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate -149.2114 583.2317 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (0.10) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate -149.2114 376.3756 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (0.05) show
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 321.8884 30.29562 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     98.17142 423.9844 moveto
                     /colwidth 257.9265 def
                     gsave
                        font13 setfont
                        (In this diagram YieldButNotToMe succeeds more often in) justify
                        grestore
                     98.17142 411.9394 moveto
                     gsave
                        font13 setfont
                        (handing the virtual processor \050and the real processor\051 back) justify
                        grestore
                     98.17142 399.8944 moveto
                     gsave
                        font13 setfont
                        (to the image thread.  Consequently there are fewer thread) justify
                        grestore
                     98.17142 387.8493 moveto
                     gsave
                        font13 setfont
                        (switches, fewer process switches, more merges in the buffer) justify
                        grestore
                     98.17142 375.8044 moveto
                     font13 setfont
                     (thread, and less total work done in the X server.) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  -44.48594 123.7346 moveto
                  -124.3166 123.7346 lineto
                  -124.3166 401.5188 lineto
                  -44.48594 401.5188 lineto
                  -44.48594 123.7346 lineto
                  closepath stroke
                  grestore
               0.8 0.8 0.0 setrgbcolor
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -198.7889 219.4145 moveto
                     -122.8164 219.4145 lineto
                     -122.8164 403.0188 lineto
                     -198.7889 403.0188 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     -124.3166 401.5188 -197.2889 220.9146 vec
                     grestore
                  grestore
               0.0 0.8 0.0 setrgbcolor
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -198.7889 400.0188 moveto
                     -122.8164 400.0188 lineto
                     -122.8164 487.4661 lineto
                     -198.7889 487.4661 lineto
                     clip newpath
                     0.5 setgray
                     1.0 setlinewidth
                     1 setlinecap
                     1 setlinejoin
                     -124.3166 401.5188 -197.2889 485.9661 vec
                     grestore
                  grestore
               gsave
                  font15 setfont
                  0.0 setgray
                  16.9 dup matrix scale 90.0 matrix rotate -27.22758 125.709 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (Figure 2) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate -309.9753 161.4633 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (X) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate -283.5818 157.4736 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (VP) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate -230.3372 124.1884 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (image) show
                  grestore
               gsave
                  font12 setfont
                  0.0 setgray
                  20.28 dup matrix scale 90.0 matrix rotate -191.7348 128.2501 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (buffer) show
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -255.8672 299.5884 moveto
                     -143.3008 299.5884 lineto
                     -143.3008 445.2422 lineto
                     -255.8672 445.2422 lineto
                     clip newpath
                     2 setlinejoin
                     1 setlinecap
                     2.0 setlinewidth
                     0.0 setgray
                     -253.8672 301.5884 -179.786 301.5884 vec
                     2 setlinejoin
                     1 setlinecap
                     1.0 setlinewidth
                     0.6 setgray
                     -179.786 301.5884 -144.8008 443.7423 vec
                     grestore
                  grestore
               0.5 setgray
               eofill
               gsave
                  gsave
                     0.0 0.0 moveto
                     currentpoint translate
                     -256.597 442.2422 moveto
                     -143.3007 442.2422 lineto
                     -143.3007 511.6854 lineto
                     -256.597 511.6854 lineto
                     clip newpath
                     2 setlinejoin
                     1 setlinecap
                     2.0 setlinewidth
                     0.0 setgray
                     -254.597 509.6854 -181.6107 509.6854 vec
                     2 setlinejoin
                     1 setlinecap
                     1.0 setlinewidth
                     0.6 setgray
                     -181.6107 509.6854 -144.8008 443.7423 vec
                     grestore
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 301.4043 412.2278 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     37.10183 423.9844 moveto
                     /colwidth 146.731 def
                     gsave
                        font13 setfont
                        (These black lines mark the ends) justify
                        grestore
                     37.10183 411.9394 moveto
                     /colwidth 146.731 def
                     gsave
                        font13 setfont
                        (of PCR scheduler quanta where) justify
                        grestore
                     37.10183 399.8944 moveto
                     /colwidth 136.9458 def
                     gsave
                        font13 setfont
                        (YieldButNotToMe terminates) justify
                        grestore
                     37.10183 387.8493 moveto
                     /colwidth 146.731 def
                     gsave
                        font13 setfont
                        (and the higher priority buffer) justify
                        grestore
                     37.10183 375.8044 moveto
                     font13 setfont
                     (thread runs again.) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.5 setgray
                  -64.9702 443.7423 moveto
                  -144.8008 443.7423 lineto
                  -144.8008 608.7742 lineto
                  -64.9702 608.7742 lineto
                  -64.9702 443.7423 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     1.014 dup matrix scale 90.0 matrix rotate 389.4118 439.6282 matrix translate matrix concatmatrix matrix concatmatrix concat
                     0.0 setgray
                     -13.62074 423.9844 moveto
                     /colwidth 216.6487 def
                     gsave
                        font16 setfont
                        (Note: Our data collector reports \042unknown state\042 for processes) justify
                        grestore
                     -13.62074 413.9468 moveto
                     gsave
                        font16 setfont
                        (at the beginning of a capture interval.  For clarity we added by) justify
                        grestore
                     -13.62074 403.9094 moveto
                     /colwidth 216.6487 def
                     gsave
                        font16 setfont
                        (hand the state color in three places: the first two red \042running\042) justify
                        grestore
                     -13.62074 393.8718 moveto
                     font16 setfont
                     (regions in ) show
                     /Times-Bold findfont 8.029999 scalefont
                     /font17 exch def
                     font17 setfont
                     (VP) show
                     font16 setfont
                     (, and the pink \042ready-to-run\042 region in ) show
                     font17 setfont
                     (image) show
                     font16 setfont
                     (.) show
                     grestore
                  grestore
               gsave
                  font15 setfont
                  0.0 setgray
                  14.08333 dup matrix scale 90.0 matrix rotate -9.285068 67.54845 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (improvement from YieldButNotToMe) show
                  grestore
               gsave
                  font15 setfont
                  0.0 setgray
                  10.0 dup matrix scale 90.0 matrix rotate -132.396 162.711 matrix translate matrix concatmatrix matrix concatmatrix concat
                  0.0 0.0 moveto
                  (\050scale: 15mm = approx. 10 milliseconds\051) show
                  grestore
               grestore
            grestore
         grestore
      82.3075 86.724 moveto
      grestore
   grestore
% end page 17
showpage
%%page 18
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (18) show
      92.345 713.8666 moveto
      /colwidth 446.907 def
      gsave
         font0 setfont
         (We fixed the immediate problem by creating a new yield primitive, called YieldButNotToMe) justify
         grestore
      92.345 701.8220 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (which gives the processor to the highest priority ready thread ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (other than its caller,) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( if such a) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 689.7769 moveto
      gsave
         font0 setfont
         (thread exists.  Most of the time the image thread is the thread favored with the extra cycles and) justify
         grestore
      92.345 677.7321 moveto
      gsave
         font0 setfont
         (there is a big improvement in the system's perceived performance.  However, the semantic) justify
         grestore
      92.345 665.687 moveto
      gsave
         font0 setfont
         (compromise entailed in YieldButNotToMe and the uncertainty that the additional cycles will go) justify
         grestore
      92.345 653.642 moveto
      font0 setfont
      (to the correct thread suggest that the final solution to these problems still eludes us.  ) show
      92.345 633.9571 moveto
      gsave
         font0 setfont
         (The improved result when the buffer thread uses YieldButNotToMe can be seen in Figure 2.) justify
         grestore
      92.345 621.9123 moveto
      gsave
         font0 setfont
         (Notice that now when the image thread notifies the buffer thread, the buffer thread usually runs) justify
         grestore
      92.345 609.8671 moveto
      gsave
         font0 setfont
         (for only a moment before yielding back to the image thread.  The result is that the X server runs) justify
         grestore
      92.345 597.8222 moveto
      gsave
         font0 setfont
         (only five times in the same time interval. The fewer switches to the X server make the buffer) justify
         grestore
      92.345 585.7772 moveto
      gsave
         font0 setfont
         (thread more effective at doing rectangle combination, there is less time spent in thread switching) justify
         grestore
      92.345 573.7321 moveto
      gsave
         font0 setfont
         (and the image thread gets much more processor resource over the interval.  The user experiences) justify
         grestore
      92.345 561.6872 moveto
      font0 setfont
      (about a three-fold performance improvement.) show
      92.345 542.0022 moveto
      gsave
         font0 setfont
         (Finally, even beyond the problems encountered with priorities in managing a pipeline, we found) justify
         grestore
      92.345 529.9574 moveto
      gsave
         font0 setfont
         (priorities to be problematic.  Birrell describes a stable priority inversion in which a high priority) justify
         grestore
      92.345 517.9123 moveto
      gsave
         font0 setfont
         (thread waits on a lock held by a low priority thread that is prevented from running by a middle-) justify
         grestore
      92.345 505.8674 moveto
      gsave
         font0 setfont
         (priority cpu hog [Birrell91, pp. 99-100]. Like Birrell, we chose not to incur the implementation) justify
         grestore
      92.345 493.8222 moveto
      gsave
         font0 setfont
         (overhead of providing priority inheritance from blocked threads to threads holding locks. \050Notice) justify
         grestore
      92.345 481.7772 moveto
      gsave
         font0 setfont
         (that the problem occurs for abstract resources such as the condition associated with a CV as well) justify
         grestore
      92.345 469.7321 moveto
      gsave
         font0 setfont
         (as for real resources such as locks:  the thread primitives have little hope of automatically) justify
         grestore
      92.345 457.6872 moveto
      gsave
         font0 setfont
         (adjusting thread priority in such situations.\051  The problem is not hypothetical: we experienced) justify
         grestore
      92.345 445.6422 moveto
      gsave
         font0 setfont
         (enough real problems with priority inversions that we found it necessary to put the following two) justify
         grestore
      92.345 433.5972 moveto
      gsave
         font0 setfont
         (workarounds into our systems. First, for one particular kind of lock in the system, PCR does) justify
         grestore
      92.345 421.5523 moveto
      gsave
         font0 setfont
         (donate cycles from a blocked thread to the thread that is blocking it. This is done only for the per-) justify
         grestore
      92.345 409.5072 moveto
      gsave
         font0 setfont
         (monitor metalock that locks each monitor's queue of waiting threads. It is not done for monitors) justify
         grestore
      92.345 397.4622 moveto
      gsave
         font0 setfont
         (themselves, where we don't know how to implement it efficiently. Second, PCR utilizes a high-) justify
         grestore
      92.345 385.4172 moveto
      gsave
         font0 setfont
         (priority sleeper thread \050which we call the SystemDaemon\051 that regularly wakes up and donates,) justify
         grestore
      92.345 373.3721 moveto
      gsave
         font0 setfont
         (using a directed yield, a small timeslice to another thread chosen at random.  In this way we) justify
         grestore
      92.345 361.3272 moveto
      font0 setfont
      (ensure that all ready threads get some cpu resource, regardless of their priorities.) show
      82.3075 335.0806 moveto
      font1 setfont
      (5.3 Common mistakes  ) show
      92.345 308.8339 moveto
      gsave
         font0 setfont
         (Our dynamic and static inspections of old code revealed occasional correctness and performance) justify
         grestore
      92.345 296.7889 moveto
      font0 setfont
      (problems caused by improper thread usage.  Two  questionable practices stood out.  ) show
      92.345 277.1039 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (First, we saw many instances of ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (WAIT) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( code that did not recheck the predicate associated with the) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 265.0588 moveto
      font0 setfont
      (condition variable.  Recall that proper use of ) show
      font10 setfont
      (WAIT) show
      font0 setfont
      ( when using Mesa monitors is ) show
      102.3825 245.3739 moveto
      font10 setfont
      (WHILE) show
      font0 setfont
      ( ) show
      font10 setfont
      (NOT) show
      font0 setfont
      ( \050) show
      font10 setfont
      (OK) show
      font0 setfont
      ( to proceed\051 ) show
      font10 setfont
      (DO) show
      font0 setfont
      ( ) show
      font10 setfont
      (WAIT) show
      font0 setfont
      ( cv ) show
      font10 setfont
      (END) show
      font0 setfont
      ( ) show
      92.345 225.6889 moveto
      font0 setfont
      (not the ) show
      102.3825 206.004 moveto
      font10 setfont
      (IF) show
      font0 setfont
      ( ) show
      font10 setfont
      (NOT ) show
      font0 setfont
      (\050) show
      font10 setfont
      (OK) show
      font0 setfont
      ( to proceed\051 ) show
      font10 setfont
      (THEN) show
      font0 setfont
      ( ) show
      font10 setfont
      (WAIT) show
      font0 setfont
      ( cv ) show
      92.345 186.319 moveto
      font0 setfont
      (which would be appropriate with Hoare's original monitors.) show
      92.345 166.6341 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (The ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (IF) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (-based approach will work in Mesa with sufficient constraints on the number and behavior) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 154.589 moveto
      gsave
         font0 setfont
         (of the threads using the monitor, but its use cannot be recommended.  The practice has been a) justify
         grestore
      92.345 142.5441 moveto
      gsave
         font0 setfont
         (continuing source of bugs as programs are modified and the correctness conditions become) justify
         grestore
      92.345 130.4991 moveto
      font0 setfont
      (untrue.     ) show
      92.345 110.8141 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Second, there were cases where timeouts had been introduced to compensate for missing ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFYs) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      92.345 98.76911 moveto
      gsave
         font0 setfont
         (\050bugs\051, instead of fixing the underlying problem. The problem with this is that the system can) justify
         grestore
      92.345 86.72413 moveto
      gsave
         font0 setfont
         (become timeout driven--it apparently works correctly but slowly.  Debugging the poor) justify
         grestore
      grestore
   grestore
% end page 18
showpage
%%page 19
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (19) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (performance is often harder than figuring out why a system has stopped due to a missing ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (.) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 701.8220 moveto
      font0 setfont
      (Of course, legitimate timeouts can mask an omitted ) show
      font10 setfont
      (NOTIFY) show
      font0 setfont
      ( as well. ) show
      92.345 682.6838 moveto
      82.3075 657.1662 moveto
      font1 setfont
      (5.4 When a fork fails) show
      92.345 631.6486 moveto
      gsave
         font0 setfont
         (Sometimes an attempt to fork may fail for lack of resources.  As with many other resource) justify
         grestore
      92.345 619.6038 moveto
      gsave
         font0 setfont
         (allocation failures it's difficult to plan a response.  Earlier versions of the systems would raise an) justify
         grestore
      92.345 607.5588 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (error when a ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (FORK) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( failed:  the standard programming practice was to catch the error and to try to) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 595.5135 moveto
      gsave
         font0 setfont
         (recover, but good recovery schemes seem never to have been worked out.  The resulting code) justify
         grestore
      92.345 583.4687 moveto
      gsave
         font0 setfont
         (seems overly complex to no good end:  the machinery for catching the error is always set up even) justify
         grestore
      92.345 571.4237 moveto
      gsave
         font0 setfont
         (though once an error is caught nobody really knows what to do about it.  Memory allocation) justify
         grestore
      92.345 559.3788 moveto
      font0 setfont
      (failures present similar problems.) show
      92.345 540.2407 moveto
      gsave
         font0 setfont
         (Our more recent implementations simply wait in the fork implementation for more resources to) justify
         grestore
      92.345 528.1957 moveto
      gsave
         font0 setfont
         (become available, but the behaviors seen by the user, such as long delays in response or even) justify
         grestore
      92.345 516.1507 moveto
      font0 setfont
      (complete unresponsiveness, go unexplained.  ) show
      92.345 497.0125 moveto
      gsave
         font0 setfont
         (A number of techniques may be adopted to avoid running out of resources: unfortunately, the) justify
         grestore
      92.345 484.9674 moveto
      gsave
         font0 setfont
         (better we succeed at that, the less experience we gain with techniques for appropriately) justify
         grestore
      92.345 472.9224 moveto
      font0 setfont
      (recovering from the situation.   ) show
      font10 setfont
      ( ) show
      font0 setfont
      (  ) show
      82.3075 447.4047 moveto
      font1 setfont
      (5.5 On robustness in a changing environment) show
      92.345 421.8873 moveto
      gsave
         font0 setfont
         (Two final comments on the archeology of thread-related bugs. First, we found many instances of) justify
         grestore
      92.345 409.8424 moveto
      gsave
         font0 setfont
         (timeouts and pauses with ridiculous values. These values presumably were chosen with some) justify
         grestore
      92.345 397.7973 moveto
      gsave
         font0 setfont
         (particular now-obsolete processor speed or network architecture in mind. For user interface-) justify
         grestore
      92.345 385.7524 moveto
      gsave
         font0 setfont
         (related timeouts, values based on wall-clock time are appropriate, but timeouts related to) justify
         grestore
      92.345 373.7073 moveto
      gsave
         font0 setfont
         (processor speeds, or more insidiously, to expected network server response times, are more) justify
         grestore
      92.345 361.6624 moveto
      gsave
         font0 setfont
         (difficult to specify simply for all time. This may be an area of future research. For instance,) justify
         grestore
      92.345 349.6172 moveto
      gsave
         font0 setfont
         (dynamically tuning application timeout values based on end-to-end system performance may be) justify
         grestore
      92.345 337.5723 moveto
      font0 setfont
      (a workable solution.) show
      92.345 318.4342 moveto
      gsave
         font0 setfont
         (Second, we saw several places where the correctness of threaded code depended on strong memory) justify
         grestore
      92.345 306.3892 moveto
      gsave
         font0 setfont
         (ordering, an assumption no longer true in some modern multiprocessors with weakly ordered) justify
         grestore
      92.345 294.3443 moveto
      gsave
         font0 setfont
         (memory  [Frailong93][Sites93]. The monitor implementation for weak ordering can use memory) justify
         grestore
      92.345 282.299 moveto
      gsave
         font0 setfont
         (barrier instructions to ensure that all monitor-protected data access is consistent, but other uses) justify
         grestore
      92.345 270.2541 moveto
      gsave
         font0 setfont
         (that would be correct with strong ordering will not work. As a simple example, imagine a thread) justify
         grestore
      92.345 258.2091 moveto
      gsave
         font0 setfont
         (that once a minute constructs a record of time-date values and stores a pointer to that record into) justify
         grestore
      92.345 246.1642 moveto
      gsave
         font0 setfont
         (a global variable. Under the assumptions of strong ordering and atomic write of the pointer) justify
         grestore
      92.345 234.119 moveto
      gsave
         font0 setfont
         (value, this is safe. Under weak ordering, readers of the global variable can follow a pointer to a) justify
         grestore
      92.345 222.074 moveto
      gsave
         font0 setfont
         (record that has not yet had its fields filled in.  As another example, Birrell offers a performance) justify
         grestore
      92.345 210.0291 moveto
      gsave
         font0 setfont
         (hint for calling an intialization routine exactly once [Birrell91, p. 97]. Under weak ordering, a) justify
         grestore
      92.345 197.9841 moveto
      gsave
         font0 setfont
         (thread can both believe that the initializer has already been called, but not yet be able to see the) justify
         grestore
      92.345 185.9391 moveto
      font0 setfont
      (initialized data.) show
      82.3075 160.4216 moveto
      font1 setfont
      (5.6 Some contrasting experiences: multi-threading and X windows) show
      92.345 134.9041 moveto
      gsave
         font0 setfont
         (The usual, single-threaded client interface to an X server is through Xlib, a library that) justify
         grestore
      92.345 122.8591 moveto
      gsave
         font0 setfont
         (translates an X client's procedural interface into the message-oriented interface of the X server.) justify
         grestore
      92.345 110.8141 moveto
      gsave
         font0 setfont
         (Xlib does the required translation and manages the I/O connection to the server, both for reading) justify
         grestore
      92.345 98.76906 moveto
      gsave
         font0 setfont
         (events and writing commands.  We studied two approaches to using X windows from a multi-) justify
         grestore
      92.345 86.72406 moveto
      gsave
         font0 setfont
         (threaded client. One approach uses Xlib, modified only to make it thread-safe [Schmitmann93].) justify
         grestore
      grestore
   grestore
% end page 19
showpage
%%page 20
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (20) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (The other approach uses Xl, an X client library designed from scratch with multi-threading in) justify
         grestore
      92.345 701.8220 moveto
      font0 setfont
      (mind [Jacobi92].  ) show
      92.345 681.7325 moveto
      gsave
         font0 setfont
         (A major difference between the two approaches concerns management of the I/O connection to the) justify
         grestore
      92.345 669.6876 moveto
      gsave
         font0 setfont
         (server.  Xl introduced a new serializing thread that was associated with the I/O connection.  The) justify
         grestore
      92.345 657.6429 moveto
      gsave
         font0 setfont
         (job of this thread was solely to read from the I/O connection and dispatch events to waiting) justify
         grestore
      92.345 645.5976 moveto
      gsave
         font0 setfont
         (threads.  In contrast, the ported library allowed any client thread to do the read and a monitor) justify
         grestore
      92.345 633.5526 moveto
      gsave
         font0 setfont
         (lock on the library provided serialization.  There were two problems with this: priority inversion) justify
         grestore
      92.345 621.5078 moveto
      gsave
         font0 setfont
         (and honoring the clients' timeout parameter on the GetEvent routine.  When a client thread) justify
         grestore
      92.345 609.463 moveto
      gsave
         font0 setfont
         (blocks on the read call it holds the library mutex.  A priority inversion could occur if the thread) justify
         grestore
      92.345 597.418 moveto
      gsave
         font0 setfont
         (were preempted.  Furthermore, it is not possible for other threads to timeout on their attempt to) justify
         grestore
      92.345 585.3729 moveto
      gsave
         font0 setfont
         (obtain the library mutex. Therefore, each read had to be done with a short timeout after which) justify
         grestore
      92.345 573.3276 moveto
      gsave
         font0 setfont
         (the mutex was released, allowing other threads to continue.  In contrast, with the introduction of) justify
         grestore
      92.345 561.2826 moveto
      gsave
         font0 setfont
         (a reading thread, the client timeout is handled perfectly by the condition variable timeout) justify
         grestore
      92.345 549.2378 moveto
      gsave
         font0 setfont
         (mechanism and priority inversion can only occur during the short time period when a low-) justify
         grestore
      92.345 537.1928 moveto
      font0 setfont
      (priority thread checks to see if there are events on the input queue.) show
      92.345 517.1034 moveto
      gsave
         font0 setfont
         (A second benefit of introducing this thread concerns interaction between output requests and) justify
         grestore
      92.345 505.0584 moveto
      gsave
         font0 setfont
         (input events.  The X specification requires that the output queue be flushed whenever a read is) justify
         grestore
      92.345 493.0135 moveto
      gsave
         font0 setfont
         (done on the input stream.  This is done to ensure that any commands that might trigger a) justify
         grestore
      92.345 480.9684 moveto
      gsave
         font0 setfont
         (response are delivered to the server before the client waits on the reply.  The ported library) justify
         grestore
      92.345 468.9234 moveto
      gsave
         font0 setfont
         (retained this behavior, but the short timeout on the read operations \050to handle the problem) justify
         grestore
      92.345 456.8784 moveto
      gsave
         font0 setfont
         (described above\051 caused an excessive number of output flushes, defeating the throughput gains of) justify
         grestore
      92.345 444.8334 moveto
      gsave
         font0 setfont
         (batching requests.  With the introduction of a reading thread, however, there is no need to couple) justify
         grestore
      92.345 432.7884 moveto
      gsave
         font0 setfont
         (the input and output together.  The reading thread can block indefinitely and other mechanisms) justify
         grestore
      92.345 420.7433 moveto
      gsave
         font0 setfont
         (such as an explicit flush by clients or a periodic timeout by a maintenance thread ensure that) justify
         grestore
      92.345 408.6984 moveto
      font0 setfont
      (output gets flushed in a timely manner.) show
      92.345 388.609 moveto
      gsave
         font0 setfont
         (Another difference in the two approaches is the introduction of an extra thread for the batching of) justify
         grestore
      92.345 376.5641 moveto
      gsave
         font0 setfont
         (graphics requests.  Both systems do batching on a higher level to eliminate unnecessary X) justify
         grestore
      92.345 364.519 moveto
      gsave
         font0 setfont
         (requests.  Xl uses the slack process mentioned previously.  It makes the connection to the server) justify
         grestore
      92.345 352.474 moveto
      gsave
         font0 setfont
         (asynchronous in order to improve throughput, especially when performing many graphics) justify
         grestore
      92.345 340.429 moveto
      gsave
         font0 setfont
         (operations.  The Xlib port uses external knowledge when the painting is finished to trigger a) justify
         grestore
      92.345 328.384 moveto
      gsave
         font0 setfont
         (flush of the batched requests.  This limits asynchronous graphics operations and leads to a few) justify
         grestore
      92.345 316.339 moveto
      font0 setfont
      (superfluous flushes. ) show
      92.345 296.2496 moveto
      gsave
         font0 setfont
         (In summary, this example illustrates the benefit of introducing an additional thread to help) justify
         grestore
      92.345 284.2045 moveto
      font0 setfont
      (manage concurrency and interactions with external I/O events. ) show
      72.26999 233.3288 moveto
      font8 setfont
      (6.  Issues in thread implementation ) show
      82.3075 205.869 moveto
      font1 setfont
      (6.1 Spurious lock conflicts) show
      92.345 179.0833 moveto
      gsave
         font0 setfont
         (A spurious lock conflict occurs between a thread notifying a CV and the thread that it awakens.) justify
         grestore
      92.345 167.0384 moveto
      gsave
         font0 setfont
         (Birrell describes its occurence on a multiprocessor:  the scheduler starts to run the notified thread) justify
         grestore
      92.345 154.9933 moveto
      gsave
         font0 setfont
         (on another processor while the notifying thread, still running on its processor, holds the) justify
         grestore
      92.345 142.9484 moveto
      gsave
         font0 setfont
         (associated monitor lock.  The notifyee runs for a few microseconds and then blocks waiting for the) justify
         grestore
      92.345 130.9034 moveto
      gsave
         font0 setfont
         (monitor lock.  The cost of this behavior is that of useless trips through the scheduler made by the) justify
         grestore
      92.345 118.8583 moveto
      font0 setfont
      (notifyee's processor [Birrell91].) show
      92.345 98.76905 moveto
      gsave
         font0 setfont
         (We observed this phenomenon in our micro-visualizations even on a uniprocessor, where it) justify
         grestore
      92.345 86.72404 moveto
      gsave
         font0 setfont
         (occurs when the waiting thread has higher priority than the notifying thread.  Figure 3) justify
         grestore
      grestore
   grestore
% end page 20
showpage
%%page 21
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      553.3894 746.79 moveto
      (21) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (illustrates the behavior before and after the notify implementation was fixed to correct the) justify
         grestore
      92.345 701.8220 moveto
      gsave
         font0 setfont
         (behavior.  Since the Mesa language does not allow condition variable notifies outside of monitor) justify
         grestore
      92.345 689.7769 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (locks, Birrell's technique of moving the ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( out of the locked region is not applicable.  In our) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 677.7321 moveto
      gsave
         font0 setfont
         (systems the fix \050defer processor rescheduling, but not the notification itself, until after monitor) justify
         grestore
      92.345 665.687 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (exit\051 was made in the runtime implementation. The changed implementation of ) 0 buf
         opsaft 0 null put
         font10 setfont
         opsbef 1 {font10 setfont} put
         (NOTIFY) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( prevents) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      92.345 653.642 moveto
      font0 setfont
      (the problem both in the case of interpriority notifications and on multiprocessors.) show
      140.5513 538.8493 moveto
      gsave
         currentpoint translate
         2834.645 dup matrix scale concat
         gsave
            3.527776e-4 dup matrix scale concat
            gsave
               333.975 -900.132 matrix translate concat
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -274.6579 929.5101 -267.17 929.5101 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -52.19436 927.8657 -11.33638 927.8657 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -88.85645 927.8657 -61.18008 927.8657 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -88.85645 952.1864 -58.68426 952.1864 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -250.6962 952.8056 -227.2368 952.8056 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -305.7768 952.8056 -283.6435 952.8056 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -258.1842 929.5101 -227.2368 929.5101 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -305.7768 929.5101 -283.6435 929.5101 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -61.18008 927.8657 -52.19436 927.8657 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -61.18008 927.8657 -61.18008 927.8657 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -58.68426 952.1864 -43.70796 952.1864 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -58.68426 952.1864 -58.68426 952.1864 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -283.6435 952.8056 -250.6962 952.8056 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -283.6435 952.8056 -283.6435 952.8056 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -267.17 929.5101 -258.1842 929.5101 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -267.17 929.5101 -267.17 929.5101 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -283.6435 929.5101 -274.6579 929.5101 vec
               6.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.88 0.52 0.52 setrgbcolor
               -283.6435 929.5101 -283.6435 929.5101 vec
               14.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -55.18957 927.8657 -49.19916 927.8657 vec
               14.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -61.67949 952.1864 -52.69357 952.1864 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.4 0.4 0.4 setrgbcolor
               -43.70796 952.1864 -11.33638 952.1864 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -59.93197 930.4657 -59.93197 950.434 vec
               14.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -270.165 952.8056 -261.1795 952.8056 vec
               14.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -286.6386 952.8056 -276.1556 952.8056 vec
               14.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -261.1795 929.5101 -253.6915 929.5101 vec
               14.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.64 0.16 0.16 setrgbcolor
               -276.1556 929.5101 -270.165 929.5101 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -267.9187 953.6383 -267.9187 932.006 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -267.9187 953.6383 -267.9187 953.6383 vec
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -282.8948 953.6383 -282.8948 932.006 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -282.8948 953.6383 -282.8948 953.6383 vec
               gsave
                  /Helvetica-Oblique findfont 1.0 scalefont
                  /font18 exch def
                  font18 setfont
                  0.0 setgray
                  8.32 dup matrix scale -217.6398 951.454 matrix translate matrix concatmatrix concat
                  0.0 0.0 moveto
                  (Low priority notifying thread) show
                  grestore
               gsave
                  font18 setfont
                  0.0 setgray
                  8.32 dup matrix scale -217.6398 929.5101 matrix translate matrix concatmatrix concat
                  0.0 0.0 moveto
                  (High priority waiting thread) show
                  grestore
               gsave
                  font18 setfont
                  0.0 setgray
                  8.32 dup matrix scale -294.4925 913.4634 matrix translate matrix concatmatrix concat
                  0.0 0.0 moveto
                  (Naive wakeup) show
                  grestore
               gsave
                  font18 setfont
                  0.0 setgray
                  8.32 dup matrix scale -94.99576 913.0316 matrix translate matrix concatmatrix concat
                  0.0 0.0 moveto
                  (Careful wakeup) show
                  grestore
               gsave
                  gsave
                     0.832 dup matrix scale -199.5275 891.5625 matrix translate matrix concatmatrix concat
                     0.0 setgray
                     -159.5439 122.0310 moveto
                     font14 setfont
                     (  A low priority thread notifying a high) show
                     -153.5439 109.9859 moveto
                     font14 setfont
                     (priority thread results in a contended) show
                     -153.5439 97.94091 moveto
                     font14 setfont
                     (monitor entry and 3 thread switches) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.0 setgray
                  -332.2678 962.282 moveto
                  -332.2678 1002.275 lineto
                  -184.2374 1002.275 lineto
                  -184.2374 962.282 lineto
                  -332.2678 962.282 lineto
                  closepath stroke
                  grestore
               gsave
                  gsave
                     0.832 dup matrix scale 1.508286 894.638 matrix translate matrix concatmatrix concat
                     0.0 setgray
                     -134.7607 111.278 moveto
                     font14 setfont
                     (  Done carefully, only a single) show
                     -128.7607 99.23301 moveto
                     font14 setfont
                     (thread switch is required) show
                     grestore
                  1.0 setlinewidth
                  1 setlinecap
                  1 setlinejoin
                  0.0 setgray
                  -110.6126 965.3578 moveto
                  -110.6126 996.4041 lineto
                  4.774627 996.4041 lineto
                  4.774627 965.3578 lineto
                  -110.6126 965.3578 lineto
                  closepath stroke
                  grestore
               gsave
                  font15 setfont
                  0.0 setgray
                  8.32 dup matrix scale -192.8668 907.963 matrix translate matrix concatmatrix concat
                  0.0 0.0 moveto
                  (Figure 3) show
                  grestore
               1.0 setlinewidth
               0 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -54.11265 952.8975 -54.11265 961.6931 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.304 0.0 0.8 setrgbcolor
               -54.11265 952.8975 -54.11265 952.8975 vec
               3.0 setlinewidth
               1 setlinecap
               1 setlinejoin
               0.8 0.0 0.0 setrgbcolor
               -59.93197 950.434 -59.93197 950.434 vec
               grestore
            grestore
         grestore
      82.3075 511.3947 moveto
      font1 setfont
      (6.2 Priorities) show
      92.345 483.94 moveto
      gsave
         font0 setfont
         (PCR approximates a strict priority scheduler, by which we mean that if a process of a given) justify
         grestore
      92.345 471.8951 moveto
      gsave
         font0 setfont
         (priority is currently scheduled to run on a processor, no process with higher priority is ready to) justify
         grestore
      92.345 459.85 moveto
      gsave
         font0 setfont
         (run.  As we have seen in Section 5.2, strict priority is not a desirable model on which to run our) justify
         grestore
      92.345 447.8052 moveto
      gsave
         font0 setfont
         (client code:  a model that provides some cpu resource to all runnable threads has proven) justify
         grestore
      92.345 435.76 moveto
      gsave
         font0 setfont
         (necessary to overcome stable priority inversions.  Similarly, the YieldButNotToMe and) justify
         grestore
      92.345 423.7152 moveto
      gsave
         font0 setfont
         (SystemDaemon hacks, also described above, violate strict priority semantics yet have proven) justify
         grestore
      92.345 411.6701 moveto
      gsave
         font0 setfont
         (useful in making our system perform well.  The SystemDaemon hack pushes the thread model a) justify
         grestore
      92.345 399.625 moveto
      gsave
         font0 setfont
         (bit in the direction of proportional fair-share scheduling \050threads at each priority progress at a) justify
         grestore
      92.345 387.58 moveto
      gsave
         font0 setfont
         (rate proportional to a function of the current distribution of threads among priorities\051, a model) justify
         grestore
      92.345 375.5351 moveto
      gsave
         font0 setfont
         (intuitively better suited to controlling long-term average behavior than to controlling moment-) justify
         grestore
      92.345 363.49 moveto
      font0 setfont
      (by-moment processor allocation to meet near-real-time requirements.    ) show
      92.345 342.899 moveto
      gsave
         font0 setfont
         (We do not regard this as a satisfactory state of affairs.  These implementation hacks mean that) justify
         grestore
      92.345 330.854 moveto
      gsave
         font0 setfont
         (the thread model is incompletely specified with respect to priorities, adversely affecting our) justify
         grestore
      92.345 318.809 moveto
      gsave
         font0 setfont
         (ability to reason about existing code and to provide guidance for engineering new code.  Priority) justify
         grestore
      92.345 306.764 moveto
      gsave
         font0 setfont
         (inversions and techniques for avoiding them are the subjects of considerable research in the) justify
         grestore
      92.345 294.7191 moveto
      gsave
         font0 setfont
         (realtime computing context [Sha90][Pilling91].  We believe that someone should investigate) justify
         grestore
      92.345 282.674 moveto
      font0 setfont
      (these techniques for interactive systems and report on the result.   ) show
      82.3075 255.2195 moveto
      font1 setfont
      (6.3 The effect of the time-slice quantum) show
      92.345 227.7649 moveto
      gsave
         font0 setfont
         (Only after several months of study of Figure 2 did we realize something else it was showing us:) justify
         grestore
      92.345 215.7199 moveto
      gsave
         font0 setfont
         (the importance of the time-slice quantum.  Figure 2 has been annotated by hand with a black) justify
         grestore
      92.345 203.6749 moveto
      gsave
         font0 setfont
         (stroke every 50 milliseconds denoting the end of the PCR time-slice. The end of a timeslice ends) justify
         grestore
      92.345 191.6299 moveto
      gsave
         font0 setfont
         (the effect of a YieldButNotToMe or a directed yield.  In Figure 2 the lower priority image thread) justify
         grestore
      92.345 179.5849 moveto
      gsave
         font0 setfont
         (stops running and \050after a brief gap\051 the buffer thread again runs.  \050The gap occurs when various) justify
         grestore
      92.345 167.5399 moveto
      font0 setfont
      (threads, not shown, run briefly because they have timed out\051.) show
      92.345 146.949 moveto
      gsave
         font0 setfont
         (What we did not realize for a long time is that it is the 50 millisecond quantum that is clocking) justify
         grestore
      92.345 134.904 moveto
      gsave
         font0 setfont
         (the sending of the X requests from the buffer thread.  That is, the only reason this performs well) justify
         grestore
      92.345 122.859 moveto
      gsave
         font0 setfont
         (is that the quantum is 50 milliseconds.  For instance, if the quantum were 1 second, then X events) justify
         grestore
      92.345 110.814 moveto
      gsave
         font0 setfont
         (would be buffered for one second before being sent and the user would observe very bursty screen) justify
         grestore
      92.345 98.76898 moveto
      gsave
         font0 setfont
         (painting.  If the quantum were 1 millisecond, then the YieldButNotToMe would yield only very) justify
         grestore
      92.345 86.724 moveto
      font0 setfont
      (briefly and we would back to Figure 1 again.) show
      grestore
   grestore
% end page 21
showpage
%%page 22
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (22) show
      92.345 713.8666 moveto
      gsave
         font0 setfont
         (Above we mentioned that it does not work to rewrite the buffer thread to sleep for a timed) justify
         grestore
      92.345 701.8220 moveto
      gsave
         font0 setfont
         (interval, instead of doing a yield. The reason is that the smallest sleep interval is the remainder) justify
         grestore
      92.345 689.7769 moveto
      gsave
         font0 setfont
         (of the scheduler quantum. Our 50 millisecond quantum is a little bit too long for snappy keyboard) justify
         grestore
      92.345 677.7321 moveto
      gsave
         font0 setfont
         (echoing and line drawing, both instances where immediate response is more important than the) justify
         grestore
      92.345 665.687 moveto
      gsave
         font0 setfont
         (throughput improvement achieved by buffering. However, if the scheduler quantum were 20) justify
         grestore
      92.345 653.642 moveto
      font0 setfont
      (milliseconds, using a timeout instead of a yield in the buffer thread would work fine.) show
      92.345 633.6474 moveto
      gsave
         font0 setfont
         (We conclude that the choice of scheduler quantum is not to be taken lightly in the design of) justify
         grestore
      92.345 621.6024 moveto
      gsave
         font0 setfont
         (interactive thread systems, since it can severely affect the performance of different, correct,) justify
         grestore
      92.345 609.5574 moveto
      font0 setfont
      (multiprogramming algorithms.) show
      72.26999 558.8076 moveto
      font8 setfont
      (7.  Visualization tools ) show
      82.3075 532.1481 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         (An important tool in our study is the program that we use to examine the interactions between) justify
         grestore
      82.3075 520.1031 moveto
      gsave
         font0 setfont
         (threads. The visualization system lets us see what threads are involved in performing a certain task) justify
         grestore
      82.3075 508.0582 moveto
      gsave
         font0 setfont
         (and how they interact.  Our visualization system consists of three major parts. The first two parts,) justify
         grestore
      82.3075 496.0132 moveto
      font0 setfont
      (HistorySpy and KTrace, gather information, while the third, ThreadsVis, displays the information.) show
      82.3075 476.0185 moveto
      gsave
         font0 setfont
         (HistorySpy collects detailed information about four kinds of events: thread creation \050fork\051, thread) justify
         grestore
      82.3075 463.9737 moveto
      gsave
         font0 setfont
         (transition to blocked state \050blocked monitor entry, condition wait\051, thread transition to unblocked) justify
         grestore
      82.3075 451.9286 moveto
      gsave
         font0 setfont
         (state \050monitor exit, notify and broadcast\051 and thread transition to running state \050chosen for) justify
         grestore
      82.3075 439.8834 moveto
      gsave
         font0 setfont
         (execution by the thread scheduler\051. For each event the program counters on the call stack are) justify
         grestore
      82.3075 427.8384 moveto
      gsave
         font0 setfont
         (gathered. The first few PCs in the callstacks are later used to identify the kind of transition and all) justify
         grestore
      82.3075 415.7935 moveto
      gsave
         font0 setfont
         (the PCs are mapped to procedure names for inspection by the ThreadsVis user.  The time overhead) justify
         grestore
      82.3075 403.7484 moveto
      gsave
         font0 setfont
         (of HistorySpy is dominated by recording the call stacks, which takes about 45 microseconds per) justify
         grestore
      82.3075 391.7034 moveto
      gsave
         font0 setfont
         (frame on a Sparcstation 2. Events have an average of 12 frames. A measured series of tasks took) justify
         grestore
      82.3075 379.6584 moveto
      gsave
         font0 setfont
         (about 20% longer with HistorySpy turned on and gathering about 300 events/second.  Note that) justify
         grestore
      82.3075 367.6133 moveto
      gsave
         font0 setfont
         (events such as uncontended monitor entry and exit and notifies with no waiters do not cause) justify
         grestore
      82.3075 355.5684 moveto
      font0 setfont
      (transitions and are not recorded by HistorySpy. ) show
      82.3075 335.5738 moveto
      gsave
         font0 setfont
         (KTrace is a similar system for monitoring Unix kernel events.  It consists of a SunOS kernel) justify
         grestore
      82.3075 323.5286 moveto
      gsave
         font0 setfont
         (modified to put events into a large in-memory ring buffer and a user process that empties the) justify
         grestore
      82.3075 311.4836 moveto
      gsave
         font0 setfont
         (buffer. KTrace events are transition to idle, user process execution, interrupts, trap entry and exit,) justify
         grestore
      82.3075 299.4386 moveto
      gsave
         font0 setfont
         (page faults, internal kernel sleeps and system calls. Detailed information about each type of event) justify
         grestore
      82.3075 287.3936 moveto
      gsave
         font0 setfont
         (is also gathered, such as which process, which interrupt, the event slept upon and so on. \050KTrace) justify
         grestore
      82.3075 275.3485 moveto
      gsave
         font0 setfont
         (does not capture call stacks.\051  Tracing of different types of events can be turned on and off) justify
         grestore
      82.3075 263.3036 moveto
      gsave
         font0 setfont
         (dynamically, to limit unnecessary overhead.  A disabled trace point just costs a few instructions and) justify
         grestore
      82.3075 251.2586 moveto
      gsave
         font0 setfont
         (an enabled trace point costs about 5 microseconds on a Sparcstation 2. This includes reading the) justify
         grestore
      82.3075 239.2136 moveto
      gsave
         font0 setfont
         (microsecond hardware clock and adding a record to the circular trace buffer. The biggest source of) justify
         grestore
      82.3075 227.1687 moveto
      gsave
         font0 setfont
         (overhead is the background job that runs periodically and copies the kernel's trace buffer to disk.) justify
         grestore
      82.3075 215.1236 moveto
      gsave
         font0 setfont
         (Programs use from 2% to 3% more CPU time when tracing is turned on, but on a uniprocessor they) justify
         grestore
      82.3075 203.0787 moveto
      gsave
         font0 setfont
         (run 10% to 11% slower in terms of elapsed time because they compete with the process that empties) justify
         grestore
      82.3075 191.0336 moveto
      gsave
         font0 setfont
         (the trace buffer. The same measurement on a multiprocessor shows only the 2-3% slowdown as) justify
         grestore
      82.3075 178.9886 moveto
      font0 setfont
      (expected.) show
      82.3075 158.9939 moveto
      gsave
         font0 setfont
         (The ThreadsVis program automatically converts the data from KTrace and HistorySpy into an) justify
         grestore
      82.3075 146.9489 moveto
      gsave
         font0 setfont
         (interactive graphical form. Using a graphical editor with embedded buttons [Pier88][Bier92], the) justify
         grestore
      82.3075 134.904 moveto
      gsave
         font0 setfont
         (picture is easily panned, zoomed, or edited. Any item in the picture can be clicked to pop up) justify
         grestore
      82.3075 122.859 moveto
      gsave
         font0 setfont
         (additional information, including the callstacks for thread events. There are obvious advantages to) justify
         grestore
      82.3075 110.814 moveto
      gsave
         font0 setfont
         (viewing the trace data graphically and interactively, but a complete discussion of thread) justify
         grestore
      82.3075 98.76892 moveto
      gsave
         font0 setfont
         (visualization techniques is beyond the scope of this paper. \050The reader interested in parallel) justify
         grestore
      82.3075 86.72391 moveto
      font0 setfont
      (visualization systems might start with the references in [Halstead90].\051) show
      grestore
   grestore
% end page 22
showpage
%%page 23
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (23) show
      82.3075 713.8666 moveto
      gsave
         font0 setfont
         (The PCRTrace package, used in gathering data for the statistics for Section 3.1, is a PCR) justify
         grestore
      82.3075 701.8220 moveto
      gsave
         font0 setfont
         (instrumented to record events like thread switches, thread preemptions, IO operations performed,) justify
         grestore
      82.3075 689.7769 moveto
      gsave
         font0 setfont
         (contended and uncontended monitor entry, etc.  Events are recorded in an in-memory trace buffer) justify
         grestore
      82.3075 677.7321 moveto
      font0 setfont
      (and analyzed off-line.   ) show
      72.26999 626.6234 moveto
      font8 setfont
      (8.  Suggestions for future work) show
      82.3075 599.6047 moveto
      gsave
         font0 setfont
         (Two areas stand out as needing further work.  First,  micro-visualization of threads is very) justify
         grestore
      82.3075 587.5598 moveto
      gsave
         font0 setfont
         (compute and memory intensive. We were not satisfied with either the performance or the user) justify
         grestore
      82.3075 575.5148 moveto
      gsave
         font0 setfont
         (interface of our visualization tools, even when we ran them on 50 MIP multiprocessor RISC) justify
         grestore
      82.3075 563.4698 moveto
      gsave
         font0 setfont
         (machines. We had two persistent user interface problems: managing the huge number of events in) justify
         grestore
      82.3075 551.425 moveto
      gsave
         font0 setfont
         (even a few seconds of visualization \050our figures here were drastically cut down for purposes of) justify
         grestore
      82.3075 539.38 moveto
      font0 setfont
      (presentation\051; and better relating the visualized events to what occured during event capture. ) show
      82.3075 519.116 moveto
      gsave
         font0 setfont
         (Second, we believe that work from the real-time scheduling community must be explored in the) justify
         grestore
      82.3075 507.0709 moveto
      gsave
         font0 setfont
         (context of large, interactive systems.  Both strict priority scheduling and fair-share priority) justify
         grestore
      82.3075 495.026 moveto
      font0 setfont
      (scheduling seem to complicate rather than ease the programming of highly reactive systems.) show
      72.26999 443.9174 moveto
      font8 setfont
      (9.  Conclusions ) show
      82.3075 416.8988 moveto
      gsave
         font0 setfont
         (We have analyzed two interactive computing systems that make heavy use of light-weight threads) justify
         grestore
      82.3075 404.8537 moveto
      gsave
         font0 setfont
         (and have been in daily use for many years by many people.  The model of threads both these) justify
         grestore
      82.3075 392.8088 moveto
      gsave
         font0 setfont
         (systems use is one based on preemptable threads that use monitors and condition variables to) justify
         grestore
      82.3075 380.7636 moveto
      gsave
         font0 setfont
         (control thread interactions.  Both systems run on top of the Portable Common Runtime, which) justify
         grestore
      82.3075 368.7188 moveto
      font0 setfont
      (provides preemptable user-level threads based on a strict priority-based scheduling model.) show
      82.3075 348.4548 moveto
      gsave
         font0 setfont
         (Our analysis has focused on how people use threads for program structuring rather than for) justify
         grestore
      82.3075 336.4099 moveto
      gsave
         font0 setfont
         (achieving multiprocessor performance.  As such, we have focused more on a static analysis of) justify
         grestore
      82.3075 324.3649 moveto
      gsave
         font0 setfont
         (program code, coupled with an analysis of thread micro-behavior, than on macroscopic thread) justify
         grestore
      82.3075 312.3197 moveto
      font0 setfont
      (runtime statistics.) show
      82.3075 292.0558 moveto
      gsave
         font0 setfont
         (These systems exemplify some paradigms that may be useful to the thread programmer who is) justify
         grestore
      82.3075 280.0108 moveto
      gsave
         font0 setfont
         (ready for more advanced thread uses, such as slack processes, serializers, deadlock avoiders and) justify
         grestore
      82.3075 267.9658 moveto
      font0 setfont
      (task rejuvenators.) show
      82.3075 247.7018 moveto
      gsave
         font0 setfont
         (These systems also show that even very experienced communities may struggle at times to use) justify
         grestore
      82.3075 235.6568 moveto
      gsave
         font0 setfont
         (threads well.  Some thread paradigms using monitor mechanisms are easy for programmers to use;) justify
         grestore
      82.3075 223.6117 moveto
      gsave
         font0 setfont
         (others, such as slack processes and priorities, challenge both application programmers and thread) justify
         grestore
      82.3075 211.5668 moveto
      font0 setfont
      (system implementors.) show
      82.3075 191.3029 moveto
      gsave
         font0 setfont
         (One of our major conclusions is a suggestion for future work in this area: there is still much to be) justify
         grestore
      82.3075 179.2579 moveto
      gsave
         font0 setfont
         (learned from a careful analysis of large systems.  The more unusual paradigms described in this) justify
         grestore
      82.3075 167.213 moveto
      gsave
         font0 setfont
         (paper, such as task rejuvenation and deadlock avoidance, arose from a relatively small community) justify
         grestore
      82.3075 155.168 moveto
      gsave
         font0 setfont
         (over a small number of years.  There are likely other innovative uses of threads waiting to be) justify
         grestore
      82.3075 143.123 moveto
      font0 setfont
      (discovered.   ) show
      82.3075 122.859 moveto
      gsave
         font0 setfont
         (Reading code and microscopic visualization taught us new things about systems we had created and) justify
         grestore
      82.3075 110.814 moveto
      gsave
         font0 setfont
         (used over a ten year period.  Even after a year of looking at the same 100 millisecond pictures we) justify
         grestore
      82.3075 98.76898 moveto
      gsave
         font0 setfont
         (are seeing new things in them.  To understand systems it is not enough to describe how things) justify
         grestore
      82.3075 86.724 moveto
      font0 setfont
      (should be; one also needs to know how they are.  ) show
      grestore
   grestore
% end page 23
showpage
%%page 24
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.759 746.79 moveto
      (24) show
      72.26999 713.8666 moveto
      font8 setfont
      (Acknowledgements) show
      82.3075 694.7231 moveto
      gsave
         font0 setfont
         (This work would not have been possible without the efforts of the hundreds of Cedar and GVX) justify
         grestore
      82.3075 682.678 moveto
      gsave
         font0 setfont
         (programmers who created these systems. Alan Demers created the PCR thread package and) justify
         grestore
      82.3075 670.6334 moveto
      gsave
         font0 setfont
         (participated in hours of discussions regarding thread primitives and scheduling.  John Corwin and) justify
         grestore
      82.3075 658.5882 moveto
      font0 setfont
      (Chris Uhler assisted us in building and using instrumented versions of GVX.) show
      82.3075 639.4444 moveto
      gsave
         font0 setfont
         (This work was supported by Xerox.  Portions were also paid for by ARPA under contract) justify
         grestore
      82.3075 627.3993 moveto
      font0 setfont
      (DABT63-91-C-0027.) show
      72.26999 608.2553 moveto
      font8 setfont
      (Bibliography) show
      82.3075 593.4853 moveto
      gsave
         font0 setfont
         ([Accetta86] Accetta, R. Baron, W. Bolosky, D. Golub, R. Rashid, A. Tevanian, M. Young, ``Mach: A) justify
         grestore
      91.22881 581.4405 moveto
      /colwidth 447.775 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (New Kernel Foundation for UNIX Development.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Proceedings of the Summer 1986 USENIX) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 569.3953 moveto
      font9 setfont
      (Conference) show
      font0 setfont
      (, July 1986.) show
      82.3075 554.6253 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         ([Bier92] E. Bier. ``EmbeddedButtons: Supporting Buttons in Documents.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (ACM Transactions on) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 542.5802 moveto
      font9 setfont
      (Information Systems) show
      font0 setfont
      (, 10\0504\051, October 1992, pages 381-407.) show
      82.3075 527.8104 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         ([Birrell91] A. Birrell. ``An Introduction to Programming with Threads.'' in) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         ( Systems Programming) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 515.7653 moveto
      font9 setfont
      (with Modula-3, ) show
      font0 setfont
      (G. Nelson editor. Prentice Hall, 1991, pp. 88-118.) show
      82.3075 500.9952 moveto
      font0 setfont
      ([Custer93] H. Custer. ) show
      font9 setfont
      (Inside Windows NT) show
      font0 setfont
      (. Microsoft Press, 1993.) show
      82.3075 486.225 moveto
      gsave
         font0 setfont
         ([Draves91] R. Draves, B. Bershad, R. Rashid, R. Dean. ``Using Continuations to Implement Thread) justify
         grestore
      91.22881 474.18 moveto
      /colwidth 422.1254 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Management and Communication in Operating Systems.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Proceedings of the 13th ACM) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 462.1352 moveto
      font9 setfont
      (Symposium on Operating Systems Principles) show
      font0 setfont
      (, in ) show
      font9 setfont
      (Operating Systems Review, ) show
      font0 setfont
      (25\0505\051) show
      font9 setfont
      (, ) show
      font0 setfont
      (October 1991.) show
      font9 setfont
      ( ) show
      82.3075 447.365 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         ([Frailong93] J. Frailong, M. Cekleov, P. Sindhu, J. Gastinel, M. Splain, J. Price, A. Singhal. ``The) justify
         grestore
      91.22881 435.32 moveto
      font0 setfont
      (Next-Generation SPARC Multiprocessing System Architecture.'' ) show
      font9 setfont
      (Proceedings of COMPCON 93.) show
      82.3075 420.55 moveto
      gsave
         font0 setfont
         ([Halstead90] R. Halstead, Jr., D. Kranz. ``A Replay Mechanism for Mostly Functional Parallel) justify
         grestore
      91.22881 408.505 moveto
      font0 setfont
      (Programs.'' ) show
      font9 setfont
      (DEC Cambridge Research Lab Technical Report 90/6) show
      font0 setfont
      (, November 13, 1990.) show
      82.3075 393.735 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         ([Jacobi92] Jacobi, C. ``Migrating Widgets.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Proceedings of the 6th Annual X Technical Conference) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 381.69 moveto
      font0 setfont
      (in ) show
      font9 setfont
      (The X Resource) show
      font0 setfont
      (, Issue 1, January 1992, p. 157.) show
      82.3075 366.92 moveto
      /colwidth 434.9503 def
      gsave
         font0 setfont
         ([Lampson80] B. Lampson, D. Redell. ``Experience with Processes and Monitors in Mesa.'') justify
         grestore
      91.22881 354.875 moveto
      font9 setfont
      (Communications of the ACM) show
      font0 setfont
      (, 23\0502\051, February 1980.) show
      82.3075 340.1048 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         ([Owicki89] Owicki, S. ``Experience with the Firefly Multiprocessor Workstation.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Research Report) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 328.0597 moveto
      font9 setfont
      (51) show
      font0 setfont
      (, Digital Equipment Corp. Systems Research Center, September, 1989.) show
      82.3075 313.2899 moveto
      gsave
         font0 setfont
         ([Pier88] K. Pier, E. Bier, M. Stone. ``An Introduction to Gargoyle: an Interactive Illustration Tool.'') justify
         grestore
      91.22881 301.2447 moveto
      /colwidth 426.027 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (J.C. van Vliet \050editor\051, ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Document Manipulation and Typography, Proceedings of the Int'l) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 289.1997 moveto
      /colwidth 448.0232 def
      gsave
         font9 setfont
         opsbef 0 {font9 setfont} put
         (Conference on Electronic Publishing, Document Manipulation and Typography) 0 buf
         opsaft 0 null put
         font0 setfont
         opsbef 1 {font0 setfont} put
         (, Nice \050France\051,) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 277.1548 moveto
      font0 setfont
      (April 20-22, 1988. Cambridge University Press, 1988, pp. 223-238.) show
      82.3075 262.3846 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         ([Pilling91] M. Pilling. ``Dangers of Priority as a Structuring Principle for Real-Time Languages.'') justify
         grestore
      91.22881 250.3396 moveto
      font9 setfont
      (Australian Computer Science Communications) show
      font0 setfont
      (, 13\0501\051, February 1991, pp. 18-1 - 18-10.) show
      82.3075 235.5696 moveto
      gsave
         font0 setfont
         ([Powell91] M. Powell, S. Kleiman, S. Barton, D. Shah, D. Stein, M. Weeks. ``SunOS Multi-thread) justify
         grestore
      91.22881 223.5246 moveto
      font0 setfont
      (Architecture.'' ) show
      font9 setfont
      (Proceedings of the Winter 1991 ) show
      (USENIX) show
      ( Conference) show
      font0 setfont
      (, Jan. 1991, pp. 65-80.) show
      82.3075 208.7545 moveto
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         ([Scheifler92] R. Scheifler, J. Gettys. ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (X Window System: The Complete Reference to Xlib, X Protocol,) 1 buf
         opsaft 1 null put
         mixedjustify
         grestore
      91.22881 196.7095 moveto
      font9 setfont
      (ICCCM, XLFD) show
      font0 setfont
      (.  Third edition.  Digital Press, 1992.) show
      82.3075 181.9394 moveto
      /colwidth 455.0303 def
      gsave
         font0 setfont
         ([Schmitmann93] C. Schmidtmann, M Tao, S. Watt. ``Design and Implementation of a Multi-) justify
         grestore
      91.22881 169.8944 moveto
      font0 setfont
      (Threaded Xlib.'' ) show
      font9 setfont
      (Proceedings of the Winter) show
      font0 setfont
      ( ) show
      font9 setfont
      (1993 Usenix Conference) show
      font0 setfont
      (, Jan. 1993, pp 193-204.) show
      82.3075 155.1244 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         ([Sha90] L. Sha, J. Goodenough. ``Real-Time Scheduling Theory and Ada.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (IEEE Computer, ) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (23\0504\051) 2 buf
         opsaft 2 null put
         font9 setfont
         opsbef 3 {font9 setfont} put
         (,) 3 buf
         opsaft 3 null put
         mixedjustify
         grestore
      91.22881 143.0794 moveto
      font0 setfont
      (April 1990, pp 53-62.) show
      font9 setfont
      ( ) show
      82.3075 128.3093 moveto
      font0 setfont
      ([Sites93] Sites, R. ``Alpha AXP Architecture.'' ) show
      font9 setfont
      (CACM) show
      font0 setfont
      ( 36\0502\051, February, 1993, pp. 33-44.) show
      82.3075 113.5392 moveto
      gsave
         font0 setfont
         ([Smith82] D. Smith, C. Irby, R. Kimball, B. Verplank, E. Harslem. ``Designing the STAR User) justify
         grestore
      91.22881 101.4943 moveto
      font0 setfont
      (Interface.'' ) show
      font9 setfont
      (BYTE Magazine) show
      font0 setfont
      (, \0507\0514,) show
      font9 setfont
      ( ) show
      font0 setfont
      (April 1982, pp. 242-282.) show
      82.3075 86.72413 moveto
      gsave
         font0 setfont
         ([Swinehart86] D. Swinehart, P. Zellweger, R. Beach, R. Hagmann. ``A Structural View of the) justify
         grestore
      grestore
   grestore
% end page 24
showpage
%%page 25
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (25) show
      91.22881 713.8666 moveto
      /colwidth 425.474 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Cedar Programming Environment.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (ACM Transactions on) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         ( ) 2 buf
         opsaft 2 null put
         font9 setfont
         opsbef 3 {font9 setfont} put
         (Programming Languages and) 3 buf
         opsaft 3 null put
         mixedjustify
         grestore
      91.22881 701.8220 moveto
      font9 setfont
      (Systems) show
      font0 setfont
      (, \0508\0514, October, 1986.) show
      82.3075 687.7693 moveto
      /colwidth 450.0086 def
      gsave
         font0 setfont
         ([Weiser89] M. Weiser, A. Demers, C. Hauser. ``The Portable Common Runtime Approach to) justify
         grestore
      91.22881 675.7245 moveto
      /colwidth 448.0232 def
      gsave
         font0 setfont
         opsbef 0 {font0 setfont} put
         (Interoperability.'' ) 0 buf
         opsaft 0 null put
         font9 setfont
         opsbef 1 {font9 setfont} put
         (Proceedings of the 12th ACM Symposium on Operating Systems Principles) 1 buf
         opsaft 1 null put
         font0 setfont
         opsbef 2 {font0 setfont} put
         (, in) 2 buf
         opsaft 2 null put
         mixedjustify
         grestore
      91.22881 663.6795 moveto
      font9 setfont
      (Operating Systems Review, ) show
      font0 setfont
      (23\0505\051) show
      font9 setfont
      (, ) show
      font0 setfont
      (December 1989.) show
      font9 setfont
      ( ) show
      72.26999 86.72406 moveto
      grestore
   grestore
% end page 25
showpage
%%page 26
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (26) show
      72.26999 713.8666 moveto
      font8 setfont
      (Appendix:  Summary of Cedar and GVX eternal threads.  ) show
      82.3075 678.9938 moveto
      /colwidth 456.9444 def
      gsave
         font0 setfont
         (These threads are created when Cedar or GVX is started and they never exit.  These one line) justify
         grestore
      82.3075 666.9487 moveto
      font0 setfont
      (descriptions give some sense of what long-lived threads are used for in these systems.  ) show
      82.3075 640.7941 moveto
      82.3075 628.749 moveto
      font11 setfont
      0.0 4.015 rmoveto
      (Cedar  eternal thread descriptions:) show
      0.0 -4.015 rmoveto
      font0 setfont
      26.30108 0.0 rmoveto
      82.3075 616.7043 moveto
      font0 setfont
      (0:   Idler thread created by PCR to occupy its scheduler when nothing else is runnable.) show
      82.3075 604.6591 moveto
      font0 setfont
      (1:   Idler thread created by PCR to occupy its scheduler when nothing else is runnable.) show
      82.3075 592.614 moveto
      font0 setfont
      (2:   Unknown sleeper thread.) show
      82.3075 580.569 moveto
      font0 setfont
      (3:   Feedback window typescript thread.) show
      82.3075 568.5242 moveto
      font0 setfont
      (4:   Garbage collection daemon.) show
      82.3075 556.4792 moveto
      font0 setfont
      (5:   System daemon.  Provides a proportional scheduling capability.) show
      82.3075 544.4342 moveto
      font0 setfont
      (6:   Finalization manager.  Forks threads to handle finalization tasks when necessary.) show
      82.3075 532.3893 moveto
      font0 setfont
      (7:   Waits for Unix signals and feeds them to Cedar.) show
      82.3075 520.3442 moveto
      font0 setfont
      (8:   PFS file system cache sweeping thread.) show
      82.3075 508.2992 moveto
      font0 setfont
      (9:   Cache sweeper for Cedar's \050distributed\051 naming facilities.) show
      82.3075 496.2543 moveto
      font0 setfont
      (10: SunRPCAuth housekeeping thread.) show
      82.3075 484.2092 moveto
      font0 setfont
      (11: Serializer thread for window painting operations.) show
      82.3075 472.1641 moveto
      font0 setfont
      (12: Serializer thread for window painting operations.) show
      82.3075 460.119 moveto
      font0 setfont
      (13: Serializer thread for window painting operations.) show
      82.3075 448.074 moveto
      font0 setfont
      (14: Caret blinking thread.) show
      82.3075 436.0291 moveto
      font0 setfont
      (15: Serializer thread for window input events.) show
      82.3075 423.9841 moveto
      font0 setfont
      (16: Serializer thread for window input events.) show
      82.3075 411.939 moveto
      font0 setfont
      (17: Serializer thread for window input events.) show
      82.3075 399.8941 moveto
      font0 setfont
      (18: Serializer thread for window input events.) show
      82.3075 387.849 moveto
      font0 setfont
      (19: Manager thread for ForkOps package \050provides \042hot\042 threads for periodically executing ) show
      82.3075 375.804 moveto
      font0 setfont
      (      and delayed execution tasks\051.) show
      82.3075 363.759 moveto
      font0 setfont
      (20: Manager thread for CommTimer package \050provides a timeout service\051.) show
      82.3075 351.714 moveto
      font0 setfont
      (21: Buffering thread for collecting bytes to be sent to the network.) show
      82.3075 339.669 moveto
      font0 setfont
      (22: SUN YP name cache sweeper thread.) show
      82.3075 327.624 moveto
      font0 setfont
      (23: Fake X server events generator \050for when the X server is quiescent\051.) show
      82.3075 315.579 moveto
      font0 setfont
      (24: GC cursor thread.  Waits until the GC-happening cursor should be shown and does so.) show
      82.3075 303.5341 moveto
      font0 setfont
      (25: Unknown sleeper thread.) show
      82.3075 291.4889 moveto
      font0 setfont
      (26: Serializer thread for typescript painting operations.) show
      82.3075 279.444 moveto
      font0 setfont
      (27: Input serialization thread.) show
      82.3075 267.399 moveto
      font0 setfont
      (28: Input event-to-function matcher thread.) show
      82.3075 255.3539 moveto
      font0 setfont
      (29: Popup menu thread.  Waits for popup requests and executes them.) show
      82.3075 243.309 moveto
      font0 setfont
      (30: X server connection input events thread.) show
      82.3075 231.2639 moveto
      font0 setfont
      (31: Buffered X server connection output thread.) show
      82.3075 219.219 moveto
      font0 setfont
      (32: ForkOps thread, waiting for a task to execute.) show
      82.3075 207.1739 moveto
      font0 setfont
      (33: Unknown.) show
      82.3075 195.129 moveto
      font0 setfont
      (34: ForkOps thread, waiting for a task to execute.) show
      82.3075 183.084 moveto
      font0 setfont
      (35: Commander typescript \050equivalent to a Unix shell\051 thread.) show
      82.3075 171.0389 moveto
      font0 setfont
      (36: Clock thread.) show
      82.3075 158.9939 moveto
      font0 setfont
      (37: ForkOps thread, waiting for a task to execute.) show
      82.3075 146.949 moveto
      82.3075 134.904 moveto
      font11 setfont
      0.0 4.015 rmoveto
      (GVX  eternal thread descriptions) show
      0.0 -4.015 rmoveto
      font10 setfont
      0.0 4.015 rmoveto
      (:) show
      0.0 -4.015 rmoveto
      82.3075 122.859 moveto
      font0 setfont
      (0:   Idler thread created by PCR to occupy its scheduler when nothing else is runnable.) show
      82.3075 110.814 moveto
      font0 setfont
      (1:   PCR console reader thread.) show
      82.3075 98.76898 moveto
      font0 setfont
      (2:   System daemon.) show
      82.3075 86.724 moveto
      font0 setfont
      (3:   Finalization manager.) show
      grestore
   grestore
% end page 26
showpage
%%page 27
gsave
   2834.646 2834.646 scale
   gsave
      0.0254 dup matrix scale concat
      0.013837 dup matrix scale concat
      font0 setfont
      552.9706 746.79 moveto
      (27) show
      82.3075 713.8666 moveto
      font0 setfont
      (4:   GVX desktop events thread.) show
      82.3075 701.8220 moveto
      font0 setfont
      (5:   User abort thread.  \050Only the System Daemon runs at higher priority.\051) show
      82.3075 689.7769 moveto
      font0 setfont
      (6:   Inactive session timeout thread.) show
      82.3075 677.7321 moveto
      font0 setfont
      (7:   Distributed sessions probe thread.) show
      82.3075 665.687 moveto
      font0 setfont
      (8:   Unknown.) show
      82.3075 653.642 moveto
      font0 setfont
      (9:   Display flusher thread.) show
      82.3075 641.597 moveto
      font0 setfont
      (10: Network listener thread.) show
      82.3075 629.552 moveto
      font0 setfont
      (11: Network listener thread.) show
      82.3075 617.5073 moveto
      font0 setfont
      (12: Interrupt thread.  \050Only the System Daemon runs at higher priority.\051) show
      82.3075 605.4621 moveto
      font0 setfont
      (13: X server connection event  reader thread.) show
      82.3075 593.4171 moveto
      font0 setfont
      (14: X connection event matcher.) show
      82.3075 581.372 moveto
      font0 setfont
      (15: X event dispatcher.) show
      82.3075 569.3272 moveto
      font0 setfont
      (16: Background event handler.) show
      82.3075 557.282 moveto
      font0 setfont
      (17: Input event-to-function matcher helper thread.) show
      82.3075 545.2372 moveto
      font0 setfont
      (18: Input event-to-function matcher thread.) show
      82.3075 533.1924 moveto
      font0 setfont
      (19: Unknown.) show
      82.3075 521.147 moveto
      font0 setfont
      (20: Forked events manager thread.) show
      82.3075 509.102 moveto
      font0 setfont
      (21: Free pages sweeper thread.) show
      82.3075 497.0571 moveto
      font0 setfont
      (22: Cursor blinking thread.) show
      72.26999 86.72421 moveto
      grestore
   grestore
% end page 27
showpage

%%Trailer
%%Pages: 27