home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1996 September / Simtel-MSDOS-Sep1996-CD2.iso / disc2 / ada / smallada.doc < prev    next >
Text File  |  1993-06-05  |  12KB  |  268 lines

  1. S M A L L A d a   1 9 9 1
  2. IBM PC-family version
  3.  
  4. Department of Electrical Engineering and Computer Science
  5. The George Washington University
  6. Washington, DC 20052 USA
  7.  
  8. This is a compiler/interpreter for a part of the Ada language, namely
  9. the "Pascal subset" plus the Ada tasking support. It is not intended
  10. ever to be a full Ada compiler, rather a vehicle for teaching, learning,
  11. and experimenting with concurrent programming. The compiler is quite
  12. fast, producing P-code which is then interpreted by the interpreter.
  13.  
  14. The system will run on an IBM PC (or compatible) with the following
  15. minimum configuration: 640K of memory; one disk drive. A hard disk will
  16. greatly improve the speed. The entire system runs in RAM with no disk
  17. accesses, so expect capacity to be limited. 250 statements or so can
  18. be safely accommodated.
  19.  
  20. SmallAda executables and demo programs are distributed as a self-
  21. extracting archive created by LHA. To install SmallAda, just create a 
  22. directory on your hard disk called, say, smallada, move to that
  23. directory, and execute the self-extracting archive sm-archv directly
  24. from your diskette. If your diskette is in drive A:, just type
  25. A:\SM-ARCHV.
  26.  
  27. The current version is not particularly robust, rather it is a preliminary
  28. step toward effective window-oriented monitoring of task execution.
  29.  
  30. This package may be copied and used for educational purposes but not for
  31. profit; please let us know by e-mail or regular mail how you like the idea 
  32. of this package and what you are doing with it. The more users we know
  33. we have, the better our case for getting funding to continue the work.
  34.  
  35. project supervised by
  36. Prof. Michael B. Feldman
  37. Department of Electrical Engineering and Computer Science
  38. The George Washington University
  39. Washington, DC 20052
  40. 202-994-5253 (voice)
  41. 202-994-5294 (fax)
  42. mfeldman@seas.gwu.edu
  43.  
  44. authors:
  45. 1986 Charles Schoening             DOS version of CoPascal
  46. 1987 Frederick C. Hathorn          conversion of CoPascal to Ada
  47. 1988 Stuart Cramer and Jay Kurtz   refinement of tasking model
  48. 1989 Arthur V. Lopes               window-oriented monitoring for IBM-PC
  49. 1990 Manuel A. Perez               Macintosh version
  50. 1990 Arthur V. Lopes               integrated environment for IBM-PC
  51. 1991 Amr El-Kadi                   user-selectable task scheduling
  52.  
  53. HOW TO RUN THE PC PROGRAM
  54. =========================
  55.  
  56. To run SMALLAda PC you will need the following files:
  57.  
  58. SMALLADA.EXE    -- Small Ada integrated environment
  59. SMADA-IN.AVL    -- Small Ada interpreter pseudo code; it can be tunned
  60.                 -- to suit any level of interpreter monitoring
  61.  
  62. Type SMALLADA RACE <enter>. You will be placed in the editor mode. To compile
  63. and run the race program follow these steps: press F10. A menu will appear
  64. on the top of your screen. Press C, for compiler. Then a sub menu will be
  65. displayed. Press E (or <enter>. This will start the compilation process.
  66. If the program is correctly compiled then it will run thereafter. If an
  67. error is found an error message will be issued and after pressing any key
  68. the editor will be activated. The cursor will be at the line where the
  69. error was found.
  70.  
  71. The program will run much faster if you disable the window-oriented
  72. execution monitoring by pressing <INS>, which toggles monitoring on and
  73. off. If monitoring is enabled, pressing <DEL> toggles step-by-step
  74. execution on and off. With stepped execution on, pressing the space
  75. bar moves through each source line.
  76.  
  77. You can create and compile your own Ada programs, but we make no promises
  78. about which parts of the language will be handled correctly. We assure you
  79. that there is no support for packages, generics, exceptions, access types
  80. and dynamic data structures. Some of this may change in future versions,
  81. but we make no commitment to support full Ada. And don't be surprised if
  82. the compiler hangs here and there: error repair is in a rather primitive state.
  83. If the compiler actually finds your errors, it will display the messsages in
  84. a window.
  85.  
  86.  
  87. THE SmallAda IBM-PC RUNTIME ENVIRONMENT
  88. =======================================
  89.  
  90. The runtime monitoring of tasking is really the whole point of this
  91. project.
  92.  
  93. Each task is given a window. If there are more than five tasks some tasks
  94. will share a physical window.
  95.  
  96. To obtain help on the runtime environment press F1 while a program is running.
  97. In summary, you can control the overall execution speed of the interpreter
  98. (to "slow down the action"), and exert some influence on the open windows.
  99. There is no magic in all this runtime monitoring: it all takes machine cycles.
  100. If you wish your program to run faster, remove all the monitoring windows
  101. (by pressing INS while they are open). You can also step through execution,
  102. source line by source line, by pressing INS while windows are open. Then
  103. pressing the space bar steps through one source line.
  104.  
  105.  
  106. THE SmallAda EDITOR
  107. ===================
  108.  
  109. The editor was adapted from the Turbo Pascal Editor Toobox Version 4.0.
  110. The editor works much like the Wordstar editor. Next some of its basic
  111. options are shown.
  112.  
  113.  
  114. Function                        Keystrokes
  115.  
  116. BASIC MOVEVMENT COMMANDS:
  117.  
  118. Character left:                 left arrow or ^S (^ ==> Control)
  119. Character right                 right arrow or ^D
  120. Word left                       ^left arrow or ^A
  121. Word right                      ^right arrow or ^F
  122. Line up                         up arrow or ^E
  123. Line down                       down arrow or ^X
  124. Scroll up                       ^W
  125. Scroll down                     ^Z
  126. Page up                         PgUp or ^R
  127. Page down                       PGDn or ^C
  128. Beginning of Line               Home or ^Q S
  129. End of Line                     End or ^Q D
  130. Tab                             Tab or ^I
  131. Backward tab                    Shift tab
  132.  
  133. BASIC EDITING COMMANDS:
  134.  
  135. New line                        Enter or ^M
  136. Insert line                     ^N
  137. Delete current character        Del or ^G
  138. Delete character left           Backspace or ^H
  139. Delete word                     ^T
  140. Delete to end of line           ^Q Y
  141. Activate menus                  F10
  142. Abort command                   ^U
  143.  
  144.  
  145.  
  146. THE SmallAda TASKING MODEL
  147. ===========================
  148.  
  149. We have tried to be reasonably faithful to Ada tasking. The scheduler is
  150. designed to show some of the important issues of concurrent programming,
  151. therefore time-slicing is implemented, and the length of the slice is
  152. randomly determined. Also, at each rescheduling point the next task to
  153. be scheduled is selected randomly. This is to give a reasonable model of
  154. nondeterministic (unpredictable) behavior, and serves to highlight the
  155. need for mutual exclusion. The dining philosophers examples on the
  156. disk, taken together, show this point rather well.
  157.  
  158. Current incompletenesses in the tasking model: only named tasks (i.e. no
  159. task types), no dynamically created tasks. We also don't support nested
  160. task declarations; all tasks must be declared in MAIN's declarative section.
  161.  
  162. The "select" statement is functional including the "terminate" alternative;
  163. checking for termination is tricky in Ada and you might find that some
  164. select structures with terminate alternatives deadlock or don't work at all.
  165. In general, be gentle with the select statement; try to avoid tricky or
  166. pathological code, which will surely choke the compiler or interpreter!
  167.  
  168. You will also discover quickly that though the "delay" statement is functional,
  169. the elapsed time to expiration of the delay is considerably more than was
  170. requested in the delay statement. As it happens, this is correct Ada, as the
  171. standard says only that a task will be suspended for _at least_ the amount
  172. of time requested. This is to take account of the likelihood that contention
  173. will make it impossible for a task to take immediate control when it wakes
  174. up from a nap. Indeed, we think that the sometimes too-long delays
  175. may be due to the interference in the interpreter caused by all the references
  176. to the user interface for monitoring purposes. The relationship of the delay to 
  177. reality depends upon your PC's speed as well. We are working on this problem
  178. but do not yet see an obvious solution. So take the time given in a delay
  179. statement with a grain of salt, please.
  180.  
  181. If you have tasks in finite (counting) loops, if they complete but there are 
  182. other tasks with infinite loops that can never terminate, the system may 
  183. detect no activity and report a deadlock state. 
  184.  
  185. The current version now supports user-selected task scheduling. Pressing
  186. <alt-F10> during execution opens a window giving scheduler options.
  187.  
  188.  
  189. THE SmallAda SUPPORT PACKAGE (SMALL_SP.PKG)
  190. ===========================================
  191.  
  192. A large number of "intrinsic" library subroutines are included in a
  193. pseudo-package called SMALL_SP.PKG. It is not necessary (or proper) to
  194. compile this package; it is included in the environment. It is necessary
  195. to begin each program with a context clause
  196.  
  197. WITH SMALL_SP; USE SMALL_SP;
  198.  
  199. to give the effect of writing genuine Ada. A specification for this
  200. package is included in the distribution; it includes I/O routines,
  201. math functions, and the like. This is not really good Ada-like decomposition,
  202. and we will change it in subsequent versions of the system. Meanwhile, use
  203. the package spec as a guide to all the intrinsic routines. Note especially
  204. that the formatting parameters supplied to the I/O procedures are more
  205. Pascal-like than Ada-like. This will change later to look more like
  206. standard TEXT_IO.
  207.  
  208.  
  209. THE DEMONSTRATION PROGRAMS
  210. ==========================
  211.  
  212. We have supplied a set of what we hope will be interesting and instructive
  213. programs illustrating both the sequential aspects of the Ada subset and
  214. the tasking model.
  215.  
  216. TEST1 through TEST6 can be thought of as "validation" programs testing 
  217. specific features of the language; reading them can serve a useful purpose 
  218. in understanding our subset.
  219.  
  220. ATEST1 through ATEST4 demonstrate the differences in program behavior
  221. under different scheduling policies. Each program contains a block
  222. comment explaining its purpose in this demonstration.
  223.  
  224. SHELLSORT is what its name implies: a standard implementation of Shell sort
  225. in which the state of the array is displayed on the screen as it is sorted;
  226. RACE is a tasking program which we have used with success in concurrent
  227. programming courses: three sort algorithms are activated as Ada tasks
  228. and run in parallel.
  229.  
  230. 4TASKSEM shows the use of the semaphore primitives "exported" by the SMALL_SP
  231. pseudo-package. A semaphore SCREEN is declared and used to give mutual
  232. exclusion on the terminal screen.
  233.  
  234. Attention: semaphores are NOT Ada primitives! SmallAda was originally 
  235. constructed as a modification to the CoPascal system of Ben-Ari
  236. (as described in "Principles of Concurrent Programming", Prentice Hall 1982),
  237. and the semaphore primitives are still there from the system's last
  238. incarnation. To show how to do it in "real" Ada, we include the program
  239. 4TASKMON, in which a screen monitor task is declared.
  240.  
  241. Finally, there are three versions of Dijkstra's legendary dining philosophers
  242. problem. SmallAda has a capacity limitation of around ten tasks. We are
  243. limited to four instead of the usual five philosophers, because four diners,
  244. four chopsticks, and MAIN add up to 9 tasks. EATCHAOS is very instructive:
  245. it demonstrates why it's nice to have monitors for mutual exclusion: without
  246. a monitor guarding the screen, the display becomes rather chaotic. EAT-SEM
  247. uses the SmallAda semaphore primitives; EAT-MON does the same thing but
  248. with a "genuine" Ada monitor.
  249.  
  250. FINALLY
  251. =======
  252.  
  253. In case you are curious, the system is coded in Turbo Pascal with the
  254. Turbo Toolbox libraries used for the editor and environment. 
  255.  
  256. Please let us know about bugs; tell us what you're doing with
  257. the sytem. Good luck; have fun!
  258.  
  259.  
  260. Good luck; have fun!
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.