/sharkdoc/trunk/changes.txt |
---|
File deleted |
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/common/biblio.bib |
=================================================================== |
--- trunk/common/biblio.bib (revision 1677) |
+++ trunk/common/biblio.bib (nonexistent) |
@@ -1,64 +0,0 @@ |
-@inproceedings{Abe98, |
- author = {L. Abeni and G. Lipari and G. Buttazzo}, |
- title = {Integrating Multimedia Applications in Hard Real-Time Systems}, |
- booktitle = {In IEEE Proc. of the Real-Time System Symposium 98 Real-Time System}, |
- year = {1998}, |
- month = {December}, |
-} |
- |
-@book{But97, |
- author = {G. Buttazzo}, |
- title = {Hard Real-Time Computing Systems: Predictable Scheduling Algorithms and Applications}, |
- publisher = {Kluwer Academic Publishers}, |
- year = {1997}, |
- address = {Boston}, |
-} |
- |
-@inproceedings{Cla89, |
- author = {D. Clark}, |
- title = {Hic: An Operating System for hierarchies of servo loops}, |
- booktitle = {Proc. Of IEEE International Conference on Robotics and Automation}, |
- year = {1989} |
-} |
- |
-@inproceedings{Gai01, |
- author = {Paolo Gai and Luca Abeni and Massimiliano Giorgi and Giorgio Buttazzo}, |
- title = {A New Kernel Approach for Modular Real-Time systems Development}, |
- booktitle = {Proceedings of the 13th IEEE Euromicro Conference on Real-Time Systems}, |
- month = {June}, |
- year = {2001}, |
- pages = {199-206}, |
- address = {Delft, The Netherlands} |
-} |
- |
-@inproceedings{Fac05, |
- author = {Tullio Facchinetti and Giorgio Buttazzo and Mauro Marinoni and Giacomo Guidi}, |
- title = {Non-Preemptive Interrupt Scheduling for Safe Reuse of Legacy Drivers in Real-Time Systems}, |
- booktitle = {ECRTS '05: Proceedings of the 17th Euromicro Conference on Real-Time Systems (ECRTS'05)}, |
- year = {2005}, |
- isbn = {0-7695-2400-1}, |
- pages = {98--105}, |
- doi = {http://dx.doi.org/10.1109/ECRTS.2005.21}, |
- publisher = {IEEE Computer Society}, |
- address = {Washington, DC, USA}, |
-} |
- |
-@article{Lip03, |
- author = {Giuseppe Lipari and Enrico Bini}, |
- title = {Resource Partitioning among Real-Time Applications}, |
- booktitle = {Proceedings of the 15th Euromicro Conference on Real-Time Systems}, |
- location = {Porto, Portugal}, |
- month = {July}, |
- year = {2003} |
-} |
- |
-@article{Liu73, |
- author = {C.L. Liu and J.W. Layland}, |
- title = {Scheduling algoritms for multiprogramming in a hard real-time environment}, |
- journal = {Journal of ACM}, |
- year = {1973}, |
- volume = {20}, |
- number = {1}, |
- month = {January}, |
-} |
- |
/trunk/common/biblio.bib |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/common/sssup.ps |
=================================================================== |
--- trunk/common/sssup.ps (revision 1677) |
+++ trunk/common/sssup.ps (nonexistent) |
@@ -1,1877 +0,0 @@ |
-%!PS-Adobe-2.0 EPSF-2.0 |
-%%Title: /home/dad/doc/sssup.ps |
-%%Creator: XV Version 3.10a Rev: 12/29/94 - by John Bradley |
-%%BoundingBox: 13 684 153 832 |
-%%Pages: 1 |
-%%DocumentFonts: |
-%%EndComments |
-%%EndProlog |
- |
-%%Page: 1 1 |
- |
-% remember original state |
-/origstate save def |
- |
-% build a temporary dictionary |
-20 dict begin |
- |
-% define string to hold a scanline's worth of data |
-/pix 420 string def |
- |
-% define space for color conversions |
-/grays 140 string def % space for gray scale line |
-/npixls 0 def |
-/rgbindx 0 def |
- |
-% lower left corner |
-13 684 translate |
- |
-% size of image (on paper, in 1/72inch coords) |
-139.96800 148.03200 scale |
- |
-% define 'colorimage' if it isn't defined |
-% ('colortogray' and 'mergeprocs' come from xwd2ps |
-% via xgrab) |
-/colorimage where % do we know about 'colorimage'? |
- { pop } % yes: pop off the 'dict' returned |
- { % no: define one |
- /colortogray { % define an RGB->I function |
- /rgbdata exch store % call input 'rgbdata' |
- rgbdata length 3 idiv |
- /npixls exch store |
- /rgbindx 0 store |
- 0 1 npixls 1 sub { |
- grays exch |
- rgbdata rgbindx get 20 mul % Red |
- rgbdata rgbindx 1 add get 32 mul % Green |
- rgbdata rgbindx 2 add get 12 mul % Blue |
- add add 64 idiv % I = .5G + .31R + .18B |
- put |
- /rgbindx rgbindx 3 add store |
- } for |
- grays 0 npixls getinterval |
- } bind def |
- |
- % Utility procedure for colorimage operator. |
- % This procedure takes two procedures off the |
- % stack and merges them into a single procedure. |
- |
- /mergeprocs { % def |
- 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 |
- |
- /colorimage { % def |
- pop pop % remove 'false 3' operands |
- {colortogray} mergeprocs |
- image |
- } bind def |
- } ifelse % end of 'false' case |
- |
- |
- |
-140 148 8 % dimensions of data |
-[140 0 0 -148 0 148] % mapping matrix |
-{currentfile pix readhexstring pop} |
-false 3 colorimage |
- |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffcfcfcfffffffcfcfcfafafafffffff8f8f8fcfcfcffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffedededf7f7f7fffffffffffffffffffafafafcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffdfdfdfffffffdfdfdefefeffffffffffffffdfdfd |
-fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff3f3f3fafafafffffffffffffffffffffffffffffffcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffeeeeeefffffffffffff6f6f6f7f7f7ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff2f2f2fffffffcfcfcf7f7f7fcfcfcf6f6f6fdfdfdffffff |
-fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffe8e8e8fffffffffffff9f9f9fffffffffffffcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff0f0f00c0c0c0000000303030000000d0d0d000000070707 |
-000000000000000000000000000000000000000000000000ffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffcfcfcfffffffffffffffffffffffffafafaffffff |
-fefefefffffff5f5f5fffffffafafaf8f8f8fffffffbfbfbfffffffbfbfbf6f6f6000000 |
-0f0f0f000000010101030303040404000000030303fffffff1f1f1fefefeffffffffffff |
-fdfdfdfafafafffffffffffff7f7f7ffffff000000010101070707000000070707000000 |
-000000000000fffffffbfbfbfffffffdfdfdecececfffffffdfdfdf7f7f7fffffff1f1f1 |
-f9f9f9fffffff8f8f8fafafafffffffdfdfdfbfbfbfdfdfdfffffff3f3f3ffffffffffff |
-fbfbfbfffffffffffff4f4f4ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff9f9f9fffffff2f2f2fcfcfcfffffff6f6f6ffffffffffff |
-fdfdfdfffffff2f2f2ffffffffffffffffff0000000000000000001e1e1e000000ededed |
-fffffffdfdfdfcfcfcfcfcfcfffffff5f5f5fefefefffffffffffffffffffffffffefefe |
-fffffffffffff2f2f2fafafafffffff2f2f2fffffffffffff6f6f6fffffff5f5f5ffffff |
-fbfbfbffffff000000000000000000070707fffffffdfdfdfffffffbfbfbefefefffffff |
-fffffff9f9f9f4f4f4fffffffffffffffffffffffffffffffdfdfdfffffffffffffafafa |
-f6f6f6f9f9f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffff8f8f8 |
-ffffffecececfffffff3f3f30000000d0d0d0000000d0d0df3f3f3ffffffffffffffffff |
-f7f7f7fdfdfdfffffffffffffcfcfcfffffffffffff7f7f7fafafaffffffecececfbfbfb |
-f7f7f7fffffffffffff6f6f6f6f6f6fffffffffffff5f5f5fafafafffffff3f3f3fcfcfc |
-fffffff5f5f5edededffffffffffff020202000000000000000000fbfbfbfffffff8f8f8 |
-fffffff1f1f1fffffff7f7f7f0f0f0f8f8f8fffffff8f8f8f0f0f0fffffff2f2f2ffffff |
-fffffffafafafbfbfbffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff4f4f4fffffff8f8f8fffffff1f1f1ffffffffffffffffff |
-030303000000000000f9f9f9ffffffecececfffffff6f6f6ffffffedededffffffffffff |
-fdfdfdfefefefcfcfce7e7e7f8f8f80f0f0f000000f5f5f5ffffff000000ffffffffffff |
-fefefefffffff8f8f8fffffffefefeffffffecececffffff0d0d0d0000000c0c0cf9f9f9 |
-fbfbfbffffffffffffe8e8e8f8f8f8fffffffbfbfbffffffffffff050505010101000000 |
-f9f9f9fffffff4f4f4fffffffffffffffffff5f5f5fffffffffffffffffffbfbfbfdfdfd |
-fffffffcfcfcfcfcfcffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffcfcfcfffffff4f4f4fffffffefefe000000000000 |
-000000ffffffffffffffffffecececfffffffffffffffffff9f9f90d0d0df9f9f9ffffff |
-000000060606020202ffffff000000f0f0f0fffffffffffff2f2f2000000fffffffdfdfd |
-ffffff000000fbfbfbfdfdfdf4f4f4f3f3f3fffffff8f8f8f7f7f7f7f7f70000000f0f0f |
-000000fffffffbfbfbffffffffffffe4e4e4fffffff9f9f9fbfbfbfdfdfdffffffffffff |
-0808080000000a0a0afffffff2f2f2ffffffefefeffdfdfdf9f9f9f5f5f5fffffffbfbfb |
-ebebebfffffffffffffbfbfbffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff0f0f0fffffff8f8f8f0f0f0090909000000f4f4f4ffffff |
-fffffff6f6f6f9f9f9fdfdfdffffffffffff000000000000000000fafafafffffff9f9f9 |
-050505f8f8f8000000000000000000fffffffefefee7e7e7ffffff101010f5f5f5f7f7f7 |
-fbfbfb040404fffffffffffff5f5f5fffffff6f6f6fdfdfdfcfcfcffffff000000f3f3f3 |
-ffffffe0e0e0161616fafafaf6f6f6ffffffffffffefefeffffffffffffff6f6f6f8f8f8 |
-fffffffdfdfdeeeeee000000000000fffffffefefefffffffffffff3f3f3ffffffffffff |
-fffffffffffffefefef8f8f8ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffefefef0b0b0b0b0b0bfafafafffffffffffff3f3f3 |
-f3f3f3fffffffdfdfd000000ffffffffffff000000ffffff030303fcfcfcfffffffefefe |
-010101fffffff6f6f60d0d0df8f8f8121212000000ffffffeeeeee000000ebebebffffff |
-020202000000ecececeaeaeafffffffffffff7f7f7fffffffcfcfc000000ffffffffffff |
-f3f3f3ffffff010101f8f8f8fefefef8f8f80000000000000d0d0df8f8f8fbfbfbffffff |
-f4f4f4ffffffffffffffffffffffff0000000f0f0ff8f8f8f1f1f1fffffffbfbfbffffff |
-ffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffff000000040404fcfcfcf5f5f5fffffff8f8f8ffffffffffff |
-ffffff000000fafafa0f0f0ff2f2f2fffffffffffffcfcfc000000fffffff8f8f8ffffff |
-f7f7f7f4f4f40b0b0bf7f7f7ffffffffffff000000060606ffffff000000fffffffdfdfd |
-040404fcfcfc0e0e0efffffff5f5f5fffffffffffff9f9f9f6f6f60d0d0df6f6f6fdfdfd |
-ffffffffffff000000fffffffbfbfbffffff000000fefefe000000fdfdfdfffffff4f4f4 |
-fffffff4f4f4fffffffcfcfcfafafafffffffdfdfd0000000d0d0df1f1f1fffffffafafa |
-fffffff0f0f0fffffff6f6f6ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffff2f2f2fffffffffffffefefef7f7f7fffffffefefefffffffafafafcfcfcf6f6f6 |
-ffffffffffff000000000000f7f7f7fffffff1f1f1f9f9f9fffffffffffff7f7f7080808 |
-f7f7f70d0d0df5f5f5ffffff121212f9f9f9030303f5f5f5000000191919010101eeeeee |
-ffffff000000000000fffffffdfdfdffffffffffff000000fefefe000000fefefefefefe |
-ffffff000000060606fafafafcfcfcfffffffffffff8f8f8ffffff000000fffffff8f8f8 |
-fffffff0f0f0131313f7f7f7f6f6f6fffffff9f9f9fdfdfd000000fefefefbfbfb070707 |
-000000fffffff6f6f6f9f9f9fefefefffffffcfcfcf9f9f90f0f0f000000ffffffffffff |
-f8f8f8fffffff7f7f7f9f9f9fffffff6f6f6fffffff8f8f8fffffffbfbfbf8f8f8ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-f6f6f6fffffffbfbfbe5e5e5fffffffffffff5f5f5fffffffffffffafafafffffffafafa |
-000000000000eeeeeeffffffffffffffffffffffff0b0b0b000000fffffffffffff3f3f3 |
-fefefefcfcfc000000ffffffececec060606fbfbfbffffff060606f1f1f1f9f9f9ffffff |
-e6e6e60e0e0effffff030303fffffff3f3f3fffffff9f9f9ffffff0b0b0bfefefefdfdfd |
-fcfcfc070707000000ffffff000000070707e7e7e7ffffffffffff090909f8f8f8ffffff |
-000000000000010101fdfdfdffffff000000020202000000101010ffffffffffff000000 |
-fffffff3f3f3fffffffffffffafafafffffffffffffffffff8f8f8ffffff000000020202 |
-000000f2f2f2ffffffffffffffffffeeeeeefffffffffffffafafaf3f3f3fffffff6f6f6 |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffafafaf1f1f1fffffffdfdfdf2f2f2fffffffffffffdfdfdfefefefafafa111111 |
-000000fffffffffffff3f3f3fffffff6f6f6000000ffffff000000060606fbfbfbffffff |
-0a0a0affffff080808ffffffffffff000000fffffff1f1f1ffffff101010fffffff9f9f9 |
-ffffff000000f1f1f1000000ffffff000000ffffff060606dcdcdc0e0e0ef4f4f4ffffff |
-000000010101010101000000080808000000ffffffecececffffff000000fbfbfbfafafa |
-ffffff000000000000fffffffafafa0303030c0c0c000000f0f0f0ffffffffffff050505 |
-fffffffffffffcfcfcffffffffffff000000f7f7f7fffffffffffffafafafffffff6f6f6 |
-0d0d0d000000fdfdfdfefefefdfdfdfdfdfdfffffff6f6f6fefefeffffffefefefffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffebebebfffffffafafafcfcfcfdfdfdf4f4f4fefefeffffffffffff000000ffffff |
-ffffffefefeffafafa010101fefefeffffffffffff000000fdfdfd000000121212000000 |
-000000ffffff000000f9f9f9ffffffececec060606fffffffcfcfc000000fffffffcfcfc |
-ffffff030303fbfbfbffffff000000ffffff000000fcfcfcffffff000000000000070707 |
-020202000000010101030303111111000000f7f7f7ffffff000000070707ffffffffffff |
-ffffffffffff000000fdfdfdfdfdfd090909000000ffffffffffffefefef010101f9f9f9 |
-f0f0f0fffffff8f8f8f4f4f4080808ffffff030303efefeffafafafcfcfcfdfdfdffffff |
-fefefe050505000000f6f6f6fffffff0f0f0fffffff1f1f1ffffffffffffefefefffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffefefefefefef7f7f7ffffffffffffffffff000000000000fffffff9f9f9 |
-ffffffffffffffffff000000010101f4f4f4f1f1f1fffffffdfdfd000000ffffff010101 |
-0d0d0d000000ffffff000000ffffffffffff000000fefefeffffff060606060606000000 |
-f1f1f1060606fffffffffffffafafaf9f9f9fffffff0f0f00606060909090a0a0a000000 |
-000000ffffff030303000000f1f1f1020202ffffff000000000000fdfdfdf6f6f6f6f6f6 |
-fafafaffffff080808ffffff010101f9f9f9070707fffffff4f4f4f9f9f9171717ffffff |
-101010000000fcfcfc080808000000fffffffafafafffffffffffff3f3f3fafafaffffff |
-edededfffffff5f5f5080808efefeffffffffffffffffffffdfdfdfdfdfdffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fbfbfbfffffff6f6f6f7f7f7fffffffafafaf3f3f30000000a0a0afffffffcfcfcffffff |
-f5f5f5f6f6f6ffffffffffff000000fffffffffffffbfbfb030303ffffffebebebffffff |
-000000000000ffffff000000f3f3f3fffffffffffff9f9f9f8f8f8ecececffffffffffff |
-ffffffe8e8e8fffffff6f6f6fffffffdfdfdffffffffffff0000000000000000000b0b0b |
-fcfcfcfafafa000000ffffff0000000404040b0b0b000000000000ffffffffffffffffff |
-fffffffbfbfbeaeaeaffffff060606ebebeb0b0b0b000000ffffff010101fafafaf3f3f3 |
-000000000000ffffff000000000000ecececfffffff8f8f8fffffffffffff9f9f9ffffff |
-fffffffffffff9f9f9ffffff0b0b0b000000fcfcfcf5f5f5f3f3f3ffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fcfcfcffffffffffffebebebfffffff7f7f7050505fffffff1f1f1f8f8f8fffffffefefe |
-fffffffefefefffffffafafaf9f9f9151515f4f4f4f6f6f6fffffff4f4f4000000ffffff |
-ffffff0000000000000000000c0c0cfdfdfdf7f7f7fefefefffffffbfbfbf8f8f8ffffff |
-fbfbfbfffffffffffffffffff1f1f1ffffffffffff0000000d0d0d080808000000ffffff |
-ffffff000000030303ffffffffffff000000000000090909000000000000fffffffcfcfc |
-e5e5e5f8f8f8fffffffcfcfcf9f9f9ffffffffffff000000ffffff000000f9f9f9ffffff |
-fffffff9f9f9000000ffffff0000000d0d0dfffffffafafaf3f3f3ffffff000000000000 |
-fffffff9f9f9fffffff9f9f9fafafa000000070707ffffffffffffeeeeeefffffffcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fcfcfcfffffff1f1f1fffffffbfbfb000000fffffff9f9f9fffffffbfbfb000000f6f6f6 |
-fffffff4f4f4fcfcfcfffffffafafa000000f8f8f8fffffff6f6f6090909fffffffafafa |
-f5f5f5fffffffffffffafafafffffff7f7f7fcfcfcfffffff8f8f8fffffffffffffafafa |
-ffffff000000000000fbfbfb030303000000000000030303000000030303f0f0f0ffffff |
-000000000000ffffff000000fbfbfbffffff0000000202020000000a0a0a000000000000 |
-ffffffffffff000000fafafafffffff3f3f3fafafafdfdfdffffff000000fefefefefefe |
-f9f9f9ffffff000000fffffffffffffbfbfbf3f3f3ffffffffffff010101000000ffffff |
-000000fffffffffffffdfdfdffffffffffffffffff000000fefefefefefeffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffecececfffffffdfdfdf8f8f8fefefefffffffbfbfb |
-fffffffffffffdfdfd0000000d0d0dfcfcfcf7f7f7fffffffafafafffffff9f9f9000000 |
-f8f8f8ffffff000000020202000000fbfbfb040404ffffffffffff000000ffffff000000 |
-f9f9f9fffffff3f3f3fefefefffffffffffff7f7f7fffffffefefefcfcfcfffffff7f7f7 |
-ffffff0c0c0c000000ffffff000000040404000000000000080808f1f1f1ffffff000000 |
-000000fefefeffffffffffff030303f8f8f8ffffff0000000000000000000707070d0d0d |
-fafafafbfbfb0c0c0cf9f9f9fffffffffffffffffffbfbfbfffffff3f3f3fffffff1f1f1 |
-fdfdfd060606fbfbfbfffffffdfdfdffffff0a0a0a000000f9f9f9090909fefefe000000 |
-0e0e0e0b0b0b000000030303fcfcfcf9f9f9ffffffffffff030303000000fdfdfdfdfdfd |
-fffffffffffffffffff4f4f4f2f2f2fffffffafafaffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff8f8f8fffffff4f4f4fffffffffffff4f4f4fffffff9f9f9 |
-ffffffffffff000000000000f6f6f6fbfbfbfffffff0f0f0ffffffffffffffffff000000 |
-060606fefefefefefe000000f9f9f9ffffff000000000000fcfcfc030303fbfbfbffffff |
-fafafaffffffffffffffffffedededf4f4f4ffffffe9e9e9fffffffffffffdfdfdffffff |
-e9e9e9000000000000f8f8f8ffffff0e0e0e000000060606ffffffffffff000000000000 |
-050505000000070707f4f4f4ffffff010101f6f6f61b1b1b030303000000000000050505 |
-f9f9f9ffffff000000fffffffffffffffffff4f4f4fcfcfcfffffffbfbfbffffffffffff |
-ffffff000000000000fffffffffffff7f7f7eeeeeeffffff0707070000000707070b0b0b |
-f8f8f80000001313130e0e0efffffffffffffdfdfdffffffdfdfdf161616fafafaffffff |
-ffffffefefefebebebfffffffffffffcfcfcffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffff2f2f2fffffff7f7f7fefefeffffff |
-fffffff7f7f7010101fffffffdfdfdf4f4f40404040606060000000e0e0effffffffffff |
-000000f3f3f3fffffffffffffffffff7f7f7fffffffbfbfb000000000000fbfbfbffffff |
-fffffff1f1f1fbfbfbfffffffffffffffffffafafa171717000000e2e2e2fffffffbfbfb |
-ffffff101010000000ffffff000000000000000000ffffffffffff000000ededed0a0a0a |
-0000001010100d0d0d000000000000121212000000eaeaea0505050404040b0b0b000000 |
-0a0a0aefefef000000ffffffefefeffffffffffffffffffffbfbfbfdfdfdf9f9f9fefefe |
-fefefeffffffffffff000000fffffffffffffffffffdfdfd0000000c0c0c000000000000 |
-000000000000efefeffdfdfdf8f8f8fffffffcfcfcfbfbfbfffffff0f0f0020202f0f0f0 |
-f9f9f9fffffffbfbfbffffffffffffefefefffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffdfdfdffffffe2e2e2fcfcfcf7f7f7fffffffefefefafafa |
-020202000000ffffffe7e7e7ffffff000000040404fdfdfdfefefef3f3f3060606000000 |
-ffffff000000f7f7f7fdfdfdefefeffffffffefefefafafafffffffdfdfdfffffff7f7f7 |
-fffffff3f3f3fffffffffffffdfdfdfdfdfdffffff000000040404fffffff8f8f8ffffff |
-ffffffe7e7e70c0c0c000000000000171717fdfdfdffffff0000000000000b0b0b000000 |
-000000050505000000000000000000000000fdfdfd070707f0f0f0ffffff000000070707 |
-090909090909020202000000fffffffffffffefefefffffffefefe0d0d0df7f7f7ffffff |
-ffffffffffffedededffffffefefeffffffffefefe080808fffffffffffff9f9f90b0b0b |
-080808fbfbfbfffffffafafaffffff000000000000fdfdfdf9f9f9f8f8f8ffffff181818 |
-000000f5f5f5f8f8f8f6f6f6ebebebfffffffafafaffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffbfbfbfffffffffffffffffffffffffdfdfdffffff000000 |
-010101fffffffafafafbfbfb040404ffffffffffff000000fffffffffffff8f8f8000000 |
-fdfdfdffffff040404fffffffffffff8f8f8ebebebfffffff8f8f8fffffffffffffcfcfc |
-fffffffffffffffffffdfdfdfefefef4f4f4ffffff0b0b0b000000fffffff5f5f5f7f7f7 |
-fdfdfdffffff000000000000fffffff8f8f8fafafa000000040404ffffff050505f5f5f5 |
-070707ffffffededed0c0c0c090909000000ffffffffffff131313000000f9f9f9060606 |
-0000000000000c0c0c000000f9f9f9fafafaffffffeeeeeefcfcfc020202fffffffafafa |
-f6f6f6f7f7f7f9f9f9f0f0f0ffffffffffff050505000000fefefef6f6f60b0b0b000000 |
-f5f5f5080808ffffffffffff040404fdfdfdffffffe8e8e8f9f9f9fffffff1f1f1eeeeee |
-000000fffffffffffffffffffffffff6f6f6fefefef7f7f7ffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffedededf1f1f1f9f9f9ffffffefefefffffff040404 |
-fcfcfcf9f9f9fffffffcfcfcf0f0f0040404fafafa1d1d1dfafafafffffff2f2f2ffffff |
-0c0c0ceaeaea000000000000fefefefdfdfdfffffff7f7f7f8f8f8fffffffcfcfcffffff |
-fffffffffffffbfbfbf8f8f8fffffffffffff6f6f6000000090909f8f8f8ffffffffffff |
-f5f5f5ffffff0000000d0d0df4f4f4f9f9f9ffffff020202fcfcfcffffff000000070707 |
-f9f9f9f5f5f5ffffff000000111111000000050505f9f9f9000000080808000000f4f4f4 |
-171717000000fbfbfb090909fffffff2f2f2f5f5f5fffffff2f2f2010101fffffff8f8f8 |
-fffffffdfdfdfffffffffffffdfdfdf7f7f7fffffffbfbfbfffffff7f7f7000000ffffff |
-fffffffbfbfbf4f4f4040404000000fafafa000000fffffffdfdfdf4f4f4ffffffffffff |
-f8f8f81b1b1be8e8e8f5f5f5f5f5f5fffffffbfbfbffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff4f4f4ffffffffffffefefefffffffffffff000000fbfbfb |
-fcfcfcfffffffafafafffffffffffffbfbfb000000ededed000000f7f7f7fffffff4f4f4 |
-000000fffffffffffffbfbfbf7f7f7f7f7f7fdfdfdffffffffffffffffffe7e7e7ffffff |
-fdfdfdfbfbfbfffffff8f8f8fffffffefefefefefe101010000000fafafafffffffcfcfc |
-ffffffffffff000000000000ffffffffffff000000020202000000040404000000000000 |
-f7f7f7ffffffffffff0d0d0d0202020000000a0a0afdfdfd0b0b0bf5f5f5232323f2f2f2 |
-f5f5f50a0a0af2f2f2080808000000fffffffffffff9f9f9ffffff000000fffffffdfdfd |
-e6e6e6fffffffafafaf4f4f4fffffffffffff2f2f2fffffff5f5f5040404ffffffffffff |
-fffffff8f8f80d0d0d000000fcfcfc101010040404f9f9f9fffffffbfbfbf7f7f7ffffff |
-f9f9f9fbfbfb0b0b0bfffffffffffffffffff9f9f9fcfcfcffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffff2f2f2ffffffffffff000000000000fffffffcfcfc |
-fdfdfdf7f7f7070707fafafaf7f7f7ffffffffffff020202ffffff040404efefefffffff |
-060606f8f8f8fefefefafafafefefefffffffafafafefefefefefefffffffffffffefefe |
-fffffff6f6f6fffffffefefef8f8f8fffffff9f9f90000000101010a0a0afdfdfdf7f7f7 |
-ffffff000000080808000000fffffff2f2f2050505010101000000000000ffffffffffff |
-070707f3f3f3ffffff000000080808fdfdfd060606fcfcfcfffffffffffff0f0f0ffffff |
-ffffff030303fcfcfc0000000e0e0ee8e8e8fefefeffffff0000000e0e0ef8f8f8ffffff |
-fffffff7f7f7fffffffdfdfdfffffff6f6f6ffffffffffffffffffe9e9e90d0d0d000000 |
-080808060606000000070707000000fffffff8f8f8fdfdfdffffff000000000000ffffff |
-fcfcfcfffffffafafa090909f2f2f2f8f8f8ffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff4f4f4fffffffffffffbfbfb |
-fffffffffffff3f3f3fffffffefefefffffffffffffafafa030303f8f8f8fbfbfbfdfdfd |
-000000060606fcfcfc000000fbfbfbfffffffbfbfbfdfdfd070707eeeeee0202020b0b0b |
-000000fffffffdfdfdfdfdfdffffffffffffffffffffffffffffffffffffffffffffffff |
-f9f9f9fffffffffffffffffffdfdfdfafafaffffffffffff0404040000000f0f0ffcfcfc |
-ffffff000000000000000000fffffff3f3f3080808000000060606000000fefefeffffff |
-fdfdfdffffff000000000000000000f7f7f70a0a0a000000fdfdfdfefefeffffff000000 |
-040404000000ffffff000000020202ffffffffffffffffff000000000000fafafafdfdfd |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f9ffffff000000 |
-010101000000ffffff000000fffffffafafaffffffffffff000000fcfcfc000000030303 |
-fffffff9f9f9f9f9f9ffffff000000fffffff7f7f7fffffffffffff9f9f9fefefef6f6f6 |
-fdfdfdfffffff4f4f4ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f9f6f6f6 |
-fafafafffffffffffffdfdfdfffffff9f9f9f6f6f6010101fffffffafafaffffff000000 |
-0e0e0efafafafcfcfcffffff000000fffffff1f1f1fdfdfdfdfdfdffffff010101ffffff |
-fffffff6f6f6fffffffdfdfdffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffff9f9f9f8f8f8fffffffffffffffffff5f5f5000000181818000000050505 |
-0000000b0b0b000000040404000000ffffff000000111111f6f6f6000000ffffff000000 |
-000000090909010101000000191919fdfdfd000000030303fcfcfcfffffffbfbfb111111 |
-f7f7f7000000ffffff000000020202f9f9f9fffffffefefe040404000000fdfdfdfdfdfd |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f4f4ffffff |
-f3f3f3fefefefafafa000000f9f9f9fffffff5f5f5000000fefefeffffffffffff000000 |
-fffffffafafafdfdfdffffff000000fdfdfdf8f8f8fbfbfbf2f2f2fffffffffffffdfdfd |
-fffffffbfbfbfffffff4f4f4ffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfbfafafaffffff |
-fffffff2f2f2fffffff0f0f0f4f4f4ffffff000000fffffffffffff5f5f5f5f5f5000000 |
-000000040404fffffff3f3f3fafafa0000000f0f0ffffffffbfbfb000000f6f6f6ffffff |
-fefefefffffffdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-f9f9f9fefefefffffffffffff9f9f9f3f3f3fbfbfbffffff090909000000040404080808 |
-000000000000000000040404070707f9f9f90101010b0b0bffffff070707ededed050505 |
-0b0b0b050505000000090909000000000000080808000000f6f6f6fffffff9f9f9f9f9f9 |
-ffffff050505ffffff000000000000080808000000000000000000000000ffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8fefefeffffff |
-f9f9f9fefefe080808ffffffffffff0909090000000c0c0c000000f7f7f7ececec040404 |
-000000fffffffafafaf6f6f6ffffff0b0b0bfffffffdfdfdfffffff6f6f6f7f7f7fafafa |
-f6f6f6fffffff9f9f9ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcfcfcfcffffff |
-fdfdfdfbfbfbffffffffffffffffff000000131313edededf5f5f5ffffffefefefffffff |
-ffffff000000181818ffffffffffffffffff0000000000000a0a0a000000fcfcfcf6f6f6 |
-f8f8f8fffffff9f9f9fdfdfdffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffff3f3f3fafafafdfdfdfffffffbfbfbf9f9f9f5f5f50707070d0d0d000000010101 |
-050505000000fcfcfcfefefe000000000000030303f5f5f5f8f8f8010101ffffff060606 |
-0000000000000d0d0d0101010505050d0d0d000000070707ffffff000000fffffff4f4f4 |
-f7f7f7000000ffffff0606060202020000000000000b0b0b000000111111f3f3f3ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffafafaffffffffffffe9e9e9 |
-fffffffefefefafafa000000000000000000f5f5f5ffffff000000fcfcfc0e0e0e000000 |
-f0f0f00f0f0fffffffedededf8f8f8fbfbfb000000ffffffeeeeeeffffffffffffffffff |
-ecececf3f3f3fffffff2f2f2ffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffbfbfbffffffffffffebebeb |
-fbfbfbfffffff5f5f5f9f9f9ffffff000000f6f6f6fafafaffffffffffffffffffefefef |
-f8f8f8fefefe000000fffffff0f0f0f9f9f9f9f9f9101010000000ffffffffffffffffff |
-f6f6f6f3f3f3fffffffcfcfcffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffbfbfbfffffffcfcfcf8f8f8fffffffffffffbfbfb0000000000000f0f0f040404 |
-000000000000181818000000040404000000000000000000ffffff0e0e0efcfcfc060606 |
-0a0a0a0000000505050303030a0a0aececec131313000000f7f7f7040404ffffffeaeaea |
-ffffff0d0d0df3f3f3000000000000181818000000000000000000010101fffffff6f6f6 |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefbfbfbffffff |
-ffffffffffffeeeeeeffffff0a0a0af6f6f6fffffffefefefbfbfb050505000000fbfbfb |
-ffffff000000f8f8f8fffffffffffffafafa000000000000fffffffefefefffffffbfbfb |
-fffffffcfcfcf6f6f6fbfbfbffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff8f8f8fefefeffffffffffff |
-fffffffffffff3f3f3ffffff000000ffffffffffffffffff000000000000fffffffcfcfc |
-ffffffffffffffffff000000070707f7f7f7fffffff3f3f3fffffffdfdfdfafafaf7f7f7 |
-fffffff9f9f9fafafaffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-f7f7f7fcfcfcfffffffdfdfdffffffffffffdadada0000000a0a0a000000000000ffffff |
-0d0d0d000000000000000000000000ffffff090909ffffff000000000000ffffff000000 |
-fafafa000000f6f6f6101010ffffff0000000000000c0c0c000000fffffffdfdfdffffff |
-fdfdfd000000ffffff030303fefefee7e7e7ffffffffffffffffff000000fffffffbfbfb |
-fffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffffffffffffffff |
-ffffffecececffffffe7e7e7fbfbfbf2f2f2ffffffffffff040404000000010101f7f7f7 |
-efefefffffffffffff000000eeeeeefffffffdfdfd080808f4f4f4fefefee8e8e8ffffff |
-edededfffffffffffffdfdfdffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefffffff |
-fffffffbfbfbfffffff1f1f1fffffff0f0f0f5f5f5ffffffe6e6e60d0d0dfffffff6f6f6 |
-f7f7f7ffffffedededf7f7f7ffffff070707f3f3f3fffffff9f9f9fffffff8f8f8ffffff |
-fffffff8f8f8fffffff9f9f9ffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffff6f6f6f3f3f3ffffffffffff0e0e0e0000000808080f0f0ff2f2f2 |
-f9f9f90000000000000c0c0c0c0c0cfdfdfd000000000000030303050505131313ffffff |
-090909ffffff030303000000fafafaffffff050505000000070707020202020202f9f9f9 |
-f9f9f90e0e0effffff000000ffffff000000000000070707e6e6e60e0e0effffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f3f3fbfbfb |
-fcfcfcfffffff3f3f3ffffffffffffffffff000000000000fafafaf9f9f9ffffffffffff |
-fffffffffffffffffff5f5f50b0b0bebebebffffffffffff000000ffffffeeeeeeffffff |
-fffffffcfcfcfdfdfdffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff6f6f6fffffff0f0f0ffffff |
-fafafafffffff1f1f10d0d0dfffffffffffffdfdfdffffffffffff0000000000000b0b0b |
-030303000000090909fffffff2f2f2010101fffffffbfbfbfffffff8f8f8ffffffffffff |
-f3f3f3fffffff9f9f9fdfdfdffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffafafaf4f4f4fffffffffffff7f7f7ffffff000000050505050505000000ffffff |
-ffffff0000000a0a0a000000000000ffffff030303000000ffffff000000000000030303 |
-0000000707070000001414140000000000000f0f0ffafafa040404000000000000050505 |
-ffffff000000fbfbfb000000f2f2f20b0b0bffffff020202ffffff000000fffffffdfdfd |
-fffffffffffffffffffffffffffffffffffffffffffffffff3f3f3fffffffffffffefefe |
-f3f3f3fffffff9f9f9fffffff7f7f7fbfbfb000000fffffffdfdfdf9f9f9fffffffdfdfd |
-f6f6f6fffffff6f6f6ffffff090909fffffffafafafefefe010101000000fffffffefefe |
-f7f7f7fffffffffffffcfcfcffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffafafaffffffffffff |
-fbfbfbffffff000000000000f8f8f8fffffffffffffbfbfbf9f9f9ffffffffffffffffff |
-fafafaffffff090909000000fffffffffffff6f6f6ffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101ffffff000000020202ffffff |
-ffffff000000000000020202000000010101000000000000ffffff050505fefefe080808 |
-0a0a0af9f9f90d0d0d000000fdfdfd000000000000070707040404060606000000040404 |
-000000040404ffffff000000000000000000fafafa030303ffffff000000fffffffbfbfb |
-fffffff9f9f9fafafaf5f5f5fffffff5f5f5fffffff7f7f7ffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffff6f6f6ffffff000000fffffffffffffffffffbfbfb |
-fdfdfd000000090909000000000000fcfcfcfdfdfdfefefefafafa040404fffffffdfdfd |
-fefefefffffffafafafefefeffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff1f1f1fffffffefefeffffff |
-f1f1f1ffffff0f0f0ffffffffffffffffffffdfdfdfffffffffffff9f9f9fcfcfcf1f1f1 |
-fffffffefefefefefe000000f9f9f9fdfdfdffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101f9f9f9131313080808e4e4e4 |
-ffffff000000000000020202090909000000ffffffffffffeeeeee0e0e0efdfdfd000000 |
-000000ffffff000000080808ffffffffffff000000fbfbfb030303f1f1f1ffffff010101 |
-000000000000f0f0f0090909040404000000ffffff030303f8f8f8010101fffffffdfdfd |
-edededfafafafffffffefefefffffffefefef3f3f3ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffff7f7f7ffffffffffff0000000000000000000a0a0a |
-0a0a0af1f1f1ffffffffffffffffff000000030303fefefef8f8f8ffffff000000f2f2f2 |
-f8f8f8ffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5f5fefefeffffff |
-ffffff020202f8f8f8f1f1f1ffffffefefeffdfdfdfffffff2f2f20101010e0e0effffff |
-ebebebffffff000000070707fffffffffffff4f4f4ffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101f8f8f8000000000000101010 |
-f9f9f90000000707070a0a0affffff000000fbfbfbfafafaffffff0000000d0d0df8f8f8 |
-ffffff0303030e0e0efcfcfc000000000000fcfcfcffffffffffff030303010101ffffff |
-0101010101010b0b0b000000000000060606eeeeee020202ffffff020202ebebebffffff |
-fffffffffffffffffff7f7f7fdfdfdfffffff1f1f1ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff4f4f4fffffffffffff5f5f5ffffff090909ffffffefefef |
-fffffff1f1f1ffffffeeeeee0000000d0d0decececfffffffffffff3f3f3040404ffffff |
-f8f8f8fdfdfdffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f9fffffff9f9f9 |
-f6f6f6000000ffffffffffff0505050a0a0afdfdfdf8f8f8ffffff020202000000fcfcfc |
-fffffff3f3f3fffffffffffffcfcfce9e9e9ffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101ffffff0202020a0a0a000000 |
-ffffff0606060000000000000000000d0d0d000000f9f9f9ffffff030303efefefffffff |
-f1f1f1030303f2f2f2ffffff040404000000101010e8e8e8000000fffffffbfbfbf4f4f4 |
-0c0c0c000000040404070707fcfcfc000000ffffff0c0c0cf1f1f1000000fffffff9f9f9 |
-f5f5f5f5f5f5fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffefefefffffffffffffcfcfc000000edededffffff |
-ffffffffffffffffff090909000000fffffffffffff9f9f9f7f7f7f5f5f5ffffff000000 |
-f9f9f9fffffffffffff4f4f4ffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff1f1f1fffffffcfcfcfdfdfd |
-030303fffffff2f2f2fefefe050505f6f6f6fffffffdfdfdffffffffffffffffffffffff |
-fefefefffffffbfbfbf4f4f4f6f6f6fffffffffffffbfbfbffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101ffffff0000000000000c0c0c |
-f8f8f8010101ffffffffffff050505000000ffffff060606000000040404060606000000 |
-0202020f0f0f000000000000ffffff0000000000000c0c0c0000000e0e0efffffff1f1f1 |
-fffffffcfcfc000000000000000000060606e0e0e0030303fdfdfd020202fffffffcfcfc |
-fffffffffffffffffffffffffafafaf9f9f9ffffffecececffffffffffffffffffffffff |
-ffffffffffffffffffffffffecececfffffffffffffdfdfdfcfcfcffffff050505000000 |
-f1f1f10000000303030000000b0b0b000000000000070707fffffffffffff4f4f4020202 |
-090909edededfdfdfdffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffffff6f6f6 |
-000000edededfffffffefefe000000ffffffffffffffffff000000f8f8f8ffffffeeeeee |
-f4f4f4fffffffffffff3f3f3fffffff5f5f5f6f6f6ffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101fdfdfd010101000000121212 |
-f1f1f1000000ffffff000000000000000000010101e8e8e8ffffffffffff060606000000 |
-000000000000ffffffffffff0000000b0b0b0000000a0a0a000000020202000000060606 |
-000000010101000000151515ffffffffffffffffff000000f8f8f8090909ebebebffffff |
-f5f5f5fffffff3f3f3f4f4f4fffffffffffff6f6f6ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffff9f9f9fffffffffffff2f2f2ffffffffffff020202 |
-0404040000000a0a0a060606000000ecececfffffffcfcfcfdfdfdf6f6f6ffffffffffff |
-000000fffffff6f6f6ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafa030303 |
-fffffffffffffffffff5f5f5000000020202010101000000fefefef5f5f5ffffff040404 |
-fcfcfcfffffffefefef3f3f3fefefefdfdfdfffffff2f2f2ffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101ffffff000000090909000000 |
-ffffffffffffffffff010101090909000000000000171717070707000000fffffffefefe |
-fbfbfb0707070202020a0a0a000000131313000000000000020202000000000000000000 |
-111111000000060606000000f5f5f5000000f2f2f2070707f5f5f50d0d0df9f9f9ffffff |
-ffffff0000000e0e0efffffff7f7f7fffffff4f4f4ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffdfdfdfdfdfdfffffffefefefffffff7f7f7f6f6f6ffffff |
-000000040404000000fefefeffffffffffffffffffeeeeeefffffffffffffbfbfbfafafa |
-020202f0f0f0fffffff0f0f0ffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff9f9f9fcfcfcffffff000000 |
-fbfbfbffffffe7e7e7fffffffffffffbfbfb000000000000fffffffffffff3f3f3030303 |
-fffffff2f2f2fffffffffffffdfdfdfffffffbfbfbffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffefefefffffffffffffdfdfdfffffffcfcfc010101fcfcfc030303ffffff060606 |
-fafafaffffff000000000000000000000000fffffff6f6f6ffffff000000010101060606 |
-0202020202020000000505050000000000000202020a0a0a010101ffffff010101000000 |
-040404040404000000ffffffffffffffffffffffff000000ffffff0000000a0a0a000000 |
-000000000000010101000000000000fffffff9f9f9ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffdfdfdfffffff6f6f6fffffffffffffbfbfbfffffff6f6f6 |
-ffffff000000fffffffffffffffffff7f7f7f8f8f8060606fcfcfcfafafaffffffffffff |
-fcfcfc020202ffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f0f0101010f3f3f3 |
-fbfbfbffffff000000060606000000ffffffffffffffffffffffff000000000000000000 |
-fffffffffffffffffffffffffffffffffffffffffffffffffcfcfcfffffffffffff5f5f5 |
-fffffffffffff4f4f4fffffffffffffffffff9f9f9f3f3f3fffffff1f1f1fdfdfdfcfcfc |
-000000f7f7f7fffffffafafafffffff5f5f5ffffff0000000808080000000e0e0e000000 |
-0000000808080000000505050606060000000000000101010000000e0e0e0000000f0f0f |
-0000000b0b0b000000000000020202000000000000090909060606000000050505020202 |
-000000050505fefefefffffffffffff1f1f1ffffff000000ffffff000000000000ffffff |
-090909000000111111020202050505000000fefefefdfdfd040404000000000000ffffff |
-ffffffefefeffffffff5f5f5ffffffffffffffffffffffffffffffffffffffffffffffff |
-000000fffffffffffff3f3f3ffffff000000000000ffffff000000000000fffffff5f5f5 |
-ffffff030303f5f5f5fffffffdfdfdfffffff6f6f6ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffefefeffffff000000ffffff |
-ffffff000000000000f5f5f50c0c0c000000fffffffffffff4f4f4fcfcfc040404ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffefefefdfdfdf2f2f2ffffff |
-f9f9f9f8f8f8fffffffcfcfc000000fffffffefefeffffffe8e8e8ffffff0000000d0d0d |
-0606060d0d0d000000f8f8f8fffffffafafaffffff050505000000030303000000070707 |
-1212120707070000000202020000000000000c0c0c000000000000000000222222000000 |
-0404040000000000000606060b0b0b0707070000000000000a0a0a000000060606050505 |
-000000f7f7f7070707000000000000fffffff1f1f1000000ffffff000000050505f0f0f0 |
-ebebebffffffefefef0000000505050000000303030909090b0b0b000000020202000000 |
-090909ffffffdededeffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffff000000020202000000000000090909000000000000030303ffffffedededffffff |
-fffffff7f7f7000000ffffffeeeeeefffffffcfcfcffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff000000ffffff |
-f8f8f80000001c1c1cfdfdfdfcfcfc0b0b0bfffffff5f5f5fffffffffffffffffff2f2f2 |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffafafaffffffebebeb |
-f8f8f8fcfcfc010101020202090909000000ffffffffffffffffff000000f7f7f7000000 |
-0000000000000f0f0f040404f3f3f3fffffffffffffafafa000000161616000000030303 |
-000000000000060606050505080808fbfbfb000000080808010101f6f6f6ffffffffffff |
-fffffffafafafffffffafafaecececfffffffffffffafafaf8f8f8fffffffbfbfbf6f6f6 |
-0606060b0b0b040404030303090909f1f1f1f5f5f51e1e1ef0f0f0101010ffffffffffff |
-121212000000ffffff1414140000000a0a0a000000000000020202050505141414040404 |
-000000fcfcfcfffffff4f4f4ffffffffffffffffffffffffffffffffffffffffffffffff |
-efefefffffff010101090909080808000000ffffff0c0c0cf9f9f9f7f7f7f8f8f8ffffff |
-fdfdfdffffff0d0d0dfffffffffffffffffffbfbfbeeeeee |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff0b0b0bfffffff5f5f5 |
-ffffffffffffededed000000000000000000050505000000090909000000f3f3f3ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeffffff |
-0a0a0a020202000000000000fafafa0e0e0eeeeeeef0f0f0ffffff000000fefefeffffff |
-ffffffffffff000000000000fffffffefefef4f4f40f0f0f080808f4f4f4fcfcfcffffff |
-fffffffffffff0f0f0fffffffafafafffffffffffffffffff5f5f5fffffffffffff9f9f9 |
-f3f3f3fafafafffffffffffffffffffffffffffffffbfbfbfbfbfbffffffffffffffffff |
-000000080808000000060606090909000000ffffff000000ffffff000000050505f0f0f0 |
-000000ffffff000000000000000000000000000000070707000000000000040404000000 |
-000000090909eaeaeaffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffafafa000000fffffffafafaffffff010101000000ffffffffffff000000ffffff |
-fbfbfbf4f4f4000000000000f3f3f3f0f0f0ffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff4f4f4000000ffffffffffff |
-f2f2f20000000b0b0b0101010000000c0c0c000000000000fffffffffffffefefef3f3f3 |
-ffffffffffffffffffffffffffffffffffffffffffffffffedededffffffeeeeee000000 |
-f8f8f8ffffff0303030a0a0affffff000000070707ffffff000000fffffffffffffdfdfd |
-fafafaf8f8f8ffffff000000f4f4f4fefefeffffff000000000000fcfcfcfffffffefefe |
-f5f5f5fdfdfdfffffff5f5f5f2f2f2fffffff1f1f1fffffffffffff5f5f5ffffffffffff |
-fffffffffffff0f0f0fffffffffffff8f8f8f9f9f9ffffffffffffebebebfffffffbfbfb |
-0505050000000909090000000000000e0e0effffff000000ffffff030303000000ffffff |
-ffffffffffff0303030b0b0b060606060606fffffff0f0f0fffffffffffffcfcfcf9f9f9 |
-111111000000ffffffe4e4e4ffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffff3f3f3fcfcfcfefefeffffff000000060606ffffff0e0e0e000000fffffff4f4f4 |
-f7f7f7fffffffdfdfd191919fffffffcfcfcfdfdfdffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff080808f9f9f9fafafaffffff |
-0f0f0f0000000303030d0d0d000000030303020202020202030303e8e8e8ffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff030303 |
-f7f7f7ffffff000000fafafaffffff0000000000000404040202020000000d0d0d000000 |
-010101000000eaeaea060606f5f5f5ffffffffffff000000000000fffffffefefeffffff |
-fffffffffffff4f4f4fffffffffffffffffffffffffefefef0f0f0fffffff5f5f5fbfbfb |
-f2f2f2fffffffcfcfcf7f7f7fcfcfcf6f6f6fdfdfdfffffffffffffffffffefefeffffff |
-000000ffffff000000050505010101000000fefefe000000fefefe0000000b0b0bffffff |
-fcfcfc020202000000050505040404f7f7f7fffffffffffff8f8f8000000000000ffffff |
-000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-f4f4f4fffffffffffff8f8f8f5f5f5090909000000000000f5f5f5fffffffcfcfcf3f3f3 |
-fffffffffffffcfcfc000000e7e7e7fffffff6f6f6ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffafafaeeeeee |
-000000fffffff9f9f9f4f4f4fefefefefefefefefe000000fbfbfbffffffffffffefefef |
-fffffffffffffffffffffffffffffffffffffffffffffffff3f3f3fffffffdfdfd050505 |
-ffffffffffff000000fffffff3f3f3ffffff060606050505040404000000ffffffffffff |
-000000fffffff8f8f8000000ffffffeaeaeaffffff000000070707fbfbfbfffffff5f5f5 |
-0f0f0f0000000000000505050000000303030000000f0f0f0707070202020b0b0b000000 |
-101010000000060606020202000000111111010101000000fffffff4f4f4fffffff1f1f1 |
-000000080808000000000000000000040404ffffff000000ffffff070707080808f3f3f3 |
-f5f5f50c0c0c0808080d0d0d000000090909f4f4f4ffffffffffff000000fffffff8f8f8 |
-020202000000000000f8f8f8ffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffdfdfdfefefe000000fffffff1f1f1fffffffffffffcfcfcfbfbfbffffff |
-f5f5f5fffffff7f7f7ffffff151515e9e9e9ffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff050505f7f7f7ffffffffffff |
-020202f1f1f1fffffffcfcfcfefefefffffffafafafffffff5f5f5f9f9f9ffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffafafafffffff0f0f0000000 |
-fbfbfbf8f8f80a0a0afbfbfbfffffffdfdfd000000ffffff000000fffffffcfcfcffffff |
-000000ffffffffffff000000f9f9f9fbfbfbfcfcfc050505090909f5f5f5ffffffffffff |
-000000060606020202000000050505090909000000f7f7f7fcfcfcffffff0000000a0a0a |
-f0f0f00c0c0c0000000303030000000d0d0d000000070707f9f9f9ffffffedededffffff |
-000000fcfcfc060606fefefeffffff000000fffffffefefeffffff000000080808020202 |
-ffffffe9e9e90404040404040202020b0b0b000000000000f6f6f6fffffff2f2f2fafafa |
-0b0b0b010101050505010101ffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffff8f8f8f9f9f9ffffff0000000000000e0e0e000000000000000000131313000000 |
-fffffffcfcfcffffffffffff000000fffffffbfbfbf5f5f5 |
-fbfbfbfffffff9f9f9fffffffcfcfcfffffff4f4f4040404fffffffffffffffffffcfcfc |
-ffffff000000000000030303fefefefffffffffffff0f0f0fffffffdfdfdf3f3f3ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffcfcfcfdfdfdfefefe000000 |
-000000ffffff000000fbfbfbfffffff7f7f7000000fcfcfc010101000000ffffffffffff |
-010101010101000000000000000000fffffffbfbfb030303fffffffffffffefefef4f4f4 |
-0c0c0c000000010101ffffff010101000000fdfdfdfffffffffffffffffffffffff7f7f7 |
-fffffff2f2f2fafafaffffff030303ffffffffffff000000fffffff5f5f5fdfdfdffffff |
-000000ffffff0e0e0ef5f5f5090909000000fffffffdfdfdffffff000000000000040404 |
-0000000f0f0f000000111111000000070707000000fffffffbfbfbf3f3f3ffffffffffff |
-000000000000090909000000fbfbfbfffffffffffffffffff4f4f4ffffffecececffffff |
-fefefefefefefffffff9f9f9fffffffefefefefefe020202040404000000fffffffbfbfb |
-fbfbfbfffffffffffffcfcfc060606f4f4f4ffffffffffff |
-fbfbfbfffffffffffff9f9f9fbfbfbfffffff4f4f4030303fafafafafafafffffff2f2f2 |
-f6f6f6ffffffffffff0000000505050000000000000b0b0bfffffff9f9f9ffffffececec |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f70f0f0ffefefe |
-020202000000000000fffffff5f5f50000000a0a0a1010100000000303030a0a0af9f9f9 |
-020202030303080808000000000000040404f3f3f3000000ecececfffffffafafafcfcfc |
-000000000000000000000000000000fcfcfcfefefef4f4f4fefefe090909000000ffffff |
-0202020000000e0e0e000000fafafaf0f0f0ffffff000000f1f1f1fffffffffffff8f8f8 |
-090909f6f6f60000000c0c0c080808000000fffffffafafaf9f9f9040404070707000000 |
-0000000505050000000000000e0e0e000000060606010101080808101010fbfbfb000000 |
-030303000000030303010101fffffffbfbfbfffffff8f8f8fffffff3f3f3ffffffffffff |
-fffffffdfdfdffffffffffffefefeffffffffefefe000000000000fbfbfbfdfdfdf8f8f8 |
-fffffff2f2f2ffffffffffff000000fffffffdfdfdffffff |
-fffffffffffff1f1f1fffffffffffff3f3f3ffffff000000fafafaffffffefefef090909 |
-1717170000000c0c0cfffffffbfbfbfffffffffffffffffff0f0f0fffffffffffff9f9f9 |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5f5050505e7e7e7 |
-1d1d1d0f0f0f000000070707000000181818000000000000111111ffffffebebeb060606 |
-060606000000040404181818f7f7f7030303000000191919070707f6f6f6ffffffffffff |
-020202000000040404fffffffffffffdfdfdffffff0b0b0b000000070707030303000000 |
-0101010404040000000000000d0d0d040404000000050505fefefefffffffafafaffffff |
-000000ffffff000000070707000000fffffff9f9f9000000ffffff0000000000000e0e0e |
-0b0b0bffffff0000000b0b0b000000000000000000070707030303000000fffffffbfbfb |
-0000000000000000000a0a0a000000fffffff7f7f7fffffffdfdfdfbfbfbfffffff2f2f2 |
-f9f9f9fcfcfcf8f8f8ffffffffffff000000161616000000fffffffbfbfbfffffff6f6f6 |
-fffffff4f4f4fffffff4f4f4ffffff000000f9f9f9ffffff |
-fffffff3f3f3fffffffffffffffffff7f7f7f6f6f6fbfbfbfffffffafafaffffffffffff |
-f4f4f4fcfcfcfcfcfc0000000a0a0a010101000000fefefefffffffffffff8f8f8ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffff0000000b0b0b |
-000000000000121212000000000000000000ffffff030303f6f6f6ffffffffffffffffff |
-fcfcfcffffffe5e5e5fcfcfcffffff060606000000000000010101ffffffffffffffffff |
-000000000000fffffff0f0f0fcfcfcffffff000000000000fffffff7f7f7141414000000 |
-f2f2f2131313fffffffefefe0000000d0d0d000000000000fcfcfcfffffff4f4f4fbfbfb |
-000000f9f9f9020202020202000000f6f6f6090909010101e6e6e6191919000000f9f9f9 |
-f6f6f60000000d0d0d0000000303031b1b1bfffffff1f1f1ffffffffffff080808090909 |
-070707060606fdfdfdf3f3f3121212000000fffffffffffffffffffffffff9f9f9ffffff |
-fffffffcfcfcf3f3f3ffffffececec000000f3f3f3fefefef2f2f2ffffff000000080808 |
-020202000000edededfffffff8f8f8070707fffffffefefe |
-fefefefffffffafafaf4f4f4e9e9e9ffffffedededfffffffffffffdfdfdf6f6f6fcfcfc |
-f6f6f6fffffffffffffffffff2f2f2ffffff131313fcfcfcfffffffbfbfbffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff2f2f2050505000000 |
-040404fcfcfc0404040b0b0b050505020202000000000000ffffffffffffffffff000000 |
-0000000707070707070000000d0d0d0707070000000e0e0e000000ffffffeaeaeafafafa |
-010101fffffff9f9f9ffffff0202020000000f0f0f010101010101050505000000000000 |
-ffffffe6e6e6000000ffffffffffff0000000808080b0b0bfefefeecececfbfbfbffffff |
-070707fafafaffffff0000000a0a0a000000000000fffffffdfdfd000000ffffffffffff |
-ffffffffffff000000060606080808f6f6f6f2f2f2ffffffffffffffffffe9e9e9f5f5f5 |
-020202fffffff1f1f1ffffffffffff000000070707fefefef5f5f5ffffffffffffeeeeee |
-f6f6f6fffffffffffff4f4f4ffffffffffff0000000808080b0b0b000000171717000000 |
-000000fffffff6f6f6ffffffffffff000000f9f9f9fcfcfc |
-f6f6f6fbfbfbfffffffffffffffffff8f8f8020202fffffff9f9f9f3f3f3202020000000 |
-080808000000f9f9f9fdfdfdffffff050505ecececfffffffafafaf9f9f9fffffffbfbfb |
-fffffffffffffffffffffffffffffffffffffffffffffffff8f8f8ffffff000000fbfbfb |
-f8f8f8ffffffececec020202080808000000010101020202000000000000000000060606 |
-0a0a0a000000000000fdfdfdf1f1f1ffffff040404020202ffffffffffffffffffffffff |
-070707f6f6f6ffffff0000000000000000000000000d0d0d0000000000000d0d0d0c0c0c |
-000000101010000000000000fffffff1f1f1f1f1f1fffffffffffffffffff8f8f8f0f0f0 |
-000000f5f5f5ffffff000000ffffff000000000000fefefeffffff000000fffffff4f4f4 |
-fefefe020202000000000000fffffffcfcfcffffffefefeffbfbfbffffffffffffffffff |
-fdfdfdffffffffffffececece8e8e8ffffff000000f6f6f6fcfcfcfafafaffffffffffff |
-fcfcfcfffffff8f8f8fffffff7f7f7eaeaeafffffffcfcfc000000000000f6f6f6ffffff |
-fffffffffffffffffff1f1f1ffffff000000ffffffffffff |
-fffffffcfcfcedededfffffffbfbfbffffff060606f3f3f3fffffff2f2f2efefefffffff |
-ebebeb151515111111000000000000000000fbfbfbfffffffffffffffffffffffffdfdfd |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffff000000fdfdfdffffff |
-ffffffefefefffffff000000f7f7f7fffffffffffff5f5f5ffffff0c0c0c0000000a0a0a |
-fcfcfceaeaeafffffffefefefffffff5f5f5080808000000fffffff4f4f4fffffff1f1f1 |
-000000040404ffffffffffff0909090000000f0f0f000000040404080808000000000000 |
-010101000000060606000000000000fffffffcfcfcfffffffefefef7f7f7ffffffffffff |
-000000ffffffeaeaea070707fcfcfc030303080808fffffffefefe050505ffffffffffff |
-fcfcfc000000151515070707f1f1f1fffffffffffffffffffffffff9f9f9fffffff5f5f5 |
-fffffff2f2f2ffffffffffff0909090101010d0d0d000000ffffffffffffe9e9e9ffffff |
-fffffffffffff3f3f3ffffffffffffffffff0b0b0b000000000000121212000000ffffff |
-f3f3f3000000fafafaffffffffffffffffff000000eaeaea |
-fafafafefefefffffffafafafbfbfbffffff000000fffffff5f5f5ffffff060606000000 |
-080808030303000000080808fdfdfdfafafafffffffffffff3f3f3fffffffcfcfcffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffcfcfc000000f9f9f9ffffff |
-000000080808fbfbfb020202000000000000fffffff4f4f4ffffff000000050505f8f8f8 |
-fffffffffffffbfbfb020202000000ffffff000000050505000000ffffffffffffffffff |
-000000060606000000fbfbfb0000000b0b0b0000000000000c0c0cfcfcfc000000101010 |
-000000070707000000060606050505eeeeeefffffffffffffffffffdfdfdfffffffafafa |
-030303f7f7f7ffffff000000ffffff000000000000fffffff7f7f7000000030303000000 |
-ffffff030303000000fffffffffffffffffffdfdfd000000f7f7f7ffffffecececffffff |
-fffffffefefefefefefdfdfd000000010101000000060606fffffffffffffffffffcfcfc |
-f8f8f8fffffff6f6f6fffffff6f6f6f9f9f9fdfdfdfdfdfdf9f9f9010101050505000000 |
-101010070707000000fffffff6f6f6ffffff000000ffffff |
-fffffffcfcfcfffffffffffffbfbfbf9f9f9080808fcfcfcfffffff0f0f0ffffffffffff |
-ffffff020202000000090909020202000000f3f3f3fffffffffffffefefefffffff8f8f8 |
-fcfcfcfffffff7f7f7fffffffcfcfcf7f7f7fffffff8f8f8030303121212eeeeeef8f8f8 |
-080808000000101010000000040404000000eeeeeefffffff9f9f9010101010101000000 |
-ffffff000000000000030303000000020202000000000000000000fffffffcfcfcefefef |
-fffffffffffff9f9f9080808fffffff8f8f80a0a0a000000010101000000000000000000 |
-ffffff000000000000ffffffffffff000000030303000000fffffff0f0f0fdfdfdffffff |
-000000ffffffffffff010101fafafa040404090909fafafaffffff000000fdfdfdffffff |
-ffffff000000010101fffffffafafaf7f7f7111111000000fffffffdfdfdf6f6f6ffffff |
-fffffffffffffbfbfbffffffffffffffffff000000050505f9f9f9ffffffffffffffffff |
-f8f8f8fffffffefefefffffffffffff8f8f8020202000000000000040404030303f6f6f6 |
-fffffffffffff5f5f5fffffffafafaffffff000000ffffff |
-fafafafffffffcfcfcf5f5f5ffffff030303fcfcfcf8f8f8f6f6f6080808ffffffe9e9e9 |
-fffffff9f9f9f9f9f9f7f7f7ffffff080808fffffffffffff8f8f8fffffff1f1f1ffffff |
-fafafafffffffffffff6f6f6f7f7f7ffffffffffffffffff000000ecececffffffffffff |
-0000000e0e0e000000fffffffcfcfc0d0d0d0d0d0d0d0d0df2f2f2fefefe060606ffffff |
-0000000000000b0b0bf7f7f7000000000000111111050505050505f5f5f5ffffffffffff |
-ffffff000000ffffff000000fcfcfcfffffff5f5f50000000707070c0c0c101010000000 |
-030303080808fafafaffffff000000020202000000000000eaeaeaffffffffffffffffff |
-000000fffffff8f8f8000000030303000000000000000000ffffff040404ffffff000000 |
-000000000000020202000000ffffffffffff000000ffffffffffffffffffffffffffffff |
-eeeeeef6f6f60a0a0a000000f2f2f2f9f9f9ffffff000000000000fffffff4f4f4f8f8f8 |
-fdfdfdfffffff4f4f4fffffff8f8f8fefefeffffff040404fdfdfdfffffff4f4f4ffffff |
-fffffffbfbfbfffffffbfbfbffffffeeeeee141414f2f2f2 |
-fffffffffffffffffffbfbfbf5f5f5000000ffffffffffffffffff000000fcfcfcffffff |
-000000fffffffbfbfbffffff000000fbfbfbfffffffcfcfcfffffffafafafefefefcfcfc |
-fffffff8f8f8fafafafbfbfbffffffffffffedededfdfdfd090909fffffffffffff8f8f8 |
-010101000000030303fbfbfbfafafafcfcfcefefefffffff141414fefefef0f0f0000000 |
-0000000b0b0b000000ffffffffffff080808000000020202000000ffffffe6e6e6ffffff |
-000000000000000000000000030303000000fffffffbfbfb000000000000000000000000 |
-000000f9f9f9ffffff000000050505090909060606080808ffffffffffffffffffffffff |
-000000ffffff0101010505050000000000000a0a0a010101fdfdfd000000fbfbfbffffff |
-0e0e0e0000000505050404040000000505050b0b0b000000000000fafafafdfdfd010101 |
-000000181818000000070707ffffffffffffefefef080808000000ffffffffffffffffff |
-fefefef8f8f8fffffff2f2f2ffffffffffffe3e3e3fefefefffffffcfcfc090909010101 |
-000000060606000000ffffffffffffffffff000000ffffff |
-fafafafffffffffffff6f6f6ffffff101010e5e5e5fffffff6f6f60d0d0df6f6f6fdfdfd |
-fffffffefefeffffffececec070707f4f4f4fffffff8f8f8f9f9f9fffffffffffffbfbfb |
-fefefefdfdfdfffffffffffffafafaf4f4f4ffffffffffff000000fdfdfdffffff000000 |
-0606060a0a0a000000ffffff000000ffffffffffffececec000000ffffffffffff0f0f0f |
-111111f4f4f4fffffff6f6f6030303000000111111000000020202fffffff7f7f7f6f6f6 |
-0c0c0c0000000f0f0f000000000000000000000000ffffffffffffffffff000000ffffff |
-fffffff8f8f8ffffffebebebffffff000000030303000000f9f9f9fffffff2f2f2ffffff |
-0000000a0a0af9f9f9fafafafdfdfdf3f3f3000000020202ffffffffffffffffff000000 |
-0000000707070000000606060000000000000a0a0a000000010101111111010101080808 |
-000000000000111111000000000000eaeaeaffffff050505000000ffffffe7e7e7ffffff |
-fbfbfbfffffff4f4f4fffffff1f1f1ffffffffffff0a0a0a0000000000000000000a0a0a |
-fffffff2f2f2ffffff000000eeeeeeffffffffffff010101 |
-fcfcfcfcfcfcfffffffefefeffffff000000fffffffefefefdfdfd080808000000000000 |
-0a0a0a0000000000000f0f0f080808fdfdfdf3f3f3f6f6f6fffffffefefef7f7f7ffffff |
-fdfdfdfffffff6f6f6fcfcfcffffffffffffeeeeee000000fffffffefefef3f3f3020202 |
-fdfdfdeeeeeefffffff3f3f3040404fefefef9f9f9ffffff060606050505000000000000 |
-000000fcfcfcffffff000000f6f6f6ffffffffffff000000f6f6f6fdfdfdffffffffffff |
-0000000000000000000c0c0c0000000e0e0e000000050505ffffffe9e9e9ffffffffffff |
-ffffff0000000000000b0b0b000000090909ffffff000000ffffffecececfffffffcfcfc |
-ffffff000000000000fffffffffffff5f5f5000000ffffffe2e2e2fffffffdfdfd000000 |
-010101050505ffffff000000000000fdfdfd040404080808000000000000000000010101 |
-0404040e0e0e000000fcfcfcf7f7f71b1b1b020202000000000000fefefeffffffffffff |
-fffffff7f7f7fffffff7f7f7ffffffebebebffffff000000ffffffffffffffffff020202 |
-fffffff4f4f4fefefe000000ffffffecececfefefe000000 |
-fffffff8f8f8fffffffffffff3f3f3000000fffffffcfcfcfefefefefefe020202111111 |
-000000000000080808000000000000ffffffffffffffffffedededfffffffbfbfbfefefe |
-f6f6f6fffffffffffffffffff1f1f1ffffffffffff010101f9f9f9efefefffffff0e0e0e |
-ffffff000000090909000000000000fffffff4f4f40b0b0b0000000000000f0f0f0e0e0e |
-ffffffededed0606060b0b0bffffffffffffebebeb040404fcfcfcfffffff4f4f4ffffff |
-000000070707070707f3f3f30000000d0d0d000000ffffff000000000000080808000000 |
-000000000000171717010101000000030303f0f0f0fffffff7f7f7fffffffffffffbfbfb |
-f4f4f4ffffff000000010101060606f1f1f1fffffff1f1f1ffffff0505050000000b0b0b |
-020202000000eeeeee121212080808fdfdfd0909090000000c0c0c0000000c0c0c020202 |
-050505000000000000ffffff000000000000000000080808000000f4f4f4fffffffbfbfb |
-f8f8f8fdfdfdfffffffcfcfcfffffff7f7f7efefef151515fefefef4f4f4fefefe010101 |
-fffffffffffff7f7f7fffffffffffffcfcfcffffff070707 |
-fefefefffffff7f7f7f8f8f8ffffff000000ffffffeeeeee070707040404000000050505 |
-000000f4f4f4fbfbfbfffffff8f8f8ffffffeaeaeaf8f8f8ffffffefefefffffffffffff |
-fffffffbfbfbf5f5f5fffffffffffffbfbfbfcfcfc000000fffffffbfbfbffffffe5e5e5 |
-000000010101000000f8f8f8ffffff000000ffffff030303000000ffffff161616ebebeb |
-f9f9f9ffffff040404f0f0f0fdfdfdfafafa070707000000fffffffdfdfdffffffffffff |
-0000000505050000000c0c0c0808080000000000000404040000000000000d0d0d000000 |
-0000000a0a0a000000050505000000040404060606f7f7f7090909000000000000040404 |
-000000f9f9f9ffffff030303000000fffffff1f1f1ffffffffffff0000000a0a0a000000 |
-ffffff070707ffffffffffffeaeaeaffffff0000000a0a0a000000000000000000030303 |
-0000000505050b0b0b000000050505090909070707000000000000fffffff5f5f5f7f7f7 |
-fffffffffffff5f5f5fcfcfcf2f2f2ffffffffffffeeeeeefffffffdfdfdfffffff7f7f7 |
-f5f5f5f0f0f0fafafa0c0c0cf3f3f3f9f9f9ffffff000000 |
-fdfdfdf5f5f5ffffffffffffededed0a0a0afdfdfdffffff000000fffffffffffffafafa |
-0a0a0afffffffffffff7f7f7fffffff5f5f5ffffffffffffe9e9e9fffffffefefef7f7f7 |
-fffffffffffffffffff6f6f6fffffffffffff9f9f9060606000000060606000000fefefe |
-ffffff000000000000fefefefdfdfd060606000000020202ffffff020202f1f1f1ffffff |
-ffffff040404ffffffffffffffffff0000001c1c1c000000000000fefefefefefeffffff |
-fffffff7f7f7fffffff9f9f9f7f7f7ffffff000000f0f0f0ffffff050505000000ffffff |
-f8f8f8fffffffffffff7f7f7fffffffffffffcfcfc000000f6f6f6ffffffffffff030303 |
-020202000000000000fbfbfb050505000000fffffff8f8f8000000ffffff000000030303 |
-fbfbfbfffffffbfbfb000000ffffffffffff0000000404040d0d0d0000000d0d0d000000 |
-fefefeffffffffffff000000000000000000000000070707000000fffffff9f9f9ffffff |
-fffffffdfdfdfffffffffffffffffff2f2f2fffffffdfdfd000000000000000000030303 |
-010101010101141414000000fffffff8f8f8ffffff000000 |
-fdfdfdfffffff8f8f8fffffff9f9f9030303fffffff7f7f7000000020202000000040404 |
-0000000e0e0e0000000707070a0a0af2f2f2fffffffffffffffffff1f1f1ffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff0000000d0d0d000000000000 |
-0d0d0d000000020202fcfcfc020202000000050505fafafa000000fffffff9f9f9fbfbfb |
-0b0b0b0000000505050000000a0a0a000000010101000000030303fdfdfdfefefeffffff |
-f9f9f9fffffffffffffcfcfc040404010101f7f7f7ffffff040404010101070707000000 |
-060606fcfcfcfefefefbfbfbf7f7f7ffffff0303030000000a0a0af0f0f0ffffff000000 |
-0303030000000404040202020a0a0a000000ffffff000000030303ffffff000000fefefe |
-fffffff4f4f4ffffffffffffeeeeeeffffff000000000000060606000000000000fdfdfd |
-fffffffffffffdfdfdffffff030303000000000000020202060606fefefefbfbfbffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdfbfbfb010101 |
-000000000000fffffffcfcfcfefefefffffffcfcfc040404 |
-fffffff3f3f3f8f8f8fffffffafafa000000fdfdfdfdfdfdfdfdfdffffffffffffffffff |
-f5f5f5f1f1f1ffffffecececf6f6f6fffffffefefeecececfcfcfcfffffffffffff5f5f5 |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000010101030303000000 |
-0000000b0b0b000000050505121212000000ffffffffffff000000f7f7f7ffffff070707 |
-000000fdfdfd0707070000000101010a0a0a000000000000000000f9f9f9ffffffffffff |
-f7f7f7fffffffbfbfb060606000000fcfcfcffffff000000fffffff9f9f9000000040404 |
-0000000808080202020707070000000b0b0bedededfefefe000000131313ffffffffffff |
-0000001010100000000d0d0d0000000a0a0affffff030303020202070707000000ffffff |
-e9e9e9ffffff000000ffffffffffffffffff050505000000000000000000ffffffffffff |
-e9e9e9fffffffffffff0f0f0010101000000030303070707eaeaeaffffffffffffececec |
-fffffffffffffffffffffffffffffffffffffffffffffffff3f3f3ffffff040404000000 |
-fffffffffffff2f2f2fcfcfcfefefefffffffcfcfc040404 |
-f6f6f6fffffffffffffdfdfdfdfdfdfffffff7f7f7ffffff030303000000000000000000 |
-070707010101070707020202fffffffffffffbfbfbfffffffffffff9f9f9ecececffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7ffffffffffff |
-000000000000101010000000000000fffffffbfbfb000000ffffffffffff0f0f0f000000 |
-ffffffffffffffffff0000000000000000000e0e0e0000000000000d0d0d000000000000 |
-0e0e0e000000000000000000ffffffe9e9e90a0a0a000000000000060606030303000000 |
-040404000000040404000000000000000000191919fbfbfb000000000000000000000000 |
-040404000000000000000000040404000000000000060606fffffff7f7f7020202000000 |
-0a0a0afffffffcfcfcffffff0000000000000000001a1a1affffff040404fbfbfbfcfcfc |
-ffffffffffffebebebffffff060606000000ffffff0c0c0cfefefefffffff3f3f3ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff0b0b0b000000000000090909 |
-0000000000000000000c0c0cfefefefffffffcfcfc040404 |
-ffffffedededfafafafffffff5f5f5fffffff7f7f7fdfdfdfffffffffffff9f9f9ffffff |
-fbfbfbffffffe1e1e1ffffff000000fffffffffffffbfbfbfdfdfdf8f8f8fffffffefefe |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffafafaffffff |
-0c0c0c000000040404090909fffffffbfbfb111111000000f7f7f7ffffff000000ffffff |
-fbfbfbf6f6f6f9f9f9ffffff010101000000fffffff9f9f9fdfdfdfcfcfcf6f6f6111111 |
-ffffff000000000000ffffffffffff040404010101fafafafffffffefefe000000080808 |
-000000010101000000121212000000090909f1f1f1ffffff000000080808000000fdfdfd |
-0a0a0a0b0b0b030303040404030303000000ffffffededed040404fffffff7f7f7121212 |
-f9f9f90000000000000000000d0d0d000000ffffff000000000000000000fffffffefefe |
-fafafaefefeffffffffdfdfd000000000000f3f3f3000000fffffffffffffffffff8f8f8 |
-fffffffffffffffffffffffffffffffffffffffffffffffff5f5f5fdfdfdffffffffffff |
-fefefeffffffffffff000000fefefefffffffcfcfc040404 |
-f7f7f7fffffffbfbfbffffff010101e8e8e8fffffff3f3f3f9f9f9fffffffefefef2f2f2 |
-fffffff9f9f9fffffff9f9f9000000ffffffe8e8e8f7f7f7fffffffefefeffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff070707fdfdfdfffffff1f1f1 |
-0b0b0b000000030303f7f7f7fcfcfcffffff000000f9f9f9ffffff0808080c0c0cf7f7f7 |
-fffffffffffffffffff7f7f7ffffff000000fffffffafafa000000000000fffffff7f7f7 |
-000000fffffffafafaf4f4f4fafafa000000fffffff7f7f7ffffffffffff000000000000 |
-fafafa1a1a1a030303ebebeb040404000000fffffffefefe131313000000ffffffffffff |
-000000070707000000060606000000ffffffffffffffffff000000fefefefefefe000000 |
-030303020202000000111111000000000000ffffff000000ffffff080808ffffffffffff |
-f7f7f7f7f7f7fffffff5f5f5ffffffffffffffffff020202fffffff8f8f8fffffff4f4f4 |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeebebebffffff |
-fefefefbfbfbffffff000000fefefefffffffcfcfc040404 |
-fffffffffffff9f9f9f8f8f8f6f6f6fffffff7f7f7fefefeeaeaeafffffff7f7f7ffffff |
-fffffffefefe000000000000000000e8e8e8ffffffffffffedededfffffffffffff8f8f8 |
-ffffffffffffffffffffffffffffffffffffffffffffffff080808f6f6f6ffffffffffff |
-000000101010000000fffffffcfcfc151515f3f3f3fcfcfcf8f8f8000000fdfdfdffffff |
-fbfbfbffffffedededfffffff1f1f1000000ffffff0000000b0b0b000000040404000000 |
-060606fefefefffffffafafaffffff0b0b0bf6f6f6ffffff000000000000000000070707 |
-0e0e0e000000fffffffffffff6f6f6060606fefefef8f8f80000000e0e0ef6f6f6000000 |
-1818180000000d0d0d000000050505fdfdfd000000ffffff000000050505ffffff030303 |
-000000010101ffffff000000000000fffffff3f3f3010101ffffff000000070707fcfcfc |
-ffffffffffffe0e0e0fffffffefefefbfbfbffffff000000ecececfffffffafafaffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000010101020202000000 |
-0505050000000d0d0d0b0b0bfefefefffffffcfcfc040404 |
-f5f5f5f3f3f3ffffffffffffffffff000000ffffffffffff171717000000000000000000 |
-000000020202fffffff8f8f8fffffffffffff6f6f6fffffffdfdfdfffffffffffffcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000fffffff4f4f4ffffff |
-0c0c0c000000060606000000010101000000fffffffffffff5f5f5080808fffffff5f5f5 |
-fefefefffffffffffff8f8f8ffffff040404000000fffffff8f8f8ffffffffffff000000 |
-fffffff4f4f4f6f6f6ffffffeeeeee1a1a1afbfbfbf1f1f1020202ffffff000000030303 |
-000000ffffff000000fffffff3f3f3060606000000ffffff030303000000000000050505 |
-ffffff000000000000020202060606000000fafafaffffff000000000000040404000000 |
-0c0c0cf0f0f0fffffffefefe000000000000ffffffffffff000000ffffff000000000000 |
-000000020202020202060606fcfcfcffffffe5e5e5111111fffffffafafafdfdfdf8f8f8 |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfbf7f7f7 |
-ffffffffffffe6e6e6060606fefefefffffffcfcfc040404 |
-fcfcfcfffffffffffffafafaffffff000000fdfdfdfffffff4f4f4fffffffffffffafafa |
-fffffffefefeececec0c0c0cfbfbfbfffffffffffff7f7f7fdfdfdf0f0f0fffffffbfbfb |
-ffffffffffffffffffffffffffffffffffffffffffffffff020202ffffffffffff000000 |
-000000010101000000060606000000fffffffdfdfdf0f0f0fffffff7f7f7f0f0f0ffffff |
-fffffff9f9f9050505ffffff050505000000050505fefefe101010e5e5e50e0e0e000000 |
-f5f5f5ffffff070707fefefeffffff000000050505ffffff010101000000ffffff000000 |
-060606fbfbfbfffffffffffffdfdfd050505000000040404090909000000000000ffffff |
-f3f3f3080808010101000000000000060606ffffff000000050505ffffff000000020202 |
-f8f8f8fffffff6f6f6ffffff000000fffffffffffff9f9f9000000ffffffffffff040404 |
-000000000000080808000000060606fdfdfdffffff000000f9f9f9fffffff4f4f4ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff6f6f6080808000000060606 |
-000000fdfdfdffffff000000fefefefffffffcfcfc040404 |
-fffffffffffffbfbfbffffffffffff0e0e0efbfbfbfcfcfcffffff000000ffffffffffff |
-f6f6f60000000b0b0b000000000000fffffff2f2f2fbfbfbfffffffffffff6f6f6ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff0a0a0afffffff2f2f2141414 |
-f0f0f0050505000000000000fffffff8f8f8fcfcfcfbfbfbfcfcfcfffffff4f4f4ffffff |
-fffffffcfcfc000000ffffff0000000b0b0b010101000000000000070707080808f8f8f8 |
-fffffff7f7f7040404fdfdfd0000000d0d0d000000f9f9f90f0f0f070707f4f4f4000000 |
-000000fffffff7f7f7ffffffffffff000000080808000000050505000000090909fcfcfc |
-ffffff0000000101010000000000000b0b0bf7f7f7111111000000fafafa000000030303 |
-fafafafffffffdfdfdfefefe020202fdfdfdfffffff5f5f50a0a0af7f7f7040404000000 |
-0000000a0a0afafafaffffff0000000c0c0c000000010101fffffff7f7f7fdfdfdfdfdfd |
-f6f6f6fffffffafafafffffffffffff9f9f9fffffffbfbfb030303000000000000000000 |
-000000020202050505f3f3f3fbfbfbfffffffbfbfb040404 |
-f0f0f0ffffffffffffffffffe8e8e8090909f2f2f2ffffff000000f8f8f8fdfdfdffffff |
-070707f9f9f9ffffffefefef080808e4e4e4fffffffffffffcfcfcfffffff7f7f7ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000000000070707efefef |
-ffffffffffff0c0c0c020202fffffffffffffffffffafafa000000e7e7e7fffffffbfbfb |
-fcfcfcffffff070707f9f9f9010101000000000000121212070707000000000000f6f6f6 |
-f8f8f8060606fdfdfdffffff000000ffffff000000090909000000efefef111111000000 |
-0707070606060606060b0b0b0000000000000505050404040202020f0f0f0000000a0a0a |
-e7e7e7000000050505fcfcfc000000020202050505000000fefefe1c1c1c000000ffffff |
-ffffffefefeff7f7f7ffffff000000f8f8f8fefefeffffff000000ffffff030303050505 |
-151515000000fffffff8f8f8f9f9f9070707000000fffffff6f6f6fefefefffffff4f4f4 |
-fffffff6f6f6fafafaffffffe9e9e9ffffffeaeaea040404eaeaeafffffffefefeffffff |
-fffffffbfbfbfcfcfc101010fffffff1f1f1ffffff000000 |
-fffffffffffff6f6f6ffffffffffff000000fffffffdfdfdffffff040404000000000000 |
-060606fffffff1f1f10d0d0d020202fffffffbfbfbefefeffffffff8f8f8ffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff030303010101ffffffffffff |
-fefefefffffff1f1f1000000000000f5f5f5fdfdfdffffff121212fffffffffffffafafa |
-fcfcfcf4f4f40a0a0a0000000101010c0c0c000000000000000000000000ffffffffffff |
-f8f8f8000000fdfdfdf6f6f6000000ffffffffffff000000000000111111000000020202 |
-0000000303030000000000001c1c1c060606050505000000000000000000000000ffffff |
-ffffff010101000000ffffff0a0a0a000000000000fffffff4f4f4000000fffffffdfdfd |
-fcfcfcffffffffffff000000080808080808fcfcfcffffff050505ffffff000000000000 |
-000000030303efefeffffffffcfcfcfbfbfb141414fbfbfbfffffff6f6f6f7f7f7ffffff |
-f1f1f1fffffffbfbfbfdfdfdfffffffafafaffffffffffff0b0b0bffffffe8e8e8fdfdfd |
-f7f7f7ffffffffffff000000fefefefffffff2f2f2171717 |
-f9f9f9fffffffcfcfcffffffffffff000000fffffffdfdfdebebebffffffffffffffffff |
-f2f2f2fffffffffffffffffff7f7f7fffffff9f9f9fffffffdfdfdfefefef1f1f1ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000090909fffffff0f0f0 |
-fafafafafafafffffffffffffcfcfc151515000000000000000000f9f9f9ecececffffff |
-ffffffffffff000000ffffff000000010101070707070707181818000000f9f9f9fdfdfd |
-ffffff040404fcfcfcffffff060606f2f2f2e9e9e9ffffff000000050505ffffff000000 |
-0303030000000e0e0e000000000000020202000000fffffffffffff7f7f7fffffff5f5f5 |
-f5f5f5ffffff000000fdfdfdffffff000000171717fafafa131313000000fbfbfbffffff |
-fffffff4f4f4ffffff0000000c0c0c070707fefefefafafa080808ffffff020202030303 |
-0e0e0e000000ffffffebebebf7f7f7ffffff000000f7f7f7f5f5f5fffffffefefef2f2f2 |
-fffffffffffff4f4f4fffffffffffff5f5f5fafafaf5f5f5000000000000131313000000 |
-020202020202060606080808fefefefffffff2f2f20e0e0e |
-fcfcfcfffffffffffffdfdfdeeeeee1e1e1ef7f7f7ffffffffffffffffffedededffffff |
-020202000000fffffff1f1f1ffffffebebebfffffffdfdfdfffffffdfdfdfefefef9f9f9 |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000f5f5f5fffffff8f8f8 |
-fafafafffffffafafa000000fefefef8f8f8ffffff0000000d0d0dfafafafffffffefefe |
-ffffff000000ffffffffffff000000f8f8f80e0e0e000000000000080808fffffff2f2f2 |
-000000fdfdfdfffffff8f8f8000000fffffffffffffafafa000000050505f5f5f5101010 |
-ffffffefefefffffffffffff040404000000141414fcfcfcfffffffffffffffffffdfdfd |
-ffffff000000000000fffffffbfbfb111111000000ffffff000000020202ffffffededed |
-fdfdfdfefefeffffffffffffe9e9e9020202eeeeee0d0d0d000000ececec0707070f0f0f |
-000000060606020202ffffffffffffffffff000000ffffffffffffeaeaeafffffffdfdfd |
-fffffff5f5f5ffffffffffffe6e6e6fcfcfcfffffff8f8f8ffffffffffff000000090909 |
-020202000000000000fefefefffffff4f4f4ffffff000000 |
-fffffffffffff5f5f5fdfdfdffffff000000fffffffffffff7f7f7fffffffffffffbfbfb |
-000000030303f2f2f2fffffffdfdfd030303fcfcfcffffffeeeeeefffffffdfdfdfcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffff0c0c0ce7e7e7ffffffffffff |
-fffffffefefefcfcfc0b0b0bfffffff6f6f6f5f5f5ffffffffffffeeeeeefffffff7f7f7 |
-ffffff000000f1f1f1ffffff000000000000040404000000000000eeeeeeffffffffffff |
-020202ffffffffffff030303fffffffffffffcfcfcffffff000000080808010101000000 |
-000000121212000000f4f4f4000000080808fafafafbfbfbf8f8f8ffffffe7e7e7ffffff |
-ffffffeeeeee0d0d0dfbfbfbffffff0000000000000b0b0b131313fefefefbfbfbffffff |
-000000020202000000ffffffffffff0505050000000000000000000b0b0bffffff000000 |
-161616000000000000fffffff9f9f9edededffffff000000050505fdfdfdfdfdfdffffff |
-f9f9f9fffffff6f6f6fafafaffffffffffffecececfefefefdfdfd0000000b0b0bffffff |
-ecececfffffffffffffbfbfbf6f6f6fffffffafafaf8f8f8 |
-efefeffbfbfbfdfdfdfffffffcfcfc070707f8f8f8ffffffeaeaeafffffff7f7f7ffffff |
-edededffffffffffff000000010101010101f6f6f6fffffffafafaf9f9f9fafafaffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff000000f9f9f9 |
-fbfbfbf7f7f7fefefe000000f7f7f7ffffffffffffefefeffdfdfdfffffffcfcfcffffff |
-f4f4f4000000ffffffffffff0000000000000a0a0a000000000000fffffff7f7f7f3f3f3 |
-0d0d0dfbfbfbf4f4f4000000f9f9f9ffffffffffffffffffffffff0000000d0d0dffffff |
-ffffff000000000000090909131313000000fffffffffffffefefefafafafffffffdfdfd |
-fdfdfdffffff000000ffffffffffff0000000b0b0b000000eeeeeefffffffffffff9f9f9 |
-010101060606000000fefefeefefef000000ffffff000000000000000000ffffff000000 |
-030303000000111111000000fffffffefefe000000000000000000fafafafffffff9f9f9 |
-f9f9f9fffffffffffff6f6f6f0f0f0fdfdfdffffffffffffffffff000000000000ffffff |
-fffffffffffff3f3f3fffffffffffff8f8f8000000fbfbfb |
-fffffff0f0f0fffffffffffff2f2f2fffffffffffffefefefffffff7f7f7fafafafdfdfd |
-ffffff000000000000040404f9f9f9fffffffefefefffffffffffffffffff3f3f3ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfd |
-ffffffffffffffffff060606fafafafffffff2f2f2fffffffefefe000000000000ffffff |
-ffffff000000fcfcfcf3f3f3ffffff050505000000070707fffffff7f7f7f8f8f8ffffff |
-000000ffffffffffff000000fffffffffffffffffff2f2f2fefefe121212000000fcfcfc |
-ffffff000000101010000000000000fcfcfcf8f8f8fffffffefefefffffff7f7f7ffffff |
-fefefefefefe010101fffffff7f7f70b0b0b020202000000fffffffffffffffffffefefe |
-040404000000090909fafafafcfcfcfffffff2f2f2ffffffffffff000000ffffff000000 |
-fefefe0f0f0feaeaea0b0b0b0000000000000000000505050a0a0a010101f5f5f5ffffff |
-fffffff7f7f7f6f6f6fdfdfdfffffffffffffcfcfcfffffff9f9f9fffffffbfbfbf9f9f9 |
-fffffff4f4f4fffffffffffffafafafbfbfb040404fefefe |
-fffffffdfdfdfffffffffffffffffff5f5f50a0a0af7f7f7fffffffffffff4f4f40b0b0b |
-000000010101000000040404fefefefefefefefefef5f5f5fffffffffffff4f4f4fafafa |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000fffffffffffff8f8f8 |
-fffffffefefefdfdfd0a0a0a000000fcfcfcfbfbfbfefefeffffffffffff020202fafafa |
-fbfbfb000000ffffffffffff000000000000030303020202fffffffefefefcfcfc010101 |
-000000fafafa010101000000fdfdfdfbfbfbfffffff7f7f7ffffff030303000000ffffff |
-f6f6f60e0e0e000000050505030303ffffffedededfffffffcfcfcfffffff7f7f7f9f9f9 |
-f2f2f2181818ebebebffffffffffff000000050505020202ffffffffffffffffff000000 |
-000000050505fbfbfbffffffffffffefefeffffffffffffff7f7f70c0c0cf2f2f2070707 |
-0000000000000e0e0e000000060606000000000000030303ffffffefefeffffffffbfbfb |
-fffffff2f2f2fefefefffffffffffff7f7f7070707040404fffffff9f9f9ffffffffffff |
-f8f8f8f9f9f9fffffff4f4f4fffffff5f5f5070707ffffff |
-fffffffffffff3f3f3fffffffcfcfcf9f9f9191919ffffffffffffffffff000000000000 |
-0b0b0b000000040404000000060606020202000000fffffffffffff5f5f5ffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff161616000000000000ffffff |
-ebebebfffffffdfdfd000000000000ffffffffffffffffffffffffe8e8e8040404ffffff |
-ffffff0d0d0d0000000000001b1b1b000000000000fafafaf5f5f5fffffffffffff9f9f9 |
-ffffffffffff000000000000fffffff1f1f1fffffffffffff2f2f2000000050505000000 |
-060606000000101010030303000000f4f4f4fffffffffffffffffffbfbfbffffffffffff |
-ffffffe6e6e6fffffffbfbfbf4f4f4040404000000000000f6f6f6ffffff000000060606 |
-0a0a0a000000fffffff6f6f6f9f9f90c0c0cfffffff8f8f8ffffff000000fffffffcfcfc |
-101010040404000000ffffff000000060606fffffffcfcfcf0f0f0fffffffffffff2f2f2 |
-f9f9f9fffffff9f9f9f6f6f6fffffff9f9f9000000fbfbfbfbfbfbffffff000000090909 |
-000000020202fffffffffffffbfbfbf9f9f9060606f4f4f4 |
-fdfdfdfefefeffffffeeeeeeffffffffffff000000fffffff3f3f3fafafaf8f8f8ffffff |
-ffffffe7e7e7fffffffafafaf0f0f0070707000000f5f5f5ffffffffffffedededffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000f8f8f8 |
-fffffff8f8f8fdfdfdffffff030303f3f3f3ffffffebebebffffffffffff000000030303 |
-f0f0f0070707000000060606000000000000ffffffffffffffffffedededfefefe121212 |
-f6f6f6fafafa070707000000f8f8f8ffffffedededf9f9f9ffffff000000ffffff0f0f0f |
-040404f8f8f8040404000000000000fffffffffffff8f8f8fffffff1f1f1fffffffafafa |
-f7f7f7fffffff3f3f3000000ffffff0000000101010707070000000000000e0e0e000000 |
-000000000000fffffff5f5f5fffffffdfdfdf1f1f1fffffffbfbfb040404fffffff3f3f3 |
-111111000000060606000000030303fffffff1f1f1f9f9f9ffffffebebebffffffffffff |
-f7f7f7fdfdfdfffffff6f6f6fffffffffffff7f7f70d0d0d0000000000000c0c0cfcfcfc |
-fffffff2f2f2f7f7f7fffffffffffff7f7f7010101ffffff |
-fffffff8f8f8fffffff3f3f3fffffff9f9f9121212fbfbfbfffffffffffff8f8f8fafafa |
-fafafafffffff6f6f6ffffffffffffffffff000000fffffffffffff4f4f4ffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff000000ffffff080808ffffff |
-f7f7f7fffffffffffff5f5f5000000fdfdfdf6f6f6fffffff1f1f1f6f6f60b0b0b000000 |
-ffffffebebeb000000070707020202000000fffffff3f3f3fffffff7f7f70a0a0a000000 |
-fafafaffffff000000050505fefefefafafafffffffffffffcfcfc060606fafafaf8f8f8 |
-000000ffffff000000000000090909080808000000fffffffffffff6f6f6fffffff1f1f1 |
-fffffffefefeebebeb171717efefefffffff060606000000000000030303000000f9f9f9 |
-040404070707000000fffffff1f1f1fefefeffffffebebebffffff080808fffffff4f4f4 |
-000000ffffff000000080808010101f3f3f3fffffffefefefcfcfcffffffefefeff4f4f4 |
-fffffffefefefffffff1f1f1fcfcfcefefef0e0e0ef1f1f1fffffffffffffffffff9f9f9 |
-0000001c1c1cf0f0f0fbfbfbfdfdfd000000fffffff0f0f0 |
-fffffff8f8f8ecececfffffffdfdfdfdfdfdfffffff3f3f3fafafaf5f5f5fffffff3f3f3 |
-fffffffbfbfbf6f6f6ffffffefefefffffff000000fffffff8f8f8f6f6f6ffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff090909eeeeee000000f6f6f6 |
-fffffff9f9f9fcfcfcffffff010101fffffff8f8f8f4f4f4ffffffffffff000000080808 |
-efefef060606090909000000040404000000000000020202000000fdfdfd090909f1f1f1 |
-ffffffeeeeee070707070707020202ffffff060606efefeffafafa020202f5f5f5ffffff |
-0f0f0f000000151515000000000000ffffff0000000b0b0b000000000000000000060606 |
-0404040f0f0f000000000000fffffff8f8f8090909000000060606ffffff000000161616 |
-000000030303000000fffffff7f7f7fffffffffffffffffff9f9f9000000fffffffcfcfc |
-fffffffafafa000000050505000000fffffffffffff5f5f5f6f6f6fbfbfbf7f7f7ffffff |
-ffffffe9e9e9f3f3f3fffffffffffffffffffffffff6f6f6f8f8f8f9f9f9fdfdfdffffff |
-fafafafefefefbfbfbfffffffefefe000000ffffffffffff |
-f4f4f4fefefeffffffffffffffffffefefeffdfdfd050505fdfdfdf8f8f8ffffffffffff |
-f5f5f5fdfdfdfffffff4f4f40e0e0e000000040404020202fffffffcfcfcfbfbfbfbfbfb |
-fffffffffffffffffffffffffffffffffffffffffffffffffbfbfb0000000a0a0affffff |
-fffffff5f5f5ffffffffffff0000000e0e0effffff0c0c0cf7f7f7f2f2f2000000000000 |
-ffffffffffff141414000000080808040404070707000000f9f9f9ffffff000000000000 |
-1212120000000f0f0f000000fafafaffffff030303fffffff7f7f7ffffff020202ffffff |
-000000080808000000090909fffffffffffffffffffefefe0000000d0d0dfbfbfbf2f2f2 |
-ffffff000000040404030303fcfcfcffffff0000000909090000000000000e0e0e000000 |
-020202000000000000fffffffffffffffffff3f3f3f3f3f3ffffff0c0c0c020202040404 |
-fefefe000000101010000000050505f6f6f6fcfcfcfffffffffffffffffffffffff2f2f2 |
-fffffffffffffafafaf6f6f6fbfbfbf9f9f9f0f0f0fffffffffffffffffffffffff6f6f6 |
-fbfbfbf8f8f8ffffffffffffffffff010101fffffff7f7f7 |
-ffffffffffffffffffe6e6e6fffffffffffff7f7f7020202fffffff7f7f7f7f7f7fcfcfc |
-ffffff000000000000030303020202fbfbfbfffffffdfdfdf5f5f5f1f1f1fffffff3f3f3 |
-fffffffffffffffffffffffffffffffffffffffffffffffff9f9f9060606000000ffffff |
-fefefefffffffefefef3f3f3ffffff090909f3f3f3000000fffffff8f8f80d0d0d000000 |
-fafafa0303030000000d0d0d000000040404000000000000ffffffffffff000000000000 |
-000000050505f5f5f5ffffff0b0b0bf0f0f0000000f6f6f6ffffff000000070707000000 |
-040404000000000000000000f3f3f3fafafaffffff060606000000ffffffffffffffffff |
-fffffff6f6f6fefefe000000fffffff7f7f70000000a0a0a070707000000121212000000 |
-f7f7f70e0e0e000000fefefe090909000000fffffffffffff4f4f4000000000000040404 |
-080808000000000000000000050505fffffff6f6f6fbfbfbfbfbfbf0f0f0fffffffcfcfc |
-f3f3f3fffffffafafafffffffefefef7f7f7ffffffeeeeeefafafafcfcfcfffffff2f2f2 |
-fffffffffffff4f4f4f9f9f9ffffff000000f0f0f0ffffff |
-fafafafffffff1f1f1fffffffffffff7f7f7ffffff000000f5f5f5fffffffefefe000000 |
-020202f6f6f6fffffff9f9f9000000060606040404000000fffffffffffff0f0f0ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffbfbfb0a0a0a040404ededed |
-fffffffafafafffffffffffffffffff3f3f3fffffffffffff4f4f4ffffff000000000000 |
-fffffff7f7f70c0c0c000000fffffffcfcfc0d0d0d070707fcfcfcffffff000000ffffff |
-fffffff4f4f4fffffffffffffffffff9f9f9fffffffffffff3f3f3ffffff000000040404 |
-000000030303f6f6f6070707ffffffffffff000000000000030303f0f0f0ffffff000000 |
-000000ffffff070707030303fefefeffffff0c0c0c000000000000000000000000020202 |
-080808000000000000070707fcfcfcf2f2f2fffffff7f7f7030303fffffffffffffbfbfb |
-fdfdfdffffff000000020202000000fffffffffffffcfcfcfffffffffffff0f0f0ffffff |
-fffffffffffffdfdfdfbfbfbffffff000000000000fffffffffffff4f4f4ffffffffffff |
-fafafafefefefffffffffffffefefefdfdfdffffffffffff |
-f6f6f6fffffff0f0f0fffffffafafafffffff1f1f10d0d0dfffffff7f7f7ffffffffffff |
-f8f8f8ffffff000000080808050505f6f6f6fffffffafafa040404fffffff5f5f5ffffff |
-fafafafffffffffffffffffffffffffffffffffffffafafafbfbfb0c0c0c000000000000 |
-fffffffffffffffffffffffffdfdfdfffffffdfdfdffffff000000ffffffffffff000000 |
-fcfcfcffffffffffff000000fffffffcfcfc0c0c0c000000070707030303000000ffffff |
-fffffffffffffffffffbfbfb020202080808f8f8f8f3f3f3fffffff5f5f50c0c0c000000 |
-0b0b0bf0f0f0ffffff010101ffffff000000070707000000000000fffffffffffffbfbfb |
-fffffff9f9f9000000000000f8f8f8ffffff010101000000000000040404ffffff000000 |
-000000000000fffffffffffff1f1f1fffffff7f7f7fdfdfdfffffff6f6f6f6f6f6ffffff |
-fafafafafafa000000040404000000fffffff5f5f5fffffffffffffffffff8f8f8ffffff |
-fffffff6f6f6fffffffffffff2f2f2ffffffffffff000000ffffffe1e1e1ffffffffffff |
-fcfcfcf3f3f3fffffff1f1f1000000fffffffbfbfbf5f5f5 |
-ffffffffffffefefeffffffffffffffbfbfbfffffff1f1f1000000fffffffbfbfbf6f6f6 |
-ffffff000000fffffff9f9f9f8f8f8fcfcfcffffffffffff000000fffffffffffff0f0f0 |
-fffffff8f8f8f7f7f7fffffffffffff2f2f2fbfbfbffffffffffff000000ffffff0a0a0a |
-ffffff000000fdfdfdf4f4f4ffffffffffff000000f7f7f7181818f4f4f4f7f7f7060606 |
-ffffffffffff000000fbfbfbfffffffafafaefefeffffffff8f8f8fdfdfdfafafaf9f9f9 |
-f2f2f2fffffffffffffafafa000000000000fffffffffffffffffff8f8f8000000070707 |
-0000001a1a1a0000000000000000000303030000000c0c0c0000000a0a0a050505000000 |
-fffffff6f6f60b0b0b0707070d0d0dfcfcfc030303070707000000070707000000060606 |
-fffffffffffffdfdfdfffffff8f8f8fffffffffffffffffff0f0f0ffffffffffffffffff |
-0000000303030e0e0e000000000000fffffffffffffffffff9f9f9f8f8f8f5f5f5ffffff |
-fffffffbfbfbfffffff4f4f4fffffffafafa020202fdfdfd0303031d1d1df5f5f5f4f4f4 |
-fcfcfcffffffedededffffff151515e9e9e9ffffffffffff |
-f8f8f8fefefefffffffffffffffffffffffff3f3f3ffffff0d0d0df6f6f6fafafaffffff |
-000000ffffffffffffffffffffffffffffff000000000000fffffffffffffdfdfdffffff |
-fffffffffffffefefefffffff4f4f40000001f1f1f000000000000000000f6f6f6000000 |
-000000020202fffffffffffffffffffefefef9f9f9fffffff9f9f9f5f5f5ffffff000000 |
-040404fefefefffffffffffffafafafffffffffffff9f9f9070707f9f9f9ffffffffffff |
-fdfdfdfffffff7f7f7fffffffcfcfc101010000000fcfcfcfffffffbfbfb000000040404 |
-000000000000000000101010fefefe000000000000000000000000000000f8f8f8ffffff |
-fafafaf7f7f7ffffff000000000000000000000000090909020202060606000000fefefe |
-f9f9f9fffffffbfbfbf5f5f5ffffffe1e1e1060606f7f7f7fffffff7f7f7ffffffffffff |
-0b0b0b000000efefef0d0d0d030303eaeaeafffffffffffffdfdfdfffffffffffff1f1f1 |
-ffffffffffffececec0404040000000707070000000909090000000000000b0b0bececec |
-fefefefffffff9f9f9040404e7e7e7fffffff6f6f6ffffff |
-fbfbfbffffffffffffebebebfbfbfbfffffff5f5f5f9f9f9fefefe000000fffffff5f5f5 |
-000000f9f9f9fffffff9f9f9fbfbfb0000001b1b1b040404eeeeeefefefefffffff1f1f1 |
-fafafafffffffffffffdfdfdfffffffefefeecececf6f6f60000000101010d0d0d000000 |
-1a1a1affffffe0e0e0fffffffafafaf3f3f3fffffff7f7f7fffffffffffffbfbfb040404 |
-0000000a0a0a000000fafafafffffffafafaf5f5f5fcfcfc000000ffffffe2e2e2f9f9f9 |
-ffffffffffffffffffffffffffffff000000050505fdfdfdfafafaffffff020202010101 |
-0000000a0a0a040404000000fafafa060606141414000000f6f6f6fffffff8f8f8f2f2f2 |
-fffffffffffff8f8f8ffffff050505ffffff050505000000070707000000ffffffffffff |
-fffffff4f4f4f7f7f7fffffffffffffffffffffffffdfdfdfdfdfdfbfbfbffffffffffff |
-0000000a0a0a0505050000000000000e0e0e000000040404000000fffffffffffff6f6f6 |
-f4f4f4ffffffffffff090909fbfbfbfffffffffffff3f3f3ffffffffffff0303030d0d0d |
-fffffff6f6f6ffffff030303fffffffcfcfcfdfdfdffffff |
-fffffffcfcfcfcfcfcfffffffdfdfdfbfbfbffffffffffffffffff020202fdfdfdffffff |
-ffffff0202020000000b0b0b000000020202000000000000171717000000050505ffffff |
-fdfdfdfffffff6f6f6f9f9f9fffffffffffffafafafffffff7f7f7fffffff9f9f9ffffff |
-0000000000001f1f1f000000171717000000f4f4f4000000fffffff8f8f8ffffff000000 |
-000000060606000000ffffffffffff000000ffffffffffff070707efefefffffffffffff |
-fdfdfdf4f4f4fffffffbfbfbfffffff2f2f2f4f4f4030303fffffff9f9f9040404000000 |
-0707070a0a0a000000181818000000000000000000fffffffffffff8f8f8010101000000 |
-010101fdfdfdf3f3f3f7f7f7000000020202000000000000030303131313edededfefefe |
-fffffff1f1f1fffffffffffff8f8f8e6e6e6fffffffffffffafafa000000020202131313 |
-0202020000000f0f0f000000030303000000000000ffffff0a0a0af9f9f9eeeeeeffffff |
-ffffffffffffefefef0e0e0e000000f3f3f3fffffffffffffafafafffffffffffffbfbfb |
-ffffffeeeeeeffffff030303f3f3f3f0f0f0ffffffffffff |
-fffffffbfbfbfafafafffffffffffff2f2f2fffffff0f0f0f5f5f5fdfdfdffffffe6e6e6 |
-fffffffffffffffffff2f2f2000000fffffffffffff5f5f5ffffffffffff000000ffffff |
-f3f3f3fffffff3f3f3ffffffffffff0000000e0e0e000000020202080808f2f2f2ffffff |
-fefefefffffff7f7f7fafafae5e5e50e0e0e000000060606000000f1f1f10a0a0affffff |
-000000f7f7f70a0a0aebebebfffffffffffffefefef7f7f7000000fffffff9f9f9f2f2f2 |
-fffffffffffffffffff7f7f7f6f6f6fdfdfdffffff060606f6f6f6ffffff050505000000 |
-000000000000f1f1f1000000101010fbfbfb0d0d0d000000060606000000090909fcfcfc |
-f5f5f5ffffffffffffffffff0505050000001212120707070000000303030b0b0bffffff |
-f7f7f7fffffffffffff5f5f5ffffff0707070000000000000808080000000e0e0e000000 |
-050505ffffffedededfffffffffffffefefe050505000000000000f7f7f7ffffffffffff |
-f7f7f7fffffffffffffafafafffffffdfdfd000000fffffffffffffafafaf6f6f6ffffff |
-ffffffffffff090909f8f8f8fffffffffffffbfbfbeeeeee |
-fffffffffffff9f9f9f6f6f6fafafafffffffffffffdfdfdfffffffdfdfd0f0f0ff9f9f9 |
-ffffffebebeb090909070707fffffff8f8f8fffffff2f2f2fbfbfbfbfbfb000000ffffff |
-fffffffefefefffffff8f8f8f2f2f21515150000000000000101010101010d0d0d000000 |
-000000fffffffffffffafafafffffff6f6f6ffffff000000050505060606000000000000 |
-000000111111000000fffffffcfcfce9e9e9ffffffffffff000000ffffffeeeeeeffffff |
-fffffff7f7f7efefeffffffffdfdfdffffffeeeeee000000040404f9f9f90b0b0b000000 |
-0000000101011515150d0d0deaeaeafffffffbfbfbfdfdfd030303ffffff000000ffffff |
-ffffffe6e6e6fffffff9f9f9fafafa0000000202020101010a0a0a050505000000fcfcfc |
-fffffff8f8f8f0f0f0ffffff000000000000090909000000030303000000ffffffffffff |
-fafafafffffffdfdfd000000000000040404000000000000020202ffffffeaeaeaffffff |
-fffffff9f9f9fffffff8f8f8fcfcfcffffffe8e8e8090909050505f6f6f6ffffffffffff |
-fffffff6f6f6000000ffffffeeeeeefffffffcfcfcffffff |
-f4f4f4fffffffffffffbfbfbfffffffffffff3f3f3fffffffbfbfbffffff000000fbfbfb |
-fffffffdfdfdfdfdfdfafafafffffffffffffbfbfbffffff080808000000fffffffdfdfd |
-fffffff4f4f4fffffff5f5f5ffffff000000000000030303010101000000020202000000 |
-070707000000010101030303000000fefefefcfcfcfffffffafafafffffffefefe000000 |
-050505000000060606000000fffffffffffff6f6f6fafafafffffff4f4f4fffffff3f3f3 |
-fffffffffffffffffffffffffffffffbfbfbfffffff7f7f7000000090909000000080808 |
-090909000000000000fffffffffffffffffff8f8f8fffffffffffffefefef5f5f5fbfbfb |
-fffffffffffff9f9f9fefefeffffffffffff0000000000000000000000000f0f0ff9f9f9 |
-f7f7f70101010d0d0d0000000a0a0a000000000000fbfbfbf9f9f9fffffff4f4f4000000 |
-060606000000000000030303010101060606000000010101ffffffecececfffffff9f9f9 |
-fafafa000000050505010101000000000000121212000000000000000000000000ffffff |
-f2f2f2ffffff070707fcfcfcfdfdfdfffffff6f6f6ffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffff080808000000 |
-fffffffffffff4f4f4ffffffffffff010101000000000000fcfcfcfffffffffffffbfbfb |
-f6f6f6ffffffffffffedededfffffffcfcfc0000000303030000000000000a0a0af4f4f4 |
-000000080808f6f6f6050505000000030303000000010101030303fffffffffffffbfbfb |
-ffffffffffffffffff000000000000000000000000ffffffffffff000000fefefeffffff |
-fffffff9f9f9fffffffffffffffffff9f9f9fcfcfcfffffff0f0f00c0c0c000000080808 |
-0000000707070000000b0b0bfefefefffffffffffffffffff4f4f4fffffffcfcfcffffff |
-f8f8f8fffffff5f5f5ffffffffffffffffff000000010101050505010101000000080808 |
-000000020202000000f8f8f8fffffff4f4f4fffffffcfcfc080808000000101010000000 |
-050505000000090909000000000000000000060606fcfcfcfbfbfbfffffffbfbfbffffff |
-0a0a0af9f9f9fffffff7f7f7000000fffffffffffffffffffbfbfbfffffffffffff7f7f7 |
-fefefe030303eeeeeeffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffffeaeaea0f0f0f |
-fffffff1f1f1ffffff050505000000fffffffffffffffffff1f1f1fffffffffffff9f9f9 |
-0b0b0bfdfdfdffffffffffffeeeeeefffffffffffffffffffdfdfd121212000000ffffff |
-000000000000000000010101070707f7f7f70f0f0f000000000000000000090909000000 |
-000000010101fffffffefefeffffffeeeeeeffffff0000000000000101010808080a0a0a |
-000000111111f9f9f9000000f2f2f2ffffffffffffffffff050505ffffff010101000000 |
-0a0a0a0000000f0f0ffbfbfb000000fffffff9f9f9fcfcfcfffffff4f4f4fbfbfbffffff |
-fffffff8f8f80000000d0d0dffffff0000001313130606060000000f0f0ffffffffbfbfb |
-ffffffffffffffffff0000000000000303030000000d0d0d000000131313000000070707 |
-020202f5f5f5000000060606fffffffffffffdfdfdf4f4f4fbfbfbfffffffafafaffffff |
-f8f8f8f3f3f30e0e0efffffffffffff8f8f8000000fafafaffffffeeeeeeffffffffffff |
-ffffff020202fffffff3f3f3ffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffff5f5f5fffffffffffffdfdfd |
-000000fafafaffffffefefeff8f8f8fdfdfdf9f9f9fbfbfbfffffff4f4f4ebebebffffff |
-000000edededfffffff6f6f6f7f7f7f6f6f6fffffff8f8f8fefefeffffff030303fafafa |
-0707070303030000000000000000000d0d0d0000000505050f0f0f030303000000000000 |
-1010100d0d0d000000000000090909fdfdfdf5f5f5ffffffffffffffffff000000050505 |
-0000000000001010100707070d0d0d000000ebebebffffff000000f6f6f60e0e0e0a0a0a |
-040404000000090909ffffff000000fffffffffffffffffffffffff2f2f2fffffff7f7f7 |
-f1f1f10b0b0b0a0a0a000000000000111111f7f7f7fffffff6f6f6fcfcfcf5f5f5ffffff |
-0000000909090000000000001717170505050000000000000b0b0b000000030303000000 |
-000000ffffff010101fffffff0f0f0fffffff0f0f0fffffffffffffffffff9f9f9f9f9f9 |
-fdfdfdfffffff3f3f3f2f2f20e0e0effffffffffff000000000000f8f8f8fffffff5f5f5 |
-000000fffffffffffffcfcfcffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff1f1f1fffffff5f5f5 |
-0d0d0dfafafaffffffffffffffffffffffffffffffedededfffffffffffff9f9f9ffffff |
-000000fffffffffffffffffffffffffffffffcfcfcfffffffdfdfdf7f7f7000000ffffff |
-0000000505050000000202021111110202020000000000000404040303030000000d0d0d |
-000000f5f5f5010101000000060606000000000000111111000000fffffffffffff9f9f9 |
-ffffffffffff0000000000000101010f0f0f030303000000000000000000000000000000 |
-0000000f0f0f090909fafafa070707050505ffffff000000f1f1f10a0a0a000000060606 |
-050505000000000000fffffffffffff7f7f7fffffff9f9f9ffffff0000000000000c0c0c |
-0000001212120c0c0c0000000000000000000808080707070404040000000707070f0f0f |
-000000ffffff000000fffffffffffffafafafffffff2f2f2fffffff4f4f4ffffff030303 |
-131313010101000000111111f4f4f4000000000000000000fffffffcfcfcfdfdfdffffff |
-020202f3f3f3fffffff9f9f9ffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffecececfffffff7f7f7ffffff |
-ffffff000000ecececffffffffffff000000fffffffffffffffffffdfdfd000000000000 |
-ffffff000000000000000000fafafaedededfbfbfbffffffffffff000000ffffff000000 |
-0a0a0a0a0a0a000000030303000000fcfcfc131313000000040404f6f6f6000000ffffff |
-ffffff0a0a0a0e0e0e0000000000000f0f0f0707070000000d0d0d000000000000000000 |
-0000000d0d0dfffffffefefefdfdfdf9f9f9ffffff000000111111000000080808070707 |
-090909000000f1f1f1fbfbfbffffff010101000000121212000000000000000000ffffff |
-fdfdfdfffffffefefeffffff0000000303030606060909090000000a0a0a080808000000 |
-ffffff000000000000040404ffffff000000000000010101ffffffffffff030303f2f2f2 |
-040404f7f7f70e0e0efcfcfcfbfbfbfffffffefefefffffffffffff5f5f5fffffff8f8f8 |
-f0f0f0000000fffffff0f0f0060606030303000000040404f2f2f2ffffffffffff040404 |
-fcfcfcfffffff9f9f9ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef5f5f5ffffff |
-ffffff000000fffffffcfcfcfafafa000000fffffff5f5f5fcfcfc000000090909ffffff |
-000000fffffff9f9f9000000fffffffffffffffffffdfdfde4e4e40e0e0effffff000000 |
-060606040404ffffff050505000000fffffff4f4f4ffffff070707fefefeffffff000000 |
-ffffff0000000000000707070000000606060000000909090000000e0e0efffffff6f6f6 |
-080808000000000000020202ffffffffffffedededffffffffffff000000ffffff000000 |
-0101010c0c0cfafafaffffff000000000000020202020202ffffffffffffe9e9e9fefefe |
-ffffff0000000909090000000303030000000000000d0d0d0000000000000000000a0a0a |
-ffffff000000101010fffffffefefefefefeffffff0000000000000000000c0c0cffffff |
-000000ffffff050505f3f3f3fafafafffffffffffffbfbfbfffffff7f7f7000000ffffff |
-ffffffffffff000000fdfdfdfffffffffffff5f5f5fffffffffffffefefeffffff000000 |
-fffffff4f4f4fcfcfcfdfdfdffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5f5 |
-f3f3f3ffffff050505fafafaffffff000000000000020202000000131313e8e8e8000000 |
-010101ffffffffffff020202f1f1f1fffffff7f7f7fffffffffffff2f2f2fcfcfc1b1b1b |
-010101fffffff7f7f7020202060606f9f9f9020202080808000000000000020202000000 |
-ffffff0202020000000000000e0e0e0404040b0b0b0000000000000b0b0b000000000000 |
-151515000000ffffff010101000000070707080808f6f6f6fcfcfc080808ececec010101 |
-f6f6f6000000fbfbfbfbfbfb070707fffffffffffffafafaf1f1f1080808090909020202 |
-0d0d0d0000000707070000000f0f0f0000000000000000000000001010100f0f0f000000 |
-f2f2f2080808f9f9f9000000ffffffffffff0000000707070b0b0b080808000000ffffff |
-f2f2f2fefefeeeeeee141414ffffffe9e9e9fffffffdfdfdf5f5f5ffffffffffff000000 |
-f8f8f8fffffff7f7f7fdfdfd040404fbfbfbfffffff6f6f6ffffffececec060606ffffff |
-f1f1f1fffffffefefeffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffefefef5f5f5ffffffffffff |
-ffffffffffff000000fffffffdfdfdfefefefffffffffffffffffff1f1f1ffffff000000 |
-fffffff9f9f9f4f4f4fffffffefefefffffffffffffefefe000000ffffff000000000000 |
-000000fafafaffffff020202030303fcfcfcfdfdfdffffff050505030303000000ffffff |
-000000000000020202020202fefefef9f9f9f9f9f90303030e0e0e0000000000000c0c0c |
-f7f7f7000000060606000000070707000000000000010101060606000000ffffff020202 |
-ffffff050505ffffffffffff000000020202000000000000101010000000000000ffffff |
-0000000000000808080000000000000d0d0d000000fffffff8f8f8000000000000040404 |
-fffffffafafa0a0a0a000000030303f4f4f40f0f0f000000000000040404f7f7f7000000 |
-0b0b0bfefefeffffff000000f8f8f8fffffffdfdfd000000070707000000070707000000 |
-000000fffffffdfdfdffffffffffff050505f9f9f9fffffff5f5f5ffffff000000f4f4f4 |
-fffffff8f8f8ffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff1f1f1ffffffffffff |
-f5f5f5fbfbfbffffff000000f8f8f8fffffff5f5f5ffffff000000fffffffdfdfd020202 |
-fffffff7f7f7fffffffffffffefefef6f6f6fffffff8f8f8010101f3f3f3070707020202 |
-000000fafafafcfcfc080808000000ffffffffffffffffff000000000000000000ffffff |
-010101000000ffffff0000000d0d0dfffffff7f7f7fffffffffffff7f7f7050505f9f9f9 |
-0000000f0f0f000000070707050505090909000000000000050505010101ececec0e0e0e |
-f7f7f7fffffff3f3f3ffffff000000000000000000060606050505000000030303ffffff |
-040404000000141414000000000000030303fffffffcfcfcf0f0f00606060a0a0a000000 |
-fcfcfcffffff030303000000fffffffffffff0f0f00f0f0f000000090909fbfbfb000000 |
-fcfcfc0f0f0ff2f2f20a0a0afbfbfbfffffffcfcfcfffffff7f7f7030303020202010101 |
-ffffff000000fffffff9f9f9f9f9f9ffffffecececfffffff7f7f7070707fafafaf9f9f9 |
-fffffffffffffffffffafafaffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff0f0f0f8f8f8f9f9f9 |
-ffffffffffffe9e9e9151515ffffffe8e8e8fefefeffffff060606fdfdfdfafafa030303 |
-ffffffffffff020202000000fafafafefefefffffffdfdfdffffff000000000000000000 |
-fffffffefefefdfdfd020202040404fffffff5f5f5efefef0303030a0a0a000000ffffff |
-000000070707f2f2f2ffffff000000fefefefffffff7f7f7fdfdfdfcfcfc000000ffffff |
-000000fafafa0202020000000000000000000000000000000404040b0b0b020202fcfcfc |
-0c0c0cf0f0f0ffffffffffff000000030303131313000000000000010101000000f4f4f4 |
-1616160000000000000a0a0a030303000000fffffffdfdfdffffff000000000000ffffff |
-fcfcfcffffff0505050b0b0b000000f7f7f7ffffff000000101010030303000000ffffff |
-fbfbfb000000ffffff000000fdfdfdfffffffffffffefefeffffffffffffffffff000000 |
-000000000000000000fffffffffffffffffffffffff2f2f20e0e0ef1f1f1ffffffffffff |
-fffffffdfdfdf1f1f1ffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffafafafffffffffffff7f7f7 |
-fffffff6f6f6ffffffe7e7e7060606fffffffffffffafafa0000000000001e1e1eefefef |
-f1f1f1f1f1f10000001212120c0c0cfcfcfcffffff000000f0f0f00b0b0b030303000000 |
-fefefefbfbfbffffff010101030303fcfcfcffffffffffff070707000000ffffff000000 |
-0000000b0b0bf8f8f8ffffff070707fffffffefefeffffffffffffffffffefefef000000 |
-020202fefefe121212060606070707ffffffffffff050505040404000000000000ffffff |
-000000f8f8f8fefefefbfbfb040404020202000000030303070707000000020202ffffff |
-e3e3e30d0d0d060606000000010101000000fcfcfcf0f0f0ffffff000000f6f6f6ffffff |
-131313ebebebededed020202131313fefefefffffffffffff9f9f9000000000000ffffff |
-060606000000fffffffffffffffffffffffffdfdfdfffffff0f0f0fffffffffffff6f6f6 |
-ffffff000000000000fffffff1f1f1f8f8f8f3f3f3ffffff000000ffffffefefefe8e8e8 |
-fefefefcfcfcffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffefefefffffffffffffcfcfc |
-fffffffdfdfdfcfcfcfffffff9f9f9000000fffffffffffffffffffdfdfdf9f9f9ffffff |
-ffffffffffffffffff000000f7f7f7ffffffe8e8e8121212ffffff0000000303030d0d0d |
-060606ffffff000000030303010101fafafaffffffeeeeee000000000000ffffff030303 |
-111111000000fcfcfcffffff000000000000fffffffafafafcfcfcfcfcfc161616000000 |
-f5f5f5090909000000010101000000fdfdfdfefefe0000000000000e0e0ef5f5f5ffffff |
-000000fffffffffffffffffffffffffafafaffffff000000fafafafdfdfdfefefeffffff |
-ffffff030303000000ffffff0000000d0d0dfefefeffffffffffff000000fffffff7f7f7 |
-000000ffffffffffff000000040404fafafaf6f6f6fbfbfb030303000000fffffff9f9f9 |
-f2f2f2191919fafafaf4f4f4000000f6f6f6fffffff8f8f8ffffffefefefffffffffffff |
-f5f5f5f9f9f9fffffff1f1f1fffffffffffff3f3f3090909ffffffffffffffffffffffff |
-fffffff8f8f8ffffffefefefffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff4f4f4f9f9f9ffffff |
-fffffffffffff0f0f0f3f3f3ffffff000000000000eaeaeafffffffffffff4f4f4ffffff |
-fbfbfbfafafaf9f9f9fefefef3f3f3ffffff030303fafafa0101010000000c0c0c050505 |
-000000000000161616000000000000fffffffbfbfbffffff050505060606f2f2f2121212 |
-000000040404050505ffffff000000040404121212f9f9f9fffffffbfbfb030303000000 |
-ffffff0000000000000a0a0a000000070707ffffff000000ffffff060606fffffff8f8f8 |
-fffffff9f9f9000000fefefee6e6e6fffffff6f6f6050505fffffff9f9f9000000fafafa |
-ffffff040404040404ffffff0f0f0f000000f5f5f5fffffff8f8f8000000ffffffffffff |
-000000ffffffe7e7e7131313000000f8f8f8ffffff000000fefefefcfcfcececec020202 |
-ffffff0000000a0a0afafafa050505fffffff6f6f6fefefefffffffffffffffffffdfdfd |
-fffffffdfdfdffffffffffffefefeff3f3f3010101020202fffffffdfdfdeaeaeaffffff |
-f6f6f6f6f6f6ffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8ffffffffffff |
-eeeeeefbfbfbfffffffffffffcfcfcffffff000000ffffffffffffe8e8e8fffffffbfbfb |
-fefefef6f6f6ffffffecececfffffffbfbfb000000ffffff000000ffffff000000000000 |
-0b0b0bffffff000000030303fffffffffffffbfbfbfefefe010101ffffff040404000000 |
-151515000000fafafae4e4e4ffffffffffff0000000505050000000e0e0e030303080808 |
-000000020202070707000000030303000000fdfdfd000000131313000000ffffffffffff |
-ffffffe9e9e9141414fefefefffffffffffff8f8f8030303000000ffffff0f0f0f0a0a0a |
-f9f9f9000000000000f8f8f80000000d0d0d0b0b0be3e3e3ffffff0d0d0dfbfbfbf7f7f7 |
-ffffff000000ffffff000000070707030303000000ffffffffffffffffffffffffffffff |
-f9f9f9ffffff000000ffffff000000f0f0f0080808050505fffffffdfdfdf1f1f1ffffff |
-f8f8f8fefefef6f6f6fffffff4f4f4ffffff000000fcfcfceeeeeeffffffffffffffffff |
-f6f6f6fffffffdfdfdfefefeffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcffffffffffff |
-fffffffcfcfcffffffeeeeeeffffffffffffffffff080808ecececfbfbfbfffffffdfdfd |
-f6f6f6ffffffedededffffffffffffffffff000000ffffff040404ffffff070707101010 |
-fafafaeaeaea0909090000000000000303030000000e0e0e000000f3f3f3131313000000 |
-000000fffffffffffffffffffffffffcfcfcffffff0000000d0d0d050505000000000000 |
-000000ffffff0000000303030303030707070000000505050000000a0a0afffffff5f5f5 |
-f6f6f6000000fbfbfbfffffff0f0f0040404fcfcfcffffff0f0f0ff5f5f5f3f3f3000000 |
-fdfdfdffffff000000fffffffffffff6f6f6ffffffffffff000000000000f8f8f8ffffff |
-f5f5f5000000ffffff000000040404000000101010f0f0f0f0f0f0ffffff020202f5f5f5 |
-ffffffffffff000000ffffff161616fafafa010101f5f5f5fbfbfbf6f6f6fffffff8f8f8 |
-fffffffbfbfbf6f6f6ffffffffffff000000fffffffffffffffffff2f2f2fffffff3f3f3 |
-fcfcfcfffffffffffff9f9f9ffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffdfdfdffffffffffffffffff |
-fffffff6f6f6fffffffdfdfdfffffff3f3f3fffffff5f5f50c0c0cffffffffffffffffff |
-fffffff2f2f2fffffffffffffcfcfcffffff050505000000010101f6f6f6fffffff3f3f3 |
-ffffff131313f9f9f9ffffff0101010000000f0f0f000000000000070707000000fdfdfd |
-101010ebebeb070707000000000000050505fcfcfc090909000000f7f7f7000000ffffff |
-010101f3f3f3ffffff030303040404f7f7f7fffffffcfcfcffffff060606fefefe070707 |
-fbfbfbffffff040404f9f9f9ffffff000000f5f5f5ffffff000000ffffffffffff000000 |
-fffffff7f7f7000000000000000000fbfbfb000000030303fdfdfd080808fefefefefefe |
-fbfbfb0f0f0f010101000000000000030303000000010101fffffff7f7f7000000fcfcfc |
-fffffffefefe000000fffffff3f3f3fffffffbfbfbfffffffffffff6f6f6fbfbfbfdfdfd |
-f4f4f4fffffff2f2f2ffffff000000fffffffbfbfbfafafafffffffffffff8f8f8ffffff |
-f6f6f6f8f8f8fffffffdfdfdffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff6f6f6fefefefffffff5f5f50d0d0d000000f8f8f8ffffff |
-fffffffdfdfdfffffff4f4f4fbfbfbffffffffffff020202020202fffffff9f9f9fdfdfd |
-fafafa0404040000000505050000000000000909090000000b0b0b000000000000080808 |
-fffffffbfbfb000000fffffff6f6f6ffffff000000ffffff000000ffffff040404fafafa |
-000000000000fbfbfbffffff020202fefefefafafa0f0f0f000000030303030303000000 |
-fbfbfb020202000000030303030303000000020202fbfbfb0b0b0bf4f4f4ffffff000000 |
-000000ffffff000000010101030303000000030303ffffff000000000000121212000000 |
-000000000000000000000000000000000000000000000000000000040404020202020202 |
-fafafaffffff000000fefefef8f8f8060606ffffffeeeeeefffffff9f9f9f2f2f2ffffff |
-f5f5f5fdfdfdffffff000000090909fffffffffffff9f9f9ffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffbfbfbeeeeeefffffff2f2f2060606151515eaeaea |
-f5f5f5fffffff4f4f4fffffffffffff6f6f6060606000000000000000000070707161616 |
-0000000000001212120000000505050000000000000f0f0f000000010101070707000000 |
-0000000b0b0b0000000c0c0c010101000000000000000000000000040404000000040404 |
-0d0d0d0000000f0f0f0000000000000000000707070000000808081212120000000b0b0b |
-0d0d0d0000000707070000000000000707070000000d0d0d0000000000000404040b0b0b |
-0000000707070000000303030000000a0a0a000000030303000000000000040404000000 |
-000000000000000000000000000000000000000000000000000000070707000000040404 |
-0000000d0d0d000000040404000000090909ecececfffffffdfdfdfffffff8f8f8f9f9f9 |
-ffffffffffff010101010101f1f1f1f2f2f2fefefeffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffff7f7f7fffffff7f7f7fafafaf6f6f6ffffff020202 |
-fcfcfcfffffffffffffefefef3f3f3ffffff000000fffffffffffff0f0f0f0f0f0ffffff |
-f2f2f2ffffffedededfffffffefefefffffff5f5f5f9f9f9fffffffffffffffffffdfdfd |
-fffffffffffff1f1f1fafafaf7f7f7fffffff7f7f7fffffffffffffbfbfbffffffffffff |
-e6e6e6fffffff1f1f1fbfbfbf8f8f8fffffff4f4f4fffffffbfbfbf5f5f5fcfcfcffffff |
-f4f4f4fffffff8f8f8fffffffffffff8f8f8fffffff4f4f4fffffff6f6f6fafafafbfbfb |
-fefefeecececfffffffafafafefefefbfbfbffffffe9e9e9fffffffffffffffffffefefe |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7fffffff1f1f1 |
-ffffffffffff000000000000000000000000fffffffffffff3f3f3fcfcfcffffffffffff |
-ffffff000000f7f7f7fffffffffffffffffffffffff8f8f8ffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff4f4f4fcfcfcfffffffbfbfbfffffffffffff4f4f4000000 |
-ffffffebebebf9f9f9f7f7f7fffffffffffffafafa000000010101090909080808000000 |
-080808ffffffffffff0000000707070000000c0c0cffffff000000020202000000080808 |
-ffffff000000fffffffbfbfbffffff070707060606000000000000ffffff000000000000 |
-0000000c0c0c0000000e0e0effffff000000000000000000000000ffffff010101000000 |
-0404040000000101010000000000000101010000000404040000000d0d0d0d0d0d000000 |
-0000001a1a1a000000020202090909000000010101101010000000000000000000070707 |
-0000000000000000000000000000000000000000000000000707070000000000000d0d0d |
-0000000606060000001313130404040d0d0dfffffff7f7f7f3f3f3fffffff6f6f6ffffff |
-f9f9f90e0e0ef9f9f9f6f6f6fdfdfdefefeffdfdfdffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffebebebf1f1f1fdfdfdffffffffffff |
-0c0c0cfffffff0f0f0ffffffffffffddddddfcfcfc0404040000000202020000000a0a0a |
-0000000000000808080b0b0b0000000c0c0c0000001111110000000000000b0b0b040404 |
-0000000404040000001b1b1b000000000000060606020202010101060606000000000000 |
-040404060606000000090909000000040404070707000000151515000000000000000000 |
-0000000000000a0a0a0000000000000a0a0a000000000000000000000000000000121212 |
-000000000000020202020202030303060606000000000000020202000000030303000000 |
-010101010101010101010101010101010101010101010101000000050505000000000000 |
-050505000000000000000000000000f5f5f5fffffffffffffffffffffffff5f5f5ffffff |
-000000e9e9e9fffffff3f3f3ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffefefefffffffafafafffffffffffffffffff1f1f1ffffff |
-f0f0f0010101080808ffffffebebebfffffffffffffcfcfcfcfcfcffffffffffffefefef |
-ffffffffffffeaeaeafcfcfcffffffffffffffffffe9e9e9fffffff5f5f5fffffff7f7f7 |
-fffffffbfbfbffffffefefefffffffffffffe6e6e6fcfcfcf8f8f8f6f6f6ffffffffffff |
-fffffffafafaffffffedededfffffffffffff6f6f6ffffffe1e1e1fffffffffffff6f6f6 |
-fffffffffffff1f1f1fffffffffffff1f1f1ffffffffffffffffffffffffffffffffffff |
-f8f8f8f4f4f4fffffff4f4f4f1f1f1fffffffbfbfbfbfbfbfffffffffffffffffff9f9f9 |
-fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfffffffffffffffffff6f6f6 |
-f8f8f8f9f9f9fffffffffffffffffffffffff2f2f2ffffffffffffefefef040404f4f4f4 |
-fffffff4f4f4ffffffffffffe5e5e5fffffffffffffbfbfbffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffefefeffffffff9f9f9f6f6f6fffffff7f7f7 |
-fffffffcfcfc000000080808fefefeecececffffffeeeeeefffffff4f4f4fffffff3f3f3 |
-f8f8f8fffffff8f8f8fffffff6f6f6f9f9f9fffffffffffffffffff5f5f5f9f9f9ffffff |
-ffffffffffffffffffffffffefefeffffffff1f1f1fffffffefefeffffffddddddffffff |
-fefefefefefef9f9f9fffffffffffffffffff1f1f1fffffffffffffefefeefefefffffff |
-f1f1f1fffffffefefefffffffffffffefefefffffff1f1f1fffffff4f4f4fffffff2f2f2 |
-fffffffffffff0f0f0fffffffffffffcfcfcf3f3f3fffffff1f1f1f3f3f3ffffffffffff |
-fffffffffffffffffffffffffffffffffffffffffffffffffffffff2f2f2ffffffffffff |
-fffffffefefeefefeffafafaefefeffffffff7f7f7fffffff3f3f3040404fffffffefefe |
-fbfbfbfbfbfbf5f5f5fdfdfdffffffe5e5e5fffffffefefeffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffff7f7f7fffffffafafafefefeffffffeeeeeeffffff |
-ffffffffffffffffff000000070707fffffff7f7f7fffffffefefefcfcfcffffffffffff |
-fffffffffffffffffffffffffffffffcfcfcfffffffdfdfdf5f5f5070707070707ffffff |
-fefefefffffff9f9f9fafafafffffff2f2f2fffffffbfbfbfafafaf8f8f8ffffffffffff |
-fcfcfcfdfdfdfffffffffffffefefef9f9f9fffffffffffff8f8f8f0f0f0fffffffafafa |
-fffffffefefefbfbfbfffffffffffffbfbfbfefefefffffffdfdfdffffffffffffffffff |
-fafafafffffffcfcfcfefefefffffff8f8f8fffffffafafafffffffcfcfcfdfdfdfbfbfb |
-fefefefefefefefefefefefefefefefefefefefefefefefef5f5f5fffffff6f6f6ffffff |
-fffffffefefefbfbfbfffffffffffffafafafffffff5f5f5060606000000fbfbfbffffff |
-fffffffffffffffffff3f3f3fffffffffffff5f5f5ffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fcfcfcfffffff1f1f1fffffffbfbfb000000fffffff9f9f9f2f2f2fffffffafafaffffff |
-f7f7f7fffffff3f3f3fdfdfdfefefefffffff2f2f2ffffff000000060606000000ffffff |
-f6f6f6fdfdfdfffffffffffffdfdfdfbfbfbfafafafffffffcfcfcfffffffbfbfbffffff |
-ffffffffffff000000040404000000f8f8f8fffffffffffff4f4f4ffffffedededffffff |
-fffffff0f0f0fffffffffffffffffff2f2f2fffffff5f5f5fffffffdfdfdffffffffffff |
-efefeffffffffffffff7f7f7fafafafffffffafafafffffffefefefffffff8f8f8ffffff |
-fffffff4f4f4ffffff000000000000fffffff4f4f4fffffff6f6f6fffffffbfbfbfafafa |
-fffffffffffff4f4f4fffffffffffff2f2f2ffffff070707f0f0f0fffffffffffffcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fcfcfcffffffffffffebebebfffffff7f7f7050505ffffffffffffe3e3e3fcfcfcffffff |
-fafafafcfcfcfffffffffffff9f9f9ffffffffffffe5e5e5fefefe0e0e0efffffff7f7f7 |
-fffffffefefef6f6f6ffffffefefeff3f3f3ffffffefefeff5f5f5fafafafffffff3f3f3 |
-fcfcfcffffff000000030303ffffff0b0b0b060606e7e7e7090909000000010101f1f1f1 |
-fcfcfcffffff000000040404000000060606fffffff8f8f8fdfdfdf8f8f8020202f5f5f5 |
-fffffff1f1f1fffffffffffffffffffdfdfdfefefef8f8f8f7f7f7fffffff6f6f6ffffff |
-fbfbfbfffffff7f7f7000000000000f7f7f7fffffffbfbfbfffffffffffff9f9f9fefefe |
-fffffff6f6f6fffffffbfbfbffffff060606000000ffffffffffffebebebfbfbfbffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fbfbfbfffffff6f6f6f7f7f7fffffffafafaf3f3f3000000000000ffffffffffffffffff |
-f4f4f4fffffffefefef0f0f0fffffff4f4f4ffffffffffffffffffeeeeeeffffffffffff |
-fafafaf4f4f4fffffffefefefffffffafafa000000ffffffffffffffffffeaeaeaffffff |
-f7f7f7f4f4f41e1e1efdfdfdfdfdfd000000000000ffffffffffff000000ffffffffffff |
-f7f7f7000000fffffff2f2f2ffffff0a0a0af3f3f3fffffffbfbfbffffff020202ffffff |
-f1f1f1fffffff7f7f7fdfdfdfafafafefefefffffffffffffffffff4f4f4fffffffcfcfc |
-fffffff2f2f2fffffffffffffffffffffffff2f2f2fffffffdfdfdfffffffffffff8f8f8 |
-f2f2f2ffffffe8e8e8fafafa000000090909fafafafffffffbfbfbfefefefdfdfdfefefe |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffefefefefefef7f7f7ffffffffffffffffff010101090909f2f2f2ffffff |
-fafafaf0f0f0fffffffffffff9f9f9fffffff4f4f4fffffffffffffdfdfdfffffff0f0f0 |
-fffffffffffffffffffcfcfcefefefffffff000000040404f6f6f6fafafaffffffffffff |
-ffffffffffff000000f7f7f7fcfcfc000000040404ffffffffffff0d0d0df1f1f1fafafa |
-ffffff050505f6f6f6fffffff6f6f6000000fdfdfdfffffffffffffbfbfb000000030303 |
-fefefeffffffe6e6e6fffffffdfdfdffffff000000000000fffffffffffff9f9f9ffffff |
-f9f9f9fffffffffffff9f9f9f9f9f9fffffffffffff9f9f9f9f9f9fcfcfcf5f5f5ffffff |
-fffffffffffffcfcfc1d1d1d010101fffffffffffff8f8f8fdfdfdfffffffffffffbfbfb |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffebebebfffffffafafafcfcfcfdfdfdf4f4f4fefefefafafaffffff080808f5f5f5 |
-ffffffffffffecececfafafafffffffcfcfcfffffffffffff0f0f0fffffffbfbfbfefefe |
-f7f7f7f5f5f5fafafaf2f2f2fffffff5f5f5fbfbfbfffffffffffffffffffffffffdfdfd |
-f8f8f80a0a0a000000ffffffffffff040404000000ffffffe4e4e4000000fffffff4f4f4 |
-f2f2f20b0b0b010101fffffffffffff1f1f1fffffff0f0f0f5f5f5050505ffffff0a0a0a |
-f6f6f6f8f8f8fffffff8f8f8fdfdfdffffff000000000000fffffffffffff9f9f9ffffff |
-fffffffefefefafafafffffffffffffafafafefefefffffff5f5f5fffffffbfbfbececec |
-ffffff0000000a0a0aedededfffffff6f6f6f0f0f0fafafafffffffffffff5f5f5ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffafafaf1f1f1fffffffdfdfdf2f2f2fffffffffffffffffff5f5f5ffffff000000 |
-050505f7f7f7fffffffffffffffffffafafafffffffefefefffffffafafaffffffffffff |
-fffffff0f0f0fffffffcfcfcfffffff9f9f9fffffffcfcfcf6f6f6fffffffbfbfbfcfcfc |
-f2f2f2040404111111000000000000000000050505ffffffffffff090909f3f3f3ffffff |
-ffffffeaeaea000000000000050505fffffff8f8f8fbfbfbffffff000000ffffff000000 |
-000000ffffffefefeff6f6f6fafafafefefefffffffffffffffffff4f4f4fffffffcfcfc |
-fdfdfdfcfcfcfffffffdfdfdfdfdfdfffffffcfcfcfdfdfdfffffff6f6f6ffffffffffff |
-000000ffffffffffffffffffffffffffffffffffffffffffe6e6e6fffffffffffff6f6f6 |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-f6f6f6fffffffbfbfbe5e5e5fffffffffffff5f5f5fffffffffffff7f7f7fffffffdfdfd |
-0000000a0a0af5f5f5f7f7f7fffffffcfcfcf5f5f5fffffff1f1f1fffffff7f7f7fafafa |
-f8f8f8fffffff2f2f2fffffffdfdfdfffffffefefef6f6f6fffffff4f4f4ffffffffffff |
-ffffff000000070707ffffff020202fffffffafafafbfbfbf8f8f8070707fdfdfdfdfdfd |
-ffffffffffffffffff0000000000000d0d0dffffffffffffffffff0b0b0bf9f9f9000000 |
-060606fcfcfcf9f9f9fffffffffffffdfdfdfefefef8f8f8f7f7f7fffffff6f6f6ffffff |
-fffffff8f8f8fffffffffffffffffffffffff8f8f8fffffffffffff3f3f3000000010101 |
-000000fffffffffffff3f3f3ffffffffffffebebebf6f6f6fffffffffffffefefeffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffff2f2f2fffffffffffffefefef7f7f7fffffffefefefcfcfcfffffff3f3f3ffffff |
-fffffff8f8f8000000090909fffffffbfbfbfffffffffffffffffffefefefffffffefefe |
-fffffffffffffffffffafafafffffffdfdfdf6f6f6fffffffffffff8f8f8fffffff6f6f6 |
-f8f8f8090909fefefefdfdfdfcfcfcfffffffefefeffffffffffff000000ffffffffffff |
-fffffff7f7f7ffffffffffffffffff000000f7f7f7fffffff9f9f9000000000000090909 |
-000000000000fffffff8f8f8fafafafffffffafafafffffffefefefffffff8f8f8ffffff |
-fbfbfbfffffffffffffffffffffffffffffffffffffbfbfb000000030303010101ffffff |
-fdfdfdffffffe9e9e9fffffffffffff6f6f6fffffffffffff7f7f7fffffffcfcfcffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffff000000000000fffffffffffff6f6f6fffffff6f6f6ffffff |
-fffffffafafaf8f8f8fffffffffffffcfcfcfffffffbfbfbfcfcfcfafafaffffffffffff |
-000000000000f8f8f8fffffffcfcfcfffffffcfcfcfffffff1f1f1000000ffffffffffff |
-fdfdfd000000fffffffafafaffffff000000f2f2f2ffffff040404000000f5f5f5ffffff |
-f9f9f9060606fffffffffffffbfbfbfffffff6f6f6fffffffafafafdfdfdfffffff7f7f7 |
-fbfbfbf1f1f1fffffffdfdfdfffffffdfdfd0202020000000d0d0df1f1f1fffffffafafa |
-fffffff0f0f0fffffff6f6f6ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffdfdfd010101000000f3f3f3f3f3f3ffffffffffff |
-fdfdfdfffffffffffffffffff3f3f3f3f3f3fffffff4f4f4ffffffffffffffffff000000 |
-151515000000ffffffeeeeeef9f9f9f8f8f8fbfbfbf6f6f6111111070707f2f2f2ffffff |
-ffffff040404fffffff6f6f6eaeaea0a0a0afffffff8f8f8000000fffffff9f9f9ffffff |
-fefefe000000fcfcfcfffffffffffffafafafffffffffffffffffffffffff5f5f5ffffff |
-fffffffffffff3f3f3fafafa131313000000000000fffffff1f1f1fffffffbfbfbffffff |
-ffffffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff7f7f7f9f9f9f3f3f3ffffff131313040404000000ffffff |
-fbfbfbf6f6f6fffffffcfcfcfffffffffffff8f8f8ffffffeeeeeefffffff4f4f4fcfcfc |
-f2f2f2f4f4f4ffffffffffffffffffffffffffffffffffff000000000000fffffff8f8f8 |
-fbfbfb0000000101010000000d0d0dffffffedededffffff000000fdfdfdfafafaededed |
-ffffff101010000000000000f7f7f7fffffff8f8f8fffffff7f7f7f9f9f9ffffffeeeeee |
-f2f2f2efefefffffff000000000000fffffffffffff8f8f8fffffff3f3f3ffffffffffff |
-fffffffffffffefefef8f8f8ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffff9f9f9fffffffbfbfbecececffffff040404010101 |
-fffffffffffffafafafffffff9f9f9f8f8f8fffffff2f2f2fffffffffffffffffff7f7f7 |
-fffffffffffff6f6f6ecececfffffff6f6f6fefefefffffffffffffffffffffffffefefe |
-fffffffffffffffffffbfbfbf9f9f9f7f7f7fffffff0f0f0151515f1f1f1ffffffffffff |
-e3e3e3f7f7f7f9f9f9fffffffffffffffffff5f5f5f9f9f9fffffffefefefefefeffffff |
-0b0b0b070707020202fffffffffffffffffff7f7f7fffffff9f9f9f5f5f5fffffffbfbfb |
-ebebebfffffffffffffbfbfbffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffcfcfcf7f7f7fffffff9f9f9ffffffecececffffffffffff |
-050505000000000000fffffff3f3f3f8f8f8fffffff8f8f8fdfdfdfdfdfdfffffff1f1f1 |
-fffffffcfcfcfafafafffffffffffffcfcfcfffffffafafaedededfffffff3f3f3ffffff |
-f4f4f4f9f9f9fffffffffffffffffffbfbfbfbfbfbfffffff7f7f7fefefefffffffafafa |
-fffffff2f2f2ffffffebebebefefeffffffffffffffffffffdfdfd0f0f0f000000040404 |
-f6f6f6fffffffafafafffffffcfcfcfdfdfdfffffffffffffffffffffffffbfbfbfdfdfd |
-fffffffcfcfcfcfcfcffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffefefefffffff3f3f3ffffffe9e9e9fcfcfc |
-f3f3f3fbfbfb0a0a0a0000000e0e0e030303eeeeeefffffffffffffbfbfbfcfcfcffffff |
-f9f9f9efefeffffffff4f4f4ffffffffffffebebebfffffffffffffcfcfcffffffffffff |
-fffffffffffff4f4f4f4f4f4fffffffffffff9f9f9fffffffffffffcfcfcf8f8f8fbfbfb |
-ffffffffffffeeeeeefffffffffffffffffff1f1f10505050000000a0a0af0f0f0fdfdfd |
-fffffffffffffffffffbfbfbf9f9f9fffffff1f1f1fffffff0f0f0fffffff2f2f2ffffff |
-fffffffafafafbfbfbffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff3f3f3f4f4f4fbfbfbffffffffffffffffffffffffffffff |
-fefefeffffffefefeffafafaf7f7f7fdfdfd000000010101000000020202070707ffffff |
-fffffffffffff8f8f8fffffff6f6f6f3f3f3fffffffffffff3f3f3fffffffbfbfbf8f8f8 |
-fafafafffffff5f5f5fffffffafafae9e9e9fdfdfdfffffffffffffffffffcfcfcffffff |
-fcfcfc0000000e0e0e000000000000000000fffffff8f8f8fafafafffffffffffffefefe |
-fffffffffffff2f2f2fefefefffffffffffffffffff0f0f0fdfdfdfffffffffffffafafa |
-f6f6f6f9f9f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffffffffffffffffefefefffffffefefeedededfffffffdfdfd |
-ffffffeeeeeefffffff9f9f9fffffffffffffefefefefefefffffffafafa010101000000 |
-0000000a0a0a000000000000050505fffffff9f9f9fafafaf8f8f8fffffff4f4f4ffffff |
-ffffffefefeffffffffefefefdfdfdffffffffffff0000000000000d0d0d000000000000 |
-050505000000fffffffffffffffffffffffff3f3f3ffffffffffffefefeffefefeffffff |
-fffffffafafafcfcfcffffffffffffe6e6e6fffffffbfbfbfffffff3f3f3ffffffffffff |
-fbfbfbfffffffffffff4f4f4ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff0f0f00c0c0c0000000303030000000d0d0d000000070707 |
-000000000000000000000000000000000000000000000000ffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffe8e8e8fffffffffffff9f9f9fffffffffffffcfcfc |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-fffffffffffffffffffffffff2f2f2fffffffcfcfcf7f7f7fcfcfcf6f6f6fdfdfdffffff |
-fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffeeeeeefffffffffffff6f6f6f7f7f7ffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
-ffffffffffffffffffffffffffffffffffffffffffffffff |
- |
-showpage |
- |
-% stop using temporary dictionary |
-end |
- |
-% restore original state |
-origstate restore |
- |
-%%Trailer |
/trunk/common/sssup.ps |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/common/retis.bib |
=================================================================== |
--- trunk/common/retis.bib (revision 1677) |
+++ trunk/common/retis.bib (nonexistent) |
@@ -1,943 +0,0 @@ |
-@Article{Yau97, |
- author = {David K. Y. Yau and Siman S. Lam}, |
- title = {Adaptive Rate Controlled Scheduling for Multimedia Applications}, |
- journal = {IEEE/ACM Transactions on Networking}, |
- year = {1997}, |
- month = {August} |
-} |
- |
-@inProceedings{Chu99, |
- author = {Hao-hua Chu and Klara Nahrstedt}, |
- title = {{CPU} Service Classes for Multimedia Applications}, |
- booktitle = {Proceedings of the IEEE International Conference on Mutimedia Computing and Systems}, |
- year = 1999, |
- month = {June}, |
- address = {Florence, Italy}, |
- key = {multimedia, Qos, scheduling} |
-} |
- |
-@inProceedings{Li98, |
- author = {B. Li and K. Nahrstedt}, |
- title = {A Control Theoretical Model for Quality of Service Adaptations}, |
- booktitle = {Proceedings of Sixth International Workshop on Quality of Service}, |
- year = 1998, |
- key = {multimedia, Qos, scheduling} |
-} |
- |
-@TechReport{Chu98-1, |
- author = {Hao-hua Chu and Klara Nahrstedt}, |
- title = {{CPU} Service Classes for Multimedia Applications}, |
- institution = {University of Illinois}, |
- year = {1998}, |
- key = {multimedia, Qos, scheduling}, |
- address = {Urbana Champaign}, |
- month = {August}, |
- number = {UIUCDCS-R-98-2068,UILU-ENG-98-1730} |
-} |
- |
-@TechReport{Abe00-1, |
- author = {Luca Abeni}, |
- title = {Library for Operating System development}, |
- institution = {Scuola Superiore di Studi e Perfezionamento S. Anna}, |
- year = {2000}, |
-} |
- |
-@Misc{Abe00-2, |
- author = {Luca Abeni and Gerardo Lamastra}, |
- title = {The {OSLib} Project}, |
- howpublished = {http://oslib.sssup.it}, |
-} |
- |
-@inproceedings{Jon93, |
- author = {Michael B. Jones}, |
- title = {Adaptive Real-Time Resource Management Supporting Composition |
- of Indipendently Authored Time-Critical Services}, |
- booktitle = {}, |
- year = 1993, |
- key = {soft real-time, adaptive applicatiuons} |
-} |
- |
-@phdthesis{Hyd94, |
- author = {E. A. Hyden}, |
- title = {Operating System Support for Quality of Service}, |
- school = {Computer Laboratory, University of Cambridge}, |
- year = 1994, |
- month = {February}, |
- key = {multimedia, QOS, operating system, scheduling} |
- |
-} |
- |
-@InProceedings{Ray98, |
- author = {Raj Rajkumar and Kanaka Juvva and Anastasio Molano and |
- Shuichi Oikawa}, |
- title = {Resource Kernels: A Resource-Centric Approach to Real-Time |
- and Multimedia Systems}, |
- booktitle = {Proceedings of the SPIE/ACM Conference on Multimedia Computing and Networking}, |
- key = {multimedia, QoS, resource reservation}, |
- year = {1998}, |
- month = {January} |
-} |
- |
-@InProceedings{Opa96, |
- author = {Don Aparah}, |
- title = {Adaptive Resource Management in a Multimedia Operating |
- System}, |
- booktitle = {Proceedings of the 8th International Workshop on Network |
- and Operating System Support for Digital Audio |
- and Video}, |
- key = {multimedia, QoS}, |
- year = {1998}, |
- address = {Cambridge, UK}, |
- month = {July} |
-} |
- |
-@inproceedings{Chu97, |
- author = {Hao-Hua Chu and Klara Nahrstedt}, |
- title = {A Soft Real Time Scheduling Server in UNIX Operating |
- System}, |
- booktitle = {European Workshop on Interactive Distributed Multimedia Systems |
- and Telecommunication Services}, |
- year = 1997, |
- month = {September}, |
- address = {Darmstadt, Germany}, |
- key = {scheduling, multimedia, real-time Unix} |
-} |
- |
-@inproceedings{Com94, |
- author = {Charles L. Compton and David L. Tennenhouse}, |
- title = {Collaborative Load Shedding for Media-Based Applications}, |
- booktitle = {Proceedings of the International Conference on Multimedia Computing and Systems}, |
- year = 1994 |
-} |
-@inproceedings{Goy96, |
- author = {Pawan Goyal and Xingang Guo and Harrik M. Vin}, |
- title = {A Hierarchical CPU Scheduler for Multimedia Operating Systems}, |
- booktitle = {2nd OSDI Symposium}, |
- month = {October}, |
- year = 1996, |
- key = {scheduling, multimedia, real-time Unix} |
-} |
- |
-@inproceedings{Sto96, |
- author = {Ian Stoica and Hussein Abdel-Wahab and Kevin Jeffay and Sanjoy |
- K. Baruah and Johannes E. Gehrke and C. Greg Plaxton}, |
- title = {A Proportional Share Resource Allocation Algorithm for |
- Real-Time, Time-Shared Systems}, |
- booktitle = {Proceedings of the IEEE Real Time Systems Symposium}, |
- year = 1996, |
- month = {December}, |
- key = {scheduling, multimedia, real-time Unix} |
-} |
- |
-@inproceedings{Abe98-2, |
- author = {Luca Abeni and Giorgio Buttazzo}, |
- title = {Integrating Multimedia Applications in Hard Real-Time Systems}, |
- booktitle = {Proceedings of the IEEE Real Time Systems Symposium}, |
- year = 1998, |
- month = {December}, |
- address = {Madrid, Spain}, |
- key = {scheduling, multimedia} |
-} |
- |
-@inproceedings{Sta99, |
- author = {John A. Stankovic and Cheyang Lu and Sang H. Son}, |
- title = {The Case for Feedback Control in Real-Time Scheduling}, |
- booktitle = {Proceedings of the IEEE Euromicro Conference on Real-Time}, |
- year = 1998, |
- month = {June}, |
- address = {York, England}, |
- key = {scheduling} |
-} |
- |
-@inproceedings{Abe98-3, |
- author = {Luca Abeni and Giorgio Buttazzo}, |
- title = {QoS Guarantee Using Probabilistic Dealines}, |
- booktitle = {Proceedings of the IEEE Euromicro Conference on Real-Time}, |
- year = 1998, |
- month = {June}, |
- address = {York, England}, |
- key = {scheduling} |
-} |
- |
-@inproceedings{Abe98-4, |
- author = {Luca Abeni and Giorgio Buttazzo}, |
- title = {Constant Bandwidth vs Proportional Share Resource Allocation}, |
- booktitle = {Proceedings of the IEEE International Conference on Mutimedia Computing and Systems}, |
- year = 1999, |
- month = {June}, |
- address = {Florence, Italy}, |
- key = {scheduling, multimedia} |
-} |
- |
-@inproceedings{Wan98, |
- author = {Y.C. Wang and K.J. Lin}, |
- title = {Enanching the Real-Time Capability of the Linux Kernel}, |
- booktitle = {IEEE Real Time Computing Systems and Applications}, |
- year = 1998, |
- month = {October}, |
- address = {Hiroshima, Japan}, |
-} |
- |
-@inproceedings{Wan99, |
- author = {Y.C. Wang and K.J. Lin}, |
- title = {Implementing a General real-Time Scheduling Framework in the RED-Linux Real-Time Kernel}, |
- booktitle = {Proceedings of IEEE Real-Time Systems Symposium}, |
- year = 1999, |
- month = {December}, |
- address = {Phoenix}, |
-} |
- |
-@inproceedings{Lip98, |
- author = {Giuseppe Lipari and Giorgio Buttazzo and Luca Abeni}, |
- title = {A Bandwidth Reservation Algorithm for Multi-Application Systems}, |
- booktitle = {IEEE Real Time Computing Systems and Applications}, |
- year = 1998, |
- month = {October}, |
- address = {Hiroshima, Japan}, |
-} |
- |
-@inproceedings{Che98, |
- author = {Chen Lee and Raj Rajkumar and John Lehoczky and Dan Siewiorek}, |
- title = {Pratical Solutions for QoS-Based Resource Allocation}, |
- booktitle = {Proceedings of the IEEE Real Time Systems Symposium}, |
- year = 1998, |
- month = {December}, |
- address = {Madrid, Spain}, |
- key = {scheduling, multimedia} |
-} |
- |
-@inproceedings{But98, |
- author = {Giorgio Buttazzo and Luca Abeni and Giuseppe Lipari}, |
- title = {Elastic Task Model for Adaptive Rate Control}, |
- booktitle = {Proceedings of the IEEE Real Time Systems Symposium}, |
- year = 1998, |
- month = {December}, |
- address = {Madrid, Spain}, |
- key = {scheduling, multimedia} |
-} |
- |
-@inproceedings{Jef98, |
- author = {Kevin Jeffay and F.D. SMith and A. Moorthy and J.H. Anderson}, |
- title = {Proportional Share Scheduling of Operating System Services |
- for Real-Time Applications}, |
- booktitle = {IEEE Real Time System Symposium}, |
- year = 1998, |
- month = {December}, |
- address = {Madrid, Spain}, |
- key = {scheduling, multimedia, real-time Unix} |
-} |
- |
-@inproceedings{Den97-1, |
- author = {Z. Deng and J. W. S. Liu and J. Sun}, |
- title = {A scheme for scheduling Hard Real-Time Applications in Open |
- System Environment}, |
- booktitle = {Ninth Euromicro Workshop on Real-Time Systems}, |
- year = {1997}, |
- key = {scheduling} |
-} |
- |
-@inproceedings{Den97-2, |
- author = {Z. Deng and J. W. S. Liu}, |
- title = {Scheduling Real-Time Applications in Open Envirovment}, |
- booktitle = {IEEE Real-Time Systems Symposium}, |
- year = {1997}, |
- month = {December}, |
-OPTaddress = {San Francisco}, |
- key = {scheduling} |
-} |
- |
-@inproceedings{Cou93, |
- author = {Geoff Coulson and Gordon S. Blair and Philippe Robin and |
- others}, |
- title = {Extending CHORUS micro-kernel to support continuous media |
- applications}, |
- booktitle = {4th International Workshop on Network and Operating System |
- Support for Digital Audio and Video}, |
- year = 1993, |
- address = {Lancaster, UK}, |
- key = {operating system, multimedia} |
-} |
- |
-@inproceedings{Jef93-1, |
- author = {Kevin Jeffay and Donald L. Stone}, |
- title = {Accounting for Interrupt Handling Costs in Dynamic Priority |
- Task Systems}, |
- booktitle = {IEEE Real Time System Symposium}, |
- year = 1993, |
- pages = {212--221}, |
- key = {scheduling, DMA} |
-} |
- |
-@inproceedings{Jef93-2, |
- author = {Kevin Jeffay and Donald L. Stone and T. Talley and F. D. Smith}, |
- title = {Adaptive, Best-Effort Delivery of Digital Audio and Video |
- Across Packet Switched Networks}, |
- booktitle = {Network and Operating System Support for Digital Audio and |
- Video}, |
- year = 1993, |
- key = {multimedia, networking} |
-} |
- |
-@inproceedings{Hua95, |
- author = {Tay-Yi Huang and Jane W. S. Liu}, |
- title = {Predicting the Worst-Case Execution Time of Concurren |
- execution of Instructions and Cycle-Stealing DMA I/O |
- Operations}, |
- booktitle = {ACM SIGPLAN Workshop on Language, Compilers and Tools for |
- Real-Time Systems}, |
- address = "La Jolla, California", |
- year = 1995, |
- key = {DMA, guarantee} |
-} |
- |
-@inproceedings{Hua96, |
- author = {Tay-Yi Huang and Jane W. S. Liu and Jen-Yao Chung}, |
- title = {Allowing Cycle-Stealing Direct Memory Access I/O Concurrent |
- with Hard-Real-Time Programs}, |
- booktitle = {Int. Conf. on Parallel and Distributed Systems}, |
- address = {Tokyo}, |
- year = 1996, |
- key = {DMA, guarantee} |
-} |
- |
-@inproceedings{Gov91, |
- author = {Ramesh Govindan and D. P. Anderson}, |
- title = {Scheduling and IPC Mechanisms for Continuous Media}, |
- booktitle = {ACM Symposium on Operating Systems Principles}, |
- address = {Pacific Grove}, |
- year = 1991, |
- key = {multimedia, scheduling} |
-} |
- |
-@TechReport{Str, |
- author = {Hermann Streich}, |
- title = "``TaskPair-Scheduling: An Approach for Dynamic Real-Time |
- Systems''", |
- institution = {Research Division of Responsive Systems National Center for |
- Computer Science}, |
- year = {}, |
- key = {scheduling, dynamic real-time systems, guarantee, exception |
- handling} |
-} |
- |
-@Unpublished{Ger, |
- author = {M. Gergeleit and H. Streich}, |
- title = {TaskPair-Scheduling with Optimistic Case Execution |
- Times - An Example for an Adaptive Real-Time System}, |
- institution = {Research Division of Responsive Systems National Center for |
- Computer Science}, |
- key = {scheduling, dynamic real-time systems, guarantee, exception |
- handling} |
-} |
- |
-@InProceedings{Tia95, |
- author = {T.-S. Tia and Z. Deng and M. Shankar and M. Storch and J. |
- Sun and L.-C. Wu and J. W.-S. Liu}, |
- title = {Probabilistic Performance Guarantee for Real-Time Tasks |
- with Varying Computation Times}, |
- booktitle = {Real-Time Technology and Applications Symposium}, |
- key = {formal methods, probabilistic guarantee}, |
- year = {1995}, |
- address = {Chicago,Illinois}, |
- month = {January}, |
- pages = {164-173} |
-} |
- |
-@InProceedings{Jan96, |
- author = {Pierre G. Jansen and Emiel Wijgerink}, |
- title = {Flexible scheduling by Deadline Inheritance in Soft |
- Real-Time Kernels}, |
- booktitle = {}, |
- key = {resource constraints, operating system, pre announcements, |
- multimedia}, |
- year = 1996 |
-} |
- |
-@InProceedings{Nak98, |
- author = {Tatsuo Nakajima}, |
- title = {Resource Reservation for Adaptive QOS Mapping in Real-Time Mach}, |
- year = {1998}, |
- month = {April}, |
- booktitle = {Sixth International Workshop on Parallel and Distributed Real-Time Systems (WPDRTS)}, |
- key = {multimedia, QoS} |
-} |
- |
- |
-@InProceedings{Nak94, |
- author = {Tatsuo Nakajima and Hiroshi Tezuka}, |
- title = {A Continuous Media Application supporting Dynamic QOS |
- Control on Real-Time Mach}, |
- year = {1994}, |
- booktitle = {ACM Multimedia}, |
- key = {multimedia, QoS, application} |
-} |
- |
-@inproceedings{Fuj95, |
- author = {Hiroshi Fujita and Tatsuo Nakajima and Hiroshi Tezuka}, |
- title = {A Processor Reservation System supporting Dynamic QOS |
- control}, |
- booktitle = {2nd International Workshop on Real-Time Computing Systems |
- and Applications}, |
- year = {1995}, |
- month = {October} |
-} |
- |
- |
-@InProceedings{Mer93-1, |
- author = {Clifford W. Mercer and Raguanathan Rajkumar and Hideyuki |
- Tokuda}, |
- title = {Applying Hard Real-Time Technology to Multimedia |
- Systems}, |
- booktitle = {Workshop on the Role of Real-Time in Multimedia/Interactive |
- Computing System}, |
- year = {1993}, |
- key = {multimedia} |
-} |
- |
- |
-@InProceedings{Diot, |
- author = {Christophe Diot and Christian Huitema and Thierry Turletti}, |
- title = {Mutlimedia Applications should be Adaptive}, |
- key = {multimedia} |
-} |
- |
-@TechReport{Mer93-2, |
- author = {Clifford W. Mercer and Stefan Savage and Hideyuki Tokuda}, |
- title = {Processor Capacity Reserves for Multimedia Operating |
- Systems}, |
- institution = {Carnegie Mellon University}, |
- year = {1993}, |
- key = {multimedia, Qos, scheduling}, |
- address = {Pittsburg}, |
- month = {May}, |
- number = {CMU-CS-93-157} |
-} |
- |
-@Article{Sha90, |
- author = {Lui Sha and Ragunathan Rajkumar and john P. Lehoczky}, |
- title = {Priority Inheritance Protocols: An Approach to Real-Time Synchronization}, |
- journal = {IEEE transaction on computers}, |
- key = {sinchronization}, |
- volume = {39}, |
- number = {9}, |
- month = {september}, |
- year = {1990} |
-} |
- |
-@InProceedings{Kan96, |
- author = {Hiroyuki Kaneko and John A. Stankovic and Subhabrata Sen |
- and Krithi Ramamritham}, |
- title = {Integrated Scheduling of Multimedia and Hard Real-Time |
- Tasks}, |
- booktitle = {IEEE Real Time System Symposium}, |
- key = {multimedia}, |
- month = {December}, |
- year = {1996} |
-} |
- |
-@Article{Spu96, |
- author = {M. Spuri and G. Buttazzo}, |
- title = {Scheduling Aperiodic Tasks in Dynamic Priority Systems}, |
- journal = {Real-Time Systems}, |
- year = {1996}, |
- volume = {10}, |
- number = {2} |
-} |
- |
-@InProceedings{Bak90, |
- author = {T. P. Baker}, |
- title = {A Stack-Based Allocation Policy for Realtime Processes}, |
- booktitle = {IEEE Real-Time Systems Symposium}, |
- year = {1990}, |
- month = {december} |
-} |
- |
-@Article{Jef92, |
- author = {K. Jeffay and D. L. Stone and F. D. Smith}, |
- title = {Kernel Support for live digital audio and video}, |
- journal = {Computer Communications}, |
- year = {1992}, |
- volume = {15}, |
- number = {6} |
-} |
- |
-@Article{Spr89, |
- author = {B. Sprunt and L. Sha and J. P. Lehoczky}, |
- title = {Aperiodic scheduling for hard real-time systems}, |
- journal = {The Journal of Real-Time Systems}, |
- year = {1989} |
-} |
- |
-@InProceedings{Spu94, |
- author = {M. Spuri and G. C. Buttazzo}, |
- title = {Efficient Aperiodic Service Under the Earliest Deadline |
- Scheduling}, |
- booktitle = {IEEE Real-Time Systems Symposium}, |
- year = {1994}, |
- month = {December} |
-} |
- |
- |
-@InProceedings{Jef95, |
- author = {K. Jeffay and D. Bennet}, |
- title = {A Rate-Based Execution Abstraction For Multimedia |
- Computing}, |
- booktitle = {Network and Operating System Support for Digital Audio |
- and Video}, |
- year = {1995} |
-} |
- |
-@Article{Gha95, |
- author = {T. M. Ghazalie and T.P. Baker}, |
- title = {Aperiodic Servers In A Deadline Scheduling Environment}, |
- journal = {Real-Time Systems}, |
- year = {1995}, |
- volume = {9} |
-} |
-@Article{Liu73, |
- title = {Scheduling alghorithms for multiprogramming in a hard |
- real-time environment}, |
- author = {C. L. Liu and J. Layland}, |
- journal = {Journal of the ACM}, |
- year = {1973}, |
- volume = {20}, |
- number = {1} |
-} |
- |
-@TechReport{Abe98, |
- author = {Luca Abeni}, |
- title = {Server Mechanisms for Multimedia Applications}, |
- institution = {Scuola Superiore S. Anna}, |
- number = {RETIS TR98-01}, |
- year = {1998} |
-} |
- |
-@InProceedings{Spu95, |
- author = {Marco Spuri and Giorgio Buttazzo and Fabrizio Sensini}, |
- title = {Robust Aperiodic Scheduling under Dynamic Priority |
- Systems}, |
- booktitle = {IEEE Real-Time Systems Symposium}, |
- year = {1995}, |
- month = {December} |
-} |
- |
-@InProceedings{But93-1, |
- author = {G. C. Buttazzo}, |
- title = {HARTIK: A Real-Time Kernel for Robotics Applications}, |
- booktitle = {IEEE Real-Time Systems Symposium}, |
- year = {1993}, |
- month = {December} |
-} |
- |
- |
-@InProceedings{But93-2, |
- author = {G. C. Buttazzo and J. Stankovic}, |
- title = {RED: Robust Earliest Deadline Scheduling}, |
- booktitle = {Third International Workshop on Responsive Computing |
- Systems}, |
- year = {1993}, |
- OPTaddress = {Austin} |
-} |
- |
-@InProceedings{Lam97, |
- author = {G. Lamastra and G. Lipari and G. Buttazzo and A. Casile |
- and F. Conticelli}, |
- title = {HARTIK 3.0: A Portable System for Developing Real-Time |
- Applications}, |
- booktitle = {Proceedings of the IEEE Conference on Real-Time Computing Systems and Applications}, |
- year = {1997}, |
- where = {Taipei, Taiwan}, |
- month = {October} |
-} |
- |
-@inproceedings{Rau97, |
- author = {Rauganathan Rajkumar and Chen Lee and John Lehoczky and |
- Dan Siewiorek}, |
- title = {A Resource Allocation Model for QoS Management}, |
- booktitle = {Proceedings of the IEEE Real Time Systems Symposium}, |
- mounth = {December}, |
- year = 1997, |
- address = "" |
-} |
- |
-@inproceedings{Kor95, |
- author = {Gilad Koren and Dennis Shasha}, |
- title = {Skip-Over: Algorithms and Complexity for Overloaded Systems |
- that Allow Skips}, |
- booktitle = {IEEE Real Time System Symposium}, |
- year = 1995, |
- address = "Pisa" |
-} |
- |
-@inproceedings{Liu87, |
- author = {J. W. S. Liu and K. J. Lin and S. Natarjan}, |
- title = {Scheduling Real-Time, Periodic Jobs Using Imprecise |
- Results}, |
- booktitle = {IEEE Real Time System Symposium}, |
- year = 1987, |
- month = "December", |
- address = "San Jose, California" |
-} |
- |
-@inproceedings{Bar93, |
- author = {Sanjoy K. Baruah and Aloysius K. Mok and Louis E. Rosier}, |
- title = {Preemptively Scheduling Hard-Real-Time Sporadic Tasks on One |
- Processor}, |
- booktitle = {}, |
- year = 1993, |
- pages = "182--190" |
-} |
- |
-@MastersThesis{Mas92, |
- author = {Henry Massalin}, |
- title = {Synthesis: An Efficient Implementation of Fundamental |
- Operating System Services}, |
- school = {Columbia University}, |
- year = {1992} |
-} |
- |
-@InProceedings{Sch, |
- author = {Henning Schulzrinne and James F. Kurose}, |
- title = {Distribution of the Loss Period for Some Queues in |
- Continuous and Discrete Time}, |
- booktitle = {} |
-} |
- |
-@Book{Kle75, |
- author = {L. Kleinrock}, |
- title = {Queuing Systems}, |
- publisher = {Wiley-Interscience}, |
- year = {1975}, |
-} |
- |
-@Manual{VESA, |
- title = {VESA BIOS Extensions - Core Functions - Version 2.0}, |
- organization = {VESA} |
-} |
- |
-@TechReport{Lip97, |
- author = {Giuseppe Lipari}, |
- title = {Resource Constraints Among Periodic and Aperiodic Tasks}, |
- institution = {RETIS Lab - Scuola Superiore di Studi Universitari e |
- Perfezionamento S. Anna}, |
- number = {9702}, |
- year = {1997}, |
- address = {Via Carducci, 40 - 56100 Pisa}, |
- month = {November} |
-} |
- |
-@InProceedings{Tal96, |
- author = {T. Talley and Kevin Jeffay}, |
- title = {A General Framework for Continuous Media Transmission |
- Control}, |
- year = {1996}, |
- booktitle = {21st IEEE Conference on Local Computer Network}, |
- address = {Minneapolis}, |
- OPTmonth = {October} |
-} |
- |
-@InProceedings{Jef91, |
- author = {Kevin Jeffay and D. F. Stanat and C. U. Martel}, |
- title = {On Non-Preemptive Scheduling of Periodic and Sporadic |
- Tasks}, |
- booktitle = {IEEE Real Time System Symposium}, |
- year = {1991}, |
- address = {San Antonio}, |
- month = {December} |
-} |
- |
- |
-@Article{ Par93, |
- Author = "A. K. Parekh and R. G. Gallager", |
- Title = "{A generalized processor sharing approach to flow control in |
- integrated services networks: the single-node case}", |
- Journal = "IEEE/ACM Transactions on Networking", |
- Volume = "1", |
- Number = "3", |
- Month = "June", |
- Year = "1993", |
- Pages = "344--357" } |
- |
-@Article{ Par94, |
- Author = "A. K. Parekh and R. G. Gallager", |
- Title = "{A generalized processor sharing approach to flow control in |
- intergrated services networks: the multiple node case}", |
- Journal= "IEEE/ACM Transanctions on Networking", |
- Volume = "2", |
- Month = "April", |
- Year = "1994", |
- Pages = "137--150" } |
- |
-@InProceedings{Wal94, |
- author = {C. A. Waldspurger and W. E. Weihl.}, |
- title = {Lottery Scheduling: Flexible Proportional-Share Resource Management}, |
- booktitle = {First Symposium on Operating System Design and Implementation}, |
- pages = {1-12}, |
- year = {1994}, |
- OPTmonth = {November} |
-} |
- |
-@TechReport{Wal95, |
- author = {Carl A. Waldspurger and William E. Weihl}, |
- title = {Stride Scheduling: Deterministic Proportional-Share Resource Mangement}, |
- institution = {Massachusetts Institute of Technology}, |
- year = {1995}, |
- number = {MIT/LCS/TM-528}, |
- month = {June} |
-} |
- |
-@InProceedings{Sto97, |
- author = {I. Stoica and H. Abdel-Wahab and K. Jeffay}, |
- title = {On the Duality between Resource Reservation and Proportional Share Resource Allocation }, |
- booktitle = {SPIE Multimedia Computing and Networking}, |
- pages = {207-214}, |
- year = {1997}, |
- volume = {3020}, |
- address = {San Jose, CA}, |
- month = {February} |
-} |
- |
-@InProceedings{Cas98, |
- author = {Antonino Casile and Giorgio Buttazzo and Gerardo Lamastra and Giuseppe Lipari}, |
- title = {Simulation and Tracing of Hybrid Task Sets on Distributed Systems}, |
- booktitle = {Real Time Computing Systems and Applications}, |
- year = {1998} |
-} |
- |
-@InProceedings{Dem89, |
- author = {A. Demers and S. Keshav and S. Shenker}, |
- title = {Analysis and Simulation of a Fair Queueing Alorithm}, |
- booktitle = {ACM SIGCOMM}, |
- pages = {1-12}, |
- year = {1989}, |
- month = {September} |
-} |
- |
-@InProceedings{Bry97, |
- author = {Bryan Ford and Godmar Back and Greg Benson and Jay Lepreau and |
- Albert Lin and Olin Shivers}, |
- title = {The Flux OSKit: A Substrate for OS and Language Research}, |
- booktitle = {16 ACM Symposium on Operating Systems Principles}, |
- year = {1997}, |
- address = {Saint-Malo, France}, |
- month = {October} |
-} |
- |
-@InProceedings{Bry96, |
- author = {Bryan Ford and Sai Susarla}, |
- title = {CPU Inheritance Scheduling}, |
- booktitle = {Proceedings of OSDI}, |
- year = {1996}, |
- month = {October} |
-} |
- |
-@Article{Bar96, |
- author = {S.K. Baruah and N.K. Cohen and C.G. Plaxton and D.A. Varvel}, |
- title = {Proportionate Progress: A Notion of Fairness in Resource |
- Allocation}, |
- journal = {Algorithmica}, |
- year = {1996}, |
- keyword = {Scheduling, fairness}, |
- volume = {6} |
-} |
- |
-@inproceedings{Tok90, |
-key = {Tokuda90}, |
-author = {H. Tokuda and T. Nakajima and P. Rao}, |
-title = {Real-Time Mach: Toward a Predictable Real-Time System}, |
-booktitle = {USENIX Mach Workshop}, |
-pages = {73-82}, |
-month = {October}, |
-year = {1990}, |
-} |
- |
- |
-@MastersThesis{Abe98-1, |
- author = {Luca Abeni}, |
- title = {Progetto e Realizzazione di Meccanismi di Sistema per |
-Applicazioni Real-Time Multimediali}, |
- school = {Universit\`a degli studi di Pisa}, |
- year = {1997}, |
- OPTkey = {}, |
- OPTtype = {}, |
- OPTaddress = {}, |
- month = {Aprile}, |
- OPTnote = {}, |
- OPTannote = {} |
-} |
- |
-@inproceedings{Jef91-2, |
- author = {K.Jeffay and D.L. Stone and D.Poirier}, |
- title = {YARTOS: Kernel suppoprt for efficient, predictable real-time |
- systems}, |
- booktitle = {IEEE Workshop on Real-Time Operating Systems and Software}, |
- year = {1991}, |
- month = {May}, |
- key = {scheduling, multimedia, real-time, kernel } |
-} |
- |
-@inproceedings{Daw95-1, |
- title = {Exterminate all operating system abstractions}, |
- author = {Dawson R. Engler and M. Frans Kaashoek}, |
- booktitle = {Proceedings of the 5th {W}orkshop on {H}ot {T}opics in |
- {O}perating {S}ystems ({HotOS-V})}, |
- organization = {{IEEE} {C}omputer {S}ociety}, |
- year = {1995}, |
- month = {May}, |
- address = {Orcas Island, Washington}, |
- pages = {78--83} |
-} |
- |
-@inproceedings{Daw95-2, |
- title = {{E}xokernel: an operating system architecture for application-level |
- resource management}, |
- author = {Dawson R. Engler and M. Frans Kaashoek and James {O'Toole Jr.}}, |
- booktitle = {Proceedings of the 15th {ACM} {S}ymposium on {O}perating |
- {S}ystems {P}rinciples ({SOSP} '95)}, |
- year = {1995}, |
- month = {December}, |
- address = {Copper Mountain Resort, Colorado}, |
- pages = {251--266} |
-} |
- |
-@inproceedings{Lie95-1, |
- title = {On $\mu$-Kernel Construction}, |
- author = {Jochen Liedtke}, |
- booktitle = {Proceedings of the 15th {ACM} {S}ymposium on {O}perating |
- {S}ystems {P}rinciples ({SOSP} '95)}, |
- year = {1995}, |
- month = {December}, |
- address = {Copper Mountain Resort, Colorado}, |
-} |
- |
-@inproceedings{Lie95-2, |
- title = {Achieved IPC Performance (Still The Foundation For |
- Extensibility)}, |
- author = {J. Liedtke and K. Elphinstone and S. Schönberg and H. Härtig and G. Heiser and N. Islam and T. Jaeger}, |
- booktitle = {Proceedings of the 4th Hot Topics in Operating Systems (HotOS-VI)}, |
- year = {1997}, |
- month = {May}, |
- address = {Cape Cod, Massachusetts} |
-} |
- |
-@Misc{GRUB, |
- author = {Erich Stefan Boleyn}, |
- title = {GRUB, GRand Unified Bootloader}, |
- howpublished = {http://www.gnu.org/software/grub/grub.html}, |
-} |
- |
-@MastersThesis{Gai00, |
- author = {Paolo Gai}, |
- title = {Progetto e Realizzazione di un kernel Real-Time Modulare}, |
- school = {Universit\`a di Pisa, Facolt\`a di Ingegneria, Corso di laurea in Ingegneria Informatica}, |
- year = {2000}, |
- address = {Via Diotisalvi, Pisa}, |
- month = {May}, |
-} |
- |
- |
- |
-@MastersThesis{Gio00, |
- author = {Massimiliano Giorgi}, |
- title = {Progetto e Realizzazione di un File System Modulare}, |
- school = {Universit\`a di Pisa, Facolt\`a di Ingegneria, Corso di laurea in Ingegneria Informatica}, |
- year = {2000}, |
- address = {Via Diotisalvi, Pisa}, |
- month = {May}, |
-} |
- |
-@Misc{GPL, |
- author = {{F}ree {S}oftware {F}oundation}, |
- title = {{GNU} {G}eneral {P}ublic {L}icense ({GPL})}, |
- howpublished = {http://www.gnu.org/copyleft/gpl.html}, |
-} |
- |
-@inproceedings{Dav95, |
- author = {Robert Davis and Andy Wellings}, |
- title = {{D}ual {P}riority {S}cheduling}, |
- booktitle = {Proceedings of the IEEE Real Time Systems Symposium}, |
- year = 1995, |
- month = {December}, |
- key = {scheduling} |
-} |
- |
- |
- |
- |
- |
- |
- |
- |
-@Book{POSIX1003.1, |
- editor = {IEEE Computer Society}, |
- title = {International Standard ISO/IEC 9945-1: 1996 (E) - IEEE Std 1003.1, 1996 Edition - Information technology - Portable Operating System Interface (POSIX)}, |
- publisher = {IEEE}, |
- year = {1996}, |
-} |
- |
- |
-@Book{POSIX1003.13, |
- editor = {IEEE Computer Society}, |
- title = {IEEE Standard for Information Technology - Standardized Application Environment Profile - POSIX Realtime Application Support (AEP)}, |
- publisher = {IEEE}, |
- year = {1998}, |
-} |
- |
- |
- |
- |
- |
-@InProceedings{But97, |
- author = {G. C. Buttazzo and F. Sensini}, |
- title = {Optimal Deadline Assignment for Scheduling Soft Aperiodic Tasks in Hard Real-Time Environments}, |
- booktitle = {Proceedings of the 3rd IEEE International Conference on Engineering of Complex Computer Systems (ICECCS)}, |
- pages = {pp. 39-48}, |
- year = {1997}, |
- address = {Como, Italy}, |
- month = {September, 8-12}, |
-} |
- |
-@Misc{QNXNeutrino, |
- author = {{QNX} {S}oftware {S}ystems {L}td.}, |
- title = {QNX Neutrino Real-Time OS}, |
- howpublished = {http://www.qnx.com/products/os/neutrino.html}, |
-} |
- |
-@Misc{VXWorks, |
- author = {Wind River}, |
- title = {VxWorks 5.4}, |
- howpublished = {http://www.wrs.com/products/ html/vxwks54.html}, |
-} |
- |
-@Misc{Nemesis, |
-author = "Ian Leslie and Derek McAuley and Richard Black and Timothy Roscoe and Paul Barham and David Evers and Robin Fairbairns and Eoin Hyden", |
-title = "The Design and Implementation of an Operating System to Support Distributed Multimedia Applications", |
- howpublished = "http://www.cl.cam.ac.uk/Research/SRG/netos/pegasus/ papers/jsac-jun97/paper.html" |
-} |
- |
-@InProceedings{Foh95, |
- author = {G. Fohler}, |
- title = {Joint scheduling of distributed complex periodic and hard aperiodic tasks in statically scheduled systems.}, |
- booktitle = {Proceedings of the 16th Real Time System Symposium, Pisa, Italy, Dec. 1995}, |
- year = {1995} |
-} |
- |
-@inproceedings{Cac00, |
- author = {Marco Caccamo and Giorgio Buttazzo and Lui Sha}, |
- title = {Elastic Feedback Control}, |
- booktitle = {Proceedings of the IEEE Euromicro Conference on Real-Time}, |
- year = 2000, |
- month = {June}, |
- address = {Stocolm, Sweden}, |
- key = {scheduling} |
-} |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
/trunk/common/retis.bib |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/common/manual.mk |
=================================================================== |
--- trunk/common/manual.mk (revision 1677) |
+++ trunk/common/manual.mk (nonexistent) |
@@ -1,52 +0,0 @@ |
-# common part of the Shark manual makefiles |
- |
-# /toOl: build only if $(MAIN).pdf is not already present |
-all: eps $(MAIN).pdf |
- |
-# /toOl: commented stuff is for MikTex |
-$(MAIN).pdf: *.tex |
- latex $(MAIN).tex |
-# makeindex $(MAIN) |
- bibtex $(MAIN) |
- latex $(MAIN).tex |
- latex $(MAIN).tex |
-# dvips -R0 -t a4 -I c $(MAIN) -o $(MAIN).ps |
- dvips $(MAIN) |
- ps2pdf $(MAIN).ps |
- if test $(MAIN_NAME); then cp $(MAIN).pdf ../$(MAIN_NAME).pdf; fi |
- |
-clean: |
- rm -rf *.aux |
- rm -rf *.dvi |
- rm -rf *.log |
- rm -rf *.idx |
- rm -rf *.ind |
- rm -rf *.toc |
- rm -rf *.ilg |
- rm -rf *.out |
- rm -rf *.bbl |
- rm -rf *.blg |
- rm -rf *~ |
- rm -rf $(MAIN).ps $(MAIN).pdf |
- rm -f $(EPS_DIA_FILES) $(EPS_FIG_FILES) |
- |
-cleanall: clean |
- |
-# automatic generation of eps files from sources |
- |
-DIA_FILES = $(shell find . -iname *.dia) |
-EPS_DIA_FILES = $(patsubst %.dia,%.eps, $(DIA_FILES)) |
- |
-FIG_FILES = $(shell find . -iname *.fig) |
-EPS_FIG_FILES = $(patsubst %.fig,%.eps, $(FIG_FILES)) |
- |
-.PHONY: eps |
- |
-eps: $(EPS_DIA_FILES) $(EPS_FIG_FILES) |
- |
-%.eps : %.dia |
- dia $< -t eps-builtin -e $@ |
- |
-%.eps : %.fig |
- fig2dev -L eps $< $@ |
- |
/trunk/common/manual.mk |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/shark-qg/shark-pxe.txt |
=================================================================== |
--- trunk/shark-qg/shark-pxe.txt (revision 1677) |
+++ trunk/shark-qg/shark-pxe.txt (nonexistent) |
@@ -1,80 +0,0 @@ |
-Network Shark application execution through PXE |
- |
-Download the GRUB source (I used version 0.97) and run a command like this: |
- |
-./configure -enable-diskless --enable-preset-menu="menu.lst" --enable-3c90x --disable-ffs --disable-minix --disable-reiserfs --disable-xfs --disable-ufs2 --disable-vstafs |
- |
-The -enable-diskless option asks to build the PXE compliant GRUB image pxegrub (you will find it in (GRUB_DIR)/stage2). |
- |
-The --enable-3c90x option enables the support for specific 3Com card. You may need to change this option to support your network card. |
- |
-The --enable-preset-menu="menu.lst" option says to the building procedure to embed the following menu.lst file: |
- |
------------------------------------------------------ |
-The menu.lst file used while building GRUB |
------------------------------------------------------ |
-# default - boot the first entry. |
-default 0 |
- |
-# after 0 sec boot default. |
-timeout 0 |
- |
-fallback 0 |
- |
-title Shark |
- |
-ifconfig --address=192.168.0.201 --mask=255.255.255.0 --server=192.168.0.130 |
-tftpserver 192.168.0.130 |
-rootnoverify (nd) |
-configfile (nd)/remote-menu.lst |
------------------------------------------------------ |
- |
-Do change the network information, like IP addresse and server address, to comply with your network. |
- |
-Then execute "make" and copy the pxegrub image from (GRUB_DIR)/stage2 to your TFTP server directory (for example /tftpboot). |
- |
-The suggested GRUB configuration can be improved by disabling other filesystems support (i.e., ext2) or, in case of need, to support more than one network card. The latter point is quite delicate, since many GRUB users experienced some problems when including too much network card drivers in a single image. |
- |
-The embedded menu.lst configuration file points to the remote-menu.lst: |
- |
------------------------------------------------------ |
-The remote-menu.lst file |
------------------------------------------------------ |
-default 0 |
-timeout 0 |
- |
-title Remote Shark |
-kernel (nd)/shark |
-boot |
------------------------------------------------------ |
- |
-The remote-menu.lst file says to GRUB to load the "shark" executable application. |
-ATTENTION: Shark kernel and applications must be built with the VM86 option turned on in shark.cfg. |
- |
-The following lines are an example of the DHCP server configuration file needed to tell to the PXE boot process where to get the PXE image. Of course, again, you may need to adapt network parameters to your needs. |
- |
------------------------------------------------------ |
-The dhcpd.conf file (using dhcp3) |
------------------------------------------------------ |
-option domain-name "mydomain.net"; |
-option subnet-mask 255.255.255.0; |
-default-lease-time 600; |
-max-lease-time 7200; |
-server-name "server-name"; |
- |
-subnet 192.168.0.0 netmask 255.255.255.0 { |
- range 192.168.0.200 192.168.0.205; |
- option routers 192.168.0.255; |
-} |
- |
-host shark-client1 { |
- # MAC address of the machine where the Shark application will run |
- hardware ethernet 00:0A:5E:3C:97:14; |
- # IP address assigned to that machine |
- fixed-address 192.168.0.201; |
- # PXE image to be served from the TFTP server |
- filename "pxegrub"; |
- # TFTP server address |
- next-server 192.168.0.130; |
-} |
------------------------------------------------------ |
/trunk/shark-qg/shark-pxe.txt |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/shark-qg/history |
=================================================================== |
--- trunk/shark-qg/history (revision 1677) |
+++ trunk/shark-qg/history (nonexistent) |
@@ -1,3 +0,0 @@ |
-Version 1.01 - 02 March 2006 |
- |
-Added section about the Unix commands under DOS. |
/trunk/shark-qg/history |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/shark-qg/shark-qg.tex |
=================================================================== |
--- trunk/shark-qg/shark-qg.tex (revision 1677) |
+++ trunk/shark-qg/shark-qg.tex (nonexistent) |
@@ -1,1155 +0,0 @@ |
-\documentclass[a4paper,10pt]{report} |
- |
-%\usepackage{html} |
- |
-\title{The S.Ha.R.K. Quick Guide} |
-\author{Tullio Facchinetti\\ |
-\textit{tullio.facchinetti at unipv.it}\\ \\ |
-Version 1.11} |
- |
-\begin{document} |
-\maketitle |
- |
-\tableofcontents |
- |
-% \begin{abstract} |
-% \end{abstract} |
- |
-%------------------------------------------------------------ |
-\chapter{Introduction} |
-\label{ch:introduction} |
-%------------------------------------------------------------ |
- |
-This document has been written for helping the beginner to start |
-using the S.Ha.R.K. (\textbf{S}oft \textbf{HA}rd \textbf{R}eal-time |
-\textbf{K}ernel) kernel. The S.Ha.R.K. kernel source code is |
-available at |
- |
-\begin{center} |
-\underline{http://shark.sssup.it} |
-\end{center} |
- |
-The S.Ha.R.K. Quick Guide is intended to be as an ongoing document, |
-since new topics will be added if needed. |
- |
-%------------------------------------------------------------ |
-\section{What S.Ha.R.K. is} |
-\label{sec:what-is} |
-%------------------------------------------------------------ |
- |
-S.Ha.R.K. is a set of libraries that are statically linked into a |
-multiboot image, that is the application. Then, the application is |
-run through a DOS memory extender (X.EXE) or directly launched at |
-boot time using the GRUB. |
- |
-S.Ha.R.K. makes available to the application all the primitives to |
-create, activate and run real-time tasks using state of the art |
-scheduling algorithms (EDF, RM, etc.). It also allows to share data |
-among the tasks by chosing between several resource reservation |
-algorithms like Priority Ceiling, Priority Inheritance, SRP |
-\cite{But97}. |
-S.Ha.R.K. supports drivers for a huge amount of hardware, like video |
-and network cards, frame-grabbers, multi-purpose cards and custom |
-boards. |
- |
-Shark is a compiling kernel with memory protection, not a kernel like |
-Linux. You will not find any main() routine into the kernel tree |
-because the tree only contains the set of libraries required to build |
-the application. The main() function is called by the kernel, and is |
-contained into the application files as specified by the C language |
-standard. |
- |
-%------------------------------------------------------------ |
-\chapter{Getting started} |
-\label{ch:getting-started} |
-%------------------------------------------------------------ |
- |
-This Section covers the S.Ha.R.K. installation and system building |
-from the sources available on the website. As will be introduced in |
-Section \ref{sec:platforms}, S.Ha.R.K. can be used under Linux, |
-Windows$^{TM}$ or xDOS (preferably the free version of DOS, FreeDOS). |
- |
-%------------------------------------------------------------ |
-\section{Supported platforms} |
-\label{sec:platforms} |
-%------------------------------------------------------------ |
- |
-S.Ha.R.K. application, as well as the Shark kernel, modules and |
-drivers, can be developed under three main platforms: DOS (either |
-MS-DOS$^{TM}$ or FreeDOS\footnote{In the rest of the document, we |
-will only refer to FreeDOS while addressing the xDOS platform. Most |
-of the topics hold for other DOS systems; specific indications for |
-other platforms will be given if necessary.}), Windows$^{TM}$ or |
-Linux. Table \ref{t:platforms-comparison} shows some characteristics |
-of using Shark under the three systems. |
- |
-\begin{table}[ht] |
-\centering |
-\begin{tabular}{|l|c|c|c|} |
-\hline |
- & DOS & Linux & |
-Windows \\ \hline |
-Graphical interface & no & \textbf{yes} & |
-\textbf{yes} \\ |
-Good editors & it depends & \textbf{yes} & |
-\textbf{yes} |
-\\ |
-Compilation speed & slow & \textbf{fast} & |
-\textbf{fast} \\ |
-Native compiler & no & \textbf{yes} & no |
- \\ |
-Programming/debug tools & no & \textbf{yes} & no |
- \\ |
-Dealing with long filenames & TSRs & \textbf{native} & |
-\textbf{native} \\ |
-Native execution & \textbf{yes} & no & no |
- \\ \hline |
-\end{tabular} |
-\caption{Quick comparison among the different supported platforms.} |
-\label{t:platforms-comparison} |
-\end{table} |
- |
-A quick consideration about the item "Good editors" for DOS. Someone |
-may consider RHIDE, the DOS editor distributed with S.Ha.R.K. a good |
-editor: I don't. But I also hate EDIT. Usually, I use an old editor |
-called AURORA. More information at |
- |
-\begin{center} |
-\underline{http://www-personal.umich.edu/~knassen/aurora.html} |
-\end{center} |
- |
-Linux and Windows$^{TM}$ are quite similar, in terms of programming |
-facilities. The main advantage on using FreeDOS platforms is that it |
-does not require to reboot the machine to execute the application, |
-while when developing under Linux or Windows$^{TM}$ it does. |
- |
-Cygwin or other Linux console for Windows$^{TM}$ are not currently |
-and directly supported. However, the support to such platforms is not |
-mandatory in the current version, since a Windows$^{TM}$ user can |
-easily build the system and develop application directly from the |
-Windows$^{TM}$ platform. |
- |
-%------------------------------------------------------------ |
-\section{Installation} |
-\label{sec:platform-install} |
-%------------------------------------------------------------ |
- |
-The installation changes a little bit from platform to platform. |
- |
-%------------------------------------------------------------ |
-\subsection{Linux} |
-\label{sec:install-linux} |
-%------------------------------------------------------------ |
- |
-\begin{enumerate} |
-\item \label{linux-step1} download \texttt{shark-1.5.tar.bz2} from the S.Ha.R.K. |
-web site (\underline{http://shark.sssup.it}) |
-\item \label{linux-step2} type \texttt{tar xvjf shark-1.5.tar.bz2} |
-\item \label{linux-step3} type \texttt{cd shark} |
-\item \label{linux-step4} edit the S.Ha.R.K. configuration file, |
-\texttt{shark.cfg} |
-\item \label{linux-step5} type \texttt{make all} |
-\item \label{linux-step6} type \texttt{cd demos} |
-\item \label{linux-step7} type \texttt{make} |
-\end{enumerate} |
- |
-Some tips: |
- |
-\begin{itemize} |
-\item Step \ref{linux-step4} is needed to setup the compiler options and |
-optimize the kernel for speed and precision. |
-\item Step \ref{linux-step5} builds the S.Ha.R.K. kernel, libraries, modules and |
-device drivers. |
-\item Finally, step \ref{linux-step7} builds the demo programs. |
-\end{itemize} |
- |
-%------------------------------------------------------------ |
-\subsection{DOS} |
-\label{sec:install-DOS} |
-%------------------------------------------------------------ |
- |
-The installation for the xDOS platform follows: |
- |
-\begin{enumerate} |
-\item \label{DOS-step1} download \texttt{unzip32.exe}, \texttt{mindj333.zip} |
-and |
-\texttt{shark15.zip} from the S.Ha.R.K. web site. |
-\item \label{DOS-step2} type \texttt{unzip32 -o mindj333.zip -d c:} |
-\item \label{DOS-step3} type \texttt{cd c:$\backslash$djgpp} |
-\item \label{DOS-step4} type \texttt{install.bat} |
-\item \label{DOS-step5} type \texttt{setvar.bat} |
-\item \label{DOS-step6} type \texttt{unzip32 -o shark15.zip -d c:} |
-\item \label{DOS-step7} type \texttt{cd c:$\backslash$shark} |
-\item \label{DOS-step8} edit \texttt{shark.cfg} |
-\item \label{DOS-step9} type \texttt{make} |
-\item \label{DOS-step10} type \texttt{cd demos} |
-\item \label{DOS-step11} type \texttt{make} |
-\item \label{DOS-step12} type \texttt{cd $<$demo dir$>$} |
-\item \label{DOS-step13} type \texttt{x $<$demo name$>$} |
-\end{enumerate} |
- |
-Some tips: |
- |
-\begin{itemize} |
-\item If you already have \texttt{PkZip}, at step \ref{DOS-step2} you may |
-also type \texttt{pkunzip -d -o mindj333.zip c:$\backslash$} |
-\item If you change the DJGPP directory name or position, |
-\texttt{install.bat} and \texttt{setvar.bat} need also to be changed. |
-\item The \texttt{setvar.bat} script automatically set the environement |
-variables for DJGPP; you must run \texttt{install.bat} and |
-\texttt{setvar.bat} every time you reboot and start a compile |
-session. |
-\item After step \ref{DOS-step5}, DJGPP is installed and ready to compile |
-shark. |
-\item If you already have PkZip, at step \ref{DOS-step6} you may also type |
-\texttt{pkunzip -d -o shark15.zip c:$\backslash$} |
-\item Step \ref{DOS-step8} is needed to setup the compiler options and |
-optimize the kernel for speed and precision. |
-\item Step \ref{DOS-step9} builds the S.Ha.R.K. kernel, libraries, modules |
-and device drivers. |
-\item Finally, step \ref{DOS-step11} builds the demo programs. |
-\end{itemize} |
- |
-In DOS real mode we suggest, even though it is not mandatory, to load |
-the smartdrive utility (\texttt{smartdrv 16000 /x}) to speedup the |
-disk access during all the previous steps. The \texttt{smartdrv} |
-utility is available for MS-DOS$^{TM}$. For the FreeDOS environemnt |
-you can use the lbacache instead. |
- |
-\textbf{IMPORTANT:} You need DOSLFN.ZIP |
-(\underline{http://shark.sssup.it/distrib/doslfn.zip}), a TSR to use |
-long file names under DOS real mode. You have to run the doslfn |
-command before starting to work with S.Ha.R.K. every time the machine |
-is re-booted. You don't need it only if you are inside a DOS |
-emulation window (see Windows Millennium/NT/2000/XP paragraph). |
- |
-In real DOS environement, you can compile and run a demos without |
-reboot, directly running the demo programs through the \texttt{X.EXE} |
-extender from the FreeDOS command line. |
- |
-%------------------------------------------------------------ |
-\subsection{Windows Millennium/NT/2000/XP} |
-\label{sec:install-win} |
-%------------------------------------------------------------ |
- |
-\begin{enumerate} |
-\item download unzip32.exe,mindj333.zip and shark15.zip from the S.Ha.R.K. web |
-site; |
-\item go in a DOS emulation window (DOS prompt); |
-\item follow the previous procedure for normal DOS environment. |
-\end{enumerate} |
- |
-\textbf{Reminder:} YOU CAN NOT EXECUTE A S.Ha.R.K. APPLICATION |
-THROUGH THE X.EXE EXTENDER WITHIN A DOS EMULATION WINDOW. So, to test |
-a compiled demo programs you need to reboot with the FreeDOS |
-bootdisk or something similar. |
- |
-%------------------------------------------------------------ |
-\section{How to partition the hard-disk for using with S.Ha.R.K.} |
-\label{sec:hd-installation} |
-%------------------------------------------------------------ |
- |
-Even though it is often not needed and it may be unconfortable to |
-setup an already partitioned machine, it may be very useful to setup |
-a machine to host the S.Ha.R.K. kernel in school and university |
-laboratories for teaching purposes. |
- |
-This section is dedicated to the setup of an hard-disk for dedicating |
-a partition to the installation of S.Ha.R.K. It will explain how to |
-partition and format an hard-disk in order to install a multi-boot |
-environment allowing to choose between three operating systems: |
-FreeDOS and S.Ha.R.K., Linux and Windows$^{TM}$. The five basic steps |
-to setup the installation are: |
- |
-\begin{enumerate} |
-\item partition the hard disk; |
-\item install Windows$^{TM}$; |
-\item install FreeDOS; |
-\item install Linux; |
-\item setup the boot loader. |
-\end{enumerate} |
- |
-The tools needed to perform the installation are: |
- |
-\begin{itemize} |
-\item Linux fdisk utility; |
-\item a copy of Linux installation CD; |
-\item a copy of Windows$^{TM}$ installation CD; |
-\item some FreeDOS utilities; |
-\item a copy of S.Ha.R.K. |
-\end{itemize} |
- |
-To accomplish all the operation related to the hard-disk partition, I |
-suggest to use a Linux LiveCD distribution. My favourite one is |
-Knoppix, by Mark Knopper, downloadable from |
- |
-\begin{center} |
-\underline{http://www.knoppix.org}. |
-\end{center} |
- |
-Linux LiveCD distribution allow to use all the powerful Linux tools |
-without the need of installing anything on the hard-disk. |
- |
-Boot the PC from the CD drive after inserting the Knoppix LiveCD into |
-the drive and open a shell. You must be the root user to have the |
-permissions for the next steps, so type |
- |
-\begin{center} |
-\texttt{su} |
-\end{center} |
- |
-with an empty password at the console prompt. Then launch the Linux |
-\texttt{fdisk}, typing |
- |
-\begin{center} |
-\texttt{fdisk /dev/hdXXX} |
-\end{center} |
- |
-where XXX identifies your hard-drive. Typically, the command |
- |
-\begin{center} |
-\texttt{fdisk /dev/hda} |
-\end{center} |
- |
-will work fine. To use the \texttt{fdisk} commands do refer to the |
-program help: you will need the commands to delete and create |
-partition as well as to change the partition ID and write the |
-partition table on the disk. |
- |
-I suggest to partition your HD like something as described in Table |
-\ref{t:hd-partitioning}. |
- |
-\begin{table}[ht] |
-\centering |
-\begin{tabular}{|c|c|c|c|} |
-\hline |
- & Partition number & Dedicated to & Type |
-\\ \hline |
- & 1st & FreeDOS & FAT32 |
-\\ |
-primary partitions & 2nd & Windows & FAT32/NTFS |
-\\ |
- & 3rd & Linux & |
-extX/Reiser/... \\ \hline |
- & 4th & Data 1 & any |
-\\ |
-extended partition & ... & ... & ... |
-\\ |
- & last but one & Data n & any |
-\\ |
- & last & Linux swap & (if needed) |
-\\ |
-\hline |
-\end{tabular} |
-\caption{Example of hard-disk partitioning.} |
-\label{t:hd-partitioning} |
-\end{table} |
- |
-\textbf{IMPORTANT:} The FreeDOS partition must be the FIRST partition |
-on your disk or you should experience some problems while booting |
-FreeDOS. |
- |
-Since \texttt{fdisk} creates all the partitions as Linux partitions, |
-you must toggle the partition type of the 2nd partition to make it a |
-FAT32 (LBA) or NTFS. |
- |
-\textbf{SUGGESTION:} Do leave all the other partition as Linux type, |
-so that Windows$^{TM}$ will put all the booting stuff into the only |
-partition that it can see at installation time. |
- |
-Now, reboot and install Windows$^{TM}$ into the only partition that |
-is available for it. I only tested the 2000 and XP versions of |
-Windows. If you want to install previous Windows$^{TM}$ versions (98 |
-or 95) I'm not sure that they will be able to boot if they are not |
-installed into the first partition. However if you want to use them, |
-you can skip the installation of FreeDOS, since you can use the |
-MS-DOS shell to run Shark programs. |
- |
-After the installation of Windows$^{TM}$, boot Knoppix again and use |
-\texttt{fdisk} to change the partition type of the 1st partition: |
-toggle it as FAT32 (LBA) - suggested - or FAT16 if you want to test |
-the filesystem capabilities of Shark. |
- |
-Do format the 1st partition using the Windows formatting program. |
- |
-Install FreeDOS. You can download all the packages from |
- |
-\begin{center} |
-\underline{http://www.freedos.org}. |
-\end{center} |
- |
-I suggest to download the packages and to copy them manually into the |
-partition, avoiding the Installation CD or floppy. You can also use a |
-S.Ha.R.K. boot CD to copy the whole FreeDOS tree onto the disk. |
- |
-Make a FreeDOS boot floppy using the \texttt{sys} command, executing |
-a command like |
- |
-\begin{center} |
-\texttt{sys a:} |
-\end{center} |
- |
-Copy also the \texttt{sys.com} FreeDOS program on the floppy. |
- |
-Reboot the machine leaving the floppy into the drive and launch the |
-command |
- |
-\begin{center} |
-\texttt{sys x: x:$\backslash$fdosboot.img} % check the backslash |
-\end{center} |
- |
-\textbf{ATTENTION:} "x:" refers to the drive letter of the partion in |
-which FreeDOS has been installed, as seen by FreeDOS after the boot |
-from floppy (check which is the right drive letter by listing the |
-content of the drives with "dir x:"). |
- |
-What you did is to created an image of the boot sector which is able |
-to boot FreeDOS, but instead of overwriting the Master Boot Record |
-(MBR), you writed it onto the disk. |
- |
-Now insert the Linux intallation disk, reboot the PC and install |
-Linux. After the installation, the GRUB boot manager should be |
-installed in your MBR (I did not tested other boot managers, like |
-LILO). |
- |
-Look for the configuration file of the GRUB, \texttt{grub.conf}, that |
-is |
-often placed into the \texttt{/boot/grub} directory. The lines to |
-boot Linux are usually added automatically by the installer. The |
-lines to boot Windows$^{TM}$ look like the following |
- |
-\begin{verbatim} |
-title Win2000 |
-rootnoverify (hd0,1) |
-chainloader +1 |
-\end{verbatim} |
- |
-Then, add the lines to boot FreeDOS: |
- |
-\begin{verbatim} |
-title FreeDOS - Shark |
-rootnoverify (hd0,0) |
-makeactive |
-chainloader /fdosboot.img |
-boot |
-\end{verbatim} |
- |
-Now you are ready to install the S.Ha.R.K. distribution following the |
-instructions of Section \ref{sec:platform-install}. |
- |
-%------------------------------------------------------------ |
-\section{Kernel and applications} |
-\label{sec:kernel-apps} |
-%------------------------------------------------------------ |
- |
-S.Ha.R.K. currently supports the PC platform (Intel$^{TM}$ or |
-AMD$^{TM}$ processors, etc.). Using the S.Ha.R.K. kernel is easy. Few |
-tools are required to build the kernel, to develop new applications |
-and to run existing or new applications. |
- |
-%------------------------------------------------------------ |
-\subsection{Building kernel and applications} |
-\label{sec:build-kernel} |
-%------------------------------------------------------------ |
- |
-S.Ha.R.K. is written in C, so it requires a C compiler to build the |
-system from the source code. Currently, S.Ha.R.K. supports the |
-\texttt{GCC version 3.3}, which is the standard compiler and is |
-already present in most of the Linux distributions. |
- |
-\textbf{ATTENTION:} the \texttt{GCC version 3.4} does not properly |
-work while building the system or compiling user programs. You can |
-check your GCC version by typing |
- |
-\begin{center} |
-\texttt{gcc -v} |
-\end{center} |
- |
-into a Linux console. |
- |
-Windows$^{TM}$ or FreeDOS come without their own C compiler. There |
-exist a version of the GCC which runs under FreeDOS, and |
-Windows$^{TM}$ too, called DJGPP and available at |
- |
-\begin{center} |
-\underline{http://www.delorie.com/djgpp}. |
-\end{center} |
- |
-However, the DJGPP version downloadable from the DJ Delorie website |
-it is not suitable to be used with S.Ha.R.K. since it produces the |
-COFF\footnote{See |
-\underline{http://www.theparticle.com/cs/bc/os/elfpecoff.html} |
-for some information on executable file formats.} executable file |
-format only. S.Ha.R.K. needs a compiler which has to be able to |
-produce the ELF file format. This is why the DJGPP has been rebuilt |
-in order to produce the ELF format. |
- |
-\textbf{ATTENTION:} you must download the correct DJGPP version from |
-the S.Ha.R.K. website. |
- |
-%------------------------------------------------------------ |
-\subsection{Executing applications} |
-\label{sec:execute-app} |
-%------------------------------------------------------------ |
- |
-There are two options to run a new application or one of the demos |
-distributed with S.Ha.R.K.: |
- |
-\begin{itemize} |
-\item using the X.EXE DOS memory extender; |
-\item loading the application from the GRUB boot manager. |
-\end{itemize} |
- |
-Using X.EXE, which is available on the S.Ha.R.K. website, requires an |
-xDOS platform. Supported platforms are FreeDOS and MS-DOS$^{TM}$. In |
-the latter case, however, an application can be run using X.EXE only |
-from a Windows$^{TM}$ 95, Windows$^{TM}$ 98 and Windows$^{TM}$ 95SE |
-DOS console. |
- |
-\textbf{ATTENTION:} Windows$^{TM}$ Millennium/ NT/2000/ XP consoles |
-can not be used to run S.Ha.R.K. applications. |
- |
-Using the GRUB is more complicated and, since it is particularly |
-useful |
-for the remote execution of S.Ha.R.K. programs, this topic will be |
-covered in a dedicated section. |
- |
-%------------------------------------------------------------ |
-\subsection{Getting a DOS environment for executing S.Ha.R.K. |
-applications} |
-\label{sec:environment} |
-%------------------------------------------------------------ |
- |
-To execute a S.Ha.R.K. application a DOS environment is required, and |
-several options are available to get it: |
- |
-\begin{itemize} |
- |
-\item |
-an hard-disk can be partitioned and formatted for multi-boot, and a |
-partition can be reserved to FreeDOS. This may be a tricky way, and |
-it is suggested only if the users has a good knowledge of the |
-involved operations. It is particularly useful to setup the |
-workstations in school and university laboratories. |
- |
-\item |
-re-booting a machine every time an execution of a S.Ha.R.K. |
-application is needed with the S.Ha.R.K. boot CD or the boor floppy |
-available on the S.Ha.R.K. website. |
- |
-The second option needs some more indications. When the machine |
-restarts, a FreeDOS environment is made available. This means that it |
-is possible to launch the X.EXE extender to run a S.Ha.R.K. |
-application. The application itself should be put on the floppy or, |
-anyway, it MUST be put on a partition with a filesystem reachable by |
-the FreeDOS kernel. At the best of my knowledge, FreeDOS currently |
-supports FAT16 and FAT32 filesystems only. So that, an application |
-which is stored that resides on a NTFS (Windows$^{TM}$), ext2, ext3, |
-ReiserFS or other Linux filesystems can not be executed using the |
-boot from floppy or CD. |
- |
-\end{itemize} |
- |
-%------------------------------------------------------------ |
-\chapter{Using S.Ha.R.K.} |
-\label{ch:using} |
-%------------------------------------------------------------ |
- |
-%------------------------------------------------------------ |
-\section{Your first S.Ha.R.K. application} |
-\label{sec:first-app} |
-%------------------------------------------------------------ |
- |
-A typical S.Ha.R.K. application is composed by 3 main components: the |
-\texttt{program} source file, the initialization source file |
-(\texttt{initfile}) and the \texttt{makefile}. |
- |
-%------------------------------------------------------------ |
-\subsection{The makefile} |
-\label{sec:makefile} |
-%------------------------------------------------------------ |
- |
-The makefile is the script used by the \texttt{make} command to build |
-the application. Typically, the makefile is named "makefile", and you |
-can build the application by simply launching the command |
-\texttt{make} from the command line. However, the makefile may be |
-named differently in order, for example, to maintain different make |
-settings into the same directory. With a makefile named "myapp.mak", |
-the application can be built typing the command \texttt{make -f |
-myapp.mak}. |
- |
-\textbf{IMPORTANT:} To build an application, you can not launch the |
-compiler directly without using the makefile, since the makefile sets |
-several variables and calls several sub-routines before invoking the |
-compiler. |
- |
-\begin{figure} |
-\noindent |
-\newcounter{alines} |
-\begin{list}{\arabic{alines}}{\usecounter{alines}} |
-\addtolength{\parskip}{-8pt} |
-\hrule |
- |
-\item ifndef BASE \label{l1:ifndef} |
-\item BASE=../.. \label{l1:def-base} |
-\item endif \label{l1:endif} |
-\item include \$(BASE)/config/config.mk \label{l1:inc-config} |
-\item PROGS = myapp \label{l1:prog-name} |
-\item include \$(BASE)/config/example.mk \label{l1:inc-example} |
-\item myapp: \label{l1:build-cmd} |
-\item \ \ \ \ make -f \$(SUBMAKE) APP=myapp INIT= |
-OTHEROBJS="initfile.o source2.o source3.o" OTHERINCL= |
-SHARKOPT="\_\_LINUXC26\_\_ \_\_PCI\_\_ \_\_INPUT\_\_ \_\_FB\_\_" |
-\label{l1:make-instr} |
- |
-\end{list} |
-\hrule |
-\caption{Example of makefile.} |
-\label{f:ex-makefile} |
-\end{figure} |
- |
-The makefile contains some directives to specify the application |
-name, source file names and libraries needed for building the |
-application. Figure \ref{f:ex-makefile} shows an example of makefile |
-for building an application called \texttt{myapp}, thus contained |
-into the source file \texttt{myapp.c}. The application code is also |
-contained into two source files: \texttt{source1.c}, |
-\texttt{source2.c}. For each of those files, the compiler produces an |
-\texttt{object file}, with the ".o" extension. The object files |
-required for making the application must be specified with the |
-OTHEROBJS directive into the instruction at line \ref{l1:make-instr}. |
-Notice that, since also the initfile contains the application source |
-code (Section \ref{sec:initfile}), you must include the related |
-object file name into the OTHEROBJS directive. |
- |
-To customize the makefile in order to build your own application, you |
-must supply the program name at lines \ref{l1:prog-name} and |
-\ref{l1:make-instr}, and the same name should be used for the |
-instruction at line \ref{l1:build-cmd}. |
- |
-At line \ref{l1:def-base}, you specify the path where the S.Ha.R.K. |
-kernel has been installed. Althought you can specify an absolute path |
-like \texttt{/home/username/shark} for Linux or \texttt{c:$\backslash$shark}, |
-typically a relative path is used. In Figure \ref{f:ex-makefile}, the |
-instruction at line \ref{l1:def-base} says that the base S.Ha.R.K. |
-directory is located two levels before the application directory. For |
-example, if S.Ha.R.K. has been installed into |
-\begin{center} |
-\texttt{/home/toolleeo/shark}, |
-\end{center} |
-the application is located into |
-\begin{center} |
-\texttt{/home/toolleeo/shark/projects/apps}. |
-\end{center} |
- |
-The BASE directory in the example is relative to the current |
-application directory. This works fine if the application directory |
-is under the S.Ha.R.K. derictory tree. If the application stays |
-outside the system tree, you can use an absolute indication of the |
-S.Ha.R.K. base directory, such as \texttt{/home/toolleeo/shark} instead of |
-\texttt{../..}. |
- |
-Finally, the instruction at line \ref{l1:make-instr} specifies also |
-the libraries that must be linked together the object code to build |
-the whole application. In the example, the application uses the Linux |
-2.6 compatibility layer, which is always required when the drivers |
-are used, the PCI driver, the Input driver (to manage the input |
-devices like keyboard, mouse, etc.) and the Frame Buffer driver for |
-the graphical display. The list of all the available libraries can be |
-found into the \texttt{\$(BASE)/lib} directory, where |
-\texttt{\$(BASE)} is the S.Ha.R.K. installation directory. |
- |
-\textbf{ATTENTION:} when modifying the makefile, be sure to use a |
-text editor which saves the TAB character and avoids editors (often |
-you can configure this option into the editor preferences) which |
-substitute TAB characters with spaces. This is important because |
-instruction \ref{l1:make-instr} MUST be indented with a TAB |
-character. Otherwise, the \texttt{make} command will not be able to |
-interpret the makefile correctly. |
- |
-%------------------------------------------------------------ |
-\subsection{The initfile} |
-\label{sec:initfile} |
-%------------------------------------------------------------ |
- |
-The initfile is a normal source file which contains the instruction |
-for the program initialization. Initfiles include the system |
-headers, initialize modules regarding the scheduling policies for |
-tasks and shared resources, the graphical mode if needed, the |
-keyboard and all the required devices. |
- |
-When the application is launched, before starting the multitasking |
-mode the program must initialize the devices, the resources and the |
-schedulers which will be used by the application. For doing so, the |
-kernel calls the \texttt{\_\_kernel\_register\_levels\_\_} function, that |
-usually registers the following modules (see the S.Ha.R.K. Kernel |
-architecture Manual for more details): |
- |
-\begin{itemize} |
-\item scheduling modules: a scheduling module implements a particular scheduling |
-algorithm, for example EDF, RM, Round Robin, etc.; |
-\item resource Modules: a resource module implements a shared resource access |
-protocol (for example the semaphores, the mutexes, etc.); |
-\item other devices, such for example the file system, and other devices that |
-has to be initialized before entering the multitasking mode. |
-\end{itemize} |
- |
-%------------------------------------------------------------ |
-\subsection{The program} |
-\label{sec:program} |
-%------------------------------------------------------------ |
- |
-The program file is the source file containing the \texttt{main} |
-function |
- |
-\begin{center} |
-\texttt{int main(int argc, char **argv)} |
-\end{center} |
- |
-The main function is automatically called by the kernel when the application is |
-launched through the X memory extender or the GRUB. The main functions contains |
-the declarations for - or calls the routine to initialize - the user tasks, the |
-keyboard handler and all the components required by the application. |
- |
-%------------------------------------------------------------ |
-\section{Tips and tricks} |
-\label{sec:tips} |
-%----------------------------------------------------------- |
- |
-%------------------------------------------------------------ |
-\subsection{The BASE directory} |
-\label{sec:base-dir} |
-%------------------------------------------------------------ |
- |
-S.Ha.R.K. uses the BASE variable to identify the directory where the |
-system directory tree starts. For example, a typical installation |
-under Linux may be under \texttt{/home/username/shark}; under FreeDOS the |
-path would be ``c:$\backslash$shark''. |
- |
-Unfortunately, the OSLib component of S.Ha.R.K., which is developed |
-separately from S.Ha.R.K., also requires to set a variable named BASE |
-when building. Recalling the previous examples, the BASE values for |
-the OSLib will be \texttt{/home/username/shark/oslib} and |
-\texttt{c:$\backslash$shark$\backslash$oslib}. |
- |
-A problem during the kernel compilation arises if the BASE variable |
-is set into the OS environment\footnote{At the FreeDOS command line, |
-type ``\texttt{set}'' to get the content of the environment.}. |
- |
-\textbf{IMPORTANT}: when compiling S.Ha.R.K., be sure that BASE is |
-not set environment variable to get no problem\footnote{At the |
-FreeDOS command line, type ``\texttt{set BASE=}'' to remove an |
-already set BASE variable.}. |
- |
-During the application development, thus when S.Ha.R.K. is already |
-built and you do not need to rebuild the kernel, you may set BASE to |
-point to the S.Ha.R.K. base directory. In this sistuation, you can |
-move the application source code around your filesystem without |
-changing the BASE definition into the makefile. See Section |
-\ref{sec:makefile} for an overview on the S.Ha.R.K. makefiles. |
-However, you should avoid this practice; you should prefer to set |
-correctly the BASE directory into the makefile for each project you |
-are working at. |
- |
-%------------------------------------------------------------ |
-\subsection{Text output} |
-\label{sec:text-output} |
-%------------------------------------------------------------ |
- |
-There are few things to know for using the S.Ha.R.K.'s functions to |
-display text. Four functions should be used for a safe text output |
-management: |
- |
-\begin{itemize} |
- |
-\item |
-\texttt{sprintf()} to write a formatted string into a generic text |
-buffer (e.g., an array of chars); |
- |
-\item |
-\texttt{cprintf()} for the regular text output while the application is in |
-text mode; |
- |
-\item |
-\texttt{grx\_text()} for the text output when the application is in |
-graphical mode (to be used together with \texttt{sprintf()}, which generates |
-the string to be displayed); |
- |
-\item |
-\texttt{printk()} for displaying strings in text mode into the kernel |
-and modules for debug purposes. |
- |
-\end{itemize} |
- |
-%------------------------------------------------------------ |
-\subsection{I/O to the filesystems} |
-\label{sec:filesystem} |
-%------------------------------------------------------------ |
- |
-S.Ha.R.K. currently supports only FAT16 filesystems on IDE drivers. |
-This means that, while the kernel is running, only FAT16 filesystems |
-could be accessed from the application. |
- |
-However, typically, read/write operations to the filesystem can be |
-done at the beginning or at the end of the application, to load |
-initial parameters or data and to save the results (which could be |
-contained in a memory buffer filled during the application |
-execution). To do so, do use the functions listed into |
-\texttt{include/ll/i386/x-dos.h}, and allow the user to read and |
-write binary and text files. |
- |
-The difference between the full support of FAT16 filesystems and the |
-functions of the \texttt{x-dos} library is that, while the former is |
-a true driver which accesses the hard-disk hardware, the latter are |
-hooks to DOS INT 21h functions. Since DOS INT 21h are not reentrant |
-(basically, they can not be interrupted by the kernel), they can not |
-be used while real-time tasks are running. |
-% For more informations, see demos/dosfs/README. |
-% Tool: wait till demos are ok |
-% |
- |
-%------------------------------------------------------------ |
-\subsection{DJGPP and DOS utils} |
-\label{sec:dos-utils} |
-%------------------------------------------------------------ |
- |
-The DJGPP, the compiler used by S.Ha.R.K. under DOS, does not include |
-any replacement for some Unix commands required to build S.Ha.R.K., |
-like \texttt{cp}, \texttt{rm}, \texttt{mv}, etc. Those comands can be |
-found easily in the Internet, but it is safer to use the ones |
-included into the S.Ha.R.K. package. |
- |
-Someone may already have its own set of command replacements. This |
-may produce several problems, since different implementations manages |
-differently the special command options. This is why S.Ha.R.K. is |
-guaranteed to correctly build with the tested commands only (the |
-Linux versions are all right). |
- |
-Short anecdote\footnote{I add this anecdote since it may help in |
-solving similar problems.}. The first version of the S.Ha.R.K. |
-bootable CD included the correct commands got from the S.Ha.R.K. |
-distribution package. It also included another version that is put |
-into the ``$\backslash$fdos$\backslash$bin'' directory. Both the |
-versions of the commands were reacheable through the PATH environment |
-variable. However, for a mistake, the FreeDOS path was inserted into |
-the PATH variable before the correct S.Ha.R.K. path, making S.Ha.R.K. |
-using the wrong commands. Results: the makefiles were invoking the |
-wrong command versions, producing several problems while building |
-kernel and applications. |
- |
-%------------------------------------------------------------ |
-\section{From version 1.4 to 1.5} |
-\label{sec:from14to15} |
-%------------------------------------------------------------ |
- |
-From the user point of view, few things are changed from the |
-S.Ha.R.K. 1.4 version to the current 1.5 version. The changes that |
-make an application developed for version 1.4 incompatible with the |
-1.5 version are only two: |
- |
-\begin{enumerate} |
- |
-\item |
-to make the new version compatible with the POSIX standard, functions |
-\texttt{sys\_end()} and \texttt{sys\_abort()} have been replaced by |
-the \texttt{exit(.)} function, which accepts an integer exit code |
-parameter. |
- |
-\item |
-the S.Ha.R.K. directory tree has been slightly changed. |
- |
-\end{enumerate} |
- |
-The main effect of the changes to the tree are that an application |
-initfile now requires slightly different instructions to include the |
-needed modules. A comparison of the instructions required for the two |
-S.Ha.R.K. versions is depicted in Table \ref{t:initfile}. |
- |
-\begin{table}[ht] |
-\centering |
-\begin{tabular}{|l|l|} |
-\hline |
-Version 1.4 & Version 1.5 |
-\\ |
-\hline |
-\#include "kernel/kern.h" & \#include "kernel/kern.h" |
-\\ |
-\#include "modules/intdrive.h" & \#include |
-"intdrive/intdrive/intdrive.h" \\ |
-\#include "modules/edf.h" & \#include "edf/edf/edf.h" |
-\\ |
-\#include "modules/cbs.h" & \#include "cbs/cbs/cbs.h" |
-\\ |
-\#include "modules/rr.h" & \#include "rr/rr/rr.h" |
-\\ |
-\#include "modules/dummy.h" & \#include "dummy/dummy/dummy.h" |
-\\ |
-\#include "modules/sem.h" & \#include "sem/sem/sem.h" |
-\\ |
-\#include "modules/hartport.h" & \#include |
-"hartport/hartport/hartport.h" \\ |
-\#include "modules/cabs.h" & \#include "cabs/cabs/cabs.h" |
-\\ |
-\#include "modules/pi.h" & \#include "pi/pi/pi.h" |
-\\ |
-\hline |
-\end{tabular} |
-\caption{The differences between inifiles in S.Ha.R.K. 1.4 and 1.5.} |
-\label{t:initfile} |
-\end{table} |
- |
-%------------------------------------------------------------ |
-\section{Remote execution of S.Ha.R.K. applications} |
-\label{sec:remote-execution} |
-%------------------------------------------------------------ |
- |
-S.Ha.R.K. supports the Multiboot\footnote{See |
-\underline{http://www.gnu.org/software/grub/manual/multiboot/} for |
-more information.} standard. This means that it is possible to launch |
-remotely a S.Ha.R.K. application from, for example, the |
-GRUB\footnote{See \underline{http://www.gnu.org/software/grub/} for |
-more information.} boot loader. |
- |
-Since this Section will describe how to boot a S.Ha.R.K. application |
-using the GRUB, let's say something more about it, and boot loaders |
-in general. |
- |
-In very simple words, boot loaders are programs that, taking the |
-control of the machine after the system start-up, launch the |
-operative system kernels. Boot loaders are particularly useful |
-because they let you choose between different operative systems to |
-start. Section \ref{sec:hd-installation} illustrated how to partition |
-an hard-disk |
-to install more than one OS. This Section will describe how to load a |
-kernel (in our case, a S.Ha.R.K. application) from the network and |
-run it on a remote machine. |
- |
-An example will explain the installation procedure and how to use |
-this mechanism. |
- |
-%------------------------------------------------------------ |
-\subsection{General setup} |
-\label{sec:remote-setup} |
-%------------------------------------------------------------ |
- |
-Suppose that there are two machines: computer A, where you develop |
-your S.Ha.R.K. applications using the Linux platform, and computer B, |
-where you want to execute the application. |
- |
-Computer A needs: |
- |
-\begin{itemize} |
-\item an Ethernet connection with B; |
-\item Linux; |
-\item an installed and properly configured version of S.Ha.R.K.; |
-\item a TFTP server. |
-\end{itemize} |
- |
-Computer B needs: |
- |
-\begin{itemize} |
-\item an Ethernet connection with A; |
-\item an installation of the GRUB with network support. |
-\end{itemize} |
- |
-%------------------------------------------------------------ |
-\subsection{Computer A setup} |
-\label{sec:A-setup} |
-%------------------------------------------------------------ |
- |
-There are two important things to setup on machine A. First of all, |
-the S.Ha.R.K. kernel must be compiled with the option BIOS set to |
-VM86 (Virtual Memory for x86) into the shark.cfg configuration file. |
-This ensures that the application will be compiled with the support |
-for the multiboot. |
- |
-\textbf{ATTENTION}: as stated in the configuration file, the VM86 |
-mode is not compatible with some VGA cards (like Matrox). |
- |
-A TFTP server must be installed on computer A, to let B download the |
-application. TFTP means Trivial File Transfer Protocol; it is a |
-simplified version of FTP which permits only basic operations like |
-download and upload (no directory management, etc.). Moreover, it |
-works over the UDP protocol, while FTP works over TCP. Almost all |
-Linux distribution have a TFTP server. I will not discuss how to |
-install and run it. The only important thing to know is that, |
-typically, the server lets a remote machine to download a program |
-from a specific directory (e.g., /tftpboot/). The compiled S.Ha.R.K. |
-program will be put into that directory. |
- |
-%------------------------------------------------------------ |
-\subsection{Computer B setup} |
-\label{sec:B-setup} |
-%------------------------------------------------------------ |
- |
-First of all, let's build the GRUB for supporting the network. |
-Currently, the GRUB 2 is under development. I only tested the remote |
-execution with S.Ha.R.K. using the so called the GRUB Legacy, which |
-is still available. |
- |
-Download the GRUB Legacy from |
- |
-\begin{center} |
-\underline{ftp://alpha.gnu.org/gnu/grub/} |
-\end{center} |
- |
-Since I only tested the behavior of the \texttt{grub-0.97.tar.gz} |
-package, I suggest to use this version. |
- |
-After unpacking the sources on a Linux machine with |
- |
-\begin{center} |
-\texttt{tar -xvzf grub-0.97.tar.gz} |
-\end{center} |
- |
-you will get the \texttt{grub-0.97} directory. Do get into it using |
- |
-\begin{center} |
-\texttt{cd grub-0.97} |
-\end{center} |
- |
-and configure the GRUB with a command like |
- |
-\begin{center} |
-\texttt{./configure --enable-via-rhine --disable-ffs --disable-minix |
---disable-reiserfs --disable-xfs --disable-ufs2 --disable-vstafs} |
-\end{center} |
- |
-This instruction simply configures the GRUB to support a VIA network |
-board (Rhine model) and turned off the support for many filesystems, |
-like FFS, Minix, XFS and others. |
- |
-Of course, if you have a different network board, you need to enable |
-the correct one. You can find a list of the supported network boards |
-under the directory \texttt{grub-0.97/netboot}, into the |
-\texttt{README.netboot} file. The GRUB developers sugget to not |
-enable too many network cards all together for stability |
-problems\footnote{This may be the reason because it is not safe to |
-build a copy of the GRUB with the native support of all the available |
-network cards.}. For the same reason, all the unused filesystems have |
-been disabled. The above configuration assume that the GRUB files |
-stay into a directory called \texttt{/boot/grub}, which is into an |
-ext2/ext3 filesystem. If your \texttt{/boot/grub} directory on a |
-filesystem of different type, you must enable the support for that |
-specific filesystem. |
- |
-After the GRUB configuration has been correctly performed, type |
- |
-\begin{center} |
-\texttt{make} |
-\end{center} |
- |
-to launch the build of the GRUB. |
- |
-After the compilation, you will find two files, \texttt{stage1} and |
-\texttt{stage2}, into two separate directories with the same name. |
-You must copy the two files into the \texttt{/boot/grub} directory of |
-computer B. Before copying the files, do make a backup copy of the |
-existing \texttt{stage1} and \texttt{stage2}. This step assumes that |
-the GRUB is already installed on computer B, which is typically done |
-when you install Linux on a PC: we only want to enhance the GRUB to |
-support the network boot. |
- |
-Then, add the following lines to the \texttt{menu.lst} script file |
-into the \texttt{/boot/grub} directory: |
- |
-\begin{verbatim} |
-ifconfig --address=192.168.0.2 --mask=255.255.255.0 |
-tftpserver 192.168.0.1 |
-rootnoverify (nd) |
-kernel /shark |
-boot |
-\end{verbatim} |
- |
-Where 192.168.0.2 is the IP address assigned to computer B and |
-192.168.0.1 is the IP address of computer A. Change those values to |
-accomplish with the need of your local network\footnote{For example, |
-avoiding duplicated IP addresses.}. |
- |
-Finally, reboot the machine and, at the GRUB prompt, type |
-\texttt{c} to get the commad line of the GRUB, and type the |
-command |
- |
-\begin{center} |
-\texttt{install (hd0,2)/boot/grub/stage1 (hd0) |
-(hd0,2)/boot/grub/stage2 0x8000 (hd0,2)/boot/grub/menu.lst} |
-\end{center} |
- |
-This instruction install the GRUB into the Master Boot Record of your |
-hard-disk. Typing \texttt{(hd0,2)} you specify that the |
-\texttt{/boot/grub/} directory stays into the 3rd partition of your |
-first hard-disk. You must change this value if the directory is into |
-another partition or another disk\footnote{While \texttt{hd1} |
-identifies the 2nd disk, \texttt{hd2} the 3rd, etc., \texttt{(hd0,0)} |
-is the 1st partition of the 1st disk, \texttt{(hd0,1)} is the 2nd |
-partition of the 1st disk and so on. This is a convention of the |
-GRUB.}. |
- |
-%------------------------------------------------------------ |
-\subsection{Executing S.Ha.R.K. application} |
-\label{sec:execution} |
-%------------------------------------------------------------ |
- |
-After the setup of the GRUB and the TFTP server, you are able to run |
-a S.Ha.R.K. application by compiling the application and copying it |
-into the TFTP base directory (e.g., \texttt{/tftpboot}) and calling |
-it \texttt{shark}. This is required because, after the configuration |
-of \texttt{menu.lst} described in Section \ref{sec:B-setup}, the GRUB |
-will look for a Multiboot kernel named \texttt{shark}. |
- |
-Every time you reboot computer B, it will automatically look for the |
-\texttt{shark} multiboot image to run it. To speed up the GRUB |
-operations, you should set the remote S.Ha.R.K. application execution |
-as the default option and, optionally, do set a low number of seconds |
-for the GRUB initial waiting time. |
- |
-There are some drawbacks of the previous installation. First, the |
-S.Ha.R.K. application name must be \texttt{shark}; you may change |
-that name, however the point is that you must change the |
-\texttt{menu.lst} to use different names. Second, the S.Ha.R.K. |
-application can not use the filesystem to read and write data, so do |
-not put any I/O command to file into an application remotely |
-executed. Finally, the S.Ha.R.K. application can not accept command |
-line parameters. |
- |
-%------------------------------------------------------------ |
-\subsection{Accepting command line parameters} |
-\label{sec:command-line-parameters} |
-%------------------------------------------------------------ |
- |
-To make a remotely executed S.Ha.R.K. application to accept command |
-line parameters you can exploit a feature of the GRUB which allows to |
-remotely load a configuration file from the TFTP server. |
- |
-To obtain this result, put the following instruction into the |
-\texttt{menu.lst} file on computer B: |
- |
-\begin{verbatim} |
-ifconfig --address=192.168.0.2 --mask=255.255.255.0 |
-tftpserver 192.168.0.1 |
-rootnoverify (nd) |
-configfile /menu-remote.lst |
-\end{verbatim} |
- |
-The last instruction tells to the GRUB to download the |
-\texttt{menu-remote.lst} configuration file from the TFTP server. |
- |
-Put a file named \texttt{menu-remote.lst} into the TFTP base |
-directory of computer A (\texttt{/tftpboot/}). Put the following |
-instructions unto the \texttt{menu-remote.lst}: |
- |
-\begin{verbatim} |
-kernel /shark-app param1 param2 param3 |
-boot |
-\end{verbatim} |
- |
-In this way, by editing the \texttt{menu-remote.lst} on the machine |
-where you are developing your S.Ha.R.K. applications, you are able to |
-change the name of the S.Ha.R.K. application that will be looked for |
-by the GRUB. Moreover, you can use as many command line parameters as |
-needed when the S.Ha.R.K. application starts. |
- |
-\bibliographystyle{alpha} |
-\bibliography{../common/biblio} |
- |
-\end{document} |
/trunk/shark-qg/shark-qg.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/shark-qg/makefile |
=================================================================== |
--- trunk/shark-qg/makefile (revision 1677) |
+++ trunk/shark-qg/makefile (nonexistent) |
@@ -1,4 +0,0 @@ |
-MAIN = shark-qg |
-MAIN_NAME = shark-qg |
- |
-include ../common/manual.mk |
/trunk/shark-qg/makefile |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol-oldcontent/vol-oldcontent.tex |
=================================================================== |
--- trunk/vol-oldcontent/vol-oldcontent.tex (revision 1677) |
+++ trunk/vol-oldcontent/vol-oldcontent.tex (nonexistent) |
@@ -1,90 +0,0 @@ |
-\documentclass[italian,english]{report} |
-\usepackage[T1]{fontenc} |
-\usepackage[latin1]{inputenc} |
-\usepackage{geometry} |
-\geometry{verbose,a4paper} |
-\usepackage{array} |
-\usepackage{longtable} |
-\usepackage{makeidx} |
-\makeindex |
-\usepackage{graphicx} |
- |
-\makeatletter |
- |
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% LyX specific LaTeX commands. |
-%% Bold symbol macro for standard LaTeX users |
-\newcommand{\boldsymbol}[1]{\mbox{\boldmath $#1$}} |
- |
-%% Special footnote code from the package 'stblftnt.sty' |
-%% Author: Robin Fairbairns -- Last revised Dec 13 1996 |
-\let\SF@@footnote\footnote |
-\def\footnote{\ifx\protect\@typeset@protect |
- \expandafter\SF@@footnote |
- \else |
- \expandafter\SF@gobble@opt |
- \fi |
-} |
-\expandafter\def\csname SF@gobble@opt \endcsname{\@ifnextchar[%] |
- \SF@gobble@twobracket |
- \@gobble |
-} |
-\edef\SF@gobble@opt{\noexpand\protect |
- \expandafter\noexpand\csname SF@gobble@opt \endcsname} |
-\def\SF@gobble@twobracket[#1]#2{} |
-%% Because html converters don't know tabularnewline |
-\providecommand{\tabularnewline}{\\} |
- |
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands. |
-\newenvironment{intest}{\noindent\large\bf\hspace*{1pt}} |
-{\vspace*{-5pt}\\\hspace*{6pt}\line(1,0){433}} |
- |
-\newenvironment{lyxlist}[1] |
- {\begin{list}{} |
- {\settowidth{\labelwidth}{#1} |
- \setlength{\leftmargin}{\labelwidth} |
- \addtolength{\leftmargin}{\labelsep} |
- \renewcommand{\makelabel}[1]{##1\hfil}}} |
- {\end{list}} |
- |
-\usepackage{babel} |
-\makeatother |
- |
-\begin{document} |
-\thispagestyle{empty} |
- |
-\begin{center}{\LARGE S.Ha.R.K. Manual}\end{center}{\LARGE \par} |
-\vfill{} |
-\begin{center}Old Content Volume\end{center} |
-\begin{center}Unsupported Kernel Features\end{center} |
-\vfill{} |
-\begin{center}Written by\end{center} |
-\begin{center}Giorgio Buttazzo (giorgio@sssup.it)\end{center} |
-\begin{center}Paolo Gai (pj@sssup.it)\end{center} |
-\begin{center}Luigi Palopoli (luigi@hartik.sssup.it)\end{center} |
-\begin{center}Marco Caccamo (caccamo@sssup.it)\end{center} |
-\begin{center}Giuseppe Lipari (lipari@sssup.it) \end{center} |
-\vfill{} |
-\begin{center}Restyled by\end{center} |
-\begin{center}Tullio Facchinetti (tullio.facchinetti@unipv.it)\end{center} |
-\vfill{} |
- |
-\begin{center}\includegraphics[width=2cm]{../common/sssup.ps}\end{center} |
- |
-\begin{center}Scuola Superiore di Studi e Perfezionamento S. Anna\end{center} |
-\begin{center}RETIS Lab\end{center} |
-\begin{center}Via Carducci, 40 - 56100 Pisa\end{center} |
-\begin{center}\pagebreak\end{center} |
- |
-\tableofcontents{} |
- |
-\include{introd} |
-\include{hartport} |
- |
-\appendix |
- |
-\printindex{} |
- |
-\bibliographystyle{alpha} |
-\bibliography{../common/biblio} |
- |
-\end{document} |
/trunk/vol-oldcontent/vol-oldcontent.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol-oldcontent/port.eps |
=================================================================== |
--- trunk/vol-oldcontent/port.eps (revision 1677) |
+++ trunk/vol-oldcontent/port.eps (nonexistent) |
@@ -1,235 +0,0 @@ |
-%!PS-Adobe-2.0 EPSF-2.0 |
-%%Title: port.fig |
-%%Creator: fig2dev Version 3.2 Patchlevel 1 |
-%%CreationDate: Wed Jul 12 11:38:50 2000 |
-%%For: pj@galadriel (Paolo Gai) |
-%%Orientation: Portrait |
-%%BoundingBox: 0 0 314 197 |
-%%Pages: 0 |
-%%BeginSetup |
-%%EndSetup |
-%%Magnification: 1.0000 |
-%%EndComments |
-/$F2psDict 200 dict def |
-$F2psDict begin |
-$F2psDict /mtrx matrix put |
-/col-1 {0 setgray} bind def |
-/col0 {0.000 0.000 0.000 srgb} bind def |
-/col1 {0.000 0.000 1.000 srgb} bind def |
-/col2 {0.000 1.000 0.000 srgb} bind def |
-/col3 {0.000 1.000 1.000 srgb} bind def |
-/col4 {1.000 0.000 0.000 srgb} bind def |
-/col5 {1.000 0.000 1.000 srgb} bind def |
-/col6 {1.000 1.000 0.000 srgb} bind def |
-/col7 {1.000 1.000 1.000 srgb} bind def |
-/col8 {0.000 0.000 0.560 srgb} bind def |
-/col9 {0.000 0.000 0.690 srgb} bind def |
-/col10 {0.000 0.000 0.820 srgb} bind def |
-/col11 {0.530 0.810 1.000 srgb} bind def |
-/col12 {0.000 0.560 0.000 srgb} bind def |
-/col13 {0.000 0.690 0.000 srgb} bind def |
-/col14 {0.000 0.820 0.000 srgb} bind def |
-/col15 {0.000 0.560 0.560 srgb} bind def |
-/col16 {0.000 0.690 0.690 srgb} bind def |
-/col17 {0.000 0.820 0.820 srgb} bind def |
-/col18 {0.560 0.000 0.000 srgb} bind def |
-/col19 {0.690 0.000 0.000 srgb} bind def |
-/col20 {0.820 0.000 0.000 srgb} bind def |
-/col21 {0.560 0.000 0.560 srgb} bind def |
-/col22 {0.690 0.000 0.690 srgb} bind def |
-/col23 {0.820 0.000 0.820 srgb} bind def |
-/col24 {0.500 0.190 0.000 srgb} bind def |
-/col25 {0.630 0.250 0.000 srgb} bind def |
-/col26 {0.750 0.380 0.000 srgb} bind def |
-/col27 {1.000 0.500 0.500 srgb} bind def |
-/col28 {1.000 0.630 0.630 srgb} bind def |
-/col29 {1.000 0.750 0.750 srgb} bind def |
-/col30 {1.000 0.880 0.880 srgb} bind def |
-/col31 {1.000 0.840 0.000 srgb} bind def |
- |
-end |
-save |
--108.0 304.0 translate |
-1 -1 scale |
- |
-/cp {closepath} bind def |
-/ef {eofill} 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} bind def |
-/tr {translate} bind def |
-/tnt {dup dup currentrgbcolor |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} |
- bind def |
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul |
- 4 -2 roll mul srgb} bind def |
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def |
-/$F2psEnd {$F2psEnteredState restore end} def |
-%%EndProlog |
- |
-$F2psBegin |
-10 setmiterlimit |
-n -1000 6052 m -1000 -1000 l 8026 -1000 l 8026 6052 l cp clip |
- 0.06000 0.06000 sc |
-/Times-Roman ff 180.00 scf sf |
-1800 3450 m |
-gs 1 -1 sc (Clients) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-6150 3375 m |
-gs 1 -1 sc (Server) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-6150 3600 m |
-gs 1 -1 sc (\(Owner\)) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-1800 4725 m |
-gs 1 -1 sc (Producers) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-1800 4950 m |
-gs 1 -1 sc (\(Owner\)) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-6150 4725 m |
-gs 1 -1 sc (Consumers) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-2100 2325 m |
-gs 1 -1 sc (Writer) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-5850 2325 m |
-gs 1 -1 sc (Reader) col0 sh gr |
-% Polyline |
-7.500 slw |
-n 3375 3240 m 4950 3240 l 4950 3690 l 3375 3690 l gs col-1 s gr |
-% Polyline |
-n 4500 3240 m 4500 3690 l gs col-1 s gr |
-% Polyline |
-n 4275 3240 m 4275 3690 l gs col-1 s gr |
-% Polyline |
-n 4050 3240 m 4050 3690 l gs col-1 s gr |
-% Polyline |
-n 3825 3240 m 3825 3690 l gs col-1 s gr |
-% Polyline |
-n 4725 3240 m 4725 3690 l gs col-1 s gr |
-% Polyline |
-gs clippath |
-5505 3435 m 5625 3465 l 5505 3495 l 5640 3495 l 5640 3435 l cp |
-clip |
-n 4950 3465 m 5625 3465 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5505 3435 m 5625 3465 l 5505 3495 l col-1 s |
-% Polyline |
-gs clippath |
-3255 3435 m 3375 3465 l 3255 3495 l 3390 3495 l 3390 3435 l cp |
-clip |
-n 2700 3465 m 3375 3465 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3255 3435 m 3375 3465 l 3255 3495 l col-1 s |
-% Polyline |
-gs clippath |
-3263 3322 m 3375 3375 l 3251 3381 l 3384 3407 l 3396 3349 l cp |
-clip |
-n 2700 3240 m 3375 3375 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3263 3322 m 3375 3375 l 3251 3381 l col-1 s |
-% Polyline |
-gs clippath |
-3251 3549 m 3375 3555 l 3263 3608 l 3396 3581 l 3384 3523 l cp |
-clip |
-n 2700 3690 m 3375 3555 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3251 3549 m 3375 3555 l 3263 3608 l col-1 s |
-/Times-Roman ff 150.00 scf sf |
-3825 3060 m |
-gs 1 -1 sc (MAILBOX) col-1 sh gr |
-% Polyline |
-n 4635 5040 m 4635 4410 l 3735 4410 l 3735 5040 l cp gs col-1 s gr |
-% Polyline |
-gs clippath |
-3615 4695 m 3735 4725 l 3615 4755 l 3750 4755 l 3750 4695 l cp |
-clip |
-n 3060 4725 m 3735 4725 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3615 4695 m 3735 4725 l 3615 4755 l col-1 s |
-% Polyline |
-gs clippath |
-5190 4695 m 5310 4725 l 5190 4755 l 5325 4755 l 5325 4695 l cp |
-clip |
-n 4635 4725 m 5310 4725 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5190 4695 m 5310 4725 l 5190 4755 l col-1 s |
-% Polyline |
-gs clippath |
-5186 4494 m 5310 4500 l 5198 4553 l 5331 4526 l 5319 4468 l cp |
-clip |
-n 4635 4635 m 5310 4500 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5186 4494 m 5310 4500 l 5198 4553 l col-1 s |
-% Polyline |
-gs clippath |
-5198 4897 m 5310 4950 l 5186 4956 l 5319 4982 l 5331 4924 l cp |
-clip |
-n 4635 4815 m 5310 4950 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5198 4897 m 5310 4950 l 5186 4956 l col-1 s |
-/Times-Roman ff 150.00 scf sf |
-4005 4230 m |
-gs 1 -1 sc (STICK) col-1 sh gr |
-% Polyline |
-n 3375 2025 m 4950 2025 l 4950 2475 l 3375 2475 l gs col-1 s gr |
-% Polyline |
-n 4500 2025 m 4500 2475 l gs col-1 s gr |
-% Polyline |
-n 4275 2025 m 4275 2475 l gs col-1 s gr |
-% Polyline |
-n 4050 2025 m 4050 2475 l gs col-1 s gr |
-% Polyline |
-n 3825 2025 m 3825 2475 l gs col-1 s gr |
-% Polyline |
-n 4725 2025 m 4725 2475 l gs col-1 s gr |
-% Polyline |
-gs clippath |
-5505 2220 m 5625 2250 l 5505 2280 l 5640 2280 l 5640 2220 l cp |
-clip |
-n 4950 2250 m 5625 2250 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5505 2220 m 5625 2250 l 5505 2280 l col-1 s |
-% Polyline |
-gs clippath |
-3255 2220 m 3375 2250 l 3255 2280 l 3390 2280 l 3390 2220 l cp |
-clip |
-n 2700 2250 m 3375 2250 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3255 2220 m 3375 2250 l 3255 2280 l col-1 s |
-/Times-Roman ff 150.00 scf sf |
-3870 1890 m |
-gs 1 -1 sc (STREAM) col-1 sh gr |
-$F2psEnd |
-rs |
/trunk/vol-oldcontent/port.eps |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol-oldcontent/makefile |
=================================================================== |
--- trunk/vol-oldcontent/makefile (revision 1677) |
+++ trunk/vol-oldcontent/makefile (nonexistent) |
@@ -1,4 +0,0 @@ |
-MAIN = vol-oldcontent |
-MAIN_NAME = vol-oldcontent |
- |
-include ../common/manual.mk |
/trunk/vol-oldcontent/makefile |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol-oldcontent/introd.tex |
=================================================================== |
--- trunk/vol-oldcontent/introd.tex (revision 1677) |
+++ trunk/vol-oldcontent/introd.tex (nonexistent) |
@@ -1,5 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{Introduction} |
-%---------------------------------------------------------------------------- |
- |
-This Manual collects the documentation about old S.Ha.R.K. \cite{Gai01} features no more supported or developed. Since some of them may still available in the source code repository and could be useful for some specific applications, the related documentation has been kept to help possible future usage. |
/trunk/vol-oldcontent/introd.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol-oldcontent/over.eps |
=================================================================== |
--- trunk/vol-oldcontent/over.eps (revision 1677) |
+++ trunk/vol-oldcontent/over.eps (nonexistent) |
@@ -1,217 +0,0 @@ |
-%!PS-Adobe-2.0 EPSF-2.0 |
-%%Title: over.fig |
-%%Creator: fig2dev Version 3.2 Patchlevel 1 |
-%%CreationDate: Wed Jul 12 11:38:50 2000 |
-%%For: pj@galadriel (Paolo Gai) |
-%%Orientation: Portrait |
-%%BoundingBox: 0 0 248 135 |
-%%Pages: 0 |
-%%BeginSetup |
-%%EndSetup |
-%%Magnification: 1.0000 |
-%%EndComments |
-/$F2psDict 200 dict def |
-$F2psDict begin |
-$F2psDict /mtrx matrix put |
-/col-1 {0 setgray} bind def |
-/col0 {0.000 0.000 0.000 srgb} bind def |
-/col1 {0.000 0.000 1.000 srgb} bind def |
-/col2 {0.000 1.000 0.000 srgb} bind def |
-/col3 {0.000 1.000 1.000 srgb} bind def |
-/col4 {1.000 0.000 0.000 srgb} bind def |
-/col5 {1.000 0.000 1.000 srgb} bind def |
-/col6 {1.000 1.000 0.000 srgb} bind def |
-/col7 {1.000 1.000 1.000 srgb} bind def |
-/col8 {0.000 0.000 0.560 srgb} bind def |
-/col9 {0.000 0.000 0.690 srgb} bind def |
-/col10 {0.000 0.000 0.820 srgb} bind def |
-/col11 {0.530 0.810 1.000 srgb} bind def |
-/col12 {0.000 0.560 0.000 srgb} bind def |
-/col13 {0.000 0.690 0.000 srgb} bind def |
-/col14 {0.000 0.820 0.000 srgb} bind def |
-/col15 {0.000 0.560 0.560 srgb} bind def |
-/col16 {0.000 0.690 0.690 srgb} bind def |
-/col17 {0.000 0.820 0.820 srgb} bind def |
-/col18 {0.560 0.000 0.000 srgb} bind def |
-/col19 {0.690 0.000 0.000 srgb} bind def |
-/col20 {0.820 0.000 0.000 srgb} bind def |
-/col21 {0.560 0.000 0.560 srgb} bind def |
-/col22 {0.690 0.000 0.690 srgb} bind def |
-/col23 {0.820 0.000 0.820 srgb} bind def |
-/col24 {0.500 0.190 0.000 srgb} bind def |
-/col25 {0.630 0.250 0.000 srgb} bind def |
-/col26 {0.750 0.380 0.000 srgb} bind def |
-/col27 {1.000 0.500 0.500 srgb} bind def |
-/col28 {1.000 0.630 0.630 srgb} bind def |
-/col29 {1.000 0.750 0.750 srgb} bind def |
-/col30 {1.000 0.880 0.880 srgb} bind def |
-/col31 {1.000 0.840 0.000 srgb} bind def |
- |
-end |
-save |
--23.0 148.0 translate |
-1 -1 scale |
- |
-/cp {closepath} bind def |
-/ef {eofill} 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} bind def |
-/tr {translate} bind def |
-/tnt {dup dup currentrgbcolor |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} |
- bind def |
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul |
- 4 -2 roll mul srgb} bind def |
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def |
-/$F2psEnd {$F2psEnteredState restore end} def |
-%%EndProlog |
- |
-$F2psBegin |
-10 setmiterlimit |
-n -1000 1164 m -1000 -1000 l 1301 -1000 l 1301 1164 l cp clip |
- 0.90000 0.90000 sc |
-% Polyline |
-0.500 slw |
-n 44 143 m 44 149 l gs col-1 s gr |
-% Polyline |
-n 59 143 m 59 149 l gs col-1 s gr |
-% Polyline |
-n 74 143 m 74 149 l gs col-1 s gr |
-% Polyline |
-n 89 143 m 89 149 l gs col-1 s gr |
-% Polyline |
-n 104 143 m 104 149 l gs col-1 s gr |
-% Polyline |
-n 119 143 m 119 149 l gs col-1 s gr |
-% Polyline |
-n 134 143 m 134 149 l gs col-1 s gr |
-% Polyline |
-n 149 143 m 149 149 l gs col-1 s gr |
-% Polyline |
-n 164 143 m 164 149 l gs col-1 s gr |
-% Polyline |
-n 179 143 m 179 149 l gs col-1 s gr |
-% Polyline |
-n 194 143 m 194 149 l gs col-1 s gr |
-% Polyline |
-n 209 143 m 209 149 l gs col-1 s gr |
-% Polyline |
-n 224 143 m 224 149 l gs col-1 s gr |
-% Polyline |
-n 239 143 m 239 149 l gs col-1 s gr |
-% Polyline |
-n 254 143 m 254 149 l gs col-1 s gr |
-% Polyline |
-n 269 143 m 269 149 l gs col-1 s gr |
-% Polyline |
-n 284 143 m 284 149 l gs col-1 s gr |
-% Polyline |
-n 44 68 m 44 74 l gs col-1 s gr |
-% Polyline |
-n 59 68 m 59 74 l gs col-1 s gr |
-% Polyline |
-n 74 68 m 74 74 l gs col-1 s gr |
-% Polyline |
-n 89 68 m 89 74 l gs col-1 s gr |
-% Polyline |
-n 104 68 m 104 74 l gs col-1 s gr |
-% Polyline |
-n 119 68 m 119 74 l gs col-1 s gr |
-% Polyline |
-n 134 68 m 134 74 l gs col-1 s gr |
-% Polyline |
-n 149 68 m 149 74 l gs col-1 s gr |
-% Polyline |
-n 164 68 m 164 74 l gs col-1 s gr |
-% Polyline |
-n 179 68 m 179 74 l gs col-1 s gr |
-% Polyline |
-n 194 68 m 194 74 l gs col-1 s gr |
-% Polyline |
-n 209 68 m 209 74 l gs col-1 s gr |
-% Polyline |
-n 224 68 m 224 74 l gs col-1 s gr |
-% Polyline |
-n 239 68 m 239 74 l gs col-1 s gr |
-% Polyline |
-n 269 68 m 269 74 l gs col-1 s gr |
-% Polyline |
-n 284 68 m 284 74 l gs col-1 s gr |
-% Polyline |
-n 59 149 m 59 134 l 29 134 l 29 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 119 149 m 119 134 l 89 134 l 89 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 179 149 m 179 134 l 149 134 l 149 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 284 149 m 284 134 l 254 134 l 254 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 89 74 m 89 59 l 59 59 l 59 74 l cp gs 0.80 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 254 74 m 254 59 l 209 59 l 209 74 l cp gs 0.80 setgray ef gr gs col-1 s gr |
-/Times-Roman ff 10.00 scf sf |
-26 164 m |
-gs 1 -1 sc (0) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-86 164 m |
-gs 1 -1 sc (4) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-146 164 m |
-gs 1 -1 sc (8) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-206 164 m |
-gs 1 -1 sc (12) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-266 164 m |
-gs 1 -1 sc (16) col0 sh gr |
-% Polyline |
-n 77 17 m 77 17 l 77 17 l 77 17 l cp gs 0.75 setgray ef gr gs col0 s gr |
-% Polyline |
-n 29 74 m 299 74 l gs col-1 s gr |
-% Polyline |
-n 29 119 m 29 149 l 299 149 l gs col-1 s gr |
-% Polyline |
-n 89 119 m 89 149 l gs col-1 s gr |
-% Polyline |
-n 149 119 m 149 149 l gs col-1 s gr |
-% Polyline |
-n 209 119 m 209 149 l gs col-1 s gr |
-% Polyline |
-n 269 119 m 269 149 l gs col-1 s gr |
-% Polyline |
-n 29 149 m 29 152 l gs col-1 s gr |
-% Polyline |
-n 89 149 m 89 152 l gs col-1 s gr |
-% Polyline |
-n 149 149 m 149 152 l gs col-1 s gr |
-% Polyline |
-n 209 149 m 209 152 l gs col-1 s gr |
-% Polyline |
-n 269 149 m 269 152 l gs col-1 s gr |
-% Polyline |
-n 29 44 m 29 74 l gs col-1 s gr |
-% Polyline |
-n 254 44 m 254 74 l gs col-1 s gr |
-$F2psEnd |
-rs |
/trunk/vol-oldcontent/over.eps |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol-oldcontent/hartport.tex |
=================================================================== |
--- trunk/vol-oldcontent/hartport.tex (revision 1677) |
+++ trunk/vol-oldcontent/hartport.tex (nonexistent) |
@@ -1,252 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\section{Communication Ports \footnote{The S.Ha.R.K. communication ports are |
-directly derived from the previous varsions of the Hartik Kernel.}} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. communication ports allow tasks to exchange messages. Each |
-port is uniquely identified by a symbolic name (i.e., a string of |
-characters); a task willing to use this communication facility has |
-to open the channel using the \texttt{port\_create()} call, thus becoming |
-the owner of the resource. Any other task that wants to use this communication |
-end-point to send or receive data needs to connect to it by using |
-the \texttt{port\_connect()} primitive. |
- |
-S.Ha.R.K. offers three types of ports: |
- |
-\begin{itemize} |
- |
-\item \texttt{STREAM}: it is a one-to-one communication facility, which |
-can be opened either by the reader or by the writer task. The task |
-executing the \texttt{port\_create()} must specify the message size |
-and maximum number of messages in the queue. The task executing the |
- |
-\texttt{port\_connect()} must only specify the size of the messages |
-it wants to receive/send, which can be different from the one specified |
-by the owner. For example, a task may open a port for reading messages |
-of 4 bytes, while another task can connect to it to write one-byte |
-messages. This mechanism turns out to be useful for character oriented |
-device drivers which need to fill a given structure, before the message |
-can be processed further by a higher-level task. |
- |
-\item \texttt{MAILBOX}: it is a many-to-one communication facility, thought |
-for being used in classical client/server mechanisms. This kind of |
-port can only be opened by the reader task (the server) which wants |
-to receive data from writer tasks (the clients). Message size is fixed |
-and defined by the reader. |
- |
-\item \texttt{STICK}: it is a one-to-many communication facility intended |
-to be used for exchanging periodic state-messages, for which the most |
-recent information is relevant. It can be opened only by the (unique) |
-writer task and the reading tasks must connect to it. It contains |
-just one message and any new message posted by the writer will overwrite |
-the previous one. Messages are non-consumable: a reader task can perform |
-many readings of a given message until the writer posts a new one. |
-\end{itemize} |
- |
-The first two kinds of port implement the synchronous communication |
-paradigm, while \texttt{STICK} ports implement an asynchronous (state-message) |
-paradigm. It is worth noting that in order to protect the internal |
-data structures, \texttt{STREAM} ports use semaphores for synchronizing |
-the accesses, \texttt{STICK} ports just use a mutual exclusion semaphore, |
-and the \texttt{MAILBOX} ports use both kinds of semaphores. |
- |
-For this reason, \texttt{MAILBOX} and \texttt{STICK} ports should |
-not be used by critical tasks, whereas \texttt{STREAM} ports can be |
-used by any task requiring a state-message non-blocking semantics. |
-Moreover, the execution time of a transaction depends on the message |
-size (the message is copied in/from the buffer when a send/receive |
-is performed). The semantics associated with each port is graphically |
-illustrated in Figure \ref{fg:port-type}. |
- |
-An application that uses the communication ports, must register the |
-HARTPORT Module. Please see Volume III - S.Ha.R.K. Modules for details. |
- |
-\begin{figure} |
-\begin{center}\includegraphics[width=8cm]{port.eps}\end{center} |
-\caption{HARTIK ports.\label{fg:port-type}} |
-\end{figure} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-PORT\_CREATE\index{port\_create()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{PORT port\_create(char {*}name, int dim, int num, |
-int type, int mode);}] |
- |
-\item [\textbf{Description:}]It opens the port identified by the string |
-\texttt{name}. |
-The argument \texttt{dim} specifies the message size in bytes, \texttt{num} |
-specifies the queue size, \texttt{type} the port type (\texttt{STREAM}, |
-\texttt{MAILBOX}, or \texttt{STICK}), and \texttt{mode} the access |
-mode (\texttt{READ} or \texttt{WRITE}). |
- |
-\item [\textbf{Return Value:}] The primitive returns the port identifier, |
-which identifies the connection between the port and the task, and |
-not the port itself, which is identified through its name. A return |
-value -1 indicates that an error is occurred. |
- |
-\item [\textbf{See also}:] \texttt{port\_delete(), port\_connect(), |
-port\_disconnect(), port\_send(), port\_receive()}. |
- |
-\end{description} |
- |
-\begin{description} |
-\item [Example:\label{pg:port-ex}] |
-\item \texttt{TASK demo(void)} \{ |
-\item \texttt{~~PORT p; } |
-\item \texttt{~~char msg{[}6{]}; } |
-\item \texttt{~~\ldots{}} |
-\item \texttt{~~/{*} Demo task, of NRT type, opens the \char`\"{}goofy\char`\"{} |
-port {*}/} |
-\item \texttt{~~/{*} and sends a message of 6 bytes. {*}/} |
-\item \texttt{~~p = port\_create(\char`\"{}goofy\char`\"{}, 6, 8, STREAM, |
-WRITE);} |
-\item \texttt{~~\ldots{}} |
-\item \texttt{~~port\_send(p, msg, BLOCK); } |
-\item \texttt{\}} |
-\item \texttt{~} |
-\item \texttt{TASK duro(void)} \{ |
-\item \texttt{~~PORT q; } |
-\item \texttt{~~char msg{[}2{]}; } |
-\item \texttt{~~/{*} Duro task (HARD) connects to the \char`\"{}goofy\char`\"{} |
-{*}/} |
-\item \texttt{~~/{*} port and receives messages of 2 bytes {*}/ } |
-\item \texttt{~~q = port\_connect(\char`\"{}goofy\char`\"{}, 2, STREAM, |
-READ);} |
-\item \texttt{~~while (condition) \{} |
-\item \texttt{~~~~\ldots{}} |
-\item \texttt{~~~~if (port\_receive(q, msg, NON\textbackslash{}\_BLOCK) \{} |
-\item \texttt{~~~~~~<action 1>;~/{*} Ready Message! {*}/} |
-\item \texttt{~~~~\}} |
-\item \texttt{~~~~else \{} |
-\item \texttt{~~~~~~<action 2>;~/{*} Message not Ready! {*}/} |
-\item \texttt{~~~~\}} |
-\item \texttt{~~~~\ldots{}} |
-\item \texttt{~~~~task\_endcycle();} |
-\item \texttt{~~\}} |
-\item \texttt{\}} |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-PORT\_DELETE\index{port\_delete()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void port\_delete(PORT p)};] |
- |
-\item [\textbf{Description:}]It destroys the port identified by \texttt{p}. |
- |
-\item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-port\_disconnect(), |
-port\_send(), port\_receive()}. |
- |
-\item [\textbf{Example:}]see the example at page \pageref{pg:port-ex}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-PORT\_CONNECT\index{port\_connect()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{PORT port\_connect(char {*}name, int dim, int type, |
-int mode);}] |
- |
-\item [\textbf{Description:}]It connects the calling task to the port identified |
-by \texttt{name}. The argument \texttt{dim} specifies the message |
-size in bytes, \texttt{type} the port type (\texttt{STREAM}, \texttt{MAILBOX}, |
-or \texttt{STICK}), and \texttt{mode} the access mode (\texttt{READ} |
-or \texttt{WRITE}). If the port has not been opened by \texttt{port\_create()}, |
-the task is blocked, waiting for port creation. To avoid synchronization |
-delays, connection should be established only \underbar{after} opening |
-the port. |
- |
-\item [\textbf{Return value:}] The function returns the port identification |
-number in the case of successful operation; else -1 is returned. |
- |
-\item [\textbf{See also}:] \texttt{port\_create(), port\_delete(), |
-port\_disconnect(), port\_send(), port\_receive()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-PORT\_DISCONNECT\index{port\_disconnect()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void port\_disconnect(PORT p)};] |
- |
-\item [\textbf{Description:}]It closes the connection identified by \texttt{p}. |
- |
-\item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-port\_delete(), port\_send(), port\_receive()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-PORT\_SEND\index{port\_send()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int port\_send(PORT p, char {*}msg, BYTE b);}] |
- |
-\item [\textbf{Description:}]It sends a message pointed by \texttt{msg} to the |
-port identified by \texttt{p}. Message dimension is defined through |
-\texttt{port\_create()} |
-or \texttt{port\_connect()} and cannot be dynamically changed. The |
-argument \texttt{b} can be \texttt{BLOCK} or \texttt{NON\_BLOCK}. |
-If \texttt{b = BLOCK} and the port queue is full, then the task is |
-blocked until the buffer is freed. If \texttt{b = NON\_BLOCK} and |
-the port queue is full, then the primitive returns 0 and the message |
-is not sent. |
- |
-\item [\textbf{Return value:}] 1 (TRUE) if the operation can be performed, |
-0 otherwise. |
- |
-\item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-port\_disconnect(), |
-port\_send(), port\_receive()}. |
- |
-\item [\textbf{Example:}]see the example at page \pageref{pg:port-ex}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-PORT\_RECEIVE\index{port\_receive()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int port\_receive(PORT p, char {*}msg, BYTE b);}] |
- |
-\item [\textbf{Description:}]It receives a message from the port identified by |
-\texttt{p} and copies it in a memory buffer pointed by \texttt{msg}. Message |
-dimension is defined through \texttt{port\_create()} or \texttt{port\_connect()} |
-and cannot be dynamically changed. The argument \texttt{b} can be |
-\texttt{BLOCK} or \texttt{NON\_BLOCK}. If \texttt{b = BLOCK} and the |
-port queue is empty, then the task is blocked until a message is available. |
-If \texttt{b = NON\_BLOCK} and the port queue is empty, then the primitive |
-returns 0 and no message is received. |
- |
-\item [\textbf{Return value:}] 1 (TRUE) if the operation can be performed, |
-0 otherwise. |
- |
-\item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-port\_disconnect(), port\_send(), port\_receive()}. |
- |
-\item [\textbf{Example:}]see the example at page \pageref{pg:port-ex}. |
- |
-\end{description} |
/trunk/vol-oldcontent/hartport.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/semaf.tex |
=================================================================== |
--- trunk/vol1/semaf.tex (revision 1677) |
+++ trunk/vol1/semaf.tex (nonexistent) |
@@ -1,1155 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{Synchronization and communication} |
-%---------------------------------------------------------------------------- |
- |
-This chapter describes the task's interaction capabilities provided by the |
-S.Ha.R.K. kernel. In order to improve the programming flexibility without |
-jeopardizing the hard tasks' a priori guarantee, the kernel implements different |
-mechanisms. |
- |
-In general, hard tasks should not use system calls that can cause an unbounded |
-(or unknown) blocking time, since they can jeopardize the system schedulability. |
- |
-\begin{figure} |
-\begin{center}\includegraphics{over.eps}\end{center} |
-\caption{EDF Scheduling - Overload due to a task\_delay().} |
-\label{fg:semaf-over} |
-\end{figure} |
- |
-For example, consider Figure~\ref{fg:semaf-over}: in this case there are two |
-periodic tasks, $\tau_{1}$ (execution time $C_{1}=5$ and period $T_{1}=15$) and |
-$\tau_{2}$ (execution time $C_{2}=2$ and period $T_{2}=4$). Since the total |
-utilization factor is $U=1/2+1/3=5/6<1$, the system is schedulable by EDF, but |
-if $\tau_{1}$ blocks for $8$ time units at time $t=4$, $\tau_{2}$ misses a |
-deadline at time $t=16$. |
- |
-For efficiency reasons, the system does not perform any check to avoid the use |
-of blocking primitives in hard tasks; so this aspect is left to the programmer |
-responsibility. |
- |
-%---------------------------------------------------------------------------- |
-\section{POSIX Semaphores} |
-%---------------------------------------------------------------------------- |
- |
-The primitives described in this Section covers the semaphore mechanism |
-interface that can be used by the S.Ha.R.K. applications. The semaphore |
-interface directly follows the POSIX semaphore interface; the S.Ha.R.K. Kernel |
-add also some other primitives that allows to increment/decrement the semaphore |
-counter by more than one unit at a time. |
- |
-These primitives can be used both for synchronization and mutual exclusion. It |
-is worth noting that the traditional semaphore mechanism can cause unbounded |
-\emph{priority inversion}, so it is not suitable for hard real-time tasks. |
-Concerning the synchronization, we note that the guarantee mechanism does not |
-take synchronization into account; therefore the programmer should avoid to |
-explicitly synchronize hard tasks by means of blocking primitives. It is instead |
-possible to use a weak synchronization between hard real-time tasks, realized |
-through non-blocking semaphores. |
- |
-Only \texttt{SEM\_NSEMS\_MAX} semaphores can be created in the system. If an |
-application needs to use the POSIX semaphores, it have to add the call to the |
-function |
- |
-\texttt{void SEM\_register\_module(void);} |
- |
-into the \texttt{\_\_kernel\_register\_levels\_\_} function of the |
-initialization file (see Volume III - S.Ha.R.K. Modules). |
- |
-In this section will be briefly described the POSIX semaphore interface |
-\footnote{This section only described unnamed semaphores. The interface for |
-named semaphores is also provided, althoutgh it does not use a file system but |
-resolve the names internally (as allowed by the POSIX 1003.13 PSE51 profile).}. |
-For a complete reference see the POSIX standard (the Linux manpage also works |
-well). |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SEM\_INIT\index{sem\_init()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int sem\_init(sem\_t {*}sem, int pshared, unsigned int value);}] |
- |
-\item [\textbf{Description:}] It is used to initialize a semaphore referred by |
-sem. The value of the initialized semaphore is \texttt{value}. The pshared |
-argument is ignored. After the call to the primitive, the sem value can bve used |
-to refer the semaphore. |
- |
-\item [\textbf{Return value:}] on successful completion, the function |
-initializes the semaphore in sem and returns 0. Otherwise, it returns -1 and |
-\texttt{errno} is set according to the POSIX standard. |
- |
-\item [\textbf{See also}:] sem\_wait(), sem\_trywait, sem\_post(), |
-sem\_destroy(). |
- |
-\end{description} |
- |
-\begin{description} |
-\item \texttt{[Example]} |
-\end{description} |
- |
-\begin{verbatim} |
-sem_t mutex; |
- |
-TASK demo(void *arg) { |
- ... |
- |
- /* The task enters a critical section protected by a mutex semaphore */ |
- sem_wait(&mutex); |
- <critical section> |
- sem_post(&mutex); |
- ... |
-} |
- |
-int main(int argc, char**argv) { |
- ... |
- sem_init(&mutex, 0, 1); |
- ... |
-} |
-\end{verbatim} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SEM\_DESTROY\index{sem\_destroy()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int sem\_destroy(sem\_t {*}sem);}] |
- |
-\item [\textbf{Description:}] It is used to destroy the semaphore indicated by |
-sem. Only a semaphore that was created using sem\_init() may be destroyed using |
-sem\_destroy(). \textbf{Warning}: This system call does not check if the |
-semaphore queue is empty or not, and does not awake tasks blocked on the |
-semaphore. The programmer has to make sure that \texttt{s} is free before |
-destroying it. |
- |
-\item [\textbf{Return value}:] on successful completion, the function destroys |
-the sem semaphore and returns 0. Otherwise, it returns -1 and \texttt{errno} is |
-set according to the POSIX standard. |
- |
-\item [\textbf{See also}:] sem\_init(). |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SEM\_WAIT\index{sem\_wait()} and SEM\_TRYWAIT\index{sem\_trywait()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int sem\_wait(sem\_t {*}sem);}] |
- |
-\item [\textbf{int sem\_trywait(sem\_t {*}sem);}] |
- |
-\item [\textbf{Description:}] is used to lock the semaphore referenced by |
-\texttt{sem}. If the semaphore value is currently zero, then the calling task |
-shall not return from the call to \texttt{sem\_wait}() until it either locks the |
-semaphore. \texttt{sem\_trywait} locks the semaphore referenced by \texttt{sem} |
-only if the semaphore is currently not locked; that is, if the semaphore value |
-is currently positive. Otherwise, it does not lock the semaphore. |
-\texttt{sem\_wait} is a cancellation point. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return 0. |
-Otherwise, they return -1 and \texttt{errno} is set according to the POSIX |
-standard. |
- |
-\item [\textbf{See also}:] sem\_post(). |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SEM\_XWAIT\index{sem\_wait()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{BYTE sem\_xwait(sem\_t {*}s, int n, int wait);}] |
- |
-\item [Description:]\texttt{sem\_xwait()} is a non-portable extension to the |
-POSIX semaphores that decreases the semaphore counter by \texttt{n}. If the |
-counter is greater than or equal to \texttt{n} and there are no tasks blocked on |
-semaphore \texttt{s}, the counter is decreased by \texttt{n} and |
-\texttt{sem\_xwait} returns 0, otherwise the system call's behavior depends on |
-the \texttt{b} parameter. If \texttt{wait} is \texttt{BLOCK}, the calling task |
-blocks on the semaphore, if \texttt{wait} is \texttt{NON\_BLOCK} |
-\texttt{sem\_xwait} returns -1, errno is set to EAGAIN and the calling task does |
-not block. The semaphore queue is ordered using a FIFO strategy, in order to |
-avoid starvation. Hard tasks should not use blocking system calls, so it is |
-suggested to use \texttt{sem\_trywait()/xwait()} (only with \texttt{b = |
-NON\_BLOCK}). \texttt{sem\_xwait} is a cancellation point. |
- |
-\item [\textbf{Return value:}] on successful completion, the function returns 0. |
-Otherwise, it returns -1 and \texttt{errno} is set according to the POSIX |
-standard. |
- |
-\item [\textbf{See also}:] sem\_wait(), sem\_trywait(), sem\_post(). |
- |
-\end{description} |
- |
-\begin{description} |
-\item [\textbf{Example:}] |
-\end{description} |
- |
-\begin{verbatim} |
-sem_t sync; |
- |
-TASK demo(void *arg) { |
- ... |
- /* The demo task synchronizes itself */ |
- /* with the wake task, waiting */ |
- /* for 5 signals on the sync semaphore */ |
- sem_xwait(&sync, 5, BLOCK); |
- ... |
-} |
- |
-TASK wake(void *arg) { |
- while (1) { |
- ... |
- sem_xsignal(sync, 1); |
- ... |
- task_endcycle(); |
- } |
-} |
- |
-void main(void) { |
- ... |
- sem_init(&sync, 0, 0); |
- ... |
-} |
-\end{verbatim} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SEM\_POST\index{sem\_post()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int sem\_post(sem\_t {*}sem);}] |
- |
-\item [\textbf{Description:}]It unlocks the semaphore referenced by sem by |
-performing the semaphore unlock operation on that semaphore. If the semaphore |
-queue is not empty and the first task in the queue requests a feasible counter |
-decrement, it can be awaken. The task is put in the ready queue and the |
-scheduler is invoked: for this reason this system call can cause a preemption. |
-The semaphore queue is a FIFO queue: tasks are awoken in a FIFO order according |
-to resource availability. |
- |
-\item [\textbf{Return value:}] on successful completion, the function destroys |
-the sem semaphore and returns 0. Otherwise, it returns -1 and \texttt{errno} is |
-set according to the POSIX standard. |
- |
-\item [\textbf{See also}:] sem\_wait(), sem\_trywait(). |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SEM\_XPOST\index{sem\_xpost()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int sem\_xpost(sem\_t {*}s, int n);}] |
- |
-\item [\textbf{Description:}]\texttt{sem\_xpost()} is a non-portable extension |
-to the POSIX semaphores that implements the classical signal primitive on |
-semaphore \texttt{s}, increasing the counter by \texttt{n}. If the semaphore |
-queue is not empty and the first task in the queue requests a feasible counter |
-decrement, it can be awaken. The task is put in the \texttt{READY} queue and the |
-scheduler is invoked: for this reason this system call can cause a preemption. |
-The semaphore queue is a FIFO queue: tasks are awoken in a FIFO order according |
-to resource availability. |
- |
-\item [\textbf{Return value:}] on successful completion, the function destroys |
-the sem semaphore and returns 0. Otherwise, it returns -1 and \texttt{errno} is |
-set according to the POSIX standard. |
- |
-\item [\textbf{See also}:] \texttt{sem\_init(), sem\_wait(), sem\_destroy()}. |
- |
-\item [Example:]see \texttt{sem\_wait()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SEM\_GETVALUE\index{sem\_getvalue()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int sem\_getvalue(sem\_t {*}sem, int {*}sval);}] |
- |
-\item [\textbf{Description:}]\texttt{sem\_getvalue()} updates the location |
-referenced by the sval argument to have the value of the semaphore referenced by |
-sem without affecting the state of the semaphore. If sem is locked the value |
-returned by sem\_getvalue is a negative number whose absolute value represents |
-the number of processes waiting for the semaphore at some unspecified time |
-during the call. |
- |
-\item [\textbf{Return value:}] on successful completion, the function destroys |
-the sem semaphore and returns 0. Otherwise, it returns -1 and \texttt{errno} is |
-set according to the POSIX standard. |
- |
-\item [\textbf{See also}:] \texttt{sem\_init(), sem\_wait(), sem\_destroy()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Internal Semaphores} |
-%---------------------------------------------------------------------------- |
- |
-When developing a complex driver of the kernel, a designer usually needs to |
-manage a lot of shared resources that have to be accessed in mutual exclusion, |
-and needs also a lot of synchronization points that are not cancellation points. |
-For these pourposes the POSIX semaphores are not good because they are limited |
-in number and they are cancellation points. |
- |
-For this pourpose the S.Ha.R.K. Kernel provides a sort of lightweight semaphores |
-called \emph{internal} semaphores, that fulfill the designer needs \footnote{The |
-existence of two type of semaphores is not new in Kernel development; For |
-example, the Linux Kernel differentiate the semaphores used by the applications |
-and the semaphors used by the Kernel.}: they are not cancellation points and |
-there is no limit on the number of semaphores that can be created in a system |
-\footnote{Only 8 bytes are taken for each internal semaphore. In some sense the |
-internal semaphores are similar to the POSIX mutexes...}. The interface of the |
-Internal semaphores is very similar to POSIX semaphore interface. |
- |
-To use the Internal Semaphores, you don't need to call any registration function |
-at kernel startup time. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-INTERNAL\_SEM\_INIT\index{internal\_sem\_init()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void internal\_sem\_init(internal\_sem\_t {*}s, int value);}] |
- |
-\item [\textbf{Description:}]It initializes the internal semaphore \texttt{s} |
-with a specified \texttt{value}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-INTERNAL\_SEM\_WAIT\index{internal\_sem\_wait()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void internal\_sem\_wait(internal\_sem\_t {*}s);}] |
- |
-\item [\textbf{Description:}]It implements a blocking wait. the semaphore |
-counter is decremented by one. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-INTERNAL\_SEM\_TRYWAIT\index{internal\_sem\_trywait()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int internal\_sem\_trywait(internal\_sem\_t {*}s);}] |
- |
-\item [\textbf{Description:}]It implements a non-blocking wait. It returns 0 if |
-the counter is decremented, -1 if not. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-INTERNAL\_SEM\_POST\index{internal\_sem\_post()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void internal\_sem\_post(internal\_sem\_t {*}s);}] |
- |
-\item [\textbf{Description:}]It implements a post operation. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-INTERNAL\_SEM\_GETVALUE\index{internal\_sem\_getvalue()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int internal\_sem\_getvalue(internal\_sem\_t {*}s);}] |
- |
-\item [\textbf{Description:}]It returns a value greater or equal 0 if there are |
-no tasks blocked on s, -1 otherwise. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Mutexes and Condition Variables} |
-%---------------------------------------------------------------------------- |
- |
-The primitives described in this section allows the user to define and use |
-\emph{mutexes} and \emph{condition variables}. A mutex can be thought as a |
-binary semaphore initialized to 1. In that way, a critical section can be |
-specified using the \emph{mutex\_lock} and \emph{mutex\_unlock} primitives. |
-Moreover, using condition variables a task can block itself waiting for an |
-event. |
- |
-The provided implementation extends the POSIX standard mutex functions |
-implementing protocols like Stack Resource Policy and Non Preemptive |
-Protocol, that are not part of the standard. To do that, the mutex |
-initialization interface is different from the standard to allow the |
-specification of the various policies. In any case, the standard interface |
-is provided based on the extended interface. |
- |
-%---------------------------------------------------------------------------- |
-\subsection{Mutex attributes} |
-%---------------------------------------------------------------------------- |
- |
-A mutex can be used to implement critical sections that uses different |
-policies (for example, the Priority Inheritance, Priority Ceiling |
-or Stack Resource Policy protocol). The S.Ha.R.K. Kernel provides |
-a set of structures derived from the basic structure mutexattr\_t |
-\footnote{Similar to the pthread\_mutexattr\_t structures of the POSIX |
-standard.} that allow to handle the specification of different policies. |
- |
-The mutex attributes are different foe every policy, that is implemented |
-by a Resouce Module. To see the the description of the mutex attributes |
-for every policy, look at the S.Ha.R.K. Modules Manual. |
- |
-%---------------------------------------------------------------------------- |
-\subsection{Functions} |
-%---------------------------------------------------------------------------- |
- |
-This subsection describes the functions that handle mutexes and condition |
-variables. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-MUTEX\_INIT\index{mutex\_init()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int mutex\_init(mutex\_t {*}mutex, const mutexattr\_t {*}attr);}] |
- |
-\item [\textbf{Description:}]The mutex\_init function inituializes the mutex |
-referenced by \emph{mutex} with attributes specified by \emph{attr}. \emph{attr} |
-shall be not equal NULL. Upon successful initialization, the state |
-of the mutex becomes initialized and unlocked. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\item [\textbf{See also}:] mutex\_destroy(). |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-MUTEX\_DESTROY\index{mutex\_destroy()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int mutex\_destroy(mutex\_t {*}mutex);}] |
- |
-\item [\textbf{Description:}]The mutex\_destroy function destroys the mutex |
-object |
-referenced by mutex. It is safe to destroy an initialize mutex that |
-is unlocked. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\item [\textbf{See also}:] mutex\_init(). |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-MUTEX\_LOCK\index{mutex\_lock()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int mutex\_lock(mutex\_t {*}mutex);}] |
- |
-\item [\textbf{Description:}]The mutex\_lock function locks an unlocked mutex. |
-If |
-the mutex is already locked , the calling thread waits until the mutex |
-becomes available. the behaviour of the function may change depending |
-on the particular policy passed with the mutexattr\_t parameter at |
-mutex initialization. The function is \emph{not} a cancellation point. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\end{description} |
- |
-\pagebreak |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-MUTEX\_TRYLOCK\index{mutex\_trylock()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int mutex\_lock(mutex\_t {*}mutex);}] |
- |
-\item [\textbf{Description:}]The mutex\_trylock function is identycal to |
-mutex\_lock |
-except that if the mutex us locked when the function is called, the |
-calling task does not block but returns -1 and an errno value of EBUSY, |
-as specified by the POSIX standard. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-MUTEX\_UNLOCK\index{mutex\_unlock()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int mutex\_unlock(mutex\_t {*}mutex);}] |
- |
-\item [\textbf{Description:}]The mutex\_unlock function is called by the owner |
-of |
-the mutex object to release it. If there are thread blocked on the |
-mutex object referenced by mutex when mutex\_lock is called, the mutex |
-becomes available, and the task that will acquire the mutex depends |
-on the policy with that the mutex was initialized. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-COND\_INIT\index{cond\_init()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int cond\_init(cond\_t {*}cond);}] |
- |
-\item [\textbf{Description:}]The function initializes the condition variable |
-referenced |
-by cond. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-COND\_DESTROY\index{cond\_destroy()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int cond\_destroy(cond\_t {*}cond);}] |
- |
-\item [\textbf{Description:}]The function destroys the given condition variable |
-specified by cond. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-COND\_SIGNAL\index{cond\_signal()} and COND\_BROADCAST\index{cond\_broadcast()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int cond\_signal(cond\_t {*}cond);}] |
- |
-\item [\textbf{int cond\_broadcast(cond\_t {*}cond);}] |
- |
-\item [\textbf{Description:}]The function cond\_signal unblocks at least one of |
-the threads that are blocked on the specified condition variable cond. |
-The function cond\_broadcast unblocks all threads currently blocked |
-on the specified condition variable cond. These functions have no |
-effect if there are no threads currently blocked on cond. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-COND\_WAIT\index{cond\_wait()} and COND\_TIMEDWAIT\index{cond\_timedwait()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{int cond\_wait(cond\_t {*}cond, mutex\_t {*}mutex);}] |
- |
-\item [\textbf{int cond\_timedwait(cond\_t {*}cond, mutex\_t {*}mutex, |
-const struct timespec {*}abstime);}] |
- |
-\item [\textbf{Description:}]These functions are used to block on a condition |
-variable. |
-They shall be called with \emph{mutex} locked by the calling task. |
-These functions release mutex and cause the calling task to block |
-on the condition variable cond. Upon successful return, the mutex |
-is locked and is owned by the calling task. When using condition variables, |
-there is always a Boolean predicate involving shared variables associated |
-with each condition wait that is true if the thread should proceed. |
-Spurious wakeups from the \texttt{cond\_wait} or \texttt{cond\_timedwait} |
-functions may occur. Since the return from \texttt{cond\_wait} or |
-\texttt{cond\_timedwait} does not imply anything about the value of |
-this predicate, the predicate should be re-evaluated upon each return. |
- |
-The \texttt{cond\_wait} and cond\_timedwait functions are cancellation |
-points. When the cancelability enable state of a task is set to |
-\texttt{TASK\_CANCEL\_DEFERRED}, |
-a side effect of acting upon a cancellation request while in a condition |
-wait is that the mutex is (in effect) reaquired before calling the |
-first cancellation cleanup handler. To ensure a correct cancellation, |
-a cleanup function should be pushed before the \texttt{cond\_wait} |
-call (in case of cancellation it simply unlock the mutex). |
- |
-The \texttt{cond\_timedwait} function is the same as the \texttt{cond\_wait} |
-function except that an error is returned if the absolute time specified |
-by abstime passes before the condition cond is signaled or broadcasted, |
-or if the absolute time specified by abstime has already been passed |
-at the time of the call. |
- |
-\item [\textbf{Return value:}] on successful completion the functions return |
-0. Otherwise, they return -1 and \texttt{errno} is set according to |
-the POSIX standard. |
- |
-\end{description} |
- |
-% |
-% Tool: still in use? |
-% |
- |
-% %---------------------------------------------------------------------------- |
-% \section{Communication Ports \footnote{The S.Ha.R.K. communication ports are |
-% directly derived from the previous varsions of the Hartik Kernel.}} |
-% %---------------------------------------------------------------------------- |
-% |
-% S.Ha.R.K. communication ports allow tasks to exchange messages. Each |
-% port is uniquely identified by a symbolic name (i.e., a string of |
-% characters); a task willing to use this communication facility has |
-% to open the channel using the \texttt{port\_create()} call, thus becoming |
-% the owner of the resource. Any other task that wants to use this communication |
-% end-point to send or receive data needs to connect to it by using |
-% the \texttt{port\_connect()} primitive. |
-% |
-% S.Ha.R.K. offers three types of ports: |
-% |
-% \begin{itemize} |
-% |
-% \item \texttt{STREAM}: it is a one-to-one communication facility, which |
-% can be opened either by the reader or by the writer task. The task |
-% executing the \texttt{port\_create()} must specify the message size |
-% and maximum number of messages in the queue. The task executing the |
-% |
-% \texttt{port\_connect()} must only specify the size of the messages |
-% it wants to receive/send, which can be different from the one specified |
-% by the owner. For example, a task may open a port for reading messages |
-% of 4 bytes, while another task can connect to it to write one-byte |
-% messages. This mechanism turns out to be useful for character oriented |
-% device drivers which need to fill a given structure, before the message |
-% can be processed further by a higher-level task. |
-% |
-% \item \texttt{MAILBOX}: it is a many-to-one communication facility, thought |
-% for being used in classical client/server mechanisms. This kind of |
-% port can only be opened by the reader task (the server) which wants |
-% to receive data from writer tasks (the clients). Message size is fixed |
-% and defined by the reader. |
-% |
-% \item \texttt{STICK}: it is a one-to-many communication facility intended |
-% to be used for exchanging periodic state-messages, for which the most |
-% recent information is relevant. It can be opened only by the (unique) |
-% writer task and the reading tasks must connect to it. It contains |
-% just one message and any new message posted by the writer will overwrite |
-% the previous one. Messages are non-consumable: a reader task can perform |
-% many readings of a given message until the writer posts a new one. |
-% \end{itemize} |
-% |
-% The first two kinds of port implement the synchronous communication |
-% paradigm, while \texttt{STICK} ports implement an asynchronous (state-message) |
-% paradigm. It is worth noting that in order to protect the internal |
-% data structures, \texttt{STREAM} ports use semaphores for synchronizing |
-% the accesses, \texttt{STICK} ports just use a mutual exclusion semaphore, |
-% and the \texttt{MAILBOX} ports use both kinds of semaphores. |
-% |
-% For this reason, \texttt{MAILBOX} and \texttt{STICK} ports should |
-% not be used by critical tasks, whereas \texttt{STREAM} ports can be |
-% used by any task requiring a state-message non-blocking semantics. |
-% Moreover, the execution time of a transaction depends on the message |
-% size (the message is copied in/from the buffer when a send/receive |
-% is performed). The semantics associated with each port is graphically |
-% illustrated in Figure \ref{fg:port-type}. |
-% |
-% An application that uses the communication ports, must register the |
-% HARTPORT Module. Please see Volume III - S.Ha.R.K. Modules for details. |
-% |
-% \begin{figure} |
-% \begin{center}\includegraphics[width=8cm]{port.eps}\end{center} |
-% \caption{HARTIK ports.\label{fg:port-type}} |
-% \end{figure} |
-% |
-% %---------------------------------------------------------------------------- |
-% \begin{intest} |
-% PORT\_CREATE\index{port\_create()} |
-% \end{intest} |
-% |
-% \begin{description} |
-% |
-% \item [\textbf{PORT port\_create(char {*}name, int dim, int num, |
-% int type, int mode);}] |
-% |
-% \item [\textbf{Description:}]It opens the port identified by the string |
-% \texttt{name}. |
-% The argument \texttt{dim} specifies the message size in bytes, \texttt{num} |
-% specifies the queue size, \texttt{type} the port type (\texttt{STREAM}, |
-% \texttt{MAILBOX}, or \texttt{STICK}), and \texttt{mode} the access |
-% mode (\texttt{READ} or \texttt{WRITE}). |
-% |
-% \item [\textbf{Return Value:}] The primitive returns the port identifier, |
-% which identifies the connection between the port and the task, and |
-% not the port itself, which is identified through its name. A return |
-% value -1 indicates that an error is occurred. |
-% |
-% \item [\textbf{See also}:] \texttt{port\_delete(), port\_connect(), |
-% port\_disconnect(), port\_send(), port\_receive()}. |
-% |
-% \end{description} |
-% |
-% \begin{description} |
-% \item [Example:\label{pg:port-ex}] |
-% \item \texttt{TASK demo(void)} \{ |
-% \item \texttt{~~PORT p; } |
-% \item \texttt{~~char msg{[}6{]}; } |
-% \item \texttt{~~\ldots{}} |
-% \item \texttt{~~/{*} Demo task, of NRT type, opens the \char`\"{}goofy\char`\"{} |
-% port {*}/} |
-% \item \texttt{~~/{*} and sends a message of 6 bytes. {*}/} |
-% \item \texttt{~~p = port\_create(\char`\"{}goofy\char`\"{}, 6, 8, STREAM, |
-% WRITE);} |
-% \item \texttt{~~\ldots{}} |
-% \item \texttt{~~port\_send(p, msg, BLOCK); } |
-% \item \texttt{\}} |
-% \item \texttt{~} |
-% \item \texttt{TASK duro(void)} \{ |
-% \item \texttt{~~PORT q; } |
-% \item \texttt{~~char msg{[}2{]}; } |
-% \item \texttt{~~/{*} Duro task (HARD) connects to the \char`\"{}goofy\char`\"{} |
-% {*}/} |
-% \item \texttt{~~/{*} port and receives messages of 2 bytes {*}/ } |
-% \item \texttt{~~q = port\_connect(\char`\"{}goofy\char`\"{}, 2, STREAM, |
-% READ);} |
-% \item \texttt{~~while (condition) \{} |
-% \item \texttt{~~~~\ldots{}} |
-% \item \texttt{~~~~if (port\_receive(q, msg, NON\textbackslash{}\_BLOCK) \{} |
-% \item \texttt{~~~~~~<action 1>;~/{*} Ready Message! {*}/} |
-% \item \texttt{~~~~\}} |
-% \item \texttt{~~~~else \{} |
-% \item \texttt{~~~~~~<action 2>;~/{*} Message not Ready! {*}/} |
-% \item \texttt{~~~~\}} |
-% \item \texttt{~~~~\ldots{}} |
-% \item \texttt{~~~~task\_endcycle();} |
-% \item \texttt{~~\}} |
-% \item \texttt{\}} |
-% |
-% \end{description} |
-% |
-% %---------------------------------------------------------------------------- |
-% \begin{intest} |
-% PORT\_DELETE\index{port\_delete()} |
-% \end{intest} |
-% |
-% \begin{description} |
-% |
-% \item [\textbf{void port\_delete(PORT p)};] |
-% |
-% \item [\textbf{Description:}]It destroys the port identified by \texttt{p}. |
-% |
-% \item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-% port\_disconnect(), |
-% port\_send(), port\_receive()}. |
-% |
-% \item [\textbf{Example:}]see the example at page \pageref{pg:port-ex}. |
-% |
-% \end{description} |
-% |
-% %---------------------------------------------------------------------------- |
-% \begin{intest} |
-% PORT\_CONNECT\index{port\_connect()} |
-% \end{intest} |
-% |
-% \begin{description} |
-% |
-% \item [\textbf{PORT port\_connect(char {*}name, int dim, int type, |
-% int mode);}] |
-% |
-% \item [\textbf{Description:}]It connects the calling task to the port identified |
-% by \texttt{name}. The argument \texttt{dim} specifies the message |
-% size in bytes, \texttt{type} the port type (\texttt{STREAM}, \texttt{MAILBOX}, |
-% or \texttt{STICK}), and \texttt{mode} the access mode (\texttt{READ} |
-% or \texttt{WRITE}). If the port has not been opened by \texttt{port\_create()}, |
-% the task is blocked, waiting for port creation. To avoid synchronization |
-% delays, connection should be established only \underbar{after} opening |
-% the port. |
-% |
-% \item [\textbf{Return value:}] The function returns the port identification |
-% number in the case of successful operation; else -1 is returned. |
-% |
-% \item [\textbf{See also}:] \texttt{port\_create(), port\_delete(), |
-% port\_disconnect(), port\_send(), port\_receive()}. |
-% |
-% \end{description} |
-% |
-% %---------------------------------------------------------------------------- |
-% \begin{intest} |
-% PORT\_DISCONNECT\index{port\_disconnect()} |
-% \end{intest} |
-% |
-% \begin{description} |
-% |
-% \item [\textbf{void port\_disconnect(PORT p)};] |
-% |
-% \item [\textbf{Description:}]It closes the connection identified by \texttt{p}. |
-% |
-% \item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-% port\_delete(), port\_send(), port\_receive()}. |
-% |
-% \end{description} |
-% |
-% %---------------------------------------------------------------------------- |
-% \begin{intest} |
-% PORT\_SEND\index{port\_send()} |
-% \end{intest} |
-% |
-% \begin{description} |
-% |
-% \item [\textbf{int port\_send(PORT p, char {*}msg, BYTE b);}] |
-% |
-% \item [\textbf{Description:}]It sends a message pointed by \texttt{msg} to the |
-% port identified by \texttt{p}. Message dimension is defined through |
-% \texttt{port\_create()} |
-% or \texttt{port\_connect()} and cannot be dynamically changed. The |
-% argument \texttt{b} can be \texttt{BLOCK} or \texttt{NON\_BLOCK}. |
-% If \texttt{b = BLOCK} and the port queue is full, then the task is |
-% blocked until the buffer is freed. If \texttt{b = NON\_BLOCK} and |
-% the port queue is full, then the primitive returns 0 and the message |
-% is not sent. |
-% |
-% \item [\textbf{Return value:}] 1 (TRUE) if the operation can be performed, |
-% 0 otherwise. |
-% |
-% \item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-% port\_disconnect(), |
-% port\_send(), port\_receive()}. |
-% |
-% \item [\textbf{Example:}]see the example at page \pageref{pg:port-ex}. |
-% |
-% \end{description} |
-% |
-% %---------------------------------------------------------------------------- |
-% \begin{intest} |
-% PORT\_RECEIVE\index{port\_receive()} |
-% \end{intest} |
-% |
-% \begin{description} |
-% |
-% \item [\textbf{int port\_receive(PORT p, char {*}msg, BYTE b);}] |
-% |
-% \item [\textbf{Description:}]It receives a message from the port identified by |
-% \texttt{p} and copies it in a memory buffer pointed by \texttt{msg}. Message |
-% dimension is defined through \texttt{port\_create()} or \texttt{port\_connect()} |
-% and cannot be dynamically changed. The argument \texttt{b} can be |
-% \texttt{BLOCK} or \texttt{NON\_BLOCK}. If \texttt{b = BLOCK} and the |
-% port queue is empty, then the task is blocked until a message is available. |
-% If \texttt{b = NON\_BLOCK} and the port queue is empty, then the primitive |
-% returns 0 and no message is received. |
-% |
-% \item [\textbf{Return value:}] 1 (TRUE) if the operation can be performed, |
-% 0 otherwise. |
-% |
-% \item [\textbf{See also}:] \texttt{port\_create(), port\_connect(), |
-% port\_disconnect(), port\_send(), port\_receive()}. |
-% |
-% \item [\textbf{Example:}]see the example at page \pageref{pg:port-ex}. |
-% |
-% \end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Cyclical Asynchronous Buffers} |
-%---------------------------------------------------------------------------- |
- |
-\textbf{Cyclical Asynchronous Buffers} (or CABs) represent a particular |
-mechanism purposely designed for the cooperation among periodic activities |
-with different activation rates. See \cite{But97} for implementation |
-details. |
- |
-A CAB provides a one-to-many communication channel, which at any instant |
-contains the most recent message inserted into it. A message is not |
-consumed (that is, extracted) by a receiving process but is maintained |
-into the CAB structure until a new message is overwritten. As a consequence, |
-once the first message is put in a CAB, a task can never be blocked |
-during a receive operation. Similarly, since a new message overwrites |
-the old one, a sender can never be blocked. |
- |
-Notice that, using such a semantics, a message can be read more than |
-once if the receiver is faster than the sender, while messages can |
-be lost if the sender is faster than the receiver. However, this is |
-not a problem in many control applications, where tasks are interested |
-only in fresh sensory data rather than in the complete message history |
-produced by a sensory acquisition task. |
- |
-Notice that more tasks can simultaneously access the same buffer in |
-a CAB for reading. Also, if a task $P$ reserves a CAB for writing |
-while another task $Q$ is using that CAB, a new buffer is created, |
-so that $P$ can write its message without interfering with $Q$. |
-As $P$ finishes writing, its message becomes the most recent one |
-in that CAB. The maximum number of buffers that can be created in |
-a CAB is specified as a parameter in the \emph{cab\_create} primitive. |
-To avoid blocking, this number must be equal to the number of tasks |
-that use the CAB plus one. |
- |
-CABs can be created and initialized by the \emph{cab\_create} primitive, |
-which requires the CAB name, the dimension of the message, and the |
-number of messages that the CAB may contain simultaneously. The |
-\emph{cab\_delete} |
-primitive removes a CAB from the system and releases the memory space |
-used by its data structures. |
- |
-To insert a message in a CAB, a task must first reserve a buffer from |
-the CAB memory space, then copy the message into the buffer, and finally |
-put the buffer into the CAB structure, where it becomes the most recent |
-message. This is done according to the following scheme: |
- |
-\vspace{5mm} \begin{tt} |
-\begin{tabbing} |
-\={b}uf\_pointer = {\textbf{cab\_reserve}}(cab\_id);\\ |
-\>\(<\)copy message in *buf\_pointer\(>\)\\ |
-\>{\textbf{cab\_putmes}}(cab\_id, buf\_pointer);\\ |
-\end{tabbing} |
-\end{tt} |
- |
-\noindent Similarly, to get a message from a CAB, a task has to get |
-the pointer to the most recent message, use the data, and release |
-the pointer. This is done according to the following scheme: |
- |
-\vspace{5mm} \begin{tt} |
-\begin{tabbing} |
-\={m}es\_pointer = {\textbf{cab\_getmes}}(cab\_id);\\ |
-\>\(<\)use message\(>\)\\ |
-\>{\textbf{cab\_unget}}(cab\_id, mes\_pointer); |
-\end{tabbing} |
-\end{tt} A simple example of CABs' usage is reported below. |
- |
-\label{pg:cab-ex} \begin{minipage}{\columnwidth} |
-\begin{small} |
-\begin{tt} |
-\begin{verbatim} |
-CAB cc; |
- |
-void main(void) { |
- SYS_PARMS parms = BASE_SYS; |
- |
- /* global declaration */ |
- sys_def_tick(parms, 1, mSec); |
- sys_init(&parms); |
- |
- /* The CAB named cc contains a message of */ |
- /* 5 floats and can be used by two tasks */ |
- cc = cab_create("my_cab", 5 * sizeof(float), 3); |
- task_activate(task_create("ll", read, HARD, APERIODIC, 100, NULL)); |
- task_activate(task_create("ss", write, HARD, PERIODIC, 333, NULL)); |
- ... |
-} |
- |
-/*---------------------------------------------------------------------*/ |
-TASK write(void) { |
- float msg[5]; |
- char *pun; |
- ... |
- |
- while (1) { |
- |
- /* send a message to the `cc' cab */ |
- pun = cab_reserve(cc); /* reserve a buffer */ |
- memcpy(pun, msg, 5 * sizeof(float)); |
- cab_putmes(cc, pun); /* release the buffer */ |
- task_endcycle(); |
- } |
-} |
- |
-/*---------------------------------------------------------------------*/ |
-TASK read(void) { |
- float msg[5]; |
- char *pun; |
- ... |
- |
- while (1) { |
- |
- /* get a message from the `cc' CAB */ |
- pun = cab_getmes(cc); /* reserve a buffer */ |
- memcpy(msg, pun, 5 * sizeof(float)); |
- cab_unget(cc, pun); /* release the buffer */ |
- task_endcycle(); |
- } |
-} |
-\end{verbatim} |
-\end{tt} |
-\end{small} |
-\end{minipage} |
- |
-%---------------------------------------------------------------------------- |
-\vspace{7mm} \begin{intest} |
-CAB\_CREATE\index{cab\_create()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{CAB cab\_create(char {*}name, int dim\_mes, BYTE num\_mes)}] |
- |
-\item [\textbf{Description:}]It initializes a CAB. \texttt{name} is a pointer to |
-an identification string (used only for debugging purposes); \texttt{dim} |
-is the size of the messages contained in the CAB; \texttt{numbuf} |
-is the number of buffers the CAB is composed of. Notice that such |
-a number must be greater than or equal to the number of tasks that |
-use the CAB plus one. |
- |
-\item [\textbf{Return value:}] It returns the index of the created CAB. |
- |
-\item [\textbf{See also}:] \texttt{cab\_delete(), cab\_reserve(), cab\_putmes(), |
-cab\_getmes(), cab\_unget()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\vspace{7mm} \begin{intest} |
-CAB\_DELETE\index{cab\_delete()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void cab\_delete(CAB cc);}] |
- |
-\item [\textbf{Description:}]It removes the \texttt{cc} CAB from the system, |
-deallocating |
-its buffers and data structures. |
- |
-\item [\textbf{See also}:] \texttt{cab\_create(), cab\_reserve(), cab\_putmes(), |
-cab\_getmes(), cab\_unget()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\vspace{7mm} \begin{intest} |
-CAB\_RESERVE\index{cab\_reserve()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{char {*}cab\_reserve(CAB cc);}] |
- |
-\item [\textbf{Description:}]it reserves a buffer belonging to the \texttt{cc} |
-CAB and returns a pointer to it. The primitive has to be used only by |
-writers and \emph{never} by readers. |
- |
-\item [\textbf{Return value:}] it returns a pointer to the reserved buffer. |
- |
-\item [\textbf{See also}:] \texttt{cab\_delete(), cab\_create(), cab\_putmes(), |
-cab\_getmes(), cab\_unget()}. |
- |
-\end{description} |
- |
-\pagebreak |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-CAB\_PUTMES\index{cab\_putmes()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void cab\_putmes(CAB id, char {*}pun)}] |
- |
-\item [\textbf{Description:}]It inserts the message pointed by \texttt{pun} into |
-the CAB identified by \texttt{id}. This primitive must be used \emph{only} |
-by writing tasks. |
- |
-\item [\textbf{See also}:] \texttt{cab\_delete(), cab\_create(), cab\_reserve(), |
-cab\_getmes(), cab\_unget()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\vspace{7mm} \begin{intest} |
-CAB\_GETMES\index{cab\_getmes()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{char {*}cab\_getmes(CAB cc);}] |
- |
-\item [\textbf{Description:}]It returns a pointer to the latest message written |
-into the \texttt{cc} CAB. This primitive must be used \emph{only} |
-by reading tasks. |
- |
-\item [\textbf{Returned value:}] It returns a pointer to the most recent |
-message contained in the CAB. |
- |
-\item [\textbf{See also}:] \texttt{cab\_delete(), cab\_create(), cab\_putmes(), |
-cab\_reserve(), cab\_unget()}. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\vspace{7mm} \begin{intest} |
-CAB\_UNGET\index{cab\_unget()} |
-\end{intest} |
- |
-\begin{description} |
- |
-\item [\textbf{void cab\_unget(CAB cc, char {*}pun);}] |
- |
-\item [\textbf{Description:}]it notifies the system that the buffer pointed by |
-\texttt{pun} belonging to the \texttt{cc} CAB is no longer used by the calling |
-task. |
- |
-\item [\textbf{See also}:] \texttt{cab\_delete(), cab\_create(), cab\_reserve(), |
-cab\_getmes(), cab\_putmes()}. |
- |
-\end{description} |
- |
-\section{POSIX Message Queues} |
- |
-S.Ha.R.K. provides the message passing function defined in the POSIX |
-standard. For more information, see Section 15 of the POSIX standard, |
-Message Passing. |
/trunk/vol1/semaf.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/port.eps |
=================================================================== |
--- trunk/vol1/port.eps (revision 1677) |
+++ trunk/vol1/port.eps (nonexistent) |
@@ -1,235 +0,0 @@ |
-%!PS-Adobe-2.0 EPSF-2.0 |
-%%Title: port.fig |
-%%Creator: fig2dev Version 3.2 Patchlevel 1 |
-%%CreationDate: Wed Jul 12 11:38:50 2000 |
-%%For: pj@galadriel (Paolo Gai) |
-%%Orientation: Portrait |
-%%BoundingBox: 0 0 314 197 |
-%%Pages: 0 |
-%%BeginSetup |
-%%EndSetup |
-%%Magnification: 1.0000 |
-%%EndComments |
-/$F2psDict 200 dict def |
-$F2psDict begin |
-$F2psDict /mtrx matrix put |
-/col-1 {0 setgray} bind def |
-/col0 {0.000 0.000 0.000 srgb} bind def |
-/col1 {0.000 0.000 1.000 srgb} bind def |
-/col2 {0.000 1.000 0.000 srgb} bind def |
-/col3 {0.000 1.000 1.000 srgb} bind def |
-/col4 {1.000 0.000 0.000 srgb} bind def |
-/col5 {1.000 0.000 1.000 srgb} bind def |
-/col6 {1.000 1.000 0.000 srgb} bind def |
-/col7 {1.000 1.000 1.000 srgb} bind def |
-/col8 {0.000 0.000 0.560 srgb} bind def |
-/col9 {0.000 0.000 0.690 srgb} bind def |
-/col10 {0.000 0.000 0.820 srgb} bind def |
-/col11 {0.530 0.810 1.000 srgb} bind def |
-/col12 {0.000 0.560 0.000 srgb} bind def |
-/col13 {0.000 0.690 0.000 srgb} bind def |
-/col14 {0.000 0.820 0.000 srgb} bind def |
-/col15 {0.000 0.560 0.560 srgb} bind def |
-/col16 {0.000 0.690 0.690 srgb} bind def |
-/col17 {0.000 0.820 0.820 srgb} bind def |
-/col18 {0.560 0.000 0.000 srgb} bind def |
-/col19 {0.690 0.000 0.000 srgb} bind def |
-/col20 {0.820 0.000 0.000 srgb} bind def |
-/col21 {0.560 0.000 0.560 srgb} bind def |
-/col22 {0.690 0.000 0.690 srgb} bind def |
-/col23 {0.820 0.000 0.820 srgb} bind def |
-/col24 {0.500 0.190 0.000 srgb} bind def |
-/col25 {0.630 0.250 0.000 srgb} bind def |
-/col26 {0.750 0.380 0.000 srgb} bind def |
-/col27 {1.000 0.500 0.500 srgb} bind def |
-/col28 {1.000 0.630 0.630 srgb} bind def |
-/col29 {1.000 0.750 0.750 srgb} bind def |
-/col30 {1.000 0.880 0.880 srgb} bind def |
-/col31 {1.000 0.840 0.000 srgb} bind def |
- |
-end |
-save |
--108.0 304.0 translate |
-1 -1 scale |
- |
-/cp {closepath} bind def |
-/ef {eofill} 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} bind def |
-/tr {translate} bind def |
-/tnt {dup dup currentrgbcolor |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} |
- bind def |
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul |
- 4 -2 roll mul srgb} bind def |
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def |
-/$F2psEnd {$F2psEnteredState restore end} def |
-%%EndProlog |
- |
-$F2psBegin |
-10 setmiterlimit |
-n -1000 6052 m -1000 -1000 l 8026 -1000 l 8026 6052 l cp clip |
- 0.06000 0.06000 sc |
-/Times-Roman ff 180.00 scf sf |
-1800 3450 m |
-gs 1 -1 sc (Clients) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-6150 3375 m |
-gs 1 -1 sc (Server) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-6150 3600 m |
-gs 1 -1 sc (\(Owner\)) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-1800 4725 m |
-gs 1 -1 sc (Producers) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-1800 4950 m |
-gs 1 -1 sc (\(Owner\)) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-6150 4725 m |
-gs 1 -1 sc (Consumers) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-2100 2325 m |
-gs 1 -1 sc (Writer) col0 sh gr |
-/Times-Roman ff 180.00 scf sf |
-5850 2325 m |
-gs 1 -1 sc (Reader) col0 sh gr |
-% Polyline |
-7.500 slw |
-n 3375 3240 m 4950 3240 l 4950 3690 l 3375 3690 l gs col-1 s gr |
-% Polyline |
-n 4500 3240 m 4500 3690 l gs col-1 s gr |
-% Polyline |
-n 4275 3240 m 4275 3690 l gs col-1 s gr |
-% Polyline |
-n 4050 3240 m 4050 3690 l gs col-1 s gr |
-% Polyline |
-n 3825 3240 m 3825 3690 l gs col-1 s gr |
-% Polyline |
-n 4725 3240 m 4725 3690 l gs col-1 s gr |
-% Polyline |
-gs clippath |
-5505 3435 m 5625 3465 l 5505 3495 l 5640 3495 l 5640 3435 l cp |
-clip |
-n 4950 3465 m 5625 3465 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5505 3435 m 5625 3465 l 5505 3495 l col-1 s |
-% Polyline |
-gs clippath |
-3255 3435 m 3375 3465 l 3255 3495 l 3390 3495 l 3390 3435 l cp |
-clip |
-n 2700 3465 m 3375 3465 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3255 3435 m 3375 3465 l 3255 3495 l col-1 s |
-% Polyline |
-gs clippath |
-3263 3322 m 3375 3375 l 3251 3381 l 3384 3407 l 3396 3349 l cp |
-clip |
-n 2700 3240 m 3375 3375 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3263 3322 m 3375 3375 l 3251 3381 l col-1 s |
-% Polyline |
-gs clippath |
-3251 3549 m 3375 3555 l 3263 3608 l 3396 3581 l 3384 3523 l cp |
-clip |
-n 2700 3690 m 3375 3555 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3251 3549 m 3375 3555 l 3263 3608 l col-1 s |
-/Times-Roman ff 150.00 scf sf |
-3825 3060 m |
-gs 1 -1 sc (MAILBOX) col-1 sh gr |
-% Polyline |
-n 4635 5040 m 4635 4410 l 3735 4410 l 3735 5040 l cp gs col-1 s gr |
-% Polyline |
-gs clippath |
-3615 4695 m 3735 4725 l 3615 4755 l 3750 4755 l 3750 4695 l cp |
-clip |
-n 3060 4725 m 3735 4725 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3615 4695 m 3735 4725 l 3615 4755 l col-1 s |
-% Polyline |
-gs clippath |
-5190 4695 m 5310 4725 l 5190 4755 l 5325 4755 l 5325 4695 l cp |
-clip |
-n 4635 4725 m 5310 4725 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5190 4695 m 5310 4725 l 5190 4755 l col-1 s |
-% Polyline |
-gs clippath |
-5186 4494 m 5310 4500 l 5198 4553 l 5331 4526 l 5319 4468 l cp |
-clip |
-n 4635 4635 m 5310 4500 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5186 4494 m 5310 4500 l 5198 4553 l col-1 s |
-% Polyline |
-gs clippath |
-5198 4897 m 5310 4950 l 5186 4956 l 5319 4982 l 5331 4924 l cp |
-clip |
-n 4635 4815 m 5310 4950 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5198 4897 m 5310 4950 l 5186 4956 l col-1 s |
-/Times-Roman ff 150.00 scf sf |
-4005 4230 m |
-gs 1 -1 sc (STICK) col-1 sh gr |
-% Polyline |
-n 3375 2025 m 4950 2025 l 4950 2475 l 3375 2475 l gs col-1 s gr |
-% Polyline |
-n 4500 2025 m 4500 2475 l gs col-1 s gr |
-% Polyline |
-n 4275 2025 m 4275 2475 l gs col-1 s gr |
-% Polyline |
-n 4050 2025 m 4050 2475 l gs col-1 s gr |
-% Polyline |
-n 3825 2025 m 3825 2475 l gs col-1 s gr |
-% Polyline |
-n 4725 2025 m 4725 2475 l gs col-1 s gr |
-% Polyline |
-gs clippath |
-5505 2220 m 5625 2250 l 5505 2280 l 5640 2280 l 5640 2220 l cp |
-clip |
-n 4950 2250 m 5625 2250 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 5505 2220 m 5625 2250 l 5505 2280 l col-1 s |
-% Polyline |
-gs clippath |
-3255 2220 m 3375 2250 l 3255 2280 l 3390 2280 l 3390 2220 l cp |
-clip |
-n 2700 2250 m 3375 2250 l gs col-1 s gr gr |
- |
-% arrowhead |
-n 3255 2220 m 3375 2250 l 3255 2280 l col-1 s |
-/Times-Roman ff 150.00 scf sf |
-3870 1890 m |
-gs 1 -1 sc (STREAM) col-1 sh gr |
-$F2psEnd |
-rs |
/trunk/vol1/port.eps |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/errors.tex |
=================================================================== |
--- trunk/vol1/errors.tex (revision 1677) |
+++ trunk/vol1/errors.tex (nonexistent) |
@@ -1,98 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{Errors and Exceptions} |
-\label{ch:Errors} \label{ch:Exceptions} |
-%---------------------------------------------------------------------------- |
- |
-This appendix describes the errors and exceptions codes that can be |
-printed into the screen, returned by a functions into the the \texttt{errno} |
-variables or that the kernel can raise. These error constants are |
-included from the \texttt{errno.h} standard include file, and are |
-contained into the \texttt{bits/errno.h} include file. |
- |
-%---------------------------------------------------------------------------- |
-\section{Abort codes} |
-%---------------------------------------------------------------------------- |
- |
-\begin{longtable}{|c|c|c|} |
-\hline Name & N.& Description \\ \hline |
-\hline none & 1 & Generic OSLib abortASIG\_DEFAULT\_ACTION \\ |
-\hline ASIG\_DEFAULT\_ACTION & 2& The default handler of a signal has been executed \\ |
-\hline ASIGINIT & 3 & Internal error in initializing signals (should never happens) \\ |
-\hline AHEXC & 4 & a set\_exchandler\_XXX function has been executed. \\ |
-\hline AARPFULL & 5 & ARP table full. \\ |
-\hline |
-\end{longtable} |
- |
-%---------------------------------------------------------------------------- |
-\section{Exceptions posted with kern\_raise} |
-%---------------------------------------------------------------------------- |
- |
-\begin{longtable}{|l|c|p{8cm}|} |
-\hline Name & N. & Description \\ \hline |
-\hline XDOUBLE\_EXCEPTION & 1 & Two exceptions has been raised. Currently not used \\ |
-\hline XUNVALID\_KILL\_SHADOW & 2 & Called into the internal function task\_makefree because a task was killed while some other task shadow points to that task. \\ |
-\hline XNOMORE\_CLEANUPS & 3 & Too many cleanups handlers has been used. Currently not used. \\ |
-\hline XUNVALID\_TASK & 4 & The Registered Modules does not implement a primitive called by the task (usually happens when the user calls task\_delay or task\_sleep) \\ |
-\hline XUNVALID\_GUEST & 5 & The Registered Modules does not handle correctly the guest tasks. Check the initfile. \\ |
-\hline XNOMORE\_EVENTS & 6 & Too many OSLib events posted. The number of OSLib events posted is declared in \texttt{include/ll/sys/ll/event.h} into the constant \texttt{MAX\_EVENT}.\\ |
-\hline XDEADLINE\_MISS & 7 & A Task missed its deadline.\\ |
-\hline XWCET\_VIOLATION & 8 & A Task consumed more tha its declared WCET.\\ |
-\hline XACTIVATION & 9 & A Sporadic task has been activated more frequently than declared.\\ |
-\hline XMUTEX\_OWNER\_KILLED & 10 & A task is terminated while it owns a mutex.\\ |
-\hline XSRP\_UNVALID\_LOCK & 11 & A task tried to lock a SRP mutex with a wrong preemption level, or a task tries to lock a SRP mutex already locked, or a task tries to lock a SRP mutex without declaring its preemption level.\\ |
-\hline XUNVALID\_DUMMY\_OP & 12 & Someone tried to execute an operation on the dummy Scheduling Module.\\ |
-\hline XUNVALID\_SS\_REPLENISH & 13 & Error in the Sporadic Server replenishments. Please look at \texttt{kernel/modules/ss.c}.\\ |
-\hline XARP\_TABLE\_FULL & 14 & Arp table full. See \texttt{drivers/net/arp.c}.\\ |
-\hline XNETBUFF\_INIT\_EXC & 15 & Network buffers error. See \texttt{drivers/net/netbuff.}.\\ |
-\hline XNETBUFF\_GET\_EXC & 16 & Network buffers error. See \texttt{drivers/net/netbuff.}. \\ |
-\hline XNETBUFF\_ALREADYFREE\_EXC & 17 & Network buffers error. See \texttt{drivers/net/netbuff.}. \\ |
-\hline XNETBUFF\_RELEASE\_EXC & 18 & Network buffers error. See \texttt{drivers/net/netbuff.}. \\ |
-\hline XUDP\_BADCHK\_EXC & 19 & UDP CRC check failed. \\ |
-\hline |
-\end{longtable} |
- |
-%---------------------------------------------------------------------------- |
-\section{POSIX error codes} |
-%---------------------------------------------------------------------------- |
- |
-The POSIX error codes have numbers form 1 to 125 and are listed into |
-\texttt{include/errno.h}. |
- |
-%---------------------------------------------------------------------------- |
-\section{S.Ha.R.K. error codes} |
-%---------------------------------------------------------------------------- |
- |
-\begin{longtable}{|c|c|p{8cm}|} |
-\hline Name & N. & Description\\ \hline |
-\hline EWRONG\_INT\_NO & 126 & Wrong int number passed to handler-set or handler\_remove.\\ |
-\hline EUSED\_INT\_NO & 127 & Already used int number.\\ |
-\hline EUNUSED\_INT\_NO & 128 & Int number not used.\\ |
-\hline ETOOMUCH\_INITFUNC & 129 & Too much init functions posted. (Currently not used)\\ |
-\hline ETOOMUCH\_EXITFUNC & 130 & Too much exit functions posted.\\ |
-\hline ENO\_AVAIL\_TASK & 131 & Task limit reached. Up to TSSMax-1 tasks can be created. See include/ll/i386/tss-ctx.h and include/kernel/const.h\\ |
-\hline ENO\_AVAIL\_SCHEDLEVEL & 132 & The Task Model passed with task\_create cannot be accepted by any scheduling module.\\ |
-\hline ETASK\_CREATE & 133 & Error during task\_create.\\ |
-\hline ENO\_AVAIL\_RESLEVEL & 134 & A Resource Model passed with task\_create cannot be accepted by any resource module.\\ |
-\hline ENO\_GUARANTEE & 135 & The new task cannot be accepted by the Scheduling Modules\\ |
-\hline ENO\_AVAIL\_STACK\_MEM & 136 & No space left to allocate the task stack.\\ |
-\hline ENO\_AVAIL\_TSS & 137 & No TSS free. This error should never happen.\\ |
-\hline EUNVALID\_KILL & 138 & The PID you tried to kill is not a task or has the NO\_KILL flag set.\\ |
-\hline EUNVALID\_TASK\_ID & 139 & The PID passed to task\_activate is not correct.\\ |
-\hline EUNVALID\_GROUP & 140 & Group 0 is not a valid group.\\ |
-\hline EPORT\_NO\_MORE\_DESCR & 141 & HARTPORT: No more port descriptors available.\\ |
-\hline EPORT\_NO\_MORE\_INTERF & 142 & HARTPORT: No more free port interfaces.\\ |
-\hline EPORT\_INCOMPAT\_MESSAGE & 143 & HARTPORT: Incompatible message (Write on a read port or viceversa)\\ |
-\hline EPORT\_ALREADY\_OPEN & 144 & HARTPORT: The port is already open.\\ |
-\hline EPORT\_NO\_MORE\_HASHENTRY & 145 & HARTPORT: No more Hash entries to create a port.\\ |
-\hline EPORT\_2\_CONNECT & 146 & HARTPORT: Error creating the port.\\ |
-\hline EPORT\_UNSUPPORTED\_ACC & 147 & HARTPORT: Error in port\_connect.\\ |
-\hline EPORT\_WRONG\_OP & 148 & HARTPORT: Wrong operation.\\ |
-\hline EPORT\_WRONG\_TYPE & 149 & HARTPORT: Operation not supported by the port type.\\ |
-\hline EPORT\_UNVALID\_DESCR & 150 & HARTPORT: Invalid port descriptor.\\ |
-\hline ECAB\_UNVALID\_ID & 151 & CABS: Invalid CAB ID.\\ |
-\hline ECAB\_CLOSED & 152 & CABS: CAB Closed.\\ |
-\hline ECAB\_UNVALID\_MSG\_NUM & 153 & CABS: Invalid Message number.\\ |
-\hline ECAB\_NO\_MORE\_ENTRY & 154 & CABS: No more entries.\\ |
-\hline ECAB\_TOO\_MUCH\_MSG & 155 & CABS: Too much messages.\\ |
-\hline |
-\end{longtable} |
/trunk/vol1/errors.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/util.tex |
=================================================================== |
--- trunk/vol1/util.tex (revision 1677) |
+++ trunk/vol1/util.tex (nonexistent) |
@@ -1,441 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{Utility functions} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. provides a set of utility functions aimed at getting information |
-about the kernel state. Mainly, they allow a user to get the actual |
-system time and some information concerning the tasks' state. Moreover, |
-it allows to set exception handlers and to manage interrupts. |
- |
-%---------------------------------------------------------------------------- |
-\section{Reading time} |
-%---------------------------------------------------------------------------- |
- |
-The S.Ha.R.K. Kernel does not have the concept of tick. Every time |
-interval and every absolute time in the system is measured usin the |
-Real-Time Clock available on the PC. To read the current time you |
-can use the following function: |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SYS\_GETTIME\index{sys\_gettime()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{TIME sys\_gettime(struct timespec *t);}] |
-\item [Description:]It returns the number of microseconds elapsed from |
-system's initialization, that is from the end of the \texttt{\_\_kernel\_register\_levels\_\_} |
-function. If the \texttt{t} value is not equal \texttt{NULL}, the |
-function fills also the timespec structure passed as parameter. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Getting information on tasks} |
-%---------------------------------------------------------------------------- |
- |
-Since all the tasks are handled by a Module, it is a responsibility of each |
-Module to hide or not hide informations about the tasks handled by the system. |
-However, at the moment S.Ha.R.K. provides a function that simply prints the |
-tasks state on the console \footnote{Old versions of the kernel supported a |
-\texttt{void sys\_status(DWORD cw);} \index{sys\_status()}primitive. That |
-primitive is currently unsupported.}. |
- |
-\pagebreak |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-PERROR\index{perror()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void perror (const char *s);}] |
-\item [Description:]This is the POSIX \texttt{perror()} funcion, that prints |
-on the console (using \texttt{kern\_printf}) a message that explain |
-the meaning of the \texttt{errno} \index{errno} variable. Note that |
-each task has its own \texttt{errno} variable, as specified by the |
-\texttt{POSIX} standard. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-exec\_shadow\index{exec\_shadow} |
-\end{intest} |
-\begin{description} |
-\item [\texttt{PID exec\_shadow;}] |
-\item [Description:]This is the internal variable used by the Kernel to |
-track the running task. You can read its value to know the PID of |
-the current task. You CAN NOT modify this variable. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Printing messages on the console} |
-%---------------------------------------------------------------------------- |
- |
-To print a simple message on the console, please use the c* functions |
-(cprintf\index{cprintf}, cputs\index{cputs}, \ldots{}) described |
-in Volume II. If tou are debugging \emph{the kernel}, you can use |
-kern\_printf \index{kern\_printf} to print very simple messages without |
-floating point arithmetic. |
- |
-%---------------------------------------------------------------------------- |
-\chapter{Signals and Exception Handling} |
-%---------------------------------------------------------------------------- |
- |
-%---------------------------------------------------------------------------- |
-\section{Signals} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. implements the specification of the signals and of the real-time |
-signald provided by the standard IEEE 1003.13 POSIX PSE51/PSE52. In |
-particular, you can use all the functions described into the IEEE |
-1003.1\{a,b\} standards, except that: |
- |
-\begin{itemize} |
-\item all the \texttt{pid\_t} parameters and in general all parameters related |
-with processes should be ignored; |
-\item when in POSIX a signal cause the termination of the process, it causes |
-in S.Ha.R.K. the termination of the whole system (you can think S.Ha.R.K. |
-as a single process multithread kernel); |
-\item The \texttt{siginfo\_t} structure contains an additional parameter |
-called \texttt{si\_task} of type \texttt{PID}. It contains the \texttt{PID} |
-of the task that queued a particular real-time signal. |
-\end{itemize} |
- |
-In particular, you can use these functions for signal handling: \texttt{kill}, |
-\texttt{sigemptyset}, \texttt{sigfillset}, \texttt{sigaddset}, |
-\texttt{sigdelset}, \texttt{sigismember}, \texttt{sigaction}, |
-\texttt{pthread\_sigmask} \footnote{If you are not using the POSIX scheduling |
-modules please use \texttt{task\_sigmask}}, \texttt{sigprocmask}, |
-\texttt{sigpending}, \texttt{sigsuspend}, \texttt{sigwait}, |
-\texttt{sigwaitinfo}, \texttt{sigtimedwait}, \texttt{sigqueue}, |
-\texttt{pthread\_kill} \footnote{If you are not using the POSIX scheduling |
-modules please use \texttt{task\_signal} (Note that \texttt{task\_kill} does not |
-send any signal, but issue a cancellation request on a task!)}, \texttt{alarm}, |
-\texttt{pause}, \texttt{sleep} (note the difference between \texttt{sleep}, |
-\texttt{task\_sleep} and \texttt{nanosleep}!), \texttt{raise}, \texttt{signal}. |
- |
-%---------------------------------------------------------------------------- |
-\section{Exception handling\label{ch:except}} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. provides a flexible mechanism to handle the exceptions of the Kernel. |
-The mechanism is based on the POSIX signals. In fact, S.Ha.R.K. exceptions are |
-remapped on the real-time signal \texttt{SIGHEXC} \footnote{see |
-\texttt{include/signal.h}.} (9). Every time something goes wrong, the system |
-calls the primitive \texttt{kern\_raise}, that simply queue a real-time signal |
-of number SIGHEXC. |
- |
-The user can define its own exception handler simply remapping the SIGHEXC |
-signal using the POSIX primitive \texttt{sigaction}. To fullfil the typical |
-usage of an exception handler (exit the system after printing a message), the |
-default behavior of the signal handler has been redefined to print a text |
-message on system shutdown. \footnote{Older versions of the Kernel supported two |
-functions to be used for standard redefinition of the kernel signal handler. |
-These functions, called SET\_EXCHANDLER\_TXT\index{set\_exchandler\_txt()} and |
-SET\_EXCHANDLER\_GRX\index{set\_exchandler\_grx()}, are no more supported, and |
-can be removed from your code without problems.} |
- |
-Here is a sample code that explain how to redefine a signal handler: |
- |
-\begin{verbatim} |
-#include <kernel/kern.h> |
- |
-void thehandler(int signo, siginfo_t *info, void *extra) { |
- |
- /* the signal handler: |
- info.sivalue.sival_int contains the exception number |
- (see include/bits/errno.h) |
- |
- info.si_task is the task that raised the exception |
- extra is not used |
- */ |
- ... |
-} |
- |
-... |
- |
-int myfunc(...) { |
- struct sigaction action; |
- ... |
- |
- action.sa_flags = SA_SIGINFO; |
- action.sa_sigaction = thehandler; |
- action.sa_handler = 0; |
- sigfillset(&action.sa_mask); |
- sigaction(SIGHEXC, &action, NULL); |
- |
- ... |
-} |
-\end{verbatim} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-KERN\_RAISE\index{kern\_raise()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void kern\_raise(int n, PID p);}] |
-\item [Description:]This function uses the POSIX function sigqueue to put |
-a signal SIGHEXC into the signal queue. The parameter n is used as |
-the exception number, and it is passed into the siginfo\_t parameter |
-(into the sivalue.sival\_int field). The signal appears to be queued |
-by the task p (the p value is stored into the si\_task field of the |
-siginfo\_t structure passed as parameter). |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\chapter{Interrupt and HW Ports handling} |
-\label{ch:interr} |
-%---------------------------------------------------------------------------- |
- |
-Generally speaking, I/O to and from an external peripheral device |
-can be handled in three different ways depending on the peripheral |
-type and on the application: |
- |
-\begin{itemize} |
-\item \textbf{Polling}: the program cyclically checks the status of the |
-I/O port, waiting for a input data to be ready or an output data to |
-be transmittable; |
-\item \textbf{Interrupt}: the program enables the I/O interface to send |
-a hardware interrupt every time an input data is available or an output |
-data is transmittable; |
-\item \textbf{DMA}: the program enables the interface to use DMA mechaninsm |
-for directly transferring data to/from memory. |
-\end{itemize} |
-\noindent In this chapter we will analyse the support that the S.Ha.R.K. |
-kernel provides for using the second method (interrupt). |
- |
-When an interrupt arrives, a code for the hand-shake with the interface |
-and for transferring data has to be executed. This code can run in |
-two different modes: |
- |
-\begin{itemize} |
-\item it can be entirely encapsulated in a function to be executed immediately |
-on the interrupt arrival, in the context of the executing task (\textit{fast |
-handler}); |
-\item it can be entirely encapsulated in a task (\textit{safe handler}) |
-which is activated on the interrupt arrival and scheduled with its |
-own priority together with the other tasks. |
-\end{itemize} |
-\noindent The first method is appropriate when the interrupt needs |
-a fast response time. Its potential drawback is that if its computation |
-time is not low, the overall schedulabuility can be severly affected. |
-This is because the guarantee algorithm does not take into account |
-the execution time of the interrupt handlers. The second method, on |
-the contrary, is perfectly integrated with the kernel's scheduling |
-mechanism, but can cause considerable delays in transferring data. |
- |
-S.Ha.R.K. provides great flexibility in interrupt handling, since |
-it allows each interrupt to be associated with a \textit{fast handler}, |
-a \texttt{safe handler}, or both. |
- |
-On an interrupt's arrival the following operations are performed by |
-the kernel: |
- |
-\begin{itemize} |
-\item The system checks whether a fast handler is associated with the interrupt. |
-If so, the interrupts are enabled and the handler is invoked. This |
-method allows a handler to be interrupted by a higher priority handler. |
-As an example, the keyboard handler (interrupt 1) can be interrupted |
-be the timer handler (interrupt 0). |
-\item The system checks whether a sporadic task (\emph{safe handler}) is |
-associated with the interrupt. If so, the task is activated and is |
-eligible to run with enabled interrupts. |
-\end{itemize} |
-\noindent The system provides a set of functions for accessing the |
-hardaware interfaces' ports. In the drivers directory you can find |
-examples of a S.Ha.R.K. device driver. |
- |
-%---------------------------------------------------------------------------- |
-\section{Setting an interrupt handler} |
-%---------------------------------------------------------------------------- |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-HANDLER\_SET\index{handler\_set()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int handler\_set(int no, void (*fast)(int), PID |
-pi, BYTE lock);}] |
-\item [Description:]It installs function \texttt{fast} (fast handler) and |
-the sporadic task \texttt{p} (safe handler) on the interrupt identified |
-by \texttt{no}. The \texttt{no} parameter must belong to the range |
-1\ldots{}15 (interrupt 0 is associated to the timer and cannot be |
-intercepted). On the interrupt's arrival, function \texttt{fast} is |
-invoked and runs. Depending on the \texttt{lock} flag, the interrupts |
-are disabled (\texttt{lock} = TRUE) or enabled (\texttt{lock} = FALSE) |
-during handler execution. Furthermore, on the interrupt's arrival, |
-task \texttt{p} is activated. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-HANDLER\_REMOVE\index{handler\_remove()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void handler\_remove(int no);}] |
-\item [Description:]It removes the handler of the interrupt number \texttt{intno}; |
-the interrupt is masked. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Reading and writing from I/O ports} |
-%---------------------------------------------------------------------------- |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-INP, INPW, INPD \index{inp()} \index{inpw()} \index{inpd()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{unsigned char inp(unsigned short \_port);}] |
-\item [\texttt{unsigned short inpw (unsigned short \_port);}] |
-\item [\texttt{unsigned long inpd(unsigned short \_port);}] |
-\item [Description:]They return the data read on port \texttt{\_port}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-OUTP, OUTPW, OUTPD \index{outp()} \index{outpw()} \index{outpd()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void outp(unsigned short \_port, unsigned char \_data);}] |
-\item [\texttt{void outpw(unsigned short \_port, unsigned short \_data);}] |
-\item [\texttt{void outpd(unsigned short \_port, unsigned long \_data)}] |
-\item [Description:]It writes the data \texttt{\_data} into the port \texttt{\_port}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Disabling/Enabling interrupts} |
-%---------------------------------------------------------------------------- |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-KERN\_CLI\index{kern\_cli()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void kern\_cli(void);}] |
-\item [Description:]It disables interrupts (as the x86 \texttt{cli} instruction). |
-\end{description} |
-%---------------------------------------------------------------------------- |
- |
-\begin{intest} |
-KERN\_STI\index{kern\_sti()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void kern\_sti(void);}] |
-\item [Description:]It enables interrupts (as the x86 \texttt{sti} instruction). |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Saving/Restoring interrupts} |
-%---------------------------------------------------------------------------- |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-KERN\_FSAVE\index{kern\_fsave()}\index{SYS\_FLAGS} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{SYS\_FLAGS kern\_fsave(void);}] |
-\item [Description:]It disables interrupts (as the x86 \texttt{cli} instruction). |
-The CPU flags are returned by the function; in that way they can be |
-restored using kern\_frestore |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-KERN\_FRESTORE\index{kern\_frestore()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void kern\_frestore(SYS\_FLAGS f);}] |
-\item [Description:]It restores the interrupt state as it was when the |
-correspondent \texttt{kern\_fsave} was called. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Masking/Unmasking PIC interrupts} |
-%---------------------------------------------------------------------------- |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-IRQ\_MASK\index{irq\_mask()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void irq\_mask(WORD irqno);}] |
-\item [Description:]It mask the interrupt number \texttt{irqno} on the |
-PC PIC. \texttt{irqno} must be in the interval {[}1..15{]}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-IRQ\_UNMASK\index{irq\_unmask()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void irq\_unmask(WORD irqno);}] |
-\item [Description:]It unmask the interrupt number \texttt{irqno} on the |
-PC PIC. \texttt{irqno} must be in the interval {[}1..15{]}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\chapter{Memory Management Functions} |
-%---------------------------------------------------------------------------- |
- |
-The S.Ha.R.K. Kernel provides the standard set of memory allocations |
-functions provided by the Standard C libraries. In particular, the |
-functions listed in figure \ref{fig:malloc} can be used. |
- |
-\begin{figure} |
-\begin{center} \fbox{\tt{ \begin{minipage}{6cm} \begin{tabbing} |
-123\=123\=123\=\kill |
-\#include <stdlib.h>\\ |
-void *calloc(size\_t nmemb, size\_t size);\\ |
-void *malloc(size\_t size);\\ |
-void free(void *ptr);\\ |
-void *realloc(void *ptr, size\_t size);\\ |
-\end{tabbing} \end{minipage} }} \end{center} |
-\caption{\label{fig:malloc}Memory allocation functions.} |
-\end{figure} |
-In particular \footnote{These descriptions came directly from the Linux man pages...}: |
- |
-\begin{itemize} |
-\item calloc() allocates memory for an array of nmemb elements of size bytes |
-each and returns a pointer to the allocated memory. The memory is |
-set to zero. The value returned is a pointer to the allocated memory, |
-which is suitably aligned for any kind of variable, or NULL if the |
-request fails. |
-\item malloc() allocates size bytes and returns a pointer to the allocated |
-memory. The memory is not cleared. The value returned is a pointer |
-to the allocated memory, which is suitably aligned for any kind of |
-variable, or NULL if the request fails. |
-\item free() frees the memory space pointed to by ptr, which must have been |
-returned by a previous call to malloc(), calloc() or realloc(). Otherwise, |
-or if free(ptr) has already been called before, undefined behaviour |
-occurs. If ptr is NULL, no operation is performed. |
-\item realloc() changes the size of the memory block pointed to by ptr to |
-size bytes. The contents will be unchanged to the minimum of the old |
-and new sizes; newly allocated memory will be uninitialized. If ptr |
-is NULL, the call is equivalent to malloc(size); if size is equal |
-to zero, the call is equivalent to free(ptr). Unless ptr is NULL, |
-it must have been returned by an earlier call to malloc(), calloc() |
-or realloc(). It returns a pointer to the newly allocated memory, |
-which is suitably aligned for any kind of variable and may be different |
-from ptr, or NULL if the request fails or if size was equal to 0. |
-If realloc() fails the original block is left untouched - it is not |
-freed or moved. |
-\end{itemize} |
- |
-The S.Ha.R.K. Kernel also provides a set of low-level memory management |
-functions that can be used to allocate memory with particular requirements |
-(for example, they are useful for getting memory blocks aligned to |
-a page (4 Kb) boundary or with addresses under 1/16 Mb). Description |
-of these functions is given in Chapter 3 of the S.Ha.R.K. Architecture |
-Manual. |
/trunk/vol1/util.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/sys.tex |
=================================================================== |
--- trunk/vol1/sys.tex (revision 1677) |
+++ trunk/vol1/sys.tex (nonexistent) |
@@ -1,1192 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{System Start-up and Termination} |
-%---------------------------------------------------------------------------- |
- |
-Each S.Ha.R.K. application starts as a sequential C program, with |
-the classical main funcion. The multitasking environment \index{system initialization} |
-is already initialized when the application starts. From the main |
-task you can call any system primitive. |
- |
-The system finishes when a sys\_end or sys\_abort function is called, |
-or when the last user task is terminated. For more information, see |
-\emph{The Generic Kernel Internals} chapter of the S.Ha.R.K. Kernel |
-Architecture Manual. |
- |
-The \texttt{sys\_atrunlevel()} primitive\index{sys\_atexit()} allows |
-to post some handlers, which are automatically executed by the kernel |
-when it changes runlevel. Such functions can be issued either in the |
-target execution environment (generally MS-DOS) or just before terminating |
-the S.Ha.R.K. kernel, depending on the third argument of the primitive. |
-The handlers posted through \texttt{sys\_atrunlevel()} may also be |
-called on a kernel abort due to fatal errors. |
- |
-%---------------------------------------------------------------------------- |
-\section{Initialization File\label{sec:InitFile}} |
-%---------------------------------------------------------------------------- |
- |
-When the system starts, one of the things to be done before going |
-in multitasking mode is to initialize the devices, the resources and |
-the schedulers which will be used by the application. To do that, |
-the Kernel calls the \_\_kernel\_register\_levels\_\_ function, that |
-usually registers the following modules (see the S.Ha.R.K. Kernel |
-architecture Manual for more details): |
- |
-\begin{description} |
-\item [Scheduling~Modules]A scheduling module implements a particular |
-Scheduling Algorithm (for example EDF, RM, Round Robin, and so on). |
-\item [Resource~Modules]A resource module implements a shared resource |
-access protocol (for example the semaphores, the mutexes, and so on). |
-\item [Other~devices]Such for example the File System, and other devices |
-that need to be initialized when the Multitasking Mode is not started |
-yet. |
-\end{description} |
- |
-The function returns a TICK value (in microseconds) that is the time |
-that will be used for programming the periodic timer interrupt of |
-the PC. If a value of 0 is returned, the one-shot timer is used instead |
-(see the OSLib documentation for more informations). Typical return |
-values range from 250 to 2000 microseconds. |
- |
-Here is a typical initialization function: |
- |
-\begin{verbatim} |
-TIME __kernel_register_levels__(void *arg) { |
- struct multiboot_info *mb = (struct multiboot_info *)arg; |
- LEVEL EDF_level; |
- |
- EDF_level = EDF_register_level(EDF_ENABLE_ALL); |
- RR_register_level(RRTICK, RR_MAIN_YES, mb); |
- CBS_register_level(CBS_ENABLE_ALL, EDF_level); |
- dummy_register_level(); |
- |
- SEM_register_module(); |
- CABS_register_module(); |
- |
- return 1000; |
-} |
-\end{verbatim} |
- |
-As you can see, the system initialization function registers an EDF, |
-a Round Robin and a CBS module. Then, It register a dummy Module (that |
-usually is the last of the Scheduling Modules). For more informations |
-about the Scheduling policies, see Section \ref{sec:sched}. Finally, |
-Semaphores and CABS are registered, and a value of 1 ms Tick time |
-is returned to initialize the PC's real-time clock. |
- |
-For a survey of the architecture of the Scheduling Modules and the |
-Resource Modules see theKernel Overview Chapter of the S.Ha.R.K. Kernel |
-Architecture Manual. A set of Initialization functions can be found |
-on the kernel/init directory of the S.Ha.R.K. source tree. An explanation |
-of each registration function for each Module can be found in the |
-S.Ha.R.K. Module Repository Manual. |
- |
-After the registration of the modules in the system, the Kernel switch |
-in Multitasking mode, and starts the execution of the handlers that |
-the modules have posted with the \texttt{sys\_atrunlevel} primitive. |
-Usually at least one Module will create and activate a task (for example, |
-the Round Robin Scheduling Module does that) that will start when |
-all the handlers will be processed. The body of that task is usually |
-called \_\_init\_\_() and provides an initialization for the most |
-commonly used devices (such the keyboard, and so on) and modules. |
-As the last thing, the function simply call the main() function, that |
-is, the user application starts. A sample of a typical \_\_init\_\_() |
-function is showed below: |
- |
-\begin{verbatim} |
-TASK __init__(void *arg) { |
- struct multiboot_info *mb = (struct multiboot_info *)arg; |
- |
- HARTPORT_init(); |
- __call_main__(mb); |
- return (void *)0; |
-} |
-\end{verbatim} |
- |
-The source code of the \_\_init\_\_() function is usually inserted |
-in the initialization file after the \_\_kernel\_register\_levels\_\_ |
-function. For more information on \_\_call\_main\_\_ see the \texttt{include/kernel/func.h} |
-include file. |
- |
-Using the new driver layer the \_\_init()\_\_ function slightly change. |
-First is executed the HARTPORT\_init function that initialize the |
-Hartik Port layer (if required), then a task that close all drivers |
-is created. The next step is the initialization of all used drivers, |
-followed by the registration of the shutdown task that will be executed |
-during the system shutdown procedure. At the end the function 'main' |
-is executed. A tipical example with the new \_\_init()\_\_ function |
-is: |
- |
-\begin{verbatim} |
-TASK __init__(void *arg) { |
- struct multiboot_info *mb = (struct multiboot_info *)arg; |
- |
- HARTPORT_init(); |
- |
- /* Create the shutdown task. */ |
- /* It will be activated at RUNLEVEL SHUTDOWN */ |
- set_shutdown_task(); |
- |
- /* Init the drivers */ |
- device_drivers_init(); |
- |
- /* Set the shutdown task activation */ |
- sys_atrunlevel(call_shutdown_task, NULL, RUNLEVEL_SHUTDOWN); |
- __call_main__(mb); |
- |
- return (void *)0; |
-} |
- \end{verbatim} |
- |
-ATTENTION! In some initialization files the function that activate |
-the shutdown task is in the form: |
- |
-\begin{verbatim} |
-#define SHUTDOWN_TIMEOUT_SEC 3 |
- |
-void call_shutdown_task(void *arg) { |
- struct timespec t; |
- |
- sys_gettime(&t); |
- t.tv_sec += SHUTDOWN_TIMEOUT_SEC; |
- |
- /* Emergency timeout to exit from RUNLEVEL_SHUTDOWN |
- kern_event_post(&t,(void *)((void *)sys_abort_shutdown), (void *)0); |
- |
- task_activate(shutdown_task_PID); |
-} |
-\end{verbatim} |
- |
-This implementation say that the task has 3 seconds to perform drivers |
-stop. After that interval the system is forced to close even is some |
-drivers are not closed. If a longer time is needed a greater value |
-for \texttt{SHUTDOWN\_TIMEOUT\_SEC} constant must be used. If a shutdown |
-without the timer is preferred the function could be in the simpler |
-form: |
- |
-\begin{verbatim} |
-void call_shutdown_task(void *arg) { |
- task_activate(shutdown_task_PID); |
-} |
-\end{verbatim} |
- |
-%---------------------------------------------------------------------------- |
-\subsection{Information about the dependencies among modules} |
-%---------------------------------------------------------------------------- |
- |
-Some modules, drivers and ports need to use the semaphores managed |
-by specific resource sharing modules. In that case, the modules, drivers |
-and ports expect the semaphores to be initialized by the application |
-into the initialization file. Here there is a brief list of the modules |
-which require other module initialization \footnote{All those dependancies wish to be removed.}. |
- |
-The HARTIK ports (module HARTPORT) use the semaphores, so you must |
-include and initialize the semaphores if your application or a module |
-used by your application uses the HARTIK ports. |
- |
-The HARTIK ports are used by the following modules: |
- |
-\begin{itemize} |
-\item ports/first |
-\item drivers/net |
-\item drivers/input |
-\item drivers/oldchar |
-\end{itemize} |
-The semaphores are also used by: |
- |
-\begin{itemize} |
-\item ports/tftp |
-\item drivers/oldsnd. |
-\end{itemize} |
- |
-%---------------------------------------------------------------------------- |
-\section{System primitives} |
-%---------------------------------------------------------------------------- |
- |
-Here is a list of primitives whose use is related to the system initialization. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SYS\_ATRUNLEVEL\index{SYS\_ATRUNLEVEL} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int}]\texttt{sys\_atrunlevel(void (*func\_code)(void *),void |
-*parm, BYTE when);} |
-\item [Description:]The Generic Kernel supports the specification of the |
-functions to be called at system initialization and termination. These |
-functions can be registered through this system primitive; the parameters |
-for that function are: |
-\item [\texttt{f}]the function to be registered; |
-\item [\texttt{p}]the parameter to be passed to function \texttt{f} when |
-the function will be called; |
-\item [\texttt{when}]is the situation in witch that function will be called. |
-The correct values are the following: |
- |
-\begin{description} |
-\item [\texttt{RUNLEVEL\_INIT}]Used when programming Modules; |
-\item [\texttt{RUNLEVEL\_SHUTDOWN}]The function will be called after a |
-call to \texttt{sys\_abort} or \texttt{sys\_end}; The system is still |
-in multitasking mode; |
-\item [\texttt{RUNLEVEL\_BEFORE\_EXIT}]The function will be called when |
-the Kernel exits from multitasking mode; |
-\item [\texttt{RUNLEVEL\_AFTER\_EXIT}]The function is called before the |
-system hangs (or returns to the host OS, if the proprietary extender |
-is used). |
- |
-\end{description} |
- |
-It is also possible to specify with an OR operator a flag \texttt{NO\_AT\_ABORT} |
-that disables the call to the functions if the system is exiting with |
-a \texttt{sys\_abort} function. |
- |
-\end{description} |
- |
-You can post at most \texttt{MAX\_RUNLEVEL\_FUNC} functions. See the |
-S.Ha.R.K. Kernel Architecture Manual for more details. |
- |
-\begin{description} |
-\item [See]\textbf{also}: \texttt{sys\_init()}, \texttt{sys\_end()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-EXIT\index{exit} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void exit(int status);}] |
-\item [Description:]This function call terminates the Kernel. In this phase, |
-the Kernel tries to correctly close all the initialized modules and |
-drivers. The functions eventually posted with the \texttt{sys\_at\_runlevel} |
-call are also executed. |
- |
-If called inside an event or inside an ISR, it does return to the |
-caller. The system shutdown will start when all the current interrupts |
-have been serviced, and the system has been rescheduled. Otherwise, |
-this function follows the POSIX specification. |
-\item [See]\textbf{also}: \texttt{\_exit()}, \texttt{sys\_panic()}, \texttt{sys\_atrunlevel()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-\_EXIT\index{\_exit} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void \_exit(int status);}] |
-\item [Description:]Same as \texttt{exit()}. functions posted through \texttt{sys\_at\_runlevel} |
-with \texttt{NO\_AT\_ABORT} set or functions posted with \texttt{atexit()} |
-are not executed. |
-\item [See]\textbf{also}: \texttt{exit()}, \texttt{atexit()}, \texttt{sys\_panic()}, |
-\texttt{sys\_atrunlevel()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SYS\_PANIC\index{sys\_end} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void sys\_panic(const char * fmt, ...);}] |
-\item [Description:]This function call print a message then call sys\_abort(333). |
-\item [See]\textbf{also}: \texttt{sys\_abort()}, \texttt{sys\_end()}, \texttt{sys\_atrunlevel()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SYS\_SHUTDOWN\_MESSAGE\index{sys\_\_shutdown\_message} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int sys\_shutdown\_message(char *fmt,...);}] |
-\item [Description:]This function call saves a message in a reserved area, |
-that will be printed at system shutdown. It does not end the system. |
-\item [See]\textbf{also}: \texttt{sys\_panic()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SYS\_ABORT\_SHUTDOWN\index{sys\_abort\_shutdown} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int sys\_abort\_shutdown(int err);}] |
-\item [Description:]This function will force the system to end the \texttt{SHUTDOWN} |
-runlevel if there are system tasks which cannot be stopped. If called |
-when the system is still in the \texttt{RUNLEVEL\_RUNNING} runlevel, |
-the function behaves like \texttt{exit()}. If called inside an OSLib |
-event or inside an IRQ,it does return to the caller. The system shutdown |
-will start when all the current interrupts have been serviced, and |
-the system has been rescheduled. Otherwise, this function does not |
-return. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-SYS\_SET\_REBOOT\index{sys\_set\_reboot} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int sys\_set\_reboot(int mode);}] |
-\item [Description:]This function sets the reboot \texttt{mode}, which |
-specifies what will happen after the system end. \texttt{mode} options |
-are: |
-\item [EXIT\_MODE\_HALT:]the system will call the halt (\texttt{HLT}) instruction. |
-\item [EXIT\_MODE\_COLD:]the system will perform the cold reboot (slow |
-reboot). |
-\item [EXIT\_MODE\_WARM:]the system will perform the warm reboot (fast |
-reboot). |
-\item [EXIT\_MODE\_REAL:]the system will return to the real mode (\textbf{default |
-selection}). |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\chapter{Task Management} |
-%---------------------------------------------------------------------------- |
- |
-%---------------------------------------------------------------------------- |
-\section{Task Model} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. tasks are defined using standard C functions which return |
-a \texttt{void *} type \footnote{for readability, that type has been called TASK.} and can have one void * argument, which is passed when the task |
-is created. A task is identified by a system-wide unique process identifier |
-(\texttt{PID}) and a consecutive number \footnote{a task with PID p has a consecutive number that is proc\_table{[}p{]}.task\_ID.}. |
- |
-A task has tipically a set of Quality of Service requirements that |
-need to be fullfilled by the Kernel. The kernel uses its registered |
-Scheduling Modules to meet the QoS required by a specified task. The |
-QoS reuired is specified at creation time through a Task Model, that |
-is passed to the task creation primitives. |
- |
-A Task, can be \textit{Periodic} or \textit{Aperiodic}. Periodic tasks |
-are automatically activated by the kernel with a desired period, whereas |
-aperiodic tasks can either be activated by an explicit system call |
-or upon the occurrence of a desired event. |
- |
-The typical task code consists of an optional initialization of local |
-variables and resources, followed by a (finite or infinite) loop, |
-representing the task's body. The last instruction of such a loop |
-must be the primitive \texttt{task\_endcycle()}\index{task\_endcycle()} |
-or the primitive \texttt{task\_sleep()} \index{task\_sleep()} which |
-signals the end of a generic job. |
- |
-The task can access a local and a global context by following the |
-C scoping rules; the local context is defined by the local variables |
-and the single optional input argument. The following example shows |
-a typical task code fragment: |
- |
-\begin{verbatim} |
-void *my_task(void *par) { |
- |
- /* Local Context*/ |
- int a, b, c; |
- |
- /* Initialization */ |
- b = c = (int)par + 1; |
- a = (int)par / 2; |
- ... |
- |
- while (1) { |
- |
- /* Body here!*/ |
- ... |
- |
- task_endcycle(); |
- } |
-} |
-\end{verbatim} |
- |
-\noindent \texttt{my\_task()} has just one integer input argument |
-(passed through the void * parameter) and three local variables\index{local task context}. |
-The life-cycle of the local variables is the same as the task one, |
-since they are allocated on the task's stack. Obviously they retain |
-their values between two consecutive jobs. |
- |
-\noindent One of the most important parameters for a real-time task |
-$\tau_{i}$ is the \emph{deadline}, defined as the maximum time allowed |
-for a task job to terminate. More precisely, we distinguish between |
-the \emph{absolute deadline} (denoted by $d_{i}$) specified with |
-respect to time 0, and the \emph{Relative Deadline} (denoted by $D_{i}$) |
-specified with respect to the activation time $r_{i,k}$ of the $k$-th |
-job of task $\tau_{i}$. We have that: |
-\[ |
-d_{i}=r_{i,k}+D_{i}. |
-\] |
- |
-\noindent Tasks can also have different level of criticality, for |
-example: |
- |
-\begin{itemize} |
-\item \texttt{HARD}\index{HARD} tasks are the most critical in the system. |
-For this reason, they are subjected to a guarantee algorithm at creation |
-time. The system enforces a strict compliance to the deadline constraint |
-for this kind of tasks% |
-\footnote{The guarantee algorithm tries to verify that both the newly activated |
-hard task and the previously existing ones will finish within their |
-deadlines% |
-}. If a hard deadline is missed, the system raises an exception which, |
-by default, results in the program termination. Recovery actions can |
-be programmed for this kind of exception (as shown below). |
-\item \texttt{SOFT}\index{SOFT} tasks can miss some deadline, and are scheduled |
-in order not to jeopardize HARD tasks' schedulability. This is done |
-through a service mechanism (see \ref{sec:sched}) which guarantees |
-each soft task a predefined bandwidth (i.e., a fraction of processor |
-utilization) while preserving the guarantee performed on hard tasks. |
-\item \texttt{NRT}\index{NRT} (Non Real-Time) tasks are scheduled in background |
-according to their relative fixed priority. Typically, they are used |
-for monitoring or debugging purposes. |
-\end{itemize} |
-The Task criticality, periodicity and the deadlines are coded into |
-the Task Model that is passed to the creation primitive. Each new |
-Scheduling Module can use its own Task Model to include the specific |
-task QoS requirements. |
- |
-Each task can be in one of a set of states; the states that a task |
-can be in depend on each particular Module. For example, typical Task |
-states can be: |
- |
-\begin{itemize} |
-\item \texttt{\textbf{EXE}}\index{EXE}: at any time, in the system there |
-is only one task in the EXE state, and it is the task actually executing. |
-\item \texttt{\textbf{READY}}\index{READY}: it includes all active tasks |
-ready to execute, except for the currently running task. |
-\item \texttt{\textbf{SLEEP}}\index{SLEEP}: it includes all aperiodic tasks |
-which terminated a job and are waiting for the next activation. Moreover, |
-each created task (periodic or aperiodic) that has not been activated |
-is put in the SLEEP state. |
-\item \texttt{\textbf{IDLE}}\index{IDLE}: is the state of those periodic |
-tasks which terminated a job and are waiting for the next activation. |
-\item \texttt{\textbf{BLOCKED}}\index{BLOCKED}: it includes all the tasks |
-blocked on a semaphore. |
-\end{itemize} |
- |
-%---------------------------------------------------------------------------- |
-\section{The scheduling policy% |
-\footnote{This section is derived from the Kernel overview chapter of the S.Ha.R.K. |
-Architecture Manual.% |
-}\label{sec:sched} } |
-%---------------------------------------------------------------------------- |
- |
-The S.Ha.R.K. scheduling architecture is based on a \emph{Generic |
-Kernel}, which does not implement any particular scheduling algorithm, |
-but postpones scheduling decisions to external entities, the \emph{scheduling |
-modules}. External modules can implement periodic scheduling algorithms, |
-soft task management through real-time servers, semaphore protocols, |
-and resource management policies. |
- |
-The Generic Kernel provides the mechanisms used by the modules to |
-perform scheduling and resource management thus allowing the system |
-to abstract from the specific algorithms that can be implemented. |
-The Generic Kernel simply provides the primitives without specifying |
-any algorithm, whose implementation resides in external modules, configured |
-at run-time with the Initialization function. |
- |
-Scheduling Modules are used by the Generic Kernel to schedule tasks, |
-or serve aperiodic requests using an aperiodic server. The Scheduling |
-Modules are organized into levels, one Module for each level. These |
-levels can be thought as priority scheduling levels (their priority |
-correspond to the order which they appear in the Initialization function). |
-When the Generic Kernel has to perform a scheduling decision, it asks |
-the modules for the task to schedule, according to fixed priorities: |
-first, it invokes a scheduling decision to the highest priority module, |
-then (if the module does not manage any task ready to run), it asks |
-the next high priority module, and so on. The Generic Kernel schedules |
-the first task of the highest priority non empty module's queue. |
- |
-In this way, the Scheduling policy can be tuned simply modifying the |
-Initialization function. The standard distribution of the S.Ha.R.K. |
-Kernel includes a set of predefined Initialization functions that |
-can be used when developing a new application. For more informations |
-see the S.Ha.R.K. Module Manual, where each Scheduling Modules and |
-each predefined initialization functioon are described in detail. |
- |
-%---------------------------------------------------------------------------- |
-\section{Task Creation\index{task creation}} |
-%---------------------------------------------------------------------------- |
- |
-In order to run a S.Ha.R.K. task, three steps have to be performed: |
-parameters definition, creation, and activation. To improve the system |
-flexibility, each task can be characterized by a large number of parameters, |
-most of which are optional. For this reason, a set of structures derived |
-from \texttt{TASK\_MODEL}\index{MODEL} structure have been introduced |
-to simplify the parameters' definition phase. The first thing to do |
-in order to define a task is to declare a Model variable and initialize |
-it using the pmacro provided (see the S.Ha.R.K. Module Manual for |
-more informations). |
- |
-\noindent Once the task's parameters have been set, the task can be |
-created using the \texttt{task\_create} or the \texttt{task\_createn} |
-system call. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_CREATEN\index{task\_createn()} and TASK\_CREATE\index{task\_create()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{PID task\_createn(char *name, TASK (*body)(), |
-TASK\_MODEL *m, ...);}] |
-\item [\texttt{PID task\_create(char *name, TASK (*body)(), |
-TASK\_MODEL *m, RES\_MODEL *r);}] |
-\item [Description:]\texttt{task\_createn} creates a new task. \texttt{name} |
-is a pointer to a string representing the task name; \texttt{body()} |
-is a pointer to the task body (i.e. the name of the C function containing |
-the task code); \texttt{m} specifies the Model that contain the QoS |
-specification of the task (the value can not be equal to NULL). Then, |
-follow a list of Resource Models terminated with NULL (see the S.Ha.R.K. |
-Module Manual for the available Task Models and Resource Models). |
-\texttt{task\_create} is a redefinition of \texttt{task\_createn} |
-that can be used when there is at least one Resource Model to be passed |
-to the creation primitive. |
-\item [Return]\textbf{value}: The function returns the identifier of the |
-newly created task, or -1 if the task creation fails (in this case |
-the \texttt{errno()} system call can be used to determine the error's |
-cause). |
-\item [See]\textbf{also}: \texttt{task\_activate()}, \texttt{task\_kill()}. |
-\item [Example]~ |
-\end{description} |
- |
-\begin{verbatim} |
-int main(int argc, char **argv) { |
- HARD_TASK_MODEL m; |
- hard_task_default_model(m); |
- hard_task_def_wcet(m,ASTER_WCET); |
- hard_task_def_mit(m,10000); |
- hard_task_def_group(m,1); |
- hard_task_def_ctrl_jet(m); |
- |
- p1 = task_create("Aster", aster, &m, NULL); |
- if (p1 == -1) { |
- perror("Error: Could not create task <aster> ..."); |
- exit(1); |
- } |
-} |
-\end{verbatim} |
- |
- |
-%---------------------------------------------------------------------------- |
-\section{Group Creation} |
-%---------------------------------------------------------------------------- |
- |
-Group creation is a feature provided by S.Ha.R.K. that allows a user |
-to create a set of tasks. The group creation differs from the creation |
-made by the task\_create and task\_createn primitives because in group |
-creation the acceptance test is done for the whole set of task (and |
-not for every task in sequence) only when every task which belong |
-to the set has been initialized in the system. After the acceptance |
-test, the user have to inquire the Scheduling Module to see the tasks |
-that have been accepted and successfully created in the system. |
- |
-The primitives provided by S.Ha.R.K. to support group creation are: |
- |
-\begin{itemize} |
-\item group\_create |
-\item group\_create\_accept |
-\item group\_create\_reject |
-\end{itemize} |
-The documentation about group creation can be found in the \emph{Group |
-creation HOWTO} available on the S.Ha.R.K. website. |
- |
-%---------------------------------------------------------------------------- |
-\section{Task Activation and Termination} |
-%---------------------------------------------------------------------------- |
- |
-When a task is created, it is put in the \texttt{SLEEP} state, where |
-it is kept until activation, which can be triggered by an external |
-interrupt or by an explicit \texttt{task\_activate()} primitive). |
-Periodic jobs that complete execution are handled by the registered |
-Scheduling Modules (usually they are put in an \texttt{IDLE} state |
-or similar), from which they will be automatically re-activated by |
-the system timer. Aperiodic jobs that complete execution return to |
-the \texttt{SLEEP} state, where they wait for an explicit re-activation. |
- |
-Some scheduling models (such as the EDF and RM modules) support release |
-offsets. In an offset is given in the task model, the \texttt{task\_activate()} |
-will put the task in the \texttt{IDLE} state, waiting for the first |
-release to occur. |
- |
-A task can be destroyed using the \texttt{task\_kill()} system call, |
-that frees its descriptor. A task can kill itself using the \texttt{task\_abort()} |
-system call. |
- |
-In S.Ha.R.K., tasks can be members of groups to allow simultaneous |
-activation or termination. A task can be put in a group through a |
-macro that works on the task model passed at task creation. The name |
-of the macro depends on the name of the Task Model used; usually its |
-name is like \texttt{XXX\_task\_def\_group(group\_number)}, where |
-XXX is the name of the task Model; the group\_number 0 indicates that |
-a task belongs to no groups. |
- |
-Task cancellation, join, the cleanup handlers and the task specific |
-data works as the POSIX standard; only the name of the primitives |
-are changed from \texttt{pthread\_XXX} to \texttt{task\_XXX}. In any |
-case, the \texttt{pthread\_XXX} versions are available for POSIX compatibility. |
- |
-\textbf{Warning}: \texttt{task\_kill()} kills a task only if the cancellation |
-type of the task is set to asynchronous. If the cancellation type |
-is set to deferred, the task will terminate only when it reach a cancellation |
-point. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_ACTIVATE\index{task\_activate()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_activate(PID p);}] |
-\item [Description:]It activates task \texttt{p}. Usually the activation |
-will insert the task into the ready queue. (If the task has an offset, |
-the task will be put in the ready queue after the offset.) Returns |
-0 in case of success or -1 in case of error; the \texttt{errno} variable |
-is set to \texttt{EUNVALID\_TASK\_ID}. |
-\item [See]\textbf{also}: \texttt{task\_create(), task\_kill(), group\_activate()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_KILL\index{task\_kill()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_kill(PID p);}] |
-\item [Description:]It asks for a cancellation of the task p. It returns |
--1 in case of error, 0 otherwise. If an error occurred, the errno |
-variable is set to \texttt{EINVALID\_KILL}. A task which has the NO\_KILL |
-flag set can not be killed. If the task has already been killed but |
-it is not died yet, the primitive does nothing. A task that has the |
-cancellation type set to asynchronous will die just when it will be |
-scheduled again by the system; instead, if the cancellation type is |
-set to deferred, the task will die only at the reaching of a cancellation |
-point. This function is the correspondent of the \texttt{pthread\_cancel()} |
-primitive. |
-\item [See]\textbf{also}: \texttt{task\_create(), task\_activate(), group\_kill()}. |
-\end{description} |
-\pagebreak |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_ABORT\index{task\_abort()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void task\_abort(void *returnvalue);}] |
-\item [Description:]It aborts the calling task, removing it from the system. |
-If the task is joinable, the return value will be stored by the kernel |
-and given to any task that calls a task\_join primitive on the died |
-task. |
-\item [See]\textbf{also}: \texttt{task\_create(), task\_activate(), task\_kill()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_BLOCK\_ACTIVATION\index{task\_block\_activation()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_block\_activation(PID p);}] |
-\item [Description:]It blocks all explicit activation of a task made with |
-\texttt{task\_activate} and \texttt{group\_activate}. The activations |
-made after this call are buffered (counted) in an internal counter. |
-It returns 0 in case of success or -1 in case of error. In the latter |
-case, \texttt{errno} is set to \texttt{EUNVALID\_TASK\_ID}. If the |
-activations were already blocked, it does nothing. |
-\item [See]\textbf{also}: \texttt{task\_unblock\_activation(), task\_activate()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_UNBLOCK\_ACTIVATION\index{task\_unblock\_activation()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_unblock\_activation(PID p);}] |
-\item [Description:]It unblocks the activations of a task after a call |
-to task\_block\_activation. After this call, the task can be explicitly |
-activated. It returns the number of buffered activations, or -1 if |
-an error occurred. If an error occurred, the errno variable is set |
-to EUNVALID\_TASK\_ID. If the activations were not blocked, it simply |
-returns 0. Note that the primitive simply returns the number of buffered |
-activations, \emph{without} activating the task. |
-\item [See]\textbf{also}: \texttt{task\_block\_activation(), task\_activate()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-GROUP\_ACTIVATE\index{group\_activate()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int group\_activate(WORD g);}] |
-\item [Description:]It activates all tasks belonging to group \texttt{g}. |
-Returns 0 in case of success or -1 in case of error; the \texttt{errno} |
-variable is set to \texttt{EUNVALID\_GROUP}. |
-\item [See]\textbf{also}: \texttt{task\_create(), task\_activate(), group\_kill()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-GROUP\_KILL\index{group\_kill()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void group\_kill(WORD g);}] |
-\item [Descrizione:]It kills all tasks belonging to group \texttt{g}. It |
-returns -1 in case of error, 0 otherwise. If an error occurred, the |
-errno variable is set to \texttt{EUNVALID\_GROUP}. The kill request |
-to a single task that belong to a group is done in a way similar to |
-that done in the primitive \texttt{task\_kill()}. |
-\item [See]\textbf{also}: \texttt{task\_create(), task\_activate(), group\_activate()}, |
-\texttt{task\_kill()}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Task Instances} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. supports the concept of instance for its task. A typical |
-task function is composed by an initialization part and a body part |
-that does the work for that the task was created; for example: |
- |
-\begin{verbatim} |
-void *mytask(void *arg) { |
- /* initialization part */ |
- |
- for (;;) { |
- /* body */ |
- ... |
- |
- task_endcycle(); |
- } |
-} |
-\end{verbatim} |
- |
-In the example, the task will never terminate, and it also calls the |
-\texttt{task\_endcycle} primitive to say to the Kernel that the current instance |
-is terminated \footnote{The concept of instance is introduced into S.Ha.R.K. |
-because in that way the Kernel can directly support task Quality Of Service |
-parameters like deadlines, periods and so on in a native way. Note that the |
-concept of instance is not covered by the POSIX standard, that only support a |
-fixed priority scheduler. In POSIX, a periodic task can only be implemented |
-using the Real-Time extensions and in particular using the Timer feature. |
-S.Ha.R.K. implements also that approach, however the native primitives are |
-better in terms of efficiency.}. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_ENDCYCLE\index{task\_endcycle()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void task\_endcycle(void);}] |
-\item [Description:]It terminates the currently executing job of the calling |
-task. The behaviour of this primitive may sligtly change depending |
-on the Scheduling Module registered at initialization time. Tipically, |
-the \texttt{task\_endcycle} primitive suspends the task until an automatic |
-reactivation that is made internally by the Kernel. Moreover, the |
-\texttt{task\_endcycle()} primitive usually keeps track of pending |
-activations \footnote{There is a pending activation when a task is activated before the |
-current instance has finished. In this case, if the \texttt{task\_endcycle()} |
-primitive is called and there is a pending activation, it simply does |
-nothing.}. Previous versions of the kernel supported a \texttt{task\_sleep()}\index{task\_sleep()} |
-primitive with similar behavior. That function is currently unsupported. |
-The primitive is a cancellation point. |
-\item [Implementation:]This primitive is implemented as task\_message(NULL, 1); |
-\footnote{Note on the implementation: this primitive is implemented as |
-\texttt{task\_message(NULL, 1);}} |
-\item [See]\textbf{also:} \texttt{task\_activate}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Task (thread) specific data} |
-%---------------------------------------------------------------------------- |
- |
-These functions works in a way equal to their POSIX counterparts. |
-These primitives are used for managing task specific data, that are |
-a few data variables that can be referred in a common way independently |
-from the task that asks for it. The system also ensures a proper cleanup |
-when the task is killed. As an example, the \texttt{errno} variable |
-can be thought as a task specific data. In this manual only their |
-interfaces are described; for more informations, see the POSIX standard. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_KEY\_CREATE\index{task\_key\_create()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_key\_create(task\_key\_t *key, void |
-(*destructor)(void *));}] |
-\item [Description:]It creates a task key that can be used to refer a task\_specific |
-data. The name of the POSIX counterpart is \texttt{pthread\_key\_create}. |
-\end{description} |
-\pagebreak |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_GETSPECIFIC\index{task\_getspecific()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void *task\_getspecific(task\_key\_t key);}] |
-\item [Description:]It gets the current value for the key (note that the |
-value of the key vary from task to task). The name of the POSIX counterpart |
-is \texttt{pthread\_getspecific}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_SETSPECIFIC\index{task\_setspecific()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_setspecific(task\_key\_t key, const void |
-*value); }] |
-\item [Description:]It sets the current value for the key. The name of |
-the POSIX counterpart is \texttt{pthread\_setspecific}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_KEY\_DELETE\index{task\_key\_delete()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_key\_delete(task\_key\_t key);}] |
-\item [Description:]It deletes the current key. The name of the POSIX counterpart |
-is \texttt{pthread\_key\_delete}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Task cancellation} |
-%---------------------------------------------------------------------------- |
- |
-These primitives are used when managing task cancellation. They are |
-directly derived from the POSIX standard. Nothe that the POSIX interface |
-is also available. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_CLEANUP\_PUSH\index{task\_cleanup\_push()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void task\_cleanup\_push(void (*routine)(void |
-*), void *arg);}] |
-\item [Description:]It pushes the specified cancellation cleanup handler |
-routine onto the cancellation cleanup stack. The name of the POSIX |
-counterpart is \texttt{pthread\_cleanup\_push}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_CLEANUP\_POP\index{task\_cleanup\_pop()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void task\_cleanup\_pop(int execute);}] |
-\item [Description:]It removes the routine at the top of the cancellation |
-cleanup stack of the calling thread. If \texttt{execute} is not equal |
-0, the routine previously pushed is called. The name of the POSIX |
-counterpart is \texttt{pthread\_cleanup\_pop}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_TESTCANCEL\index{task\_testcancel()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void task\_testcancel(void);}] |
-\item [Description:]creates a cancellation point in the calling task. The |
-primitive has no effect if cancelability is disabled. The name of |
-the POSIX counterpart is \texttt{pthread\_testcancel}. |
-\end{description} |
- |
-\pagebreak |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_SETCANCELSTATE\index{task\_setcancelstate()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_setcancelstate(int state, int *oldstate);}] |
-\item [Description:]This primitive sets the cancelability state of the |
-calling thread to the indicate \emph{state} \emph{and} returns the |
-previous cancelability state at the location referenced by \emph{oldstate}. |
-Legal values for state are \texttt{TASK\_CANCEL\_ENABLE} and \texttt{TASK\_CANCEL\_DISABLE}. |
-\texttt{pthread\_setcancelstate} is the name of the POSIX counterpart. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_SETCANCELTYPE\index{task\_setcanceltype()} |
-\end{intest} |
- |
-\begin{description} |
-\item [int task\_setcanceltype(int type, int *oldtype);] |
-\item [Description:]This primitive sets the cancelability type of the calling |
-thread to the indicate \emph{type} and returns the previous cancelability |
-type at the location referenced by \emph{oldtype}. Legal values for |
-state are \texttt{TASK\_CANCEL\_DEFERRED} and \texttt{TASK\_CANCEL\_ASINCHRONOUS}. |
-The name of the POSIX counterpart is \texttt{pthread\_setcanceltype}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Join} |
-%---------------------------------------------------------------------------- |
- |
-The join primitives allow a task to wait for the termination of another task |
-\footnote{not of an instance of a task!}. The return value of the terminated |
-task is passed to the join primitive and the caller can use the value. These |
-primitives are directly derived from the POSIX standard. It means that a join |
-can be done only on a joinable task. But note that when a task created with the |
-creation primitives \footnote{\texttt{task\_create}, \texttt{task\_createn}, |
-\texttt{group\_create}} starts it is \emph{not} in the joinable state |
-\footnote{this is done to remain similar to the previous versions of the Hartik |
-Kernel...}. This behaviour differs from the standard behavior of the POSIX |
-standard, which specifies that every new task shall be in the joinable state. |
-However, S.Ha.R.K. provides also the \texttt{pthread\_create} primitive that is |
-\emph{fully compliant} with the standard. Finally, a S.Ha.R.K. task can switch |
-between the jonable and non-joinable state using the primitives |
-\texttt{task\_joinable} and \texttt{task\_unjoinable} \footnote{In the POSIX |
-standard, only the \texttt{pthread\_detach} primitive is available.}. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_JOIN\index{task\_join()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_join(PID p, void **value);}] |
-\item [Description:]The primitive suspends the execution of the calling |
-task until the task p terminates, unless the task p has already terminated. |
-On return from a successful \texttt{task\_join} call with a non-\texttt{NULL} |
-\emph{value} argument, the value returned by the thread through a |
-task\_abort shall be made available in the location referenced by |
-\emph{value}. When the primitive returns successfully the target task |
-has been terminated. The primitive returns 0 in case of success, otherwise |
-it returns \texttt{EINVAL} if the value \texttt{p} does not refer |
-to a task that can be joined, \texttt{ESRCH} if the value \texttt{p} |
-does not refer to a valid task, and \texttt{EDEADLK} if a deadlock |
-was detected. The name of the POSIX counterpart is \texttt{pthread\_join}. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_JOINABLE\index{task\_joinable()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_joinable(PID p);}] |
-\item [Description:]This function set the detach state of a task p to joinable. |
-This function is not present in Posix standard. It returns ESRCH if |
-p is non a valid task. |
-\end{description} |
-\pagebreak |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_UNJOINABLE\index{task\_unjoinable()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{int task\_unjoinable(PID p);}] |
-\item [Description:]This function sets the detach state of a task to detached. |
-The name of the POSIX counterpart is \texttt{pthread\_detach}. The |
-function returns \texttt{EINVAL} if \texttt{p} can not be joined (or |
-currently a task has done a join on it), or \texttt{ESRCH} if \texttt{p} |
-is not correct. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Preemption control} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. provides two primitives that set the preemptability of a |
-task. A non-preemptive task can not be preempted by another task; |
-interrupts are handled in the usual way. These primitives can be used |
-to implement short critical sections. Note the difference between |
-this kind of non -preemption and the interrupt disabling done using |
-kern\_cli and kern\_sti: in the latter case, interrupt can not preempt |
-the critical sections. A new task usually starts in a preemptive state. |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_NOPREEMPT\index{task\_nopreempt()} |
-\end{intest} |
- |
-\begin{description} |
-\item [void task\_nopreempt(void);] |
-\item [Description:]After the call of this primitive, the task is non-preemptive. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_PREEMPT\index{task\_preempt()} |
-\end{intest} |
- |
-\begin{description} |
-\item [void task\_nopreempt(void);] |
-\item [Description:]After the call of this primitive, the task become again |
-preemptive. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Suspending a task} |
-%---------------------------------------------------------------------------- |
- |
-The following system calls can be used by a task to suspend itself |
-for a known or unknown time. (Note: it is dangerous to use these system |
-calls in a hard real-time task.) |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-TASK\_DELAY\index{task\_delay()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\texttt{void task\_delay(DWORD t);}] |
-\item [Description:]It causes the calling task to be blocked for at least |
-\texttt{t} microseconds. Note that \texttt{t} is the \emph{minimum} |
-delay time. In facts, after \texttt{t} microseconds the task is inserted |
-in the ready queue and can be delayed by higher priority tasks. This |
-function was inherited from the previous versions of Hartik. Please, |
-use the POSIX counterpart \texttt{nanosleep} instead! |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Job ExecutionTime (JET) estimation} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. provides a set of primitives that allows to precisely estimate |
-the system load. These primitives can be used to tune the parameters |
-that are given at task creation, and to get statistics about the system |
-load. |
- |
-The execution time estimation is done on a task basis. That is, S.Ha.R.K. |
-provides three primitives that allows the user to estimate the JET |
-of every task. For every task, it is possible to know the mean execution |
-time, the maximum execution time, the time consumed by the current |
-instance and the time consumed by the last \texttt{JET\_TABLE\_DIM} |
-instances. |
- |
-The user have to explicitly enable the Kernel to record the JET informations |
-for a specific task. This is done at task creation time; usually a |
-macro that enable the JET is provided in the definition of every task |
-model (see the S.Ha.R.K. Module Manual). |
- |
-Here is an example of the use of the JET functions: |
- |
-\begin{verbatim} |
-/* The Goofy Task */ |
-void *goofy(void *arg) { |
- int i; |
- for (;;) { |
- for (i = 0; i < 100; i++) |
- kern_printf("Yuk!"); |
- task_endcycle(); |
- } |
-} |
- |
-PID goofy_PID; |
- |
-/* a NRT task that never finish */ |
- |
-void *jetcontrol(void *arg) { |
- TIME sum, max, curr, last[5]; |
- int nact; |
- |
- for (;;) { |
- if (jet_getstat(p, &sum, &max, &nact, &curr) == -1) |
- continue; |
- for (j = 0; j < 5; j++) last[j] = 0; |
- jet_gettable(p, &last[0], 5); |
- printf_xy(1, 20, WHITE,"goofy_PID=%d mean=%d max=%d nact=%d", |
- goofy_PID, sum / (nact == 0 ? 1 : nact), max, nact); |
- printf_xy(1, 21, WHITE, "L1=%d L2=%d L3=%d L4=%d L5=%d", |
- last[0], last[1], last[2], last[3], last[4]); |
- } |
-} |
- |
-*int main(int argc, char **argv) { |
- ... |
- |
- /* The task goofy is created, specifying that the Kernel |
- should take care of the JET data */ |
- |
- HARD_TASK_MODEL m; |
- |
- hard_task_default_model(m); |
- |
- /* ... other hard_task_XXX macros */ |
- hard_task_def_ctrl_jet(m); /* JET enabling */ |
- goofy_PID = task_create("Goofy", goofy, &m, NULL); |
- |
- /* ... creation of the JET control task, and so on */ |
-} |
-\end{verbatim} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-JET\_GETSTAT\index{jet\_getstat()} |
-\end{intest} |
- |
-\begin{description} |
-\item [int jet\_getstat(PID p, TIME *sum, TIME *max, int *n, TIME |
-*curr);] |
-\item [Description:]This primitive returns some JET informations about |
-the task p. The informations retrieved are stored into the following |
-parameters: |
- |
-\begin{description} |
-\item [\texttt{sum}]is the task total execution time since it was created |
-or since the last call to the \texttt{jet\_delstat} function; |
-\item [\texttt{max}]is the maximum time used by a task instance since it |
-was created or since the last call to the \texttt{jet\_delstat} function; |
-\item [\texttt{n}]is the number of terminated instances which sum and max |
-refers to; |
-\item [\texttt{curr}]is the total execution time of the current instance. |
-\end{description} |
- |
-If a parameter is passed as \texttt{NULL} the information is not returned. |
-The function returns 0 if the \texttt{PID} passed is correct, \texttt{-1} |
-if the PID passed does not correspond to a valid PID or the task does |
-not have the \texttt{JET\_ENABLE} bit set. |
- |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-JET\_DELSTAT\index{jet\_delstat()} |
-\end{intest} |
- |
-\begin{description} |
-\item [int jet\_delstat(PID p);] |
-\item [Description:]The primitive voids the actual task execution time |
-data mantained by the Generic Kernel. The function returns 0 if the |
-PID passed is correct, \texttt{-1} if the PID passed does not correspond |
-to a valid PID or the task does not have the \texttt{JET\_ENABLE} |
-bit set. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\begin{intest} |
-JET\_GETTABLE\index{jet\_gettable()} |
-\end{intest} |
- |
-\begin{description} |
-\item [int jet\_gettable(PID p, TIME *table, int n);] |
-\item [Description:]The primitive returns the last \texttt{n} execution |
-times of the task \texttt{p}. If the parameter n is less than 0, it |
-returns only the last values stored since the last call to \texttt{jet\_gettable} |
-(up to a maximum of \texttt{JET\_TABLE\_DIM} values). If the value |
-is greater than 0, the function returns the last \texttt{min(n,~JET\_TABLE\_DIM)} |
-values registered. The return value is \texttt{-1} if the task passed |
-as parameter does not exist or the task does not have the \texttt{JET\_ENABLE} |
-bit set, otherwise the number of values stored into the array is returned. |
-The table passed as parameter should store at least \texttt{JET\_TABLE\_DIM} |
-elements. |
-\end{description} |
- |
/trunk/vol1/sys.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/makefile |
=================================================================== |
--- trunk/vol1/makefile (revision 1677) |
+++ trunk/vol1/makefile (nonexistent) |
@@ -1,4 +0,0 @@ |
-MAIN = vol1 |
-MAIN_NAME = vol1 |
- |
-include ../common/manual.mk |
/trunk/vol1/makefile |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/introd.tex |
=================================================================== |
--- trunk/vol1/introd.tex (revision 1677) |
+++ trunk/vol1/introd.tex (nonexistent) |
@@ -1,361 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{Introduction} |
-%---------------------------------------------------------------------------- |
- |
-Real-time computing is required in many application domains, ranging |
-from embedded process control to multimedia systems. Each application |
-has peculiar characteristics in terms of timing constraints and computational |
-requirements (such as periodicity, criticality of the deadlines, tolerance |
-to jitter, and so on). For this reason, a lot of different scheduling |
-algorithms and resource allocation protocols have been proposed to |
-conform to such different application demands, from the classical |
-fixed or dynamic priority allocation schemes to adaptive or feedback-based |
-systems. |
- |
-However, most of the new approaches have been only theoretically analyzed, |
-and sometimes evaluated using a scheduling simulator. In this case, |
-the algorithm performance is not evaluated on real examples, but only |
-on a synthetic workload. This choice is often dictated from the fact |
-that writing a kernel from scratch every time a new scheduling algorithm |
-is proposed would be unrealistic and would not offer the availability |
-of meaningful applications. A more effective approach is to modify |
-an existing kernel (such as Linux), since most of the existing applications |
-and device drivers written for the host OS can be used in a straightforward |
-fashion. On the other hand, a general purpose kernel is designed aiming |
-at specific goals and generally its architecture is not modular enough |
-for replacing or modifying the scheduling policy. Moreover, classical |
-OSs do not allow to easily define a scheduling policy for resources |
-other than the CPU and this poses a further limitation for testing |
-novel research solutions. This is mainly due to the fact that the |
-classical OS structure does not permit a precise \emph{device scheduling} |
-(due to problems involving resource contention, priority inversion, |
-interrupt accounting, long non-preemptive sections, and so on). A |
-small kernel providing short non-preemptable sections, aperiodic real-time |
-threads for handling interrupts, and a distinction between \emph{device |
-drivers} accessing the hardware and \emph{device managers} implementing |
-the \emph{device scheduling} algorithms would help the progress in |
-this research field. The problems explained above emerge both in the |
-educational and research environments, when the focus is oriented |
-in developing and testing new scheduling algorithms rather than hacking |
-the code of a complex system. |
- |
-S.Ha.R.K. (Soft and Hard Real-time Kernel), is a research kernel purposely |
-designed to help the implementation and testing of new scheduling |
-algorithms, both for the CPU and for other resources. The kernel can |
-be used to perform early validation of the scheduling algorithms produced |
-in the research labs, and to show the application of real-time scheduling |
-in real-time systems courses. These goals are fulfilled by making |
-a trade off between simplicity and flexibility of the programming |
-interface on one hand and efficiency on the other. This approach allows |
-a developer to focus his/her attention on the real algorithmic issues, |
-thus saving significant time in the implementation of new solutions. |
-Another important design guideline is the use of standard naming conventions |
-for the support libraries in order to ease the porting of meaningful |
-applications written for other platforms. The results have been satisfactory |
-for applications such as an MPEG player, a set of network drivers |
-and a FFT library. |
- |
-The kernel provides the basic mechanisms for queue management and |
-dispatching and uses one or more external configurable modules to |
-perform scheduling decisions. These external modules can implement |
-periodic scheduling algorithms, soft task management through real-time |
-servers, semaphore protocols, and resource management policies. The |
-modules implementing the most common algorithms (such as RM, EDF, |
-Round Robin, and so on) are already provided, and it is easy to develop |
-new modules. Each new module can be created as a set of functions |
-that \emph{abstract} from the implementation of the other scheduling |
-modules and from the resource handling functions. Also the applications |
-can be developed independently from a particular system configuration, |
-so that new modules can be added or replaced to evaluate the effects |
-of specific scheduling policies in terms of predictability, overhead, |
-and performance. Low-level drivers for the most typical hardware resources |
-(like network cards, graphic cards, and hard disks) are also provided, |
-without imposing any form of device scheduling. In this way, device |
-scheduling can be implemented by the user to test new solutions. To |
-avoid the implementation of a new non-standard programming interface, |
-which would discourage people from using the kernel, S.Ha.R.K. implements |
-the standard POSIX 1003.13 PSE52 interface |
-% |
-% Tool: no such reference! |
-% |
-% \cite{POSIX1003.1,POSIX1003.13} |
-. |
- |
-This manual was derived from the Hartik User Manual release 3.3.1. |
- |
-%---------------------------------------------------------------------------- |
-\section{General Description} |
-%---------------------------------------------------------------------------- |
- |
-S.Ha.R.K. has been designed as a library of functions which extends |
-the classical C library, by providing a multiprogramming environment |
-with an explicit management of time. From a logical point of view, |
-the system is based on a \emph{Host} computer where the application |
-is developed and on a \emph{Target} computer where the application |
-executes. Development tools are located on the host system, where |
-a general purpose operating system is used. After its compilation, |
-the application is loaded on the target system using the appropriate |
-\emph{loader}. This separation, typical of many hard real-time development |
-systems, enables the final application to run on a variety of target |
-systems, ranging from typical PC to embedded micro-controllers. From |
-a practical point of view, host and target may be the same computer |
-and in the rest of this manual we will not further distinguish between |
-them. |
- |
-S.Ha.R.K. has been developed focusing on modularity of the kernel |
-source code. S.Ha.R.K. is fundamentally a set of routines that runs |
-on top of a library for OS development called OSLib (see http://oslib.sourceforge.net) |
-that has these requirements: |
- |
-\begin{description} |
- |
-\item [Operating~System~(OS)]You can compile OSLib/S.Ha.R.K. programs |
-using some different host OS. In theory, any OS supporting gcc can |
-be used; in practice, we successfully compiled OSLib/S.Ha.R.K. from |
-Linux, DOS and Cygwin. |
- |
-\item [Compiler]The used compiler is gcc. You can use the gcc version that |
-you prefer (we tested gcc 3.3.3 and older version), the important |
-thing is that the linker must produce ELF binaries (in order to be |
-MultiBoot compliant and to avoid problems with the Linux source code |
-inside S.Ha.R.K.). An ELF cross-compile version of gcc is included |
-inside the DJGPP distribution on the S.Ha.R.K. website, so you can |
-easily compile OSLib/S.Ha.R.K. programs inside a standard DOS environment. |
-To compile under Cygwin, it is required to build an ELF cross-compile |
-gcc/linker couple. |
- |
-\item [Other~utilities]GNU Make \index{Make}, uname, pwd, cp, rm, X (these |
-utilities can be found in the utility package on the S.Ha.R.K. web |
-site). |
- |
-\item [Target~Requirements]The target have to be at least a PC based on |
-Intel 80486 (or compatible) - SMP is not supported - with at least |
-4Mb of RAM. In order to load OSLib/S.Ha.R.K. programs (MultiBoot compliant), |
-the target must have GRUB installed, or it must run a real mode operating |
-system (such as MS-DOS or FreeDOS). If you intend to boot OSLib/S.Ha.R.K. |
-programs from DOS, you also have to download our DOS eXtender X. |
- |
-\end{description} |
- |
-Compilation and application linking can be done using the \emph{make}\index{make} |
-utility, available in any of the development environments mentioned |
-above. In this case, a {}``makefile''\index{makefile} containing |
-the names of all of the .C files composing the application and the |
-directives to link the needed libraries have to be written. For more |
-information, you can look at the installation txt file from the website |
-download page. |
- |
-%---------------------------------------------------------------------------- |
-\section{SHARK.CFG} |
-%---------------------------------------------------------------------------- |
- |
-Inside \texttt{shark.cfg} you can find the main parameters for S.Ha.R.K. |
-configuration. All the stettings inside this file will be crucial |
-to run correctly S.Ha.R.K. and to get the maximum performaces on a |
-x86 machines. The most important options related to the Real-Time |
-behaviour are: |
- |
-\begin{description} |
-\item MEM\_START = [number] |
-\end{description} |
- |
-\begin{itemize} |
-\item Kernel image start point. The kernel image file will be loaded starting |
-from this physical memory address. Default value is 0x220000, but DOS users, |
-should set an high address (like 0x1720000) if Smartdrive or other tools which |
-require Extended Memory are used. |
-\end{itemize} |
- |
-\begin{description} |
-\item TSC = [TRUE,FLASE] |
-\end{description} |
- |
-\begin{itemize} |
-\item This option enables the Time Step Counter inside the CPU (Pentium |
-or higher). Kern\_gettime function will use the TSC register which |
-is faster and more precise than the external PIT. The default value |
-is TRUE. If the system cannot find the TSC, this feature will be disabled |
-and PIT will be used to get the system time. |
-\end{itemize} |
- |
-\begin{description} |
-\item APIC = [TRUE,FALSE] |
-\end{description} |
- |
-\begin{itemize} |
-\item This option enables the APIC (Pentium Pro or higher). As TSC, APIC |
-is faster and more precise than the standard PIT. It will be used |
-to generate the timer interrupts. The default value is TRUE. If the |
-system cannot find the APIC, the feature will be disabled. On some |
-embedded systems or old PC, the APIC check could hang the system, |
-so you must disable it manually. APIC requires the TSC. |
-\end{itemize} |
- |
-\begin{description} |
-\item TIMER\_OPT = [1000,2000,4000,8000] |
-\end{description} |
- |
-\begin{itemize} |
-\item Enable TSC read timer optimization. The 4 values are suggested for |
-different CPU speeds, allowing different wraparound performance: TIMER\_OPT = |
-1000 for CPU < 1 GHz, wraparound of 585 years; TIMER\_OPT = 2000 for 1 GHz < |
-CPU < 2 GHz, wraparound of 146 years; TIMER\_OPT = 4000 for 2 GHz < CPU < 4 GHz, |
-wraparound of36 years; TIMER\_OPT = 8000 for CPU < 8 GHz, wraparound of 292 |
-years. |
-\end{itemize} |
- |
-\begin{description} |
-\item TRACER = [NO,OLD,NEW] |
-\end{description} |
- |
-\begin{itemize} |
-\item Select the tracer to be used for tracing events. While TRACER = OLD is for |
-backward compatibility, TRACER = NEW should be the preferred option when event |
-tracing is required. The event tracer can be disabled by selecting TRACER = NO. |
-\end{itemize} |
- |
-\begin{description} |
-\item BIOS = [X,VM86] |
-\end{description} |
- |
-\begin{itemize} |
-\item Select the BIOS interrupt access mode. BIOS = X means that you must use |
-x.exe as shark loader if shark needs to call BIOS interrupt (Ex. to enable |
-graphics); BIOS = VM86 means that shark call the BIOS interrupts as Virtual |
-Machine 86, and you can load a graphical demo also through GRUB. |
-\item Notice that VM86 MODE IS NOT COMPATIBLE WITH SOME VGA CARDS (like MATROX). |
-\end{itemize} |
- |
-\begin{description} |
-\item FB = [VESA,FINDPCI,VGA16] |
-\end{description} |
- |
-\begin{itemize} |
-\item Select the FrameBuffer configuration. It can use the VBE interrupts to |
-enable the selected video mode (VESA), or enable the VGA16 (4 bit per plane) |
-video mode (VGA16). Using FINDPCI, the FrameBuffer driver will try to find a |
-PCI/AGP graphical card. If a card is found, FB will use a specific driver to |
-enable it; however, few graphic adapters are currently supported with specific |
-drivers. Since almost all adapters support the VESA standard, FB = VESA is |
-usually the best choice. |
-\end{itemize} |
- |
-\begin{description} |
-\item FG = [NORMAL,FORCE\_PXC] |
-\end{description} |
- |
-\begin{itemize} |
-\item Select the FrameGrabber configuration. FORCE\_PXC forces the frame grabber to init a PXC200 card, and should be used carefully. |
-\end{itemize} |
- |
-\begin{description} |
-\item SHARK\_FS = [YES,NO] |
-\end{description} |
- |
-\begin{itemize} |
-\item Select the S.Ha.R.K. file system support. SHARK\_FS = YES makes the kernel |
-to include the File System library, which supports the FAT16 filesystem only. If |
-you don't have a FAT16 filesystem, set SHARK\_FS = NO. |
-\end{itemize} |
- |
-\begin{description} |
-\item [{\Large NOTE:}]{\Large You must recompile S.Ha.R.K. if you modify} |
-\texttt{\Large shark.cfg}{\Large \par} |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{Predefined Types and Constants} |
-%---------------------------------------------------------------------------- |
- |
-Tables~\ref{t:types}, \ref{t:task}, \ref{t:stati}, \ref{t:limits} |
-show a subset of the predefined data types in S.Ha.R.K., a subset |
-of the possible task states and Models and the system basic constants. |
- |
-\begin{table} |
-\begin{center}\begin{tabular}{|l|l|} |
-\hline |
-\emph{Type} & \emph{Description} \\ |
-\hline |
-BYTE & unsigned char, {[}0, 255{]} \\ |
-WORD & unsigned int, {[}0, 65535{]} \\ |
-DWORD & unsigned long, {[}0, 0xFFFFFFFF{]} \\ |
-TIME & unsigned long, {[}0, 0xFFFFFFFF{]} \\ |
-PID & Task identifier \\ |
-TASK & task \\ |
-PORT & communication endpoints \\ |
-CAB & cyclic asynchronous buffers \\ |
-\hline |
-\end{tabular}\end{center} |
-\caption{\label{t:types}Predefined types.} |
-\end{table} |
- |
-\begin{table} |
-\begin{center}\begin{tabular}{|l|c|} |
-\hline |
-\emph{Identifier} & \emph{Value}\\ |
-\hline |
-FREE & 0 \\ |
-EXE & 1 \\ |
-SLEEP & 2 \\ |
-WAIT\_JOIN & 3 \\ |
-WAIT\_COND & 4 \\ |
-WAIT\_SIG & 5 \\ |
-WAIT\_SEM & 6 \\ |
-WAIT\_NANOSLEEP & 7\\ |
-WAIT\_SIGSUSPEND & 8 \\ |
-WAIT\_MQSEND & 9\\ |
-WAIT\_MQRECEIVE & 10 \\ |
-\hline |
-\end{tabular}\end{center} |
- |
-\caption{\label{t:stati}Task states. (Note that a scheduling module can add |
-its private task states.)} |
-\end{table} |
- |
-\begin{table} |
-\begin{center}\begin{tabular}{|l|c|} |
-\hline |
-\emph{Identifier} & Class \\ |
-\hline |
-HARD\_TASK\_MODEL & Periodic and sporadic hard tasks \\ |
-SOFT\_TASK\_MODEL & Periodic and aperiodic soft tasks\\ |
-NRT\_TASK\_MODEL & Non-real-time tasks \\ |
-JOB\_TASK\_MODEL & A task instance (job) that can be inserted into another module \\ |
-DUMMY\_TASK\_MODEL & Model used for the Dummy Task \\ |
-ELASTIC\_TASK\_MODEL & Elastic task, used with the Elastic Module \\ |
-\hline |
-\end{tabular}\end{center} |
- |
-\caption{\label{t:task}Basic Task Models included with the default distribution |
-(see include/kernel/model.h).} |
-\end{table} |
- |
-\begin{table} |
-\begin{center}\begin{tabular}{|l|c|} |
-\hline |
-\emph{Identifier} & \emph{Value} \\ |
-\hline |
-MAX\_PROC & 66 \\ |
-MAX\_RUNLEVEL\_FUNC & 40 \\ |
-JET\_TABLE\_DIM & 20 \\ |
-MAX\_CANCPOINTS & 20 \\ |
-MAX\_SIGINTPOINTS & 20 \\ |
-MAX\_SCHED\_LEVEL & 16 \\ |
-MAX\_RES\_LEVEL & 8 \\ |
-MAX\_LEVELNAME & 20 \\ |
-MAX\_MODULENAME & 20 \\ |
-MAX\_TASKNAME & 20 \\ |
-NIL & -1 \\ |
-RUNLEVEL\_STARTUP & 0 \\ |
-RUNLEVEL\_INIT & 1 \\ |
-RUNLEVEL\_RUNNING & 3 \\ |
-RUNLEVEL\_SHUTDOWN & 2 \\ |
-RUNLEVEL\_BEFORE\_EXIT & 4 \\ |
-RUNLEVEL\_AFTER\_EXIT & 5 \\ |
-NO\_AT\_ABORT & 8 \\ |
-\hline |
-\end{tabular}\end{center} |
- |
-\caption{\label{t:limits}System constants (see include/kernel/const.h).} |
-\end{table} |
- |
/trunk/vol1/introd.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/vol1.tex |
=================================================================== |
--- trunk/vol1/vol1.tex (revision 1677) |
+++ trunk/vol1/vol1.tex (nonexistent) |
@@ -1,77 +0,0 @@ |
-\documentclass[italian,english]{report} |
-\usepackage[T1]{fontenc} |
-\usepackage[latin1]{inputenc} |
-\usepackage{geometry} |
-\geometry{verbose,a4paper} |
-\usepackage{array} |
-\usepackage{longtable} |
-\usepackage{makeidx} |
-\makeindex |
-\usepackage{graphicx} |
- |
-\makeatletter |
- |
-%% Special footnote code from the package 'stblftnt.sty' |
-%% Author: Robin Fairbairns -- Last revised Dec 13 1996 |
-\let\SF@@footnote\footnote |
-\def\footnote{\ifx\protect\@typeset@protect |
- \expandafter\SF@@footnote |
- \else |
- \expandafter\SF@gobble@opt |
- \fi |
-} |
-\expandafter\def\csname SF@gobble@opt \endcsname{\@ifnextchar[%] |
- \SF@gobble@twobracket |
- \@gobble |
-} |
-\edef\SF@gobble@opt{\noexpand\protect |
- \expandafter\noexpand\csname SF@gobble@opt \endcsname} |
-\def\SF@gobble@twobracket[#1]#2{} |
- |
-\newenvironment{intest}{\noindent\large\bf\hspace*{1pt}} |
-{\vspace*{-5pt}\\\line(1,0){433}} |
- |
-\usepackage{babel} |
-\makeatother |
- |
-\begin{document} |
-\thispagestyle{empty} |
- |
-\begin{center}{\LARGE S.Ha.R.K. User Manual}\end{center}{\LARGE \par} |
-\vfill{} |
-\begin{center}Volume I \end{center} |
-\begin{center}Kernel Primitives\end{center} |
-\vfill{} |
-\begin{center}Written by\end{center} |
-\begin{center}Giorgio Buttazzo (giorgio at sssup.it)\end{center} |
-\begin{center}Paolo Gai (pj at sssup.it)\end{center} |
-\begin{center}Luigi Palopoli (luigi at hartik.sssup.it)\end{center} |
-\begin{center}Marco Caccamo (caccamo at sssup.it)\end{center} |
-\begin{center}Giuseppe Lipari (lipari at sssup.it) \end{center} |
-\begin{center}Tullio Facchinetti (tullio.facchinetti at unipv.it)\end{center} |
-\vfill{} |
- |
-\begin{center}\includegraphics[width=2cm]{../common/sssup.ps}\end{center} |
- |
-\begin{center}Scuola Superiore di Studi e Perfezionamento S. Anna\end{center} |
-\begin{center}RETIS Lab\end{center} |
-\begin{center}Via Carducci, 40 - 56100 Pisa\end{center} |
-\begin{center}\pagebreak\end{center} |
- |
-\tableofcontents{} |
- |
-\include{introd} |
-\include{sys} |
-\include{semaf} |
-\include{util} |
- |
-\appendix |
- |
-\include{errors} |
- |
-\printindex{} |
- |
-\bibliographystyle{alpha} |
-\bibliography{../common/biblio} |
- |
-\end{document} |
/trunk/vol1/vol1.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol1/over.eps |
=================================================================== |
--- trunk/vol1/over.eps (revision 1677) |
+++ trunk/vol1/over.eps (nonexistent) |
@@ -1,217 +0,0 @@ |
-%!PS-Adobe-2.0 EPSF-2.0 |
-%%Title: over.fig |
-%%Creator: fig2dev Version 3.2 Patchlevel 1 |
-%%CreationDate: Wed Jul 12 11:38:50 2000 |
-%%For: pj@galadriel (Paolo Gai) |
-%%Orientation: Portrait |
-%%BoundingBox: 0 0 248 135 |
-%%Pages: 0 |
-%%BeginSetup |
-%%EndSetup |
-%%Magnification: 1.0000 |
-%%EndComments |
-/$F2psDict 200 dict def |
-$F2psDict begin |
-$F2psDict /mtrx matrix put |
-/col-1 {0 setgray} bind def |
-/col0 {0.000 0.000 0.000 srgb} bind def |
-/col1 {0.000 0.000 1.000 srgb} bind def |
-/col2 {0.000 1.000 0.000 srgb} bind def |
-/col3 {0.000 1.000 1.000 srgb} bind def |
-/col4 {1.000 0.000 0.000 srgb} bind def |
-/col5 {1.000 0.000 1.000 srgb} bind def |
-/col6 {1.000 1.000 0.000 srgb} bind def |
-/col7 {1.000 1.000 1.000 srgb} bind def |
-/col8 {0.000 0.000 0.560 srgb} bind def |
-/col9 {0.000 0.000 0.690 srgb} bind def |
-/col10 {0.000 0.000 0.820 srgb} bind def |
-/col11 {0.530 0.810 1.000 srgb} bind def |
-/col12 {0.000 0.560 0.000 srgb} bind def |
-/col13 {0.000 0.690 0.000 srgb} bind def |
-/col14 {0.000 0.820 0.000 srgb} bind def |
-/col15 {0.000 0.560 0.560 srgb} bind def |
-/col16 {0.000 0.690 0.690 srgb} bind def |
-/col17 {0.000 0.820 0.820 srgb} bind def |
-/col18 {0.560 0.000 0.000 srgb} bind def |
-/col19 {0.690 0.000 0.000 srgb} bind def |
-/col20 {0.820 0.000 0.000 srgb} bind def |
-/col21 {0.560 0.000 0.560 srgb} bind def |
-/col22 {0.690 0.000 0.690 srgb} bind def |
-/col23 {0.820 0.000 0.820 srgb} bind def |
-/col24 {0.500 0.190 0.000 srgb} bind def |
-/col25 {0.630 0.250 0.000 srgb} bind def |
-/col26 {0.750 0.380 0.000 srgb} bind def |
-/col27 {1.000 0.500 0.500 srgb} bind def |
-/col28 {1.000 0.630 0.630 srgb} bind def |
-/col29 {1.000 0.750 0.750 srgb} bind def |
-/col30 {1.000 0.880 0.880 srgb} bind def |
-/col31 {1.000 0.840 0.000 srgb} bind def |
- |
-end |
-save |
--23.0 148.0 translate |
-1 -1 scale |
- |
-/cp {closepath} bind def |
-/ef {eofill} 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} bind def |
-/tr {translate} bind def |
-/tnt {dup dup currentrgbcolor |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add |
- 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} |
- bind def |
-/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul |
- 4 -2 roll mul srgb} bind def |
-/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def |
-/$F2psEnd {$F2psEnteredState restore end} def |
-%%EndProlog |
- |
-$F2psBegin |
-10 setmiterlimit |
-n -1000 1164 m -1000 -1000 l 1301 -1000 l 1301 1164 l cp clip |
- 0.90000 0.90000 sc |
-% Polyline |
-0.500 slw |
-n 44 143 m 44 149 l gs col-1 s gr |
-% Polyline |
-n 59 143 m 59 149 l gs col-1 s gr |
-% Polyline |
-n 74 143 m 74 149 l gs col-1 s gr |
-% Polyline |
-n 89 143 m 89 149 l gs col-1 s gr |
-% Polyline |
-n 104 143 m 104 149 l gs col-1 s gr |
-% Polyline |
-n 119 143 m 119 149 l gs col-1 s gr |
-% Polyline |
-n 134 143 m 134 149 l gs col-1 s gr |
-% Polyline |
-n 149 143 m 149 149 l gs col-1 s gr |
-% Polyline |
-n 164 143 m 164 149 l gs col-1 s gr |
-% Polyline |
-n 179 143 m 179 149 l gs col-1 s gr |
-% Polyline |
-n 194 143 m 194 149 l gs col-1 s gr |
-% Polyline |
-n 209 143 m 209 149 l gs col-1 s gr |
-% Polyline |
-n 224 143 m 224 149 l gs col-1 s gr |
-% Polyline |
-n 239 143 m 239 149 l gs col-1 s gr |
-% Polyline |
-n 254 143 m 254 149 l gs col-1 s gr |
-% Polyline |
-n 269 143 m 269 149 l gs col-1 s gr |
-% Polyline |
-n 284 143 m 284 149 l gs col-1 s gr |
-% Polyline |
-n 44 68 m 44 74 l gs col-1 s gr |
-% Polyline |
-n 59 68 m 59 74 l gs col-1 s gr |
-% Polyline |
-n 74 68 m 74 74 l gs col-1 s gr |
-% Polyline |
-n 89 68 m 89 74 l gs col-1 s gr |
-% Polyline |
-n 104 68 m 104 74 l gs col-1 s gr |
-% Polyline |
-n 119 68 m 119 74 l gs col-1 s gr |
-% Polyline |
-n 134 68 m 134 74 l gs col-1 s gr |
-% Polyline |
-n 149 68 m 149 74 l gs col-1 s gr |
-% Polyline |
-n 164 68 m 164 74 l gs col-1 s gr |
-% Polyline |
-n 179 68 m 179 74 l gs col-1 s gr |
-% Polyline |
-n 194 68 m 194 74 l gs col-1 s gr |
-% Polyline |
-n 209 68 m 209 74 l gs col-1 s gr |
-% Polyline |
-n 224 68 m 224 74 l gs col-1 s gr |
-% Polyline |
-n 239 68 m 239 74 l gs col-1 s gr |
-% Polyline |
-n 269 68 m 269 74 l gs col-1 s gr |
-% Polyline |
-n 284 68 m 284 74 l gs col-1 s gr |
-% Polyline |
-n 59 149 m 59 134 l 29 134 l 29 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 119 149 m 119 134 l 89 134 l 89 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 179 149 m 179 134 l 149 134 l 149 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 284 149 m 284 134 l 254 134 l 254 149 l cp gs 0.60 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 89 74 m 89 59 l 59 59 l 59 74 l cp gs 0.80 setgray ef gr gs col-1 s gr |
-% Polyline |
-n 254 74 m 254 59 l 209 59 l 209 74 l cp gs 0.80 setgray ef gr gs col-1 s gr |
-/Times-Roman ff 10.00 scf sf |
-26 164 m |
-gs 1 -1 sc (0) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-86 164 m |
-gs 1 -1 sc (4) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-146 164 m |
-gs 1 -1 sc (8) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-206 164 m |
-gs 1 -1 sc (12) col0 sh gr |
-/Times-Roman ff 10.00 scf sf |
-266 164 m |
-gs 1 -1 sc (16) col0 sh gr |
-% Polyline |
-n 77 17 m 77 17 l 77 17 l 77 17 l cp gs 0.75 setgray ef gr gs col0 s gr |
-% Polyline |
-n 29 74 m 299 74 l gs col-1 s gr |
-% Polyline |
-n 29 119 m 29 149 l 299 149 l gs col-1 s gr |
-% Polyline |
-n 89 119 m 89 149 l gs col-1 s gr |
-% Polyline |
-n 149 119 m 149 149 l gs col-1 s gr |
-% Polyline |
-n 209 119 m 209 149 l gs col-1 s gr |
-% Polyline |
-n 269 119 m 269 149 l gs col-1 s gr |
-% Polyline |
-n 29 149 m 29 152 l gs col-1 s gr |
-% Polyline |
-n 89 149 m 89 152 l gs col-1 s gr |
-% Polyline |
-n 149 149 m 149 152 l gs col-1 s gr |
-% Polyline |
-n 209 149 m 209 152 l gs col-1 s gr |
-% Polyline |
-n 269 149 m 269 152 l gs col-1 s gr |
-% Polyline |
-n 29 44 m 29 74 l gs col-1 s gr |
-% Polyline |
-n 254 44 m 254 74 l gs col-1 s gr |
-$F2psEnd |
-rs |
/trunk/vol1/over.eps |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol2/graph.tex |
=================================================================== |
--- trunk/vol2/graph.tex (revision 1677) |
+++ trunk/vol2/graph.tex (nonexistent) |
@@ -1,241 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{The Frame Buffer Library} |
-%---------------------------------------------------------------------------- |
- |
-The S.Ha.R.K. system provides support for all modern SVGA cards through the |
-Linux Frame Buffer driver. Using the \texttt{grx} graphic library upon it is |
-possible to draw points, lines, rectangles, boxes, circles, and text on 16 bit |
-per plane (bpp) SVGA graphic modes. |
- |
-In order to use graphics, a program must include the |
-\texttt{drivers/shark\_fb26.h} header file. Then, it must initialize the Frame |
-Buffer using \texttt{FB26\_init()}. At this point the drawing library must be |
-connected to the frame buffer with the function \texttt{FB26\_use\_grx()}. Now a |
-graphic mode can be opened using \texttt{FB26\_setmode()}, and then the drawing |
-functions can be used. The \emph{num number}, needed as a parameter indicate |
-which frame buffer is used. At the end, the program can switch back to text mode |
-through \texttt{FB26\_close()}. |
- |
-\vspace{7mm} |
- |
-\begin{intest} |
-FB26\_INIT \index{FB26\_init()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{int FB26\_init(void);}] |
-\item [\textbf{Description:}] It initializes the rame buffer and internal data structures |
-to access the hardware. The function returns -1 on error, 0 otherwise. In order |
-to use the graphic primitives, a program must call this function. |
-\end{description} |
- |
-\begin{intest} |
-FB26\_OPEN\index{fb26\_open()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{int FB26\_open(int num);}] |
-\item [\textbf{Description:}] Open the frame buffer number \texttt{num}. The function |
-returns -1 on error, 0 otherwise. The frame buffer must be already initialized |
-with \texttt{FB26\_init}. |
-\end{description} |
- |
-\begin{intest} |
-FB26\_SETMODE\index{FB26\_setmode()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{int grx\_setmode(int num, unsigned chat *mode);}] |
-\item [\textbf{Description:}] It opens the graphic mode identified by the \texttt{mode} |
-parameter. The mode number can be obtained using \texttt{grx\_getmode()}. The |
-parameter \texttt{mode} is a string in the format |
-``\texttt{widthxheight-bpp}'' (ex. ``\texttt{640x480-16}''). If the mode is |
-supported and can be opened, the function returns 1, otherwise it returns -1. |
-\end{description} |
- |
-\begin{intest} |
-FB26\_CLOSE\index{FB26\_close()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{int FB26\_close(int num);}] |
-\item [\textbf{Description:}] It closes the frame buffer \texttt{num} returning to text |
-mode. |
-\end{description} |
- |
-%---------------------------------------------------------------------------- |
-\section{The Frame Buffer graphics functions} |
-%---------------------------------------------------------------------------- |
- |
-The GRX library allows to use graphics with 16 bpp; the number of bits per |
-pixel, the graphic depth, determines the number of colors that can be |
-simultaneously displayed on a single screen. In 16 bpp modes, each pixel is |
-represented by two bytes. Since 16 is not divisible by 3, a component (the green |
-one) is described by 6 bits, whereas the other two are described by 5 bits. The |
-\texttt{RGB16()} macros help to code RGB values in a pixel value for all these |
-graph functions. |
- |
-\vspace{7mm} |
- |
-\begin{intest} |
-RGB16\index{rgb16()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{WORD rgb16(WORD r, WORD g, WORD b);}] |
-\item [\textbf{Description:}] It returns the color value defined by the 3 parameters |
-(\texttt{red}, \texttt{green} and \texttt{blue}) in the format required by |
-drawing function. |
-\end{description} |
- |
-\begin{intest} |
-GRX\_CLEAR\index{grx\_clear()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void grx\_clear(DWORD color);}] |
-\item [\textbf{Description:}] It clears the graphic screen by filling it with the color |
-specified in the parameter \texttt{color}. |
-\end{description} |
- |
-\begin{intest} |
-GRX\_PLOT\index{grx\_plot()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void grx\_plot(WORD x, WORD y, DWORD col);}] |
-\item [\textbf{Description:}] It draws a pixel of color \texttt{c} at coordinates |
-(\texttt{x},\texttt{y}) on the screen. For efficiency reasons no checks are |
-performed on \texttt{x} and \texttt{y}. Only the \texttt{bpp} less significative |
-bits of \texttt{col} are used (where \texttt{bpp} is the number of bits per |
-plane in the current graphic mode). |
-\end{description} |
- |
-\begin{intest} |
-GRX\_GETPIXEL\index{grx\_getpixel()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{DWORD grx\_getpixel(WORD x, WORD y);}] |
-\item [\textbf{Description:}] It returns the color of pixel at coordinates |
-(\texttt{x}, \texttt{y}) on the screen. For efficiency reasons no checks are |
-performed on \texttt{x} and \texttt{y}. Only the \texttt{bpp} less significative |
-bits of the returned value are used (where \texttt{bpp} is the number of bits |
-per plane in the current graphic mode). |
-\end{description} |
- |
-\begin{intest} |
-GRX\_PUTIMAGE\index{grx\_putimage()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void grx\_putimage(WORD x1, WORD y1, WORD x2, WORD y2, WORD *img);}] |
-\item [\textbf{Description:}] It writes a rectangular bitmap from system memory to video |
-memory. (\texttt{x1}, \texttt{y1}) is the top left corner, while |
-(\texttt{x2},\texttt{y2}) is the right bottom corner. It fills the specified box |
-with the data in the buffer pointed by \texttt{*img}. The memory buffer must |
-contain the pixels in the same representation used in the video memory, starting |
-at the top left corner, from left to right, and then, line by line, from up to |
-down, without any gaps and interline spaces. |
-\item [See also:] \texttt{grx\_getimage()}. |
-\end{description} |
- |
-\begin{description} |
-\item [Example:] |
-\end{description} |
- |
- |
-\begin{tt} |
-\begin{verbatim} |
-BYTE videobuff[200][200]; |
-... |
- |
-void *videotask(void *arg) { |
- int done = 0; |
- ... |
- |
- while (!done) { |
- done = decodeframe(videobuff, 200, 200); |
- grx_put(X, Y, X + 200, Y + 200, videobuff); |
- task_endcycle(); |
- } |
-} |
-\end{verbatim} |
-\end{tt} |
- |
-\begin{intest} |
-GRX\_GETIMAGE\index{grx\_getimage()} |
-\end{intest} |
-\begin{description} |
-\item [\textbf{void grx\_getimage(WORD x1, WORD y1, WORD x2, WORD y2, WORD *img);}] |
-\item [\textbf{Description:}] It reads a rectangular bitmap from video memory to system |
-memory. (\texttt{x1}, \texttt{y1}) is the top left corner, while |
-(\texttt{x2},\texttt{y2}) is the right bottom corner. It fills the specified |
-buffer pointed by \texttt{*img} with the data contained in the selected video |
-box. The memory buffer must be large enough to contain the box (in general, the |
-correct buffer dimension is $(y2-y1+1)*(x2-x1+1)*bpp$). |
-\item [See]\textbf{also}: \texttt{grx\_putimage()}. |
-\end{description} |
- |
-\begin{intest} |
-GRX\_RECT\index{grx\_rect()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{int grx\_rect(WORD x1, WORD y1, WORD x2, WORD y2, DWORD col);}] |
-\item [\textbf{Description:}] It draws an empty rectangle with top left corner at |
-(\texttt{x1},\texttt{y1}) and bottom right corner at (\texttt{x2},\texttt{y2}). |
-The rectangle is drawn with color \texttt{col}. |
-\end{description} |
- |
-\begin{intest} |
-GRX\_BOX\index{grx\_box()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{int grx\_box(WORD x1, WORD y1, WORD x2, WORD y2, DWORD col);}] |
-\item [\textbf{Description:}] It draws a filled rectangle with top left corner at |
-(\texttt{x1},\texttt{y1}) and bottom right corner at (\texttt{x2},\texttt{y2}). |
-The box is drawn with color \texttt{col}. |
-\end{description} |
- |
-\begin{intest} |
-GRX\_LINE\index{grx\_line()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void grx\_line(WORD x1, WORD y1, WORD x2, WORD y2, DWORD col);}] |
-\item [\textbf{Description:}] It draws a line from (\texttt{x1}, \texttt{y1}) to |
-(\texttt{x2},\texttt{y2}) using color \texttt{col}. |
-\end{description} |
- |
-\begin{intest} |
-GRX\_TEXT\index{grx\_text()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void grx\_text(char *text, WORD x, WORD y, DWORD fg, DWORD bg);}] |
-\item [\textbf{Description:}] It writes a 0 terminated text string in graphic mode at |
-position (\texttt{x},\texttt{y}). The string is pointed by \texttt{text}, |
-\texttt{fg} is the foreground color, and \texttt{bg} is the background color. |
-\end{description} |
- |
-\begin{intest} |
-GRX\_CIRCLE\index{grx\_circle()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void grx\_circle(WORD x, WORD y, WORD r, DWORD col);}] |
-\item [\textbf{Description:}] It draws a circle of radius \texttt{r} and color |
-\texttt{col}, centered at (\texttt{x}, \texttt{y}). |
-\end{description} |
- |
-\begin{intest} |
-GRX\_DISC\index{grx\_disc()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void grx\_disc(WORD x, WORD y, WORD r, DWORD col);}] |
-\item [\textbf{Description:}] It draws a filled circle of radius \texttt{r} and color |
-\texttt{col}, centered at (\texttt{x}, \texttt{y}). |
-\end{description} |
/trunk/vol2/graph.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol2/console.tex |
=================================================================== |
--- trunk/vol2/console.tex (revision 1677) |
+++ trunk/vol2/console.tex (nonexistent) |
@@ -1,123 +0,0 @@ |
-%---------------------------------------------------------------------------- |
-\chapter{The Console Library} |
-%---------------------------------------------------------------------------- |
- |
-The output on the screen in text mode is supported by a group of functions that |
-act on the whole screen and modify, each time, the cursor's position. Since such |
-functions are not reentrant, they must be used in mutual exclusion. |
- |
-In order to use the library for displaying on the screen, the |
-``\texttt{cons.h}'' file must be included. This file contains the values for |
-the usable colors whose symbolic names are listed below: \texttt{BLACK, BLUE, |
-GREEN, CYAN, RED, MAGENTA, BROWN, GRAY, LIGHTGRAY, LIGHTBLUE, LIGHTGREEN, |
-LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE}. |
- |
-Two global read-only variables \texttt{cons\_columns} and \texttt{cons\_rows} |
-contain the number of screen columns and the number of screen rows, |
-respectively. They can be used to write applications that are indipendent from |
-the screen dimensions. |
- |
-\vspace{7mm} |
- |
-\begin{intest} |
-CPUTC, CPUTS, CPRINTF \index{cputc()}\index{cputs()}\index{cprintf()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void cputc(char c); }] |
-\item [\textbf{void cputs(char {*}s); }] |
-\item [\textbf{int cprintf(char {*}fmt,... ); }] |
-\item [\textbf{Description:}] \texttt{cputc}, \texttt{cupts} and \texttt{cprintf} are used |
-to print on the screen a character, a string, or a formatted string, |
-respectively. In the latter case, the standard C I/O formatting conventions are |
-used. |
-\item [\textbf{Warning:}]since these functions modify the cursor position, they are not |
-reentrant, and must be used in a mutually exclusive fashion. |
-\end{description} |
- |
-\begin{intest} |
-PUTC\_XY, PUTS\_XY, PRINTF\_XY, GETC\_XY \index{putc\_xy()} \index{puts\_xy()} |
-\index{printf\_xy()} \index{getc\_xy()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void putc\_xy(int x,int y,char attr,char c) }] |
-\item [\textbf{void puts\_xy(int x,int y,char attr,char {*}s) }] |
-\item [\textbf{int printf\_xy(int x,int y,char attr,char {*}fmt,...) }] |
-\item [\textbf{char getc\_xy(int x,int y,char {*}attr,char {*}c) }] |
-\item [\textbf{Description:}] These functions are similar to the previously defined ones; |
-the only difference is that since they're reentrant can be used concurrently by |
-multiple tasks (the others cannot be used for this purpose because they modify |
-the cursor's state). \texttt{getc\_xy} is used to read the charcater and its |
-attribute at a specific position on the screen. |
-\end{description} |
- |
-\begin{intest} |
-CLEAR, \_CLEAR, SCROLL, \_SCROLL \index{clear()} \index{\_clear()} |
-\index{\_scroll()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void \_clear(char c,char attr,int x1,int y1,int x2,int y2) }] |
-\item [\textbf{void clear(void) }] |
-\item [\textbf{void \_scroll(char attr,int x1,int y1,int x2,int y2) }] |
-\item [\textbf{void scroll(void) }] |
-\item [\textbf{Description:}] the \texttt{clear} and \texttt{scroll} functions are used |
-for clearing the screen and for scrolling it upwards. They are based on the |
-\texttt{\_clear()} and \texttt{\_scroll()} functions used for clearing or |
-scrolling a window (defined by \texttt{x1, y1, x2, y2}) by filling the area with |
-\texttt{attr} color and, in the case of \texttt{\_clear}, with character |
-\texttt{c} as well. |
-\end{description} |
- |
-\begin{intest} |
-SET\_ACTIVE\_PAGE, SET\_VISUAL\_PAGE,\\ |
-GET\_ACTIVE\_PAGE, GET\_VISUAL\_PAGE |
-\index{set\_active\_page()} \index{set\_visual\_page()} |
-\index{get\_active\_page()} \index{get\_visual\_page()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void set\_active\_page(int page) }] |
-\item [\textbf{void set\_visual\_page(int page) }] |
-\item [\textbf{int get\_active\_page(void) }] |
-\item [\textbf{int get\_visual\_page(void) }] |
-\item [\textbf{Description:}] The video cards working in text mode use the CGA hardware |
-scheme. In this scheme, every screen occupies 4000 bytes (80 columns x 25 rows; |
-each position is associated with two bytes, one for codifying the character and |
-another for codifying the color). The video card memory is in general bigger, |
-therefore multiple screen pages can be used simultaneously. The currently |
-visualized screen is called the \texttt{visual page}, whereas the screen the |
-output is directed to is called the \texttt{active page}. The cited functions |
-are essentially used for handling, at a given instant, the visual page or the |
-active page. SUGGESTION: if the active page or the visual page are modified, |
-they should be restored to the original (0) value on exit; the same is true for |
-the cursor. |
-\end{description} |
- |
-\begin{intest} |
-PLACE, CURSOR, CURSOR\_INFO |
-\index{place()} \index{cursor()} \index{cursor\_info()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void place(int x, int y) }] |
-\item [\textbf{void cursor(int start\_scanline, int end\_scanline) }] |
-\item [\textbf{void cursor\_info(int {*}x, int {*}y) }] |
-\item [\textbf{Description:}] These functions are used for handling the cursor. More |
-specifically, \texttt{place} sets the cursor position (\texttt{x} belongs to the |
-range 0\ldots{}79, \texttt{y} to 0\ldots{}24). |
-\end{description} |
- |
-\begin{intest} |
-CURSOR\_BLOB, CURSOR\_STD, CURSOR\_OFF |
-\index{cursor\_blob()} \index{cursor\_std()} \index{cursor\_off()} |
-\end{intest} |
- |
-\begin{description} |
-\item [\textbf{void cursor\_blob(void) }] |
-\item [\textbf{void cursor\_std(void) }] |
-\item [\textbf{void cursor\_off(void) }] |
-\item [\textbf{Description:}] These macros call the \texttt{cursor()} function to set the |
-cursor shape to be a big rectangle, the standard underscore, or invisible. |
-\end{description} |
/trunk/vol2/console.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol2/vol2.tex |
=================================================================== |
--- trunk/vol2/vol2.tex (revision 1677) |
+++ trunk/vol2/vol2.tex (nonexistent) |
@@ -1,74 +0,0 @@ |
-\documentclass[english]{report} |
-\usepackage[T1]{fontenc} |
-\usepackage[latin1]{inputenc} |
-\usepackage{geometry} |
-\geometry{verbose,a4paper} |
-\usepackage{makeidx} |
-\makeindex |
-\usepackage{graphicx} |
- |
-\makeatletter |
- |
-\newenvironment{intest}{\noindent\large\bf\hspace*{1pt}} |
-{\vspace*{-5pt}\\\line(1,0){433}} |
- |
-\topmargin=-0.2 truein |
-\textheight=8.6 truein |
-\textwidth=6.1 truein |
-\oddsidemargin=1cm |
-\headsep=1.3cm |
- |
-\usepackage{babel} |
-\makeatother |
-\begin{document} |
- |
-\thispagestyle{empty} |
- |
-\begin{center}{\LARGE S.Ha.R.K. User Manual}\end{center}{\LARGE \par} |
-\vfill{} |
- |
-\begin{center}{\large Volume II}\end{center} |
- |
-\begin{center}{\large Programming Libraries}\end{center}{\large \par} |
-\vfill{} |
- |
-\begin{center}Written by\end{center} |
-\begin{center}Giorgio Buttazzo (giorgio at sssup.it)\end{center} |
-\begin{center}Paolo Gai (pj at sssup.it)\end{center} |
-\begin{center}Luigi Palopoli (luigi at gandalf.sssup.it)\end{center} |
-\begin{center}Luca Abeni (luca at gandalf.sssup.it)\end{center} |
-\begin{center}Giuseppe Lipari (lipari at gandalf.sssup.it)\end{center} |
-\begin{center}Gerardo Lamastra (lamastra at sssup.it)\end{center} |
-\begin{center}Antonino Casile (casile at sssup.it)\end{center} |
-\begin{center}Massimiliano Giorgi (massy at gandalf.sssup.it)\end{center} |
-\begin{center}Tullio Facchinetti (tullio.facchinetti at unipv.it)\end{center} |
-\vfill{} |
- |
-\begin{center}\includegraphics[width=2cm]{../common/sssup.ps}\end{center} |
- |
-\begin{center}Scuola Superiore di Studi e Perfezionamento S. Anna\end{center} |
-\begin{center}RETIS Lab\end{center} |
-\begin{center}Via Carducci, 40 - 56100 Pisa\end{center} |
- |
-\pagebreak |
-\tableofcontents{} |
- |
-\include{intro} |
-\include{linuxc26} |
-\include{input} |
-\include{graph} |
-\include{fg} |
-\include{cpu} |
-\include{netlib} |
-\include{rtc} |
-\include{soundlib} |
-\include{console} |
-\include{file} |
-\include{snapshot} |
- |
-\printindex{} |
- |
-\bibliographystyle{alpha} |
-\bibliography{../common/biblio} |
- |
-\end{document} |
/trunk/vol2/vol2.tex |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol2/images/driver1.dia |
=================================================================== |
--- trunk/vol2/images/driver1.dia (revision 1677) |
+++ trunk/vol2/images/driver1.dia (nonexistent) |
@@ -1,11 +0,0 @@ |
- í[Ûrâ8}ÏW¸W"$ù>2Åd²5©ÉÎTd/OÀ |
-xÇØ-BxÙo_ÉfBð ²@U ì4ÝÔ§OwK|üô4òGÅ^´T ªÐ º^0h©÷w¿ÙꧮG>ð¿ADF |
-ÿF«:dlü¡ÙN§ÀÅ ð½ ió_âû¤É êÅ¢¼TàFĽù]ÂXäõ&*ÑÚ#ý(®JÍåú¡FÊ#ñ[êéCòRs5Í%=+tÉö"J~«üå8UTiU;±ÇEØl)Ñ#Þ_ÈÌ¥b..NÛúiúHó]EZjH4ð¼>7~:Øã_ó°½|¾||^ÜÇòfzaèS¤X4¡ÕíÄ}âsY5T]ûÇX¸æùo2ôö3z¶Eâ òÜÕ@\(Ñ2õ\6ì>I®TûLöG/öz>-zz/`;S?Ûúìê$ÑxñõÞj+ -÷®M -jlîÏ¥ñ7[)Ñ45×ÍzVnÓIoeÈ71áæê?/hW/ð<â¼ °÷í³ùðn \¹Êò9|RYÏ!<·¥þËÓWÆ#_n~Æá³Ù -#;Ü|°(SÝëe5GüÙI0ðiªÝÑÐùÛ¹46«fútÔíQ§÷]&QDüY×Ð=¤Þ`ÈÊkÕt{î2 H\B³xN»ãzú,zsáå¸ý}b~êú=rDÇG0°Ñ0Î?αίø%SÑA5Q=#S¶IZ»$ÉoÁW:àP¾Q8¿$^A:eL°"Ãâ¾ò@F?ãÏGXUb6ѯwúÕ¯Ô¤ÌëA|û'ÈÁ°çõL,ûÝzß«b#øÒ2Âzx>;F´xÙh0¤"«">ÝM (æG\Ùüh~ÄXð#ÂÒ ÒGHß[½XÙ{Ôj$÷FÌìÐáe}âþ¦fq@ ÷&o®¿ßÿ¥``\ý~Ó¾»þñ]¹iÿ}Õyg|!1sÎxdM¬©×gM¤É¦M'ëJdJçͪ:ðÊR´v¨q@Äiì ²ÊH¨-yà¤iìGiùµÝùòg»su,)w^RÙñØѬ!°&µ¨Äø¹ª³£ìª²ú6aGk«JbTUiÕv}òKÑo5@HÔ60DÉQÐPäëÎÕåÝIûòòêööÝl¦,ôÀ#_î$jÜx-víZO -ÉM« -Dzťniç<¡Ö!Æ<@£ûatià&CÙr M,Ë}¤?Î/:G°¿nDQ8Í*^¸¤VSsקÁ`Uj Q×Ää -Úb¹GqÇsDñë?ÊCEÄV¤*,L¶'ÅV"§t7tv@ãºÆÑÁ=Z2÷Q¹!èXzrp@ÌMà@l |
-XÚÙaY6ÌbV9¢óÀÐiþ?èDp{7X.WêÓ@8º.¨Û&RÚ²1[!Ú6NöÊÁéÉ7IXÌækaí¢òJniÐLaik Wj Áz -®\L!¢y È4%#³¸jð9C<Ã!ÑuiÀðÄR»±u´Q?XÄ,ªMw,Mj>C:[ÿ¬ØAu³ Øüã\ ÷¡!Û¹þãêAÒ÷,ó^w}Xøfû°¨ö¹¯X3]f¤0éØPv ÃóX@Óp»Dä<¶h ç*çkÇöf°(S\ê9ؼ«mþ¦×ÉïÅ.N~PvqòK iD> |
\ No newline at end of file |
/trunk/vol2/images/driver1.dia |
---|
Property changes: |
Deleted: svn:executable |
## -1 +0,0 ## |
-* |
\ No newline at end of property |
Index: trunk/vol2/images/driver2.dia |
=================================================================== |
--- trunk/vol2/images/driver2.dia (revision 1677) |
+++ trunk/vol2/images/driver2.dia (nonexistent) |
@@ -1,27 +0,0 @@ |
- í][SÛH~ϯP9/»U¦ïaÈa]*LÂrÝ}J ¬íØk/ûÛ÷tË KÛÝÚ¨JT%LÓ§O÷Ñ÷}§oüòëÙ4ºMæ4ÏöáAdù8Í&{ó³w?éÁ¯o^ý2NãáßdÏ"ølaöWEqýóÎÎÝÝÞ/â"£izÉÎãé4ÞB;7¯¢èÛ |
-ÆqÛÏÆE1O/n$ÊâY²7¸/ÿÌól<(K-Ë]æÓ|ÝÆÓ½ÁëÏîk°³¬fçI=ÏÔ}OyÿÑ\5/c6©ú:W«]ç÷×+Eê±ÿSfYj ²É×ûüuÙ¤åuÕ5´ÑH1ç4[µ}3-;"M)ýÚë¸obÞÄ<¼tñé:ó8-VÍ\äù4³ÒR1¿I6·³¸§2ϹB6¯ýsZùwÚÿ9.^â@ùñÃÛ³î8§ãç_Ä'%j¹KÇÅÕ§/º«¬ý>Pí·é"½&uO³Â[õ÷~ª¯CãÇ_ß2ÊÚá~¬õá~rÅwÂìi®Åv¾×ëÕr/íò£ |
-ù:Óø>/«ûH»ÑróM/äÿN.¥{§Eãù8ú):K¾G""ï ->â§ýSõjè[é ëü!8C¨:½ |
-Mõ_\T«q6&&2b(ÄÑÍl¶¾Ø2M8íýI¹8:üpþÏ*£?¥ÙÍ"f7Ó¸Þì þ¹A&<ó.6{u±GãY:½6ÇÙb-{40úå¯þ-Þ&EzÛë·à*I'Wµmh ËõM<ÂEâ&vÑ3 |
-ãíÕO²YR?tIv3+m½ÔJ-Ô4ÁåÎ#Rld[èPH9¢!¡Ã`]5¦~|è8>8¤²Ç¿Ø°j=6xÁ ·¤è¶Ø Sý°A _¬ßw%" |
-3$1Éf/ó,ûdcçÊzÖQTØQ³Ys T.¯«¨Ë Æó\Ù÷Àá`ì*D¬±`Õ«:ä"[xþ#?ßvü5¶89üq@;LsÈ5À¨Äðè| -ê\¬-5$2¡ChÛAF -R:d08# -9'C FtÓðkS<~ýããÉû^>úuA×Ȥ!=¨¹¡@B¦ - ¥µÃµPÄæsÏÊM1jÚ¨q².~¡BÚL Ù]-¡¶.mOHd6ïF!Æ%¥162Æj¨¬*xd4øYVÊNë |
-íAWÂë |
-Íè |
-´Bw@VÒ~N*¨X¸^T ã%ù j|p` -±KbÃIrwoíz×ñÁa.¢,/¢yòt£»´¸~îGáè6'y4ËÇI¿"O©Äg)!)Ùz`jÀ<(¨f§·Àã\î³ XA' |
-,x`5Zëc}1פî&(øaÊp8"8v£¢ -%Ì |
-RH& -t?¼ÕLµ5^Ö$aSWòÿ< |