[Debconf6-data-commit] r507 - in procedings: . 41-port-together 41-port-together/orig 41-port-together/orig/dc6-paper-41

Alexander Schmehl tolimar at costa.debian.org
Mon Apr 10 23:36:47 UTC 2006


Author: tolimar
Date: 2006-04-10 23:36:43 +0000 (Mon, 10 Apr 2006)
New Revision: 507

Added:
   procedings/41-port-together/
   procedings/41-port-together/figure1.eps
   procedings/41-port-together/figure1.pdf
   procedings/41-port-together/figure2.eps
   procedings/41-port-together/figure2.pdf
   procedings/41-port-together/orig/
   procedings/41-port-together/orig/dc6-paper-41.tar.bz2
   procedings/41-port-together/orig/dc6-paper-41/
   procedings/41-port-together/orig/dc6-paper-41/dc6-paper.tex
   procedings/41-port-together/orig/dc6-paper-41/figure1.eps
   procedings/41-port-together/orig/dc6-paper-41/figure2.eps
   procedings/41-port-together/paper.tex
Modified:
   procedings/all.dvi
   procedings/all.tex
Log:
'let\'s port together' paper added

Added: procedings/41-port-together/figure1.eps
===================================================================
--- procedings/41-port-together/figure1.eps	2006-04-10 22:44:49 UTC (rev 506)
+++ procedings/41-port-together/figure1.eps	2006-04-10 23:36:43 UTC (rev 507)
@@ -0,0 +1 @@
+link orig/dc6-paper-41/figure1.eps
\ No newline at end of file


Property changes on: procedings/41-port-together/figure1.eps
___________________________________________________________________
Name: svn:special
   + *

Added: procedings/41-port-together/figure1.pdf
===================================================================
(Binary files differ)


Property changes on: procedings/41-port-together/figure1.pdf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: procedings/41-port-together/figure2.eps
===================================================================
--- procedings/41-port-together/figure2.eps	2006-04-10 22:44:49 UTC (rev 506)
+++ procedings/41-port-together/figure2.eps	2006-04-10 23:36:43 UTC (rev 507)
@@ -0,0 +1 @@
+link orig/dc6-paper-41/figure2.eps
\ No newline at end of file


Property changes on: procedings/41-port-together/figure2.eps
___________________________________________________________________
Name: svn:special
   + *

Added: procedings/41-port-together/figure2.pdf
===================================================================
(Binary files differ)


Property changes on: procedings/41-port-together/figure2.pdf
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: procedings/41-port-together/orig/dc6-paper-41/dc6-paper.tex
===================================================================
--- procedings/41-port-together/orig/dc6-paper-41/dc6-paper.tex	2006-04-10 22:44:49 UTC (rev 506)
+++ procedings/41-port-together/orig/dc6-paper-41/dc6-paper.tex	2006-04-10 23:36:43 UTC (rev 507)
@@ -0,0 +1,38 @@
+\documentclass[11pt]{article}
+\usepackage{graphicx}
+
+\begin{document}
+
+
+\title{Let's port together. Debian fun for everyone.}
+
+\author{Peter De Schrijver (p2 at debian.org) \and
+Steve Langasek (vorlon at debian.org)}
+
+\maketitle
+
+\section{Background : modern system architecture}
+Before diving into the details of portability, it's useful to have a quick look at the architecture of modern systems.
+Figure 1 shows one typical system architecture. There is a CPU complex which interfaces using the frontside bus to the northbridge. The northbridge interfaces to the main memory subsystem, the PCI bus and the AGP. Most peripherals are directly or indirectly connected to the PCI bus. Exception is the graphics subsystem which has its own port the the northbridge, the AGP. This is due to the high bandwidth requirements of modern 3D programs. Another system architecture is shown in figure 2. Here the main memory is connected directly to the CPU. The CPUs themselves are interconnected via Hypertransport, a relatively narrow but high speed interconnection technology. Peripherals are connected via PCI express. The PCI express lanes are connected to the system via a hypertransport PCI express bridge. PCI express is a link based interconnection technology using 1.2Gbit/s bidirectional lanes. Multiple lanes can be bundled together for increased bandwidth. In contrast to PCI, PCI express is not a bus. This offers advantages with regard to scalability, powermanagement and latency. It's interesting to see why modern interfaces move from parallel to serial. The main reason is performance. A parallel interface requires all the wires to be almost the same length. Put differently : the small differences in signal propagation times due to wirelength variations limit the clock speed of a parallel interface. However it became only recently possible to integrate the necessary electronics for serialization/deserialization on chips, which is why we didn't see this move earlier. We also saw a great increase in CPU clock frequency in the last years. Unfortunately I/O and memory interfaces did not follow this trend by the same amount. Bandwidth and latency did not improve by the same amount. This lead to the introduction of cache memories and burstmode transfers to hide the memory and I/O slowness.
+
+\section{C language portability pitfalls}
+The ANSI-C language standard defines a few rules with regard to types. Writing portable code means sticking to this rules and not assuming a particular size for a type, unless this is guaranteed by the standard.
+In general C programs should use int as much as possible for simple integer computations, loop variables etc. In case you need a specific size (to implement a file format or a binary communication protocol), the ISO C99 types are prefered. Some operations like basic arithmetic or shifts might be more expensive on these types though.
+Be aware of bitfields. They are particularly nasty because the ordering of the bitfields is architecture dependent. 
+Newer gcc versions tend to catch more portability problems such as signed versus unsigned types etc. It's worthwhile to compile your code using a recent gcc version with the -Wall option to catch this sort of problems.
+
+\section{Endianess}
+Endianess refers to the ordering of bytes in a multibyte 'object' like a 16,32 or 64 bit integer. There are basically 2 ways : little and big endian. Using little endian ordering, 0x12345678 will be represented as 0x78 0x56 0x34 0x12. In big endian ordering this would be 0x12 0x34 0x56 0x78. This is important any time programs interchange binary data. Examples are network protocols, file formats, ... The best way of coping with this is to have proper 'serializing' and 'deserializing' routines which handle conversion of the data between the internal and the external representation.
+
+\section{Alignment}
+Alignment means a multibyte 'object' starts at an address which is a multiple of its size. Some RISC CPUs do not handle unaligned accesses in hardware (unlike IA32 for example which does handle an unaligned access transparently for software). Most RISC CPUs which  do not handle unaligned accesses in hardware, will generate a trap when an unaligned access is detected. This trap is generally handled by the kernel, which will handle the access. This obviously has significant performance impact. There are RISC CPUs which do not generate a trap, but basically ignore the lower address bits in case of an unaligned access. ARM is probably the most notable example of this kind of CPUs. Modern ARMs can actually generate a trap, but this feature is disabled for compatibility with older ARM CPUs.
+Unaligned accesses are almost never atomic, even on CPUs which handle them in hardware. This is important when implementing RCU or other look free data exchange mechanisms.
+In general it's best to avoid unaligned accesses as much as possible. In some cases the compiler can generate the right code for an unaligned access, but in many cases (particularly when using typecasts in C), it can not. In that case it might be necessary to copy the data to an aligned buffer first.
+
+\section{Memory organization}
+Memory organization refers to the way the userland address space is generally used by executables. A few things to be aware of : stack ordering and variable number of arguments in C. Not all architectures have a downward growing stack as IA32 has. Most notable is PARISC.
+
+\section{Accessing peripherals}
+Even though accessing peripherals is generally done by the kernel in a Debian Linux system, some userland programs also access peripherals. Most notably are probably the XFree86 and X.org X11 servers. Other examples include cdrecord and gphoto. There are generally 2 ways of accessing peripherals in a system. Either by directly writing to registers or memory of the peripheral, or by exchanging messages with the peripheral via eg USB, 1394, SCSI, ATAPI,... In the latter case the kernel generally cares about the transport of the data between the CPU / memory and the peripheral. This means most of the platform specific details are taken care of. Directly accessing a peripheral however is problematic with regard to portability. Inside the kernel most portability issues are dealt with by using special macros/functions to access peripheral registers. These macros/functions are however not available for userland programs. In general this means the userland program has to provide these abstractions itself. 
+
+\end{document}

Added: procedings/41-port-together/orig/dc6-paper-41/figure1.eps
===================================================================
--- procedings/41-port-together/orig/dc6-paper-41/figure1.eps	2006-04-10 22:44:49 UTC (rev 506)
+++ procedings/41-port-together/orig/dc6-paper-41/figure1.eps	2006-04-10 23:36:43 UTC (rev 507)
@@ -0,0 +1,470 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: /var/home/p2/dc6-paper/SimpleSystem
+%%Creator: Dia v0.94
+%%CreationDate: Tue Apr  4 21:11:20 2006
+%%For: p2
+%%Orientation: Portrait
+%%Magnification: 1.0000
+%%BoundingBox: 0 0 512 487
+%%BeginSetup
+%%EndSetup
+%%EndComments
+%%BeginProlog
+[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E
+/F /G /H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W /X /Y
+/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
+/d /e /f /g /h /i /j /k /l /m
+/n /o /p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
+/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
+/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
+/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
+/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
+/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
+/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
+/cp {closepath} bind def
+/c {curveto} bind def
+/f {fill} bind def
+/a {arc} bind def
+/ef {eofill} bind def
+/ex {exch} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth pop} bind def
+/tr {translate} bind def
+
+/ellipsedict 8 dict def
+ellipsedict /mtrx matrix put
+/ellipse
+{ ellipsedict begin
+   /endangle exch def
+   /startangle exch def
+   /yrad exch def
+   /xrad exch def
+   /y exch def
+   /x exch def   /savematrix mtrx currentmatrix def
+   x y tr xrad yrad sc
+   0 0 1 startangle endangle arc
+   savematrix setmatrix
+   end
+} def
+
+/mergeprocs {
+dup length
+3 -1 roll
+dup
+length
+dup
+5 1 roll
+3 -1 roll
+add
+array cvx
+dup
+3 -1 roll
+0 exch
+putinterval
+dup
+4 2 roll
+putinterval
+} bind def
+/Times-Roman-latin1
+    /Times-Roman findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Times-Italic-latin1
+    /Times-Italic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Times-Bold-latin1
+    /Times-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Times-BoldItalic-latin1
+    /Times-BoldItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-Book-latin1
+    /AvantGarde-Book findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-BookOblique-latin1
+    /AvantGarde-BookOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-Demi-latin1
+    /AvantGarde-Demi findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-DemiOblique-latin1
+    /AvantGarde-DemiOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-Light-latin1
+    /Bookman-Light findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-LightItalic-latin1
+    /Bookman-LightItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-Demi-latin1
+    /Bookman-Demi findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-DemiItalic-latin1
+    /Bookman-DemiItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-latin1
+    /Courier findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-Oblique-latin1
+    /Courier-Oblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-Bold-latin1
+    /Courier-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-BoldOblique-latin1
+    /Courier-BoldOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-latin1
+    /Helvetica findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Oblique-latin1
+    /Helvetica-Oblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Bold-latin1
+    /Helvetica-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-BoldOblique-latin1
+    /Helvetica-BoldOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-latin1
+    /Helvetica-Narrow findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-Oblique-latin1
+    /Helvetica-Narrow-Oblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-Bold-latin1
+    /Helvetica-Narrow-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-BoldOblique-latin1
+    /Helvetica-Narrow-BoldOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-Roman-latin1
+    /NewCenturySchoolbook-Roman findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-Italic-latin1
+    /NewCenturySchoolbook-Italic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-Bold-latin1
+    /NewCenturySchoolbook-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-BoldItalic-latin1
+    /NewCenturySchoolbook-BoldItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-Roman-latin1
+    /Palatino-Roman findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-Italic-latin1
+    /Palatino-Italic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-Bold-latin1
+    /Palatino-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-BoldItalic-latin1
+    /Palatino-BoldItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Symbol-latin1
+    /Symbol findfont
+definefont pop
+/ZapfChancery-MediumItalic-latin1
+    /ZapfChancery-MediumItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/ZapfDingbats-latin1
+    /ZapfDingbats findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+28.346000 -28.346000 scale
+-13.965100 -18.185000 translate
+%%EndProlog
+
+
+1.000000 1.000000 1.000000 srgb
+n 15.450000 1.100000 m 15.450000 4.100000 l 19.450000 4.100000 l 19.450000 1.100000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 15.450000 1.100000 m 15.450000 4.100000 l 19.450000 4.100000 l 19.450000 1.100000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(CPU) dup sw 2 div 17.450000 ex sub 2.850000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 22.415000 1.060000 m 22.415000 4.060000 l 26.415000 4.060000 l 26.415000 1.060000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 22.415000 1.060000 m 22.415000 4.060000 l 26.415000 4.060000 l 26.415000 1.060000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(CPU) dup sw 2 div 24.415000 ex sub 2.810000 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 17.450000 4.100000 m 17.400000 5.100000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 24.415000 4.060000 m 24.400000 5.100000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 17.450000 5.050000 m 24.400000 5.050000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 20.925000 5.050000 m 20.965100 7.050000 l s
+1.000000 1.000000 1.000000 srgb
+n 19.015100 7.100000 m 19.015100 10.100000 l 22.865100 10.100000 l 22.865100 7.100000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 19.015100 7.100000 m 19.015100 10.100000 l 22.865100 10.100000 l 22.865100 7.100000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(North) dup sw 2 div 20.915100 ex sub 8.400000 m gs 1 -1 sc sh gr
+(bridge) dup sw 2 div 20.915100 ex sub 9.200000 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 22.865100 8.600000 m 26.065100 8.550000 l s
+1.000000 1.000000 1.000000 srgb
+n 26.115100 7.050000 m 26.115100 9.950000 l 31.965100 9.950000 l 31.965100 7.050000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 26.115100 7.050000 m 26.115100 9.950000 l 31.965100 9.950000 l 31.965100 7.050000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Memory) dup sw 2 div 28.965100 ex sub 8.300000 m gs 1 -1 sc sh gr
+(subsystem) dup sw 2 div 28.965100 ex sub 9.100000 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 20.940100 10.100000 m 20.915100 11.900000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 15.465100 11.950000 m 26.965100 12.000000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 15.465100 12.000000 m 15.515100 14.950000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 20.965100 12.000000 m 20.915100 14.850000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 26.965100 11.950000 m 26.915100 14.850000 l s
+1.000000 1.000000 1.000000 srgb
+n 14.015100 14.950000 m 14.015100 18.100000 l 16.665100 18.100000 l 16.665100 14.950000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 14.015100 14.950000 m 14.015100 18.100000 l 16.665100 18.100000 l 16.665100 14.950000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 15.215100 ex sub 16.800000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 25.625100 14.935000 m 25.625100 18.085000 l 28.275100 18.085000 l 28.275100 14.935000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 25.625100 14.935000 m 25.625100 18.085000 l 28.275100 18.085000 l 28.275100 14.935000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 26.825100 ex sub 16.785000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 19.625100 14.985000 m 19.625100 18.135000 l 22.275100 18.135000 l 22.275100 14.985000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 19.625100 14.985000 m 19.625100 18.135000 l 22.275100 18.135000 l 22.275100 14.985000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 20.825100 ex sub 16.835000 m gs 1 -1 sc sh gr
+showpage

Added: procedings/41-port-together/orig/dc6-paper-41/figure2.eps
===================================================================
--- procedings/41-port-together/orig/dc6-paper-41/figure2.eps	2006-04-10 22:44:49 UTC (rev 506)
+++ procedings/41-port-together/orig/dc6-paper-41/figure2.eps	2006-04-10 23:36:43 UTC (rev 507)
@@ -0,0 +1,527 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: /var/home/p2/dc6-paper/HTsystem
+%%Creator: Dia v0.94
+%%CreationDate: Tue Apr  4 21:25:01 2006
+%%For: p2
+%%Orientation: Portrait
+%%Magnification: 1.0000
+%%BoundingBox: 0 0 981 405
+%%BeginSetup
+%%EndSetup
+%%EndComments
+%%BeginProlog
+[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
+/two /three /four /five /six /seven /eight /nine /colon /semicolon
+/less /equal /greater /question /at /A /B /C /D /E
+/F /G /H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W /X /Y
+/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c
+/d /e /f /g /h /i /j /k /l /m
+/n /o /p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright
+/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf
+/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde
+/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex
+/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring
+/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave
+/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def
+/cp {closepath} bind def
+/c {curveto} bind def
+/f {fill} bind def
+/a {arc} bind def
+/ef {eofill} bind def
+/ex {exch} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth pop} bind def
+/tr {translate} bind def
+
+/ellipsedict 8 dict def
+ellipsedict /mtrx matrix put
+/ellipse
+{ ellipsedict begin
+   /endangle exch def
+   /startangle exch def
+   /yrad exch def
+   /xrad exch def
+   /y exch def
+   /x exch def   /savematrix mtrx currentmatrix def
+   x y tr xrad yrad sc
+   0 0 1 startangle endangle arc
+   savematrix setmatrix
+   end
+} def
+
+/mergeprocs {
+dup length
+3 -1 roll
+dup
+length
+dup
+5 1 roll
+3 -1 roll
+add
+array cvx
+dup
+3 -1 roll
+0 exch
+putinterval
+dup
+4 2 roll
+putinterval
+} bind def
+/Times-Roman-latin1
+    /Times-Roman findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Times-Italic-latin1
+    /Times-Italic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Times-Bold-latin1
+    /Times-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Times-BoldItalic-latin1
+    /Times-BoldItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-Book-latin1
+    /AvantGarde-Book findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-BookOblique-latin1
+    /AvantGarde-BookOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-Demi-latin1
+    /AvantGarde-Demi findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/AvantGarde-DemiOblique-latin1
+    /AvantGarde-DemiOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-Light-latin1
+    /Bookman-Light findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-LightItalic-latin1
+    /Bookman-LightItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-Demi-latin1
+    /Bookman-Demi findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Bookman-DemiItalic-latin1
+    /Bookman-DemiItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-latin1
+    /Courier findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-Oblique-latin1
+    /Courier-Oblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-Bold-latin1
+    /Courier-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Courier-BoldOblique-latin1
+    /Courier-BoldOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-latin1
+    /Helvetica findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Oblique-latin1
+    /Helvetica-Oblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Bold-latin1
+    /Helvetica-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-BoldOblique-latin1
+    /Helvetica-BoldOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-latin1
+    /Helvetica-Narrow findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-Oblique-latin1
+    /Helvetica-Narrow-Oblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-Bold-latin1
+    /Helvetica-Narrow-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Helvetica-Narrow-BoldOblique-latin1
+    /Helvetica-Narrow-BoldOblique findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-Roman-latin1
+    /NewCenturySchoolbook-Roman findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-Italic-latin1
+    /NewCenturySchoolbook-Italic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-Bold-latin1
+    /NewCenturySchoolbook-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/NewCenturySchoolbook-BoldItalic-latin1
+    /NewCenturySchoolbook-BoldItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-Roman-latin1
+    /Palatino-Roman findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-Italic-latin1
+    /Palatino-Italic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-Bold-latin1
+    /Palatino-Bold findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Palatino-BoldItalic-latin1
+    /Palatino-BoldItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/Symbol-latin1
+    /Symbol findfont
+definefont pop
+/ZapfChancery-MediumItalic-latin1
+    /ZapfChancery-MediumItalic findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+/ZapfDingbats-latin1
+    /ZapfDingbats findfont
+    dup length dict begin
+	{1 index /FID ne {def} {pop pop} ifelse} forall
+	/Encoding isolatin1encoding def
+    currentdict end
+definefont pop
+28.346000 -28.346000 scale
+-7.015100 -15.280000 translate
+%%EndProlog
+
+
+1.000000 1.000000 1.000000 srgb
+n 15.450000 1.100000 m 15.450000 4.100000 l 19.450000 4.100000 l 19.450000 1.100000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 15.450000 1.100000 m 15.450000 4.100000 l 19.450000 4.100000 l 19.450000 1.100000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(CPU) dup sw 2 div 17.450000 ex sub 2.850000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 29.215000 1.060000 m 29.215000 4.060000 l 33.215000 4.060000 l 33.215000 1.060000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 29.215000 1.060000 m 29.215000 4.060000 l 33.215000 4.060000 l 33.215000 1.060000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(CPU) dup sw 2 div 31.215000 ex sub 2.810000 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 17.450000 4.100000 m 17.490100 6.000000 l s
+1.000000 1.000000 1.000000 srgb
+n 15.565100 6.000000 m 15.565100 9.000000 l 19.415100 9.000000 l 19.415100 6.000000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 15.565100 6.000000 m 15.565100 9.000000 l 19.415100 9.000000 l 19.415100 6.000000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(HT PCIe) dup sw 2 div 17.465100 ex sub 7.300000 m gs 1 -1 sc sh gr
+(bridge) dup sw 2 div 17.465100 ex sub 8.100000 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 33.215000 2.560000 m 35.715100 2.600000 l s
+1.000000 1.000000 1.000000 srgb
+n 35.715100 1.150000 m 35.715100 4.050000 l 41.565100 4.050000 l 41.565100 1.150000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 35.715100 1.150000 m 35.715100 4.050000 l 41.565100 4.050000 l 41.565100 1.150000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Memory) dup sw 2 div 38.565100 ex sub 2.400000 m gs 1 -1 sc sh gr
+(subsystem) dup sw 2 div 38.565100 ex sub 3.200000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 11.415100 11.900000 m 11.415100 15.050000 l 14.065100 15.050000 l 14.065100 11.900000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 11.415100 11.900000 m 11.415100 15.050000 l 14.065100 15.050000 l 14.065100 11.900000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 12.615100 ex sub 13.750000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 20.775100 11.935000 m 20.775100 15.085000 l 23.425100 15.085000 l 23.425100 11.935000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 20.775100 11.935000 m 20.775100 15.085000 l 23.425100 15.085000 l 23.425100 11.935000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 21.975100 ex sub 13.785000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 16.225100 11.985000 m 16.225100 15.135000 l 18.875100 15.135000 l 18.875100 11.985000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 16.225100 11.985000 m 16.225100 15.135000 l 18.875100 15.135000 l 18.875100 11.985000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 17.375100 ex sub 13.835000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 7.065100 1.145000 m 7.065100 4.045000 l 12.915100 4.045000 l 12.915100 1.145000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 7.065100 1.145000 m 7.065100 4.045000 l 12.915100 4.045000 l 12.915100 1.145000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Memory) dup sw 2 div 9.915100 ex sub 2.395000 m gs 1 -1 sc sh gr
+(subsystem) dup sw 2 div 9.915100 ex sub 3.195000 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 12.915100 2.595000 m 15.450000 2.600000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 12.740100 11.900000 m 16.615100 9.010000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 17.490100 9.000000 m 17.550100 11.985000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 19.450000 2.600000 m 29.215000 2.560000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 22.100100 11.935000 m 18.265100 8.960000 l s
+1.000000 1.000000 1.000000 srgb
+n 29.215100 6.095000 m 29.215100 9.095000 l 33.065100 9.095000 l 33.065100 6.095000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 29.215100 6.095000 m 29.215100 9.095000 l 33.065100 9.095000 l 33.065100 6.095000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(HT PCIe) dup sw 2 div 31.115100 ex sub 7.395000 m gs 1 -1 sc sh gr
+(bridge) dup sw 2 div 31.115100 ex sub 8.195000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 25.065100 11.995000 m 25.065100 15.145000 l 27.715100 15.145000 l 27.715100 11.995000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 25.065100 11.995000 m 25.065100 15.145000 l 27.715100 15.145000 l 27.715100 11.995000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 26.265100 ex sub 13.845000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 34.425100 12.030000 m 34.425100 15.180000 l 37.075100 15.180000 l 37.075100 12.030000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 34.425100 12.030000 m 34.425100 15.180000 l 37.075100 15.180000 l 37.075100 12.030000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 35.625100 ex sub 13.880000 m gs 1 -1 sc sh gr
+1.000000 1.000000 1.000000 srgb
+n 29.875100 12.080000 m 29.875100 15.230000 l 32.525100 15.230000 l 32.525100 12.080000 l f
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slj
+0.000000 0.000000 0.000000 srgb
+n 29.875100 12.080000 m 29.875100 15.230000 l 32.525100 15.230000 l 32.525100 12.080000 l cp s
+/Courier-latin1 ff 0.560000 scf sf
+(Device) dup sw 2 div 31.025100 ex sub 13.930000 m gs 1 -1 sc sh gr
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 26.390100 11.995000 m 30.265100 9.105000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 31.140100 9.095000 m 31.200100 12.080000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 35.750100 12.030000 m 31.915100 9.055000 l s
+0.100000 slw
+[] 0 sd
+[] 0 sd
+0 slc
+n 31.215000 4.060000 m 31.140100 6.095000 l s
+showpage

Added: procedings/41-port-together/orig/dc6-paper-41.tar.bz2
===================================================================
(Binary files differ)


Property changes on: procedings/41-port-together/orig/dc6-paper-41.tar.bz2
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: procedings/41-port-together/paper.tex
===================================================================
--- procedings/41-port-together/paper.tex	2006-04-10 22:44:49 UTC (rev 506)
+++ procedings/41-port-together/paper.tex	2006-04-10 23:36:43 UTC (rev 507)
@@ -0,0 +1,37 @@
+\section{Background : modern system architecture}
+Before diving into the details of portability, it's useful to have a quick look at the architecture of modern systems.
+
+\begin{figure}
+\center{\includegraphics[scale=0.4]{41-port-together/figure1}}
+\caption{Architecure of a modern system}
+\label{figure1}
+\end{figure}
+
+Figure \ref{figure1} shows one typical system architecture. There is a CPU complex which interfaces using the frontside bus to the northbridge. The northbridge interfaces to the main memory subsystem, the PCI bus and the AGP. Most peripherals are directly or indirectly connected to the PCI bus. Exception is the graphics subsystem which has its own port the the northbridge, the AGP. This is due to the high bandwidth requirements of modern 3D programs. Another system architecture is shown in Figure \ref{figure2}. Here the main memory is connected directly to the CPU. The CPUs themselves are interconnected via Hypertransport, a relatively narrow but high speed interconnection technology. Peripherals are connected via PCI express. The PCI express lanes are connected to the system via a hypertransport PCI express bridge. PCI express is a link based interconnection technology using 1.2Gbit/s bidirectional lanes. Multiple lanes can be bundled together for increased bandwidth. In contrast to PCI, PCI express is not a bus. This offers advantages with regard to scalability, powermanagement and latency. It's interesting to see why modern interfaces move from parallel to serial. The main reason is performance. A parallel interface requires all the wires to be almost the same length. Put differently : the small differences in signal propagation times due to wirelength variations limit the clock speed of a parallel interface. However it became only recently possible to integrate the necessary electronics for serialization/deserialization on chips, which is why we didn't see this move earlier. We also saw a great increase in CPU clock frequency in the last years. Unfortunately I/O and memory interfaces did not follow this trend by the same amount. Bandwidth and latency did not improve by the same amount. This lead to the introduction of cache memories and burstmode transfers to hide the memory and I/O slowness.
+
+\begin{figure}
+\center{\includegraphics[scale=0.4]{41-port-together/figure2}}
+\caption{Another system architecture}
+\label{figure2}
+\end{figure}
+
+\section{C language portability pitfalls}
+The ANSI-C language standard defines a few rules with regard to types. Writing portable code means sticking to this rules and not assuming a particular size for a type, unless this is guaranteed by the standard.
+In general C programs should use int as much as possible for simple integer computations, loop variables etc. In case you need a specific size (to implement a file format or a binary communication protocol), the ISO C99 types are prefered. Some operations like basic arithmetic or shifts might be more expensive on these types though.
+Be aware of bitfields. They are particularly nasty because the ordering of the bitfields is architecture dependent. 
+Newer gcc versions tend to catch more portability problems such as signed versus unsigned types etc. It's worthwhile to compile your code using a recent gcc version with the -Wall option to catch this sort of problems.
+
+\section{Endianess}
+Endianess refers to the ordering of bytes in a multibyte 'object' like a 16,32 or 64 bit integer. There are basically 2 ways : little and big endian. Using little endian ordering, 0x12345678 will be represented as 0x78 0x56 0x34 0x12. In big endian ordering this would be 0x12 0x34 0x56 0x78. This is important any time programs interchange binary data. Examples are network protocols, file formats, ... The best way of coping with this is to have proper 'serializing' and 'deserializing' routines which handle conversion of the data between the internal and the external representation.
+
+\section{Alignment}
+Alignment means a multibyte 'object' starts at an address which is a multiple of its size. Some RISC CPUs do not handle unaligned accesses in hardware (unlike IA32 for example which does handle an unaligned access transparently for software). Most RISC CPUs which  do not handle unaligned accesses in hardware, will generate a trap when an unaligned access is detected. This trap is generally handled by the kernel, which will handle the access. This obviously has significant performance impact. There are RISC CPUs which do not generate a trap, but basically ignore the lower address bits in case of an unaligned access. ARM is probably the most notable example of this kind of CPUs. Modern ARMs can actually generate a trap, but this feature is disabled for compatibility with older ARM CPUs.
+Unaligned accesses are almost never atomic, even on CPUs which handle them in hardware. This is important when implementing RCU or other look free data exchange mechanisms.
+In general it's best to avoid unaligned accesses as much as possible. In some cases the compiler can generate the right code for an unaligned access, but in many cases (particularly when using typecasts in C), it can not. In that case it might be necessary to copy the data to an aligned buffer first.
+
+\section{Memory organization}
+Memory organization refers to the way the userland address space is generally used by executables. A few things to be aware of : stack ordering and variable number of arguments in C. Not all architectures have a downward growing stack as IA32 has. Most notable is PARISC.
+
+\section{Accessing peripherals}
+Even though accessing peripherals is generally done by the kernel in a Debian Linux system, some userland programs also access peripherals. Most notably are probably the XFree86 and X.org X11 servers. Other examples include cdrecord and gphoto. There are generally 2 ways of accessing peripherals in a system. Either by directly writing to registers or memory of the peripheral, or by exchanging messages with the peripheral via eg USB, 1394, SCSI, ATAPI,... In the latter case the kernel generally cares about the transport of the data between the CPU / memory and the peripheral. This means most of the platform specific details are taken care of. Directly accessing a peripheral however is problematic with regard to portability. Inside the kernel most portability issues are dealt with by using special macros/functions to access peripheral registers. These macros/functions are however not available for userland programs. In general this means the userland program has to provide these abstractions itself. 
+

Modified: procedings/all.dvi
===================================================================
(Binary files differ)

Modified: procedings/all.tex
===================================================================
--- procedings/all.tex	2006-04-10 22:44:49 UTC (rev 506)
+++ procedings/all.tex	2006-04-10 23:36:43 UTC (rev 507)
@@ -5,9 +5,12 @@
 \usepackage{scrpage}				% changing pagestyle
 \usepackage{tocloft}				% better table of contents
 
-\usepackage{fancybox}				% added for the 60-Security-Enhanced-Linux-UML-instances/paper.tex
-\usepackage[english]{varioref}			% added for the 60-Security-Enhanced-Linux-UML-instances/paper.tex
+\usepackage{fancybox}				% added for 60-Security-Enhanced-Linux-UML-instances/paper.tex
+\usepackage[english]{varioref}			% added for 60-Security-Enhanced-Linux-UML-instances/paper.tex
 
+\usepackage{graphicx}				% added for 41-port-together
+
+
 \begin{document}
 
 % Lets redefine the pagestyle a bit.
@@ -114,6 +117,16 @@
   \small{by Javier Fernandez-Sanguino}}
 \input{20-Weeding-out-security-bugs/paper}
 
+\chapter[Debian Installer internals]
+  {Debian Installer internals\\
+  \small{by Frans Pop}}
+%\input{32-debian-installer-internals/paper}
+
+\chapter[Let's port together. Debian fun for everyone]
+  {Let's port together. Debian fun for everyone\\
+  \small{by Peter De Schrijver and Steve Langasek}}
+\input{41-port-together/paper}
+
 \chapter[WTFM part 2: Avoiding Tears and Loss Of Hair]
   {WTFM part 2: Avoiding Tears and Loss Of Hair\\
   \small{by Lars Wirzenius}}




More information about the Debconf6-data-commit mailing list