diff --git a/bibliography.bib b/bibliography.bib index 4bd4517..b5f20c4 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -226,3 +226,13 @@ publisher = {ACM}, address = {New York, NY, USA}, } +@book{ieee_90, + author = {Electrical, Institute O. and (ieee), Electronics E.}, + citeulike-article-id = {485989}, + keywords = {bibtex-import}, + posted-at = {2006-01-30 15:35:50}, + priority = {2}, + title = {{IEEE 90: IEEE Standard Glossary of Software Engineering Terminology}}, + year = {1990} +} + diff --git a/graphics/netsplit2.dia b/graphics/netsplit2.dia new file mode 100644 index 0000000..6ce9297 Binary files /dev/null and b/graphics/netsplit2.dia differ diff --git a/graphics/netsplit2.eps b/graphics/netsplit2.eps new file mode 100644 index 0000000..16f530e --- /dev/null +++ b/graphics/netsplit2.eps @@ -0,0 +1,825 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: /Diagram1.dia +%%Creator: Dia v0.97.1 +%%CreationDate: Mon May 2 12:41:14 2011 +%%For: jeena +%%Orientation: Portrait +%%Magnification: 1.0000 +%%BoundingBox: 0 0 728 555 +%%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-Gothic-latin1 + /AvantGarde-Gothic 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 +/NewCenturySchlbk-Roman-latin1 + /NewCenturySchlbk-Roman findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchlbk-Italic-latin1 + /NewCenturySchlbk-Italic findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchlbk-Bold-latin1 + /NewCenturySchlbk-Bold findfont + dup length dict begin + {1 index /FID ne {def} {pop pop} ifelse} forall + /Encoding isolatin1encoding def + currentdict end +definefont pop +/NewCenturySchlbk-BoldItalic-latin1 + /NewCenturySchlbk-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 +-2.735000 -22.768412 translate +%%EndProlog + + +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 3.522500 9.042500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 3.522500 9.042500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 3.522500 9.042500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 7.328571 6.950000 m 8.421429 6.950000 l 9.150000 7.950000 l 8.421429 8.950000 l 7.328571 8.950000 l 6.600000 7.950000 l ef +0.000000 0.000000 0.000000 srgb +n 7.328571 6.950000 m 8.421429 6.950000 l 9.150000 7.950000 l 8.421429 8.950000 l 7.328571 8.950000 l 6.600000 7.950000 l cp s +0 slc +0 slj +[] 0 sd +n 7.328571 6.950000 m 8.421429 6.950000 l 9.150000 7.950000 l 8.421429 8.950000 l 7.328571 8.950000 l 6.600000 7.950000 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 4.474047 8.704705 m 6.389277 8.024806 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 4.756241 8.339242 m 4.368685 8.742108 l 4.923511 8.810432 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 6.107083 8.390269 m 6.494639 7.987403 l 5.939813 7.919078 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 9.622500 4.142500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 9.622500 4.142500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 9.622500 4.142500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 7.407500 11.697500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 7.407500 11.697500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 7.407500 11.697500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 9.224752 5.072235 m 8.509379 6.744416 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 9.301913 5.527474 m 9.268727 4.969443 l 8.842214 5.330811 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 8.432217 6.289177 m 8.465404 6.847208 l 8.891917 6.485840 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 7.757459 10.749197 m 8.344013 9.159778 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 7.657319 10.298455 m 7.718751 10.854086 l 8.126397 10.471562 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 8.444153 9.610520 m 8.382721 9.054889 l 7.975075 9.437413 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 22.487500 3.992500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 22.487500 3.992500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 22.487500 3.992500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 21.243571 7.250000 m 22.336429 7.250000 l 23.065000 8.250000 l 22.336429 9.250000 l 21.243571 9.250000 l 20.515000 8.250000 l ef +0.000000 0.000000 0.000000 srgb +n 21.243571 7.250000 m 22.336429 7.250000 l 23.065000 8.250000 l 22.336429 9.250000 l 21.243571 9.250000 l 20.515000 8.250000 l cp s +0 slc +0 slj +[] 0 sd +n 21.243571 7.250000 m 22.336429 7.250000 l 23.065000 8.250000 l 22.336429 9.250000 l 21.243571 9.250000 l 20.515000 8.250000 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 22.126814 4.937036 m 21.323341 7.041106 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 22.221879 5.388875 m 22.166699 4.832589 l 21.754778 5.210505 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 21.228276 6.589266 m 21.283456 7.145553 l 21.695377 6.767636 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 26.187500 8.892500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 26.187500 8.892500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 26.187500 8.892500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 18.472500 5.347500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 18.472500 5.347500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 18.472500 5.347500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 25.198529 8.689005 m 23.284018 8.295066 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 24.767913 8.855637 m 25.308038 8.711538 l 24.868684 8.365897 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 23.714635 8.128434 m 23.174509 8.272533 l 23.613864 8.618174 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 19.054214 6.174147 m 20.386316 8.067133 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 19.482071 6.347743 m 18.989872 6.082713 l 19.073167 6.635490 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 19.958460 7.893537 m 20.450658 8.158566 l 20.367363 7.605790 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 6.022500 14.397500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 6.022500 14.397500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 6.022500 14.397500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 9.078571 15.355000 m 10.171429 15.355000 l 10.900000 16.355000 l 10.171429 17.355000 l 9.078571 17.355000 l 8.350000 16.355000 l ef +0.000000 0.000000 0.000000 srgb +n 9.078571 15.355000 m 10.171429 15.355000 l 10.900000 16.355000 l 10.171429 17.355000 l 9.078571 17.355000 l 8.350000 16.355000 l cp s +0 slc +0 slj +[] 0 sd +n 9.078571 15.355000 m 10.171429 15.355000 l 10.900000 16.355000 l 10.171429 17.355000 l 9.078571 17.355000 l 8.350000 16.355000 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 6.981990 14.698119 m 8.865193 15.288146 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 7.427175 14.575617 m 6.875301 14.664692 l 7.277685 15.052746 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 8.420007 15.410648 m 8.971882 15.321573 l 8.569497 14.933518 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 12.272500 18.997500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 12.272500 18.997500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 12.272500 18.997500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 6.507500 18.952500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 6.507500 18.952500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 6.507500 18.952500 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 11.476170 18.374974 m 10.347594 17.492716 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 11.016363 18.332848 m 11.564252 18.443832 l 11.324306 17.938930 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 10.807400 17.534842 m 10.259511 17.423858 l 10.499458 17.928760 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 7.365934 18.419124 m 8.888641 17.473011 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 7.563726 18.001901 m 7.270969 18.478129 l 7.827606 18.426598 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 8.690849 17.890233 m 8.983606 17.414005 l 8.426969 17.465536 l s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 9.415336 7.433085 m 14.003374 5.662864 16.807532 12.402189 20.622968 9.308768 c s +[] 0 sd +0 slj +0 slc +n 9.065475 7.568073 m 9.441965 7.154847 l 9.415336 7.433085 l 9.621949 7.621330 l ef +n 9.065475 7.568073 m 9.441965 7.154847 l 9.415336 7.433085 l 9.621949 7.621330 l cp s +[] 0 sd +0 slj +0 slc +n 20.914258 9.072600 m 20.683316 9.581684 l 20.622968 9.308768 l 20.368426 9.193297 l ef +n 20.914258 9.072600 m 20.683316 9.581684 l 20.622968 9.308768 l 20.368426 9.193297 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 15.800000 14.318412 m 14.050000 15.418412 12.883553 13.107875 10.779296 15.289536 c s +[] 0 sd +0 slj +0 slc +n 10.518962 15.559446 m 10.686134 15.026011 l 10.779296 15.289536 l 11.046014 15.373122 l ef +n 10.518962 15.559446 m 10.686134 15.026011 l 10.779296 15.289536 l 11.046014 15.373122 l cp s +/Helvetica-latin1 ff 0.560000 scf sf +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 20.175435 15.155000 m 21.268292 15.155000 l 21.996863 16.155000 l 21.268292 17.155000 l 20.175435 17.155000 l 19.446863 16.155000 l ef +0.000000 0.000000 0.000000 srgb +n 20.175435 15.155000 m 21.268292 15.155000 l 21.996863 16.155000 l 21.268292 17.155000 l 20.175435 17.155000 l 19.446863 16.155000 l cp s +0 slc +0 slj +[] 0 sd +n 20.175435 15.155000 m 21.268292 15.155000 l 21.996863 16.155000 l 21.268292 17.155000 l 20.175435 17.155000 l 19.446863 16.155000 l cp s +(GGS node) 22.500000 16.150000 m + gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 20.722500 18.542500 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 20.722500 18.542500 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 20.722500 18.542500 0.737500 0.737500 0 360 ellipse cp s +(Game client) 22.500000 18.550000 m + gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 19.923607 20.450000 m 21.626393 20.450000 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 20.311803 20.200000 m 19.811803 20.450000 l 20.311803 20.700000 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 21.238197 20.700000 m 21.738197 20.450000 l 21.238197 20.200000 l s +(Network) 22.550000 20.450000 m + gs 1 -1 sc sh gr +0.100000 slw +[] 0 sd +[] 0 sd +0 slj +0 slc +n 18.250000 12.968412 m 19.750000 11.318412 22.957850 12.523043 22.251663 9.771606 c s +[] 0 sd +0 slj +0 slc +n 22.158437 9.408379 m 22.524890 9.830531 l 22.251663 9.771606 l 22.040587 9.954832 l ef +n 22.158437 9.408379 m 22.524890 9.830531 l 22.251663 9.771606 l 22.040587 9.954832 l cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +0 slj +0.100000 slw +0 slc +0 slj +[] 0 sd +1.000000 1.000000 1.000000 srgb +n 5.906257 4.286098 0.737500 0.737500 0 360 ellipse f +0.000000 0.000000 0.000000 srgb +n 5.906257 4.286098 0.737500 0.737500 0 360 ellipse cp s +0 slc +0 slj +[] 0 sd +n 5.906257 4.286098 0.737500 0.737500 0 360 ellipse cp s +0.100000 slw +[] 0 sd +[] 0 sd +0 slc +n 6.382605 5.178267 m 7.223254 6.752748 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 6.785977 5.402961 m 6.329947 5.079641 l 6.344908 5.638457 l s +0.100000 slw +[] 0 sd +0 slj +0 slc +n 6.819883 6.528053 m 7.275913 6.851374 l 7.260951 6.292557 l s +0.080000 slw +0 slj +[] 0 sd +n 17.800000 14.868412 m 17.260000 13.923412 l 16.877973 14.141713 l 16.600000 12.768412 l 17.140000 13.713412 l 17.522027 13.495111 l ef +n 17.800000 14.868412 m 17.260000 13.923412 l 16.877973 14.141713 l 16.600000 12.768412 l 17.140000 13.713412 l 17.522027 13.495111 l cp s +0.080000 slw +0 slj +[] 0 sd +n 21.350000 22.768412 m 20.893250 22.095662 l 20.529221 22.342812 l 20.335000 21.273412 l 20.791750 21.946162 l 21.155779 21.699012 l ef +n 21.350000 22.768412 m 20.893250 22.095662 l 20.529221 22.342812 l 20.335000 21.273412 l 20.791750 21.946162 l 21.155779 21.699012 l cp s +(Demaged network) 22.500000 21.968412 m + gs 1 -1 sc sh gr +showpage diff --git a/graphics/netsplit2.pdf b/graphics/netsplit2.pdf new file mode 100644 index 0000000..2e769c5 Binary files /dev/null and b/graphics/netsplit2.pdf differ diff --git a/graphics/networksplit2.pdf b/graphics/networksplit2.pdf new file mode 100644 index 0000000..231388f Binary files /dev/null and b/graphics/networksplit2.pdf differ diff --git a/report.lyx b/report.lyx index 0c93522..561e817 100644 --- a/report.lyx +++ b/report.lyx @@ -81,6 +81,12 @@ morestring=[b]', morestring=[b]" } + +\usepackage{float} + +\floatstyle{ruled} +\newfloat{code}{thp}{lop} +\floatname{code}{Code} \end_preamble \use_default_options true \maintain_unincluded_children false @@ -2576,16 +2582,20 @@ Site A Site B \emph default by a faulty network (illustrated by the cloud and lightening bolt). - When + When \emph on -Site A + \emph default - and +the decoupled node \emph on -Site B + \emph default - later re-establish communications, they may have generated the same ID:s - if using algorithm +and +\emph on + +\emph default +the rest of the network later re-establish communication, they may have + generated the same ID:s if using algorithm \begin_inset CommandInset ref LatexCommand ref reference "alg:A-simple-generator" @@ -2600,7 +2610,7 @@ reference "alg:A-simple-generator" \begin_inset Float figure wide false sideways false -status collapsed +status open \begin_layout Plain Layout \begin_inset ERT @@ -2620,7 +2630,7 @@ begin{centering} \begin_layout Plain Layout \begin_inset Graphics - filename graphics/NetworkSPlit.eps + filename graphics/netsplit2.eps scale 40 \end_inset @@ -3639,6 +3649,236 @@ name "sub:The-structure-of" \end_inset +\end_layout + +\begin_layout Standard +The GGS protocol is modelled after the HTTP protocol. + The main reason for this is the familiarity many developers already have + with HTTP due to its presence in internet software. + Each GGS protocol packet contains a headers section. + The headers section is followed by a data section. + In the headers section, parameters concerning the packet is placed. + In the data section, the actual data payload of the packet is placed. +\end_layout + +\begin_layout Standard +There is no requirement of any specific order of the parameters in the headers + section, however the data section must always follow directly after the + headers section. +\end_layout + +\begin_layout Standard +In the example below, line 1 contains a Game-Command parameter. + This parameter is used to determine which game-specific command the client + is trying to perform. + The handling of this parameter is specific to each game, and can be anything. +\end_layout + +\begin_layout Standard +Line 2 specifies a game token. + This is a UUID which is generated for each client upon authentication with + the GGS. + The GGS uses this token in case a client is disconnected and the new connection + created when the client reconnects must be re-paired with the player object + inside the GGS. + The UUID is also used as a unique ID within GDL VMs. +\end_layout + +\begin_layout Standard +Line 3 specifies the content type of the payload of this particular packet. + This parameter allows the GGS to invoke special parsers, should the data + be encoded or encrypted. + When encryption is employed, only the payload is encrypted, not the header + section. + This is a scheme which does not allow for strong encryption, but is deemed + feasible for gaming purposes. +\end_layout + +\begin_layout Standard +Line 4 specifies the content length of the payload following immediately + after the headers section. +\end_layout + +\begin_layout Standard +The parser of the GGS protocol implemented in the GGS prototype is designed + as a finite state machine using the gen_fsm behaviour. + When a full message has been parsed by the parser, the message is converted + into the internal structure of the GGS messages, and sent in to the system + from the protocol paser using message passing. +\end_layout + +\begin_layout Standard +\begin_inset Note Note +status open + +\begin_layout Plain Layout +Packet below is not an algorithm, but I don't know how to change that label.. +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset Float algorithm +wide false +sideways false +status open + +\begin_layout Plain Layout +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +lstset{ +\end_layout + +\begin_layout Plain Layout + +backgroundcolor= +\backslash +color{white}, +\end_layout + +\begin_layout Plain Layout + +extendedchars=true, +\end_layout + +\begin_layout Plain Layout + +basicstyle= +\backslash +footnotesize +\backslash +ttfamily, +\end_layout + +\begin_layout Plain Layout + +showstringspaces=false, +\end_layout + +\begin_layout Plain Layout + +showspaces=false, +\end_layout + +\begin_layout Plain Layout + +numbers=left, +\end_layout + +\begin_layout Plain Layout + +numberstyle= +\backslash +footnotesize, +\end_layout + +\begin_layout Plain Layout + +numbersep=9pt, +\end_layout + +\begin_layout Plain Layout + +tabsize=2, +\end_layout + +\begin_layout Plain Layout + +breaklines=true, +\end_layout + +\begin_layout Plain Layout + +showtabs=false, +\end_layout + +\begin_layout Plain Layout + +captionpos=b +\end_layout + +\begin_layout Plain Layout + +} +\end_layout + +\begin_layout Plain Layout + + +\backslash +begin{lstlisting} +\end_layout + +\begin_layout Plain Layout + +Game-Command: chat +\end_layout + +\begin_layout Plain Layout + +Token: e30174d4-185e-493b-a21a-832e2d9d7a1a +\end_layout + +\begin_layout Plain Layout + +Content-Type: text +\end_layout + +\begin_layout Plain Layout + +Content-Length: 18 +\end_layout + +\begin_layout Plain Layout + +\end_layout + +\begin_layout Plain Layout + +Hello world, guys! +\end_layout + +\begin_layout Plain Layout + + +\backslash +end{lstlisting} +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Plain Layout +\begin_inset Caption + +\begin_layout Plain Layout +\begin_inset CommandInset label +LatexCommand label +name "alg:A-sample-packet" + +\end_inset + +A sample packet sent from a client to the GGS during a chat session +\end_layout + +\end_inset + + +\end_layout + +\end_inset + + \end_layout \begin_layout Standard @@ -3666,10 +3906,94 @@ name "sub:The-coordinator-module" \end_layout +\begin_layout Standard +The coordinator module is responsible for keeping track of all players, + their seats and tables. + Players register with the coordinator process when first connecting to + the server, and the coordinator places each player by their respective + table. +\end_layout + +\begin_layout Standard +The coordinator keeps mappings between each player and table, therefore + it is used to perform lookups on tables and players to find out which are + connected. + The connectivity of players and tables is important when sending messages + to all participants in a game. + A lookup in the coordinator process is performed prior to notifying all + players in a game to ensure the message reaches all players. + The lookup can be performed either using internal identification codes + or using the UUID associated with each client and table. +\end_layout + +\begin_layout Standard +The coordinator process contains important state, therefore a backup process + is kept at allt times. + All good data processed by the coordinator is stored for safekeeping in + the backup process as well. + Data which is potentisally harmful is not stored in the backup process. +\end_layout + +\begin_layout Standard +Upon a crash, the coordinator process recovers the prior good state from + the backup process and continues where it left off. + A supervisor process monitors the coordinator process and restarts the + process when it malfunctions. + There is a window of time between the crash of the coordinator and the + restarting of the coordinator, during this time, players can not be seated + by new tables, and can not disconnect from the server. + This window of time is very small, and the unavailability of the coordinator + process should not be noticed by more than a short time lag for the clients. +\end_layout + +\begin_layout Standard +Moving back to the example of the chess club, the coordinator process can + be seen as a judge, monitoring all moves of the players. + At the same time as acting as a judge, the coordinator process is also + a host in the chess club, seating players by their tables and offering + services to the players. +\end_layout + \begin_layout Subsection The table module \end_layout +\begin_layout Standard +The table module is mostly a hub used for communication. + New table processes are created by the coordinator on demand. + The table module does not contain any business logic, however each process + contains information concerning which players are seated by that particular + table. +\end_layout + +\begin_layout Standard +The information about which players are seated by each table is used when + notifying all players by a table of an action. + Consider a game of chess, each player notifies the table of its actions, + the table then notifies the rest of the participants of these actions after + having had the actions processed by the game VM, where an action could + be moving a playing piece. +\end_layout + +\begin_layout Standard +Each table is associated with a game VM. + The actions sent to a table are processed by the game VM, this is where + the game logic is implemented. +\end_layout + +\begin_layout Standard +After a crash in a table process, the entire table must be rebuilt and the + players must be re-associated with the table. + Data concerning players is kept in the coordinator process, and is restored + from there. + Data kept in the actual game is not automatically corrupted by the crash + in a table, however the table must be re-associated with the game VM is + was associated with prior to the crash of the table. + The table process maps well into the setting of the real-worl chess clib + scenario previously discussed. + A table works in the same way in a real world setting as in the GGS setting. +\end_layout + \begin_layout Subsection The game virtual machine module \end_layout @@ -3691,13 +4015,27 @@ Techniques for ensuring reliability \begin_layout Standard One of the main goals of the project is to achieve high reliability. - A highly reliable application is one that crashes very, very rarely -\begin_inset Note Note -status open + The term +\begin_inset Quotes eld +\end_inset -\begin_layout Plain Layout -CITATION NEEDED -\end_layout +reliable system +\begin_inset Quotes erd +\end_inset + + is defined by the IEEE as a system with +\begin_inset Quotes eld +\end_inset + +the ability of a system or component to perform its required functions under + stated conditions for a specified period of time +\begin_inset Quotes erd +\end_inset + + +\begin_inset CommandInset citation +LatexCommand citet +key "ieee_90" \end_inset @@ -3760,9 +4098,16 @@ This entire section is bad. \begin_layout Standard By linking processes together and notifying parents when children exit, - we can create supervisors. + supervisors are created. A supervisor is a common approach in ensuring that an application functions - in the way it was intended. + in the way it was intended +\begin_inset CommandInset citation +LatexCommand citet +key "Savor:1997:HSA:851010.856089" + +\end_inset + +. When a process misbehaves, the supervisor takes some action to restore the process to a functional state.