Knowledge

Concurrent Pascal

Source 📝

259:, are used for scheduling within monitors. Each variable of type queue can hold one process. If many processes are to be delayed in a monitor, multiple queue variables, usually organized as an array, must be provided. The single process queue variable gives a monitor full control over medium-term scheduling, but the programmer is responsible for unblocking the correct process. 262:
A process, like a class or monitor, has local variables, procedures, and an initial statement, but has no procedure entries. The initial statement ordinarily executes forever, calling local procedures, class procedures, and monitor procedures. Processes communicate through monitor procedures.
247:
Classes and monitors are similar: both package private variables and procedures with public procedures (called procedure entries). A class instance can be used by only one process, whereas a monitor instance may be shared by processes. Monitors provide the only mechanism for interprocess
266:
The configuration of processes, monitors, and classes in a Concurrent Pascal program is normally established at the start of execution, and is not changed thereafter. The communication paths between these components are established by variables passed in the
263:
Language rules prevent deadlock by imposing a hierarchy on monitors. But nothing can prevent a monitor from erroneously forgetting to unblock a delayed process (by not calling continue) so the system can still effectively hang up through programming errors.
234:
These omissions make it possible to guarantee, by a combination of compile-time checks and minimal run-time checking in the threaded-code interpreter, that a program can not damage itself or another program by addressing outside its allotted space.
958: 951: 178:, is used as the language for applications programs run by the operating systems written in Concurrent Pascal. Both languages are extensions of 238:
Concurrent Pascal includes class, monitor, and process data types. Instances of these types are declared as variables, and initialized in an
1318: 944: 1059: 251:
Only one process can execute within a given monitor instance at a time. A built in data type, the queue, together with operations
976: 1323: 924: 1172: 1248: 1054: 999: 221: 1278: 984: 967: 279:
The following example shows the declaration of a simple monitor, and its use by two communicating processes.
183: 136: 113: 51: 1048: 1014: 101: 1202: 1272: 1243: 1187: 1212: 216: 187: 97: 1192: 1177: 1099: 271:
statements, since class and monitor instance variables cannot be used as procedure parameters.
34: 30: 198:
Several constructs in Pascal were removed from Concurrent Pascal for simplicity and security:
156: 148: 38: 25: 8: 164: 1230: 1197: 1073: 108: 1044: 936: 920: 152: 63: 1296: 1135: 1094: 894: 160: 58: 1115: 1312: 1222: 1125: 1079: 994: 989: 898: 190:. The following describes how Concurrent Pascal differs from Wirth's Pascal. 179: 168: 48: 883: 1207: 1130: 1120: 227: 1150: 1140: 1069: 1019: 93: 88: 1182: 1145: 1084: 211: 1064: 770:"declare instances of the monitor, producer, and consumer" 1290: 1284: 1266: 1029: 128: 1089: 1004: 773:"give the producer and consumer access to the monitor" 132: 116: 1260: 240: 205: 1164: 966: 1310: 248:communication in a Concurrent Pascal program. 952: 914: 881: 884:"The programming language Concurrent Pascal" 959: 945: 891:IEEE Transactions on Software Engineering 755:"get an item from the monitor" 917:The Architecture of Concurrent Programs 677:"pass an item to the monitor" 193: 1311: 857:"start the consumer process" 842:"start the producer process" 335:"used by only two processes" 940: 653:"execute in a loop forever" 464:"Gets item from the buffer" 350:"true if an item is saved:" 910: 908: 314:"saved item is an integer" 226:File types, and associated standard 186:, and share a common threaded code 13: 1319:Pascal programming language family 827:"initialize the monitor" 689:"Consumer uses a buffer" 605:"Producer uses a buffer" 581:"Initialize the monitor" 287:"Bounded buffer monitor" 14: 1335: 905: 882:Brinch Hansen, Per (June 1975). 1249:Comparison of Pascal and Delphi 353:"Puts item in buffer" 875: 1: 1324:Pascal (programming language) 868: 758:"consume the item" 572:"unblock producer" 557:"mark as not full" 455:"unblock consumer" 7: 968:Pascal programming language 915:Brinch Hansen, Per (1977). 656:"produce an item" 75:; 50 years ago 10: 1340: 1244:Comparison of Pascal and C 521:"block if empty" 274: 1239: 1221: 1163: 1108: 1037: 1028: 975: 422:"save the item" 404:"block if full" 127: 122: 107: 87: 69: 57: 44: 24: 1213:Visual Component Library 899:10.1109/tse.1975.6312840 539:"get the item" 440:"mark as full" 281: 212:Procedures as parameters 1193:Object Windows Library 167:monitoring systems on 208:statement, and labels 174:A separate language, 194:Language description 157:concurrent computing 149:programming language 16:Programming language 165:real-time computing 70:First appeared 21: 1231:Pascal MicroEngine 94:Static and dynamic 19: 1306: 1305: 1159: 1158: 1010:Concurrent Pascal 926:978-0-13-044628-2 919:. Prentice Hall. 176:Sequential Pascal 161:operating systems 159:programs such as 153:Per Brinch Hansen 145:Concurrent Pascal 142: 141: 89:Typing discipline 64:Per Brinch Hansen 20:Concurrent Pascal 1331: 1297:Component Pascal 1257: 1136:Microsoft Pascal 1095:Pic Micro Pascal 1035: 1034: 961: 954: 947: 938: 937: 931: 930: 912: 903: 902: 888: 879: 864: 861: 858: 855: 852: 849: 846: 843: 840: 837: 834: 831: 828: 825: 822: 819: 816: 813: 810: 807: 804: 801: 798: 795: 792: 789: 786: 783: 780: 777: 774: 771: 768: 765: 762: 759: 756: 753: 750: 747: 744: 741: 738: 735: 732: 729: 726: 723: 720: 717: 714: 711: 708: 705: 702: 699: 696: 693: 690: 687: 684: 681: 678: 675: 672: 669: 666: 663: 660: 657: 654: 651: 648: 645: 642: 639: 636: 633: 630: 627: 624: 621: 618: 615: 612: 609: 606: 603: 600: 597: 594: 591: 588: 585: 582: 579: 576: 573: 570: 567: 564: 561: 558: 555: 552: 549: 546: 543: 540: 537: 534: 531: 528: 525: 522: 519: 516: 513: 510: 507: 504: 501: 498: 495: 492: 489: 486: 483: 480: 477: 474: 471: 468: 465: 462: 459: 456: 453: 450: 447: 444: 441: 438: 435: 432: 429: 426: 423: 420: 417: 414: 411: 408: 405: 402: 399: 396: 393: 390: 387: 384: 381: 378: 375: 372: 369: 366: 363: 360: 357: 354: 351: 348: 345: 342: 339: 336: 333: 330: 327: 324: 321: 318: 315: 312: 309: 306: 303: 300: 297: 294: 291: 288: 285: 270: 258: 254: 243: 83: 81: 76: 59:Designed by 22: 18: 1339: 1338: 1334: 1333: 1332: 1330: 1329: 1328: 1309: 1308: 1307: 1302: 1255: 1235: 1217: 1155: 1104: 1024: 971: 965: 935: 934: 927: 913: 906: 886: 880: 876: 871: 866: 865: 862: 859: 856: 853: 850: 847: 844: 841: 838: 835: 832: 829: 826: 823: 820: 817: 814: 811: 808: 805: 802: 799: 796: 793: 790: 787: 784: 781: 778: 775: 772: 769: 766: 763: 760: 757: 754: 751: 748: 745: 742: 739: 736: 733: 730: 727: 724: 721: 718: 715: 712: 709: 706: 703: 700: 697: 694: 691: 688: 685: 682: 679: 676: 673: 670: 667: 664: 661: 658: 655: 652: 649: 646: 643: 640: 637: 634: 631: 628: 625: 622: 619: 616: 613: 610: 607: 604: 601: 598: 595: 592: 589: 586: 583: 580: 577: 574: 571: 568: 565: 562: 559: 556: 553: 550: 547: 544: 541: 538: 535: 532: 529: 526: 523: 520: 517: 514: 511: 508: 505: 502: 499: 496: 493: 490: 487: 484: 481: 478: 475: 472: 469: 466: 463: 460: 457: 454: 451: 448: 445: 442: 439: 436: 433: 430: 427: 424: 421: 418: 415: 412: 409: 406: 403: 400: 397: 394: 391: 388: 385: 382: 379: 376: 373: 370: 367: 364: 361: 358: 355: 352: 349: 346: 343: 340: 337: 334: 331: 328: 325: 322: 319: 316: 313: 310: 307: 304: 301: 298: 295: 292: 289: 286: 283: 277: 268: 256: 252: 239: 202:Variant records 196: 79: 77: 74: 73:April 1974 17: 12: 11: 5: 1337: 1327: 1326: 1321: 1304: 1303: 1301: 1300: 1294: 1288: 1282: 1276: 1270: 1264: 1258: 1252: 1251: 1246: 1240: 1237: 1236: 1234: 1233: 1227: 1225: 1219: 1218: 1216: 1215: 1210: 1205: 1200: 1195: 1190: 1185: 1180: 1175: 1169: 1167: 1161: 1160: 1157: 1156: 1154: 1153: 1148: 1143: 1138: 1133: 1128: 1123: 1118: 1116:Virtual Pascal 1112: 1110: 1106: 1105: 1103: 1102: 1097: 1092: 1087: 1082: 1077: 1067: 1062: 1057: 1052: 1041: 1039: 1032: 1026: 1025: 1023: 1022: 1017: 1012: 1007: 1002: 997: 992: 987: 981: 979: 973: 972: 964: 963: 956: 949: 941: 933: 932: 925: 904: 893:(2): 199–207. 873: 872: 870: 867: 282: 276: 273: 232: 231: 224: 219: 214: 209: 203: 195: 192: 140: 139: 125: 124: 120: 119: 111: 105: 104: 91: 85: 84: 71: 67: 66: 61: 55: 54: 46: 42: 41: 28: 15: 9: 6: 4: 3: 2: 1336: 1325: 1322: 1320: 1317: 1316: 1314: 1298: 1295: 1292: 1289: 1286: 1283: 1280: 1277: 1274: 1271: 1268: 1265: 1262: 1259: 1254: 1253: 1250: 1247: 1245: 1242: 1241: 1238: 1232: 1229: 1228: 1226: 1224: 1223:Microcomputer 1220: 1214: 1211: 1209: 1206: 1204: 1201: 1199: 1196: 1194: 1191: 1189: 1186: 1184: 1181: 1179: 1176: 1174: 1171: 1170: 1168: 1166: 1162: 1152: 1149: 1147: 1144: 1142: 1139: 1137: 1134: 1132: 1129: 1127: 1126:Borland Kylix 1124: 1122: 1119: 1117: 1114: 1113: 1111: 1107: 1101: 1098: 1096: 1093: 1091: 1088: 1086: 1083: 1081: 1080:PascalABC.NET 1078: 1075: 1071: 1068: 1066: 1063: 1061: 1058: 1056: 1053: 1050: 1046: 1043: 1042: 1040: 1036: 1033: 1031: 1027: 1021: 1018: 1016: 1013: 1011: 1008: 1006: 1003: 1001: 998: 996: 995:Pascal Script 993: 991: 990:Object Pascal 988: 986: 983: 982: 980: 978: 974: 969: 962: 957: 955: 950: 948: 943: 942: 939: 928: 922: 918: 911: 909: 900: 896: 892: 885: 878: 874: 280: 272: 264: 260: 249: 245: 242: 236: 229: 225: 223: 222:Pointer types 220: 218: 217:Packed arrays 215: 213: 210: 207: 204: 201: 200: 199: 191: 189: 185: 181: 180:Niklaus Wirth 177: 172: 170: 169:shared memory 166: 162: 158: 154: 150: 146: 138: 134: 130: 126: 123:Influenced by 121: 118: 115: 112: 110: 106: 103: 99: 95: 92: 90: 86: 72: 68: 65: 62: 60: 56: 53: 50: 47: 43: 40: 36: 32: 29: 27: 23: 1208:Turbo Vision 1131:Turbo Pascal 1121:Apple Pascal 1109:Discontinued 1009: 916: 890: 877: 278: 265: 261: 250: 246: 237: 233: 228:input/output 197: 175: 173: 155:for writing 151:designed by 144: 143: 1141:UCSD Pascal 1070:Free Pascal 1020:SuperPascal 244:statement. 188:interpreter 171:computers. 1313:Categories 1256:Related to 1183:FireMonkey 1151:Pascal/MT+ 1146:JRT Pascal 1085:GNU Pascal 1060:VSI Pascal 869:References 230:procedures 39:concurrent 35:structured 31:Imperative 1065:IP Pascal 1030:Compilers 467:procedure 356:procedure 26:Paradigms 1291:Oberon-2 1285:Modula-3 1267:Modula-2 1198:OpenWire 977:Dialects 809:Consumer 797:Producer 692:consumer 608:producer 560:continue 443:continue 257:continue 129:ALGOL 60 109:Platform 1090:Turbo51 1074:Lazarus 1055:Oxygene 1049:history 1038:Current 1005:Clascal 1000:Oxygene 725:Integer 698:process 641:Integer 614:process 488:Integer 374:Integer 344:Boolean 308:Integer 296:Monitor 275:Example 80:1974-04 78: ( 1299:(1991) 1293:(1991) 1287:(1988) 1281:(1986) 1279:Oberon 1275:(1983) 1269:(1977) 1263:(1958) 1045:Delphi 985:Pascal 970:family 923:  785:Buffer 710:Buffer 626:Buffer 515:emptyq 449:emptyq 323:emptyq 290:buffer 184:Pascal 137:Pascal 133:Simula 117:PDP 11 98:strong 52:Pascal 45:Family 1261:ALGOL 1015:Joyce 887:(PDF) 815:begin 734:cycle 731:begin 650:cycle 647:begin 596:false 584:begin 566:fullq 551:false 533:saved 509:delay 494:begin 470:entry 407:saved 398:fullq 392:delay 380:begin 359:entry 329:Queue 317:fullq 302:saved 253:delay 147:is a 49:Wirth 921:ISBN 851:pass 845:cons 836:pass 830:prod 821:pass 818:init 803:cons 791:prod 779:pass 749:item 737:pass 719:item 704:pass 671:item 659:pass 635:item 620:pass 587:full 542:full 524:item 506:then 503:full 482:item 434:true 425:full 416:item 389:then 386:full 368:item 338:full 284:type 269:init 255:and 241:init 206:Goto 163:and 135:67, 102:safe 1273:Ada 1203:RTL 1188:LCL 1178:FCL 1173:CLX 1165:API 1100:ACK 895:doi 860:end 776:var 764:end 761:end 743:get 716:var 683:end 680:end 665:put 632:var 599:end 575:end 500:not 479:var 473:get 458:end 362:put 299:var 182:'s 114:DEC 1315:: 907:^ 889:. 839:), 752:); 713:); 629:); 518:); 497:if 491:); 401:); 383:if 377:); 131:, 100:, 96:, 37:, 33:, 1076:) 1072:( 1051:) 1047:( 960:e 953:t 946:v 929:. 901:. 897:: 863:. 854:) 848:( 833:( 824:, 812:; 806:: 800:; 794:: 788:; 782:: 767:; 746:( 740:. 728:; 722:: 707:: 701:( 695:= 686:; 674:) 668:( 662:. 644:; 638:: 623:: 617:( 611:= 602:; 593:= 590:: 578:; 569:) 563:( 554:; 548:= 545:: 536:; 530:= 527:: 512:( 485:: 476:( 461:; 452:) 446:( 437:; 431:= 428:: 419:; 413:= 410:: 395:( 371:: 365:( 347:; 341:: 332:; 326:: 320:, 311:; 305:: 293:= 82:)

Index

Paradigms
Imperative
structured
concurrent
Wirth
Pascal
Designed by
Per Brinch Hansen
Typing discipline
Static and dynamic
strong
safe
Platform
DEC
PDP 11
ALGOL 60
Simula
Pascal
programming language
Per Brinch Hansen
concurrent computing
operating systems
real-time computing
shared memory
Niklaus Wirth
Pascal
interpreter
Goto
Procedures as parameters
Packed arrays

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.