07.10.2014 Views

Complete issue 10:1 as one pdf - TUG

Complete issue 10:1 as one pdf - TUG

Complete issue 10:1 as one pdf - TUG

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>TUG</strong>boat, Volume <strong>10</strong> (1989), No. 1 17<br />

ljkkiaecajaflj fh h<br />

kl<br />

m<br />

j<br />

k<br />

i<br />

i<br />

kl j h<br />

m k i<br />

lj<br />

rn<br />

k<br />

j<br />

i<br />

h<br />

mk j i<br />

jl k i<br />

d l j g e e i<br />

jm k i<br />

m j i<br />

kl k i<br />

feddem j dfdh i<br />

ijgc i dh e<br />

j j<br />

iji d<br />

h c jj dh<br />

gjjj<br />

ijji d<br />

'<br />

jjjjjj d<br />

jaahgaijklkkj j ifhj ia<br />

k k h jh<br />

kk k i 3g<br />

hl k i jgf<br />

hkl j i kgg<br />

hjldc a j i d hjg<br />

ikii f h f fgf<br />

ijkf h g f<br />

ijkjjjj h g f<br />

klhf gaj j kj kkkj idf ka<br />

jlc g b bbi<br />

I<br />

ilk f f<br />

hjj j jkj jkjkkkj fhgf d<br />

Figure S: This image records the memory accesses<br />

during the same pages <strong>as</strong> in Fig. U to the same<br />

memory area, using the same recording conventions,<br />

but this time a free list sort is employed at the end<br />

of every ship-out .<br />

Note the locality visibly in effect now. Note also<br />

the incre<strong>as</strong>ed number of accesses vs. the decre<strong>as</strong>ed<br />

number of accessed pages per Iine.<br />

are compiled from corresponding mem access logs,<br />

demonstrate the difference between the unsorted<br />

and the sorted c<strong>as</strong>e.<br />

Also, when I installed the free list sorter on<br />

PCS Cadmus which now is a paging system, it<br />

seemed to me that throughput incre<strong>as</strong>ed by <strong>10</strong>%<br />

while the sorter itself adds ca. 1% of CPU time.<br />

I would like to see this me<strong>as</strong>ured under controlled<br />

conditions (Size of the Working Set? Number of<br />

page faults?). At PCS, I cannot do that.<br />

Memory page size of 256 cells (which is lk) is<br />

just the right compromise. A larger size incre<strong>as</strong>es<br />

the number of swaps while the average number<br />

of consecutive accesses of the same memory page<br />

never exceeds 4. A smaller size incre<strong>as</strong>es page<br />

translation table size which is now 3.3k (Memory<br />

page size x page translation table size = const).<br />

When memory page size is 256 cells and memory<br />

is 512k (which is likely under Novell) then<br />

INIW obtains 12 pages swappable memory, and<br />

VIRW about 120 pages. In that c<strong>as</strong>e, <strong>one</strong> average<br />

I4W run takes about <strong>10</strong>0 memory page swaps per<br />

printed page. This is a tolerable low swap rate,<br />

I think, and so I won't spend too much time in<br />

speeding up swapping.<br />

1. Public w's Memory handler. Here the<br />

two memory handling comp<strong>one</strong>nts are given in detail<br />

since they are the central part, I think, of the PC<br />

port. The solutions presented here may transcend<br />

TURBOPASCAL, and may allow for porting the WEBto-C<br />

stuff, which is on the tape now, to small<br />

machines. Furthermore I would like to see others<br />

improve it.<br />

A few details are left off, like most of the<br />

debugs, the procedure call cross referencing needed<br />

for TURBOPASCAL'S unit mechanism, and the<br />

use-<strong>as</strong>sembler switch,<br />

- since they just clog up the<br />

text without adding clarity.<br />

format debug begin<br />

format gubed end<br />

format stat z begin<br />

-- format tats r end<br />

format fakebegin begin<br />

format falceend end<br />

2. For a change, TURBO allows clean memory<br />

management due to an undoc~mented feature. This<br />

feature is not PASCAL <strong>as</strong> defined but, at le<strong>as</strong>t, it is<br />

cleaner than other constructs I saw used on 16bit<br />

machines. (0 ye nameless compilers, get you g<strong>one</strong><br />

into oblivion, and speedily.) If, say, memp(x) is<br />

a function returning a pointer of some type, then<br />

TURBO accepts memp(x)f +- something, and it<br />

does the right thing. This feature comes in handy<br />

here.<br />

define mem(#) G memp(#)f<br />

define font-info (#) E fmemp (#) f<br />

(Types in the outer block 2) z<br />

p-memory-word = f memory-word;<br />

mem-pc-index = 0 . . max-mem-piece;<br />

mem-piece = array [mem-pc-index] of<br />

memory-word;<br />

p-mem-index = p-mem-min . . p-mem-max;<br />

p-hem-index = 0 . . p-fmem-size;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!