├── .gitignore ├── README.md ├── ch10 ├── BACKING_STORE.bin ├── addresses.txt └── correct.txt ├── ch13 ├── LockingExample.java ├── README ├── consumer.c ├── input.txt ├── producer.c └── temp.txt ├── ch19 └── DNSLookUp.java ├── ch2 ├── Makefile ├── hello.c └── simple.c ├── ch3 ├── DateClient.java ├── DateServer.java ├── fig3-30.c ├── fig3-31.c ├── fig3-32.c ├── fig3-33.c ├── fig3-34.c ├── fig3-35.c ├── multi-fork.c ├── newproc-posix.c ├── newproc-win32.c ├── pid.c ├── shm-posix-consumer.c ├── shm-posix-producer.c ├── simple-shell.c ├── unix_pipe.c ├── win32-pipe-child.c └── win32-pipe-parent.c ├── ch4 ├── Driver.java ├── SumTask.java ├── ThreadPoolExample.java ├── fig4-23.c ├── openmp.c ├── thrd-posix.c └── thrd-win32.c ├── ch5 ├── posix-rt.c ├── posix-sched.c └── project │ ├── java │ ├── Algorithm.java │ ├── CPU.java │ ├── Driver.java │ ├── README │ ├── Task.java │ ├── book.txt │ ├── rr-schedule.txt │ ├── run.txt │ └── schedule.txt │ └── posix │ ├── CPU.c │ ├── Makefile │ ├── README │ ├── book.txt │ ├── cpu.h │ ├── driver.c │ ├── list.c │ ├── list.h │ ├── pri-schedule.txt │ ├── rr-schedule.txt │ ├── schedule.txt │ ├── schedulers.h │ └── task.h ├── ch7 ├── BoundedBuffer.java └── project-1 │ ├── java │ ├── Client.java │ ├── README │ ├── Task.java │ ├── TestCancel.java │ └── ThreadPool.java │ └── posix │ ├── Makefile │ ├── README │ ├── client.c │ ├── threadpool.c │ └── threadpool.h └── ch8 └── DeadlockExample.java /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | a.out 3 | *.class 4 | *.cmd 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This contains source code for the 10th edition of 2 | "Operating System Concepts" by Silberschatz/Galvin/Gagne. 3 | Published by John Wiley & Sons 2018 4 | 5 | Source files are organized by chapter. 6 | 7 | To download all files, enter 8 | 9 | git clone https://github.com/greggagne/OSC10e.git 10 | 11 | which will clone this repository on your local machine. 12 | 13 | -- Greg Gagne June 2018. 14 | -------------------------------------------------------------------------------- /ch10/BACKING_STORE.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greggagne/osc10e/156234e9ba790c0b156d9375c93d7bc07530539e/ch10/BACKING_STORE.bin -------------------------------------------------------------------------------- /ch10/addresses.txt: -------------------------------------------------------------------------------- 1 | 16916 2 | 62493 3 | 30198 4 | 53683 5 | 40185 6 | 28781 7 | 24462 8 | 48399 9 | 64815 10 | 18295 11 | 12218 12 | 22760 13 | 57982 14 | 27966 15 | 54894 16 | 38929 17 | 32865 18 | 64243 19 | 2315 20 | 64454 21 | 55041 22 | 18633 23 | 14557 24 | 61006 25 | 62615 26 | 7591 27 | 64747 28 | 6727 29 | 32315 30 | 60645 31 | 6308 32 | 45688 33 | 969 34 | 40891 35 | 49294 36 | 41118 37 | 21395 38 | 6091 39 | 32541 40 | 17665 41 | 3784 42 | 28718 43 | 59240 44 | 40178 45 | 60086 46 | 42252 47 | 44770 48 | 22514 49 | 3067 50 | 15757 51 | 31649 52 | 10842 53 | 43765 54 | 33405 55 | 44954 56 | 56657 57 | 5003 58 | 50227 59 | 19358 60 | 36529 61 | 10392 62 | 58882 63 | 5129 64 | 58554 65 | 58584 66 | 27444 67 | 58982 68 | 51476 69 | 6796 70 | 21311 71 | 30705 72 | 28964 73 | 41003 74 | 20259 75 | 57857 76 | 63258 77 | 36374 78 | 692 79 | 43121 80 | 48128 81 | 34561 82 | 49213 83 | 36922 84 | 59162 85 | 50552 86 | 17866 87 | 18145 88 | 3884 89 | 54388 90 | 42932 91 | 46919 92 | 58892 93 | 8620 94 | 38336 95 | 64357 96 | 23387 97 | 42632 98 | 15913 99 | 15679 100 | 22501 101 | 37540 102 | 5527 103 | 63921 104 | 62716 105 | 32874 106 | 64390 107 | 63101 108 | 61802 109 | 19648 110 | 29031 111 | 44981 112 | 28092 113 | 9448 114 | 44744 115 | 61496 116 | 31453 117 | 60746 118 | 12199 119 | 62255 120 | 21793 121 | 26544 122 | 14964 123 | 41462 124 | 56089 125 | 52038 126 | 47982 127 | 59484 128 | 50924 129 | 6942 130 | 34998 131 | 27069 132 | 51926 133 | 60645 134 | 43181 135 | 10559 136 | 4664 137 | 28578 138 | 59516 139 | 38912 140 | 63562 141 | 64846 142 | 62938 143 | 27194 144 | 28804 145 | 61703 146 | 10998 147 | 6596 148 | 37721 149 | 43430 150 | 22692 151 | 62971 152 | 47125 153 | 52521 154 | 34646 155 | 32889 156 | 13055 157 | 65416 158 | 62869 159 | 57314 160 | 12659 161 | 14052 162 | 32956 163 | 49273 164 | 50352 165 | 49737 166 | 15555 167 | 47475 168 | 15328 169 | 34621 170 | 51365 171 | 32820 172 | 48855 173 | 12224 174 | 2035 175 | 60539 176 | 14595 177 | 13853 178 | 24143 179 | 15216 180 | 8113 181 | 22640 182 | 32978 183 | 39151 184 | 19520 185 | 58141 186 | 63959 187 | 53040 188 | 55842 189 | 585 190 | 51229 191 | 64181 192 | 54879 193 | 28210 194 | 10268 195 | 15395 196 | 12884 197 | 2149 198 | 53483 199 | 59606 200 | 14981 201 | 36672 202 | 23197 203 | 36518 204 | 13361 205 | 19810 206 | 25955 207 | 62678 208 | 26021 209 | 29409 210 | 38111 211 | 58573 212 | 56840 213 | 41306 214 | 54426 215 | 3617 216 | 50652 217 | 41452 218 | 20241 219 | 31723 220 | 53747 221 | 28550 222 | 23402 223 | 21205 224 | 56181 225 | 57470 226 | 39933 227 | 34964 228 | 24781 229 | 41747 230 | 62564 231 | 58461 232 | 20858 233 | 49301 234 | 40572 235 | 23840 236 | 35278 237 | 62905 238 | 56650 239 | 11149 240 | 38920 241 | 23430 242 | 57592 243 | 3080 244 | 6677 245 | 50704 246 | 51883 247 | 62799 248 | 20188 249 | 1245 250 | 12220 251 | 17602 252 | 28609 253 | 42694 254 | 29826 255 | 13827 256 | 27336 257 | 53343 258 | 11533 259 | 41713 260 | 33890 261 | 4894 262 | 57599 263 | 3870 264 | 58622 265 | 29780 266 | 62553 267 | 2303 268 | 51915 269 | 6251 270 | 38107 271 | 59325 272 | 61295 273 | 26699 274 | 51188 275 | 59519 276 | 7345 277 | 20325 278 | 39633 279 | 1562 280 | 7580 281 | 8170 282 | 62256 283 | 35823 284 | 27790 285 | 13191 286 | 9772 287 | 7477 288 | 44455 289 | 59546 290 | 49347 291 | 36539 292 | 12453 293 | 49640 294 | 28290 295 | 44817 296 | 8565 297 | 16399 298 | 41934 299 | 45457 300 | 33856 301 | 19498 302 | 17661 303 | 63829 304 | 42034 305 | 28928 306 | 30711 307 | 8800 308 | 52335 309 | 38775 310 | 52704 311 | 24380 312 | 19602 313 | 57998 314 | 2919 315 | 8362 316 | 17884 317 | 45737 318 | 47894 319 | 59667 320 | 10385 321 | 52782 322 | 64416 323 | 40946 324 | 16778 325 | 27159 326 | 24324 327 | 32450 328 | 9108 329 | 65305 330 | 19575 331 | 11117 332 | 65170 333 | 58013 334 | 61676 335 | 63510 336 | 17458 337 | 54675 338 | 1713 339 | 55105 340 | 65321 341 | 45278 342 | 26256 343 | 64198 344 | 29441 345 | 1928 346 | 39425 347 | 32000 348 | 28549 349 | 46295 350 | 22772 351 | 58228 352 | 63525 353 | 32602 354 | 46195 355 | 55849 356 | 46454 357 | 7487 358 | 33879 359 | 42004 360 | 8599 361 | 18641 362 | 49015 363 | 26830 364 | 34754 365 | 14668 366 | 38362 367 | 38791 368 | 4171 369 | 45975 370 | 14623 371 | 62393 372 | 64658 373 | 10963 374 | 9058 375 | 51031 376 | 32425 377 | 45483 378 | 44611 379 | 63664 380 | 54920 381 | 7663 382 | 56480 383 | 1489 384 | 28438 385 | 65449 386 | 12441 387 | 58530 388 | 63570 389 | 26251 390 | 15972 391 | 35826 392 | 5491 393 | 54253 394 | 49655 395 | 5868 396 | 20163 397 | 51079 398 | 21398 399 | 32756 400 | 64196 401 | 43218 402 | 21583 403 | 25086 404 | 45515 405 | 12893 406 | 22914 407 | 58969 408 | 20094 409 | 13730 410 | 44059 411 | 28931 412 | 13533 413 | 33134 414 | 28483 415 | 1220 416 | 38174 417 | 53502 418 | 43328 419 | 4970 420 | 8090 421 | 2661 422 | 53903 423 | 11025 424 | 26627 425 | 18117 426 | 14505 427 | 61528 428 | 20423 429 | 26962 430 | 36392 431 | 11365 432 | 50882 433 | 41668 434 | 30497 435 | 36216 436 | 5619 437 | 36983 438 | 59557 439 | 36663 440 | 36436 441 | 37057 442 | 23585 443 | 58791 444 | 46666 445 | 64475 446 | 21615 447 | 41090 448 | 1771 449 | 47513 450 | 39338 451 | 1390 452 | 38772 453 | 58149 454 | 7196 455 | 9123 456 | 7491 457 | 62616 458 | 15436 459 | 17491 460 | 53656 461 | 26449 462 | 34935 463 | 19864 464 | 51388 465 | 15155 466 | 64775 467 | 47969 468 | 16315 469 | 1342 470 | 51185 471 | 6043 472 | 21398 473 | 3273 474 | 9370 475 | 35463 476 | 28205 477 | 2351 478 | 28999 479 | 47699 480 | 46870 481 | 22311 482 | 22124 483 | 22427 484 | 49344 485 | 23224 486 | 5514 487 | 20504 488 | 376 489 | 2014 490 | 38700 491 | 13098 492 | 62435 493 | 48046 494 | 63464 495 | 12798 496 | 51178 497 | 8627 498 | 27083 499 | 47198 500 | 44021 501 | 32792 502 | 43996 503 | 41126 504 | 64244 505 | 37047 506 | 60281 507 | 52904 508 | 7768 509 | 55359 510 | 3230 511 | 44813 512 | 4116 513 | 65222 514 | 28083 515 | 60660 516 | 39 517 | 328 518 | 47868 519 | 13009 520 | 22378 521 | 39304 522 | 11171 523 | 8079 524 | 52879 525 | 5123 526 | 4356 527 | 45745 528 | 32952 529 | 4657 530 | 24142 531 | 23319 532 | 13607 533 | 46304 534 | 17677 535 | 59691 536 | 50967 537 | 7817 538 | 8545 539 | 55297 540 | 52954 541 | 39720 542 | 18455 543 | 30349 544 | 63270 545 | 27156 546 | 20614 547 | 19372 548 | 48689 549 | 49386 550 | 50584 551 | 51936 552 | 34705 553 | 13653 554 | 50077 555 | 54518 556 | 41482 557 | 4169 558 | 36118 559 | 9584 560 | 18490 561 | 55420 562 | 5708 563 | 23506 564 | 15391 565 | 36368 566 | 38976 567 | 50406 568 | 49236 569 | 65035 570 | 30120 571 | 62551 572 | 46809 573 | 21687 574 | 53839 575 | 2098 576 | 12364 577 | 45366 578 | 50437 579 | 36675 580 | 55382 581 | 11846 582 | 49127 583 | 19900 584 | 20554 585 | 19219 586 | 51483 587 | 58090 588 | 39074 589 | 16060 590 | 10447 591 | 54169 592 | 20634 593 | 57555 594 | 61210 595 | 269 596 | 33154 597 | 64487 598 | 61223 599 | 47292 600 | 21852 601 | 5281 602 | 45912 603 | 32532 604 | 63067 605 | 41683 606 | 20981 607 | 33881 608 | 41785 609 | 4580 610 | 41389 611 | 28572 612 | 782 613 | 30273 614 | 62267 615 | 17922 616 | 63238 617 | 3308 618 | 26545 619 | 44395 620 | 39120 621 | 21706 622 | 7144 623 | 30244 624 | 3725 625 | 54632 626 | 30574 627 | 8473 628 | 12386 629 | 41114 630 | 57930 631 | 15341 632 | 15598 633 | 59922 634 | 18226 635 | 48162 636 | 41250 637 | 1512 638 | 2546 639 | 41682 640 | 322 641 | 880 642 | 20891 643 | 56604 644 | 40166 645 | 26791 646 | 44560 647 | 38698 648 | 64127 649 | 15028 650 | 38669 651 | 45637 652 | 43151 653 | 9465 654 | 2498 655 | 13978 656 | 16326 657 | 51442 658 | 34845 659 | 63667 660 | 39370 661 | 55671 662 | 64496 663 | 7767 664 | 6283 665 | 55884 666 | 61103 667 | 10184 668 | 39543 669 | 9555 670 | 13963 671 | 58975 672 | 19537 673 | 6101 674 | 41421 675 | 45502 676 | 29328 677 | 8149 678 | 25450 679 | 58944 680 | 50666 681 | 23084 682 | 36468 683 | 33645 684 | 25002 685 | 53715 686 | 60173 687 | 46354 688 | 4708 689 | 28208 690 | 58844 691 | 22173 692 | 8535 693 | 42261 694 | 29687 695 | 37799 696 | 22566 697 | 62520 698 | 4098 699 | 47999 700 | 49660 701 | 37063 702 | 41856 703 | 5417 704 | 48856 705 | 10682 706 | 22370 707 | 63281 708 | 62452 709 | 50532 710 | 9022 711 | 59300 712 | 58660 713 | 56401 714 | 8518 715 | 63066 716 | 63250 717 | 48592 718 | 28771 719 | 37673 720 | 60776 721 | 56438 722 | 60424 723 | 39993 724 | 56004 725 | 59002 726 | 33982 727 | 25498 728 | 57047 729 | 1401 730 | 15130 731 | 42960 732 | 61827 733 | 32442 734 | 64304 735 | 30273 736 | 38082 737 | 22404 738 | 3808 739 | 16883 740 | 23111 741 | 62417 742 | 60364 743 | 4542 744 | 14829 745 | 44964 746 | 33924 747 | 2141 748 | 19245 749 | 47168 750 | 24048 751 | 1022 752 | 23075 753 | 24888 754 | 49247 755 | 4900 756 | 22656 757 | 34117 758 | 55555 759 | 48947 760 | 59533 761 | 21312 762 | 21415 763 | 813 764 | 19419 765 | 1999 766 | 20155 767 | 21521 768 | 13670 769 | 19289 770 | 58483 771 | 41318 772 | 16151 773 | 13611 774 | 21514 775 | 13499 776 | 45583 777 | 49013 778 | 64843 779 | 63485 780 | 38697 781 | 59188 782 | 24593 783 | 57641 784 | 36524 785 | 56980 786 | 36810 787 | 6096 788 | 11070 789 | 60124 790 | 37576 791 | 15096 792 | 45247 793 | 32783 794 | 58390 795 | 60873 796 | 23719 797 | 24385 798 | 22307 799 | 17375 800 | 15990 801 | 20526 802 | 25904 803 | 42224 804 | 9311 805 | 7862 806 | 3835 807 | 30535 808 | 65179 809 | 57387 810 | 63579 811 | 4946 812 | 9037 813 | 61033 814 | 55543 815 | 50361 816 | 6480 817 | 14042 818 | 21531 819 | 39195 820 | 37511 821 | 23696 822 | 27440 823 | 28201 824 | 23072 825 | 7814 826 | 6552 827 | 43637 828 | 35113 829 | 34890 830 | 61297 831 | 45633 832 | 61431 833 | 46032 834 | 18774 835 | 62991 836 | 28059 837 | 35229 838 | 51230 839 | 14405 840 | 52242 841 | 43153 842 | 2709 843 | 47963 844 | 36943 845 | 54066 846 | 10054 847 | 43051 848 | 11525 849 | 17684 850 | 41681 851 | 27883 852 | 56909 853 | 45772 854 | 27496 855 | 46842 856 | 38734 857 | 28972 858 | 59684 859 | 11384 860 | 21018 861 | 2192 862 | 18384 863 | 13464 864 | 31018 865 | 62958 866 | 30611 867 | 1913 868 | 18904 869 | 26773 870 | 55491 871 | 21899 872 | 64413 873 | 47134 874 | 23172 875 | 7262 876 | 12705 877 | 7522 878 | 58815 879 | 34916 880 | 3802 881 | 58008 882 | 1239 883 | 63947 884 | 381 885 | 60734 886 | 48769 887 | 41938 888 | 38025 889 | 55099 890 | 56691 891 | 39530 892 | 59003 893 | 6029 894 | 20920 895 | 8077 896 | 42633 897 | 17443 898 | 53570 899 | 22833 900 | 3782 901 | 47758 902 | 22136 903 | 22427 904 | 23867 905 | 59968 906 | 62166 907 | 6972 908 | 63684 909 | 46388 910 | 41942 911 | 36524 912 | 9323 913 | 31114 914 | 22345 915 | 46463 916 | 54671 917 | 9214 918 | 7257 919 | 33150 920 | 41565 921 | 26214 922 | 3595 923 | 17932 924 | 34660 925 | 51961 926 | 58634 927 | 57990 928 | 28848 929 | 49920 930 | 18351 931 | 53669 932 | 33996 933 | 6741 934 | 64098 935 | 606 936 | 27383 937 | 63140 938 | 32228 939 | 63437 940 | 29085 941 | 65080 942 | 38753 943 | 16041 944 | 9041 945 | 42090 946 | 46388 947 | 63650 948 | 36636 949 | 21947 950 | 19833 951 | 36464 952 | 8541 953 | 12712 954 | 48955 955 | 39206 956 | 15578 957 | 49205 958 | 7731 959 | 43046 960 | 60498 961 | 9237 962 | 47706 963 | 43973 964 | 42008 965 | 27460 966 | 24999 967 | 51933 968 | 34070 969 | 65155 970 | 59955 971 | 9277 972 | 20420 973 | 44860 974 | 50992 975 | 10583 976 | 57751 977 | 23195 978 | 27227 979 | 42816 980 | 58219 981 | 37606 982 | 18426 983 | 21238 984 | 11983 985 | 48394 986 | 11036 987 | 30557 988 | 23453 989 | 49847 990 | 30032 991 | 48065 992 | 6957 993 | 2301 994 | 7736 995 | 31260 996 | 17071 997 | 8940 998 | 9929 999 | 45563 1000 | 12107 1001 | -------------------------------------------------------------------------------- /ch10/correct.txt: -------------------------------------------------------------------------------- 1 | Virtual address: 16916 Physical address: 20 Value: 0 2 | Virtual address: 62493 Physical address: 285 Value: 0 3 | Virtual address: 30198 Physical address: 758 Value: 29 4 | Virtual address: 53683 Physical address: 947 Value: 108 5 | Virtual address: 40185 Physical address: 1273 Value: 0 6 | Virtual address: 28781 Physical address: 1389 Value: 0 7 | Virtual address: 24462 Physical address: 1678 Value: 23 8 | Virtual address: 48399 Physical address: 1807 Value: 67 9 | Virtual address: 64815 Physical address: 2095 Value: 75 10 | Virtual address: 18295 Physical address: 2423 Value: -35 11 | Virtual address: 12218 Physical address: 2746 Value: 11 12 | Virtual address: 22760 Physical address: 3048 Value: 0 13 | Virtual address: 57982 Physical address: 3198 Value: 56 14 | Virtual address: 27966 Physical address: 3390 Value: 27 15 | Virtual address: 54894 Physical address: 3694 Value: 53 16 | Virtual address: 38929 Physical address: 3857 Value: 0 17 | Virtual address: 32865 Physical address: 4193 Value: 0 18 | Virtual address: 64243 Physical address: 4595 Value: -68 19 | Virtual address: 2315 Physical address: 4619 Value: 66 20 | Virtual address: 64454 Physical address: 5062 Value: 62 21 | Virtual address: 55041 Physical address: 5121 Value: 0 22 | Virtual address: 18633 Physical address: 5577 Value: 0 23 | Virtual address: 14557 Physical address: 5853 Value: 0 24 | Virtual address: 61006 Physical address: 5966 Value: 59 25 | Virtual address: 62615 Physical address: 407 Value: 37 26 | Virtual address: 7591 Physical address: 6311 Value: 105 27 | Virtual address: 64747 Physical address: 6635 Value: 58 28 | Virtual address: 6727 Physical address: 6727 Value: -111 29 | Virtual address: 32315 Physical address: 6971 Value: -114 30 | Virtual address: 60645 Physical address: 7397 Value: 0 31 | Virtual address: 6308 Physical address: 7588 Value: 0 32 | Virtual address: 45688 Physical address: 7800 Value: 0 33 | Virtual address: 969 Physical address: 8137 Value: 0 34 | Virtual address: 40891 Physical address: 8379 Value: -18 35 | Virtual address: 49294 Physical address: 8590 Value: 48 36 | Virtual address: 41118 Physical address: 8862 Value: 40 37 | Virtual address: 21395 Physical address: 9107 Value: -28 38 | Virtual address: 6091 Physical address: 9419 Value: -14 39 | Virtual address: 32541 Physical address: 9501 Value: 0 40 | Virtual address: 17665 Physical address: 9729 Value: 0 41 | Virtual address: 3784 Physical address: 10184 Value: 0 42 | Virtual address: 28718 Physical address: 1326 Value: 28 43 | Virtual address: 59240 Physical address: 10344 Value: 0 44 | Virtual address: 40178 Physical address: 1266 Value: 39 45 | Virtual address: 60086 Physical address: 10678 Value: 58 46 | Virtual address: 42252 Physical address: 10764 Value: 0 47 | Virtual address: 44770 Physical address: 11234 Value: 43 48 | Virtual address: 22514 Physical address: 11506 Value: 21 49 | Virtual address: 3067 Physical address: 11771 Value: -2 50 | Virtual address: 15757 Physical address: 11917 Value: 0 51 | Virtual address: 31649 Physical address: 12193 Value: 0 52 | Virtual address: 10842 Physical address: 12378 Value: 10 53 | Virtual address: 43765 Physical address: 12789 Value: 0 54 | Virtual address: 33405 Physical address: 12925 Value: 0 55 | Virtual address: 44954 Physical address: 13210 Value: 43 56 | Virtual address: 56657 Physical address: 13393 Value: 0 57 | Virtual address: 5003 Physical address: 13707 Value: -30 58 | Virtual address: 50227 Physical address: 13875 Value: 12 59 | Virtual address: 19358 Physical address: 14238 Value: 18 60 | Virtual address: 36529 Physical address: 14513 Value: 0 61 | Virtual address: 10392 Physical address: 14744 Value: 0 62 | Virtual address: 58882 Physical address: 14850 Value: 57 63 | Virtual address: 5129 Physical address: 15113 Value: 0 64 | Virtual address: 58554 Physical address: 15546 Value: 57 65 | Virtual address: 58584 Physical address: 15576 Value: 0 66 | Virtual address: 27444 Physical address: 15668 Value: 0 67 | Virtual address: 58982 Physical address: 14950 Value: 57 68 | Virtual address: 51476 Physical address: 15892 Value: 0 69 | Virtual address: 6796 Physical address: 6796 Value: 0 70 | Virtual address: 21311 Physical address: 9023 Value: -49 71 | Virtual address: 30705 Physical address: 16369 Value: 0 72 | Virtual address: 28964 Physical address: 16420 Value: 0 73 | Virtual address: 41003 Physical address: 8747 Value: 10 74 | Virtual address: 20259 Physical address: 16675 Value: -56 75 | Virtual address: 57857 Physical address: 3073 Value: 0 76 | Virtual address: 63258 Physical address: 16922 Value: 61 77 | Virtual address: 36374 Physical address: 14358 Value: 35 78 | Virtual address: 692 Physical address: 17332 Value: 0 79 | Virtual address: 43121 Physical address: 17521 Value: 0 80 | Virtual address: 48128 Physical address: 17664 Value: 0 81 | Virtual address: 34561 Physical address: 17921 Value: 0 82 | Virtual address: 49213 Physical address: 8509 Value: 0 83 | Virtual address: 36922 Physical address: 18234 Value: 36 84 | Virtual address: 59162 Physical address: 10266 Value: 57 85 | Virtual address: 50552 Physical address: 18552 Value: 0 86 | Virtual address: 17866 Physical address: 9930 Value: 17 87 | Virtual address: 18145 Physical address: 18913 Value: 0 88 | Virtual address: 3884 Physical address: 18988 Value: 0 89 | Virtual address: 54388 Physical address: 19316 Value: 0 90 | Virtual address: 42932 Physical address: 19636 Value: 0 91 | Virtual address: 46919 Physical address: 19783 Value: -47 92 | Virtual address: 58892 Physical address: 14860 Value: 0 93 | Virtual address: 8620 Physical address: 20140 Value: 0 94 | Virtual address: 38336 Physical address: 20416 Value: 0 95 | Virtual address: 64357 Physical address: 4965 Value: 0 96 | Virtual address: 23387 Physical address: 20571 Value: -42 97 | Virtual address: 42632 Physical address: 20872 Value: 0 98 | Virtual address: 15913 Physical address: 21033 Value: 0 99 | Virtual address: 15679 Physical address: 11839 Value: 79 100 | Virtual address: 22501 Physical address: 11493 Value: 0 101 | Virtual address: 37540 Physical address: 21412 Value: 0 102 | Virtual address: 5527 Physical address: 21655 Value: 101 103 | Virtual address: 63921 Physical address: 21937 Value: 0 104 | Virtual address: 62716 Physical address: 508 Value: 0 105 | Virtual address: 32874 Physical address: 4202 Value: 32 106 | Virtual address: 64390 Physical address: 4998 Value: 62 107 | Virtual address: 63101 Physical address: 22141 Value: 0 108 | Virtual address: 61802 Physical address: 22378 Value: 60 109 | Virtual address: 19648 Physical address: 22720 Value: 0 110 | Virtual address: 29031 Physical address: 16487 Value: 89 111 | Virtual address: 44981 Physical address: 13237 Value: 0 112 | Virtual address: 28092 Physical address: 3516 Value: 0 113 | Virtual address: 9448 Physical address: 23016 Value: 0 114 | Virtual address: 44744 Physical address: 11208 Value: 0 115 | Virtual address: 61496 Physical address: 23096 Value: 0 116 | Virtual address: 31453 Physical address: 23517 Value: 0 117 | Virtual address: 60746 Physical address: 23626 Value: 59 118 | Virtual address: 12199 Physical address: 2727 Value: -23 119 | Virtual address: 62255 Physical address: 23855 Value: -53 120 | Virtual address: 21793 Physical address: 24097 Value: 0 121 | Virtual address: 26544 Physical address: 24496 Value: 0 122 | Virtual address: 14964 Physical address: 24692 Value: 0 123 | Virtual address: 41462 Physical address: 25078 Value: 40 124 | Virtual address: 56089 Physical address: 25113 Value: 0 125 | Virtual address: 52038 Physical address: 25414 Value: 50 126 | Virtual address: 47982 Physical address: 25710 Value: 46 127 | Virtual address: 59484 Physical address: 25948 Value: 0 128 | Virtual address: 50924 Physical address: 26348 Value: 0 129 | Virtual address: 6942 Physical address: 26398 Value: 6 130 | Virtual address: 34998 Physical address: 26806 Value: 34 131 | Virtual address: 27069 Physical address: 27069 Value: 0 132 | Virtual address: 51926 Physical address: 27350 Value: 50 133 | Virtual address: 60645 Physical address: 7397 Value: 0 134 | Virtual address: 43181 Physical address: 17581 Value: 0 135 | Virtual address: 10559 Physical address: 27455 Value: 79 136 | Virtual address: 4664 Physical address: 27704 Value: 0 137 | Virtual address: 28578 Physical address: 28066 Value: 27 138 | Virtual address: 59516 Physical address: 25980 Value: 0 139 | Virtual address: 38912 Physical address: 3840 Value: 0 140 | Virtual address: 63562 Physical address: 28234 Value: 62 141 | Virtual address: 64846 Physical address: 2126 Value: 63 142 | Virtual address: 62938 Physical address: 28634 Value: 61 143 | Virtual address: 27194 Physical address: 28730 Value: 26 144 | Virtual address: 28804 Physical address: 1412 Value: 0 145 | Virtual address: 61703 Physical address: 22279 Value: 65 146 | Virtual address: 10998 Physical address: 12534 Value: 10 147 | Virtual address: 6596 Physical address: 29124 Value: 0 148 | Virtual address: 37721 Physical address: 29273 Value: 0 149 | Virtual address: 43430 Physical address: 29606 Value: 42 150 | Virtual address: 22692 Physical address: 2980 Value: 0 151 | Virtual address: 62971 Physical address: 28667 Value: 126 152 | Virtual address: 47125 Physical address: 29717 Value: 0 153 | Virtual address: 52521 Physical address: 29993 Value: 0 154 | Virtual address: 34646 Physical address: 18006 Value: 33 155 | Virtual address: 32889 Physical address: 4217 Value: 0 156 | Virtual address: 13055 Physical address: 30463 Value: -65 157 | Virtual address: 65416 Physical address: 30600 Value: 0 158 | Virtual address: 62869 Physical address: 28565 Value: 0 159 | Virtual address: 57314 Physical address: 30946 Value: 55 160 | Virtual address: 12659 Physical address: 31091 Value: 92 161 | Virtual address: 14052 Physical address: 31460 Value: 0 162 | Virtual address: 32956 Physical address: 4284 Value: 0 163 | Virtual address: 49273 Physical address: 8569 Value: 0 164 | Virtual address: 50352 Physical address: 14000 Value: 0 165 | Virtual address: 49737 Physical address: 31561 Value: 0 166 | Virtual address: 15555 Physical address: 31939 Value: 48 167 | Virtual address: 47475 Physical address: 32115 Value: 92 168 | Virtual address: 15328 Physical address: 32480 Value: 0 169 | Virtual address: 34621 Physical address: 17981 Value: 0 170 | Virtual address: 51365 Physical address: 32677 Value: 0 171 | Virtual address: 32820 Physical address: 4148 Value: 0 172 | Virtual address: 48855 Physical address: 32983 Value: -75 173 | Virtual address: 12224 Physical address: 2752 Value: 0 174 | Virtual address: 2035 Physical address: 33267 Value: -4 175 | Virtual address: 60539 Physical address: 7291 Value: 30 176 | Virtual address: 14595 Physical address: 33283 Value: 64 177 | Virtual address: 13853 Physical address: 31261 Value: 0 178 | Virtual address: 24143 Physical address: 33615 Value: -109 179 | Virtual address: 15216 Physical address: 32368 Value: 0 180 | Virtual address: 8113 Physical address: 33969 Value: 0 181 | Virtual address: 22640 Physical address: 2928 Value: 0 182 | Virtual address: 32978 Physical address: 4306 Value: 32 183 | Virtual address: 39151 Physical address: 4079 Value: 59 184 | Virtual address: 19520 Physical address: 22592 Value: 0 185 | Virtual address: 58141 Physical address: 34077 Value: 0 186 | Virtual address: 63959 Physical address: 21975 Value: 117 187 | Virtual address: 53040 Physical address: 34352 Value: 0 188 | Virtual address: 55842 Physical address: 34594 Value: 54 189 | Virtual address: 585 Physical address: 17225 Value: 0 190 | Virtual address: 51229 Physical address: 32541 Value: 0 191 | Virtual address: 64181 Physical address: 4533 Value: 0 192 | Virtual address: 54879 Physical address: 3679 Value: -105 193 | Virtual address: 28210 Physical address: 34866 Value: 27 194 | Virtual address: 10268 Physical address: 14620 Value: 0 195 | Virtual address: 15395 Physical address: 31779 Value: 8 196 | Virtual address: 12884 Physical address: 30292 Value: 0 197 | Virtual address: 2149 Physical address: 35173 Value: 0 198 | Virtual address: 53483 Physical address: 35563 Value: 58 199 | Virtual address: 59606 Physical address: 26070 Value: 58 200 | Virtual address: 14981 Physical address: 24709 Value: 0 201 | Virtual address: 36672 Physical address: 35648 Value: 0 202 | Virtual address: 23197 Physical address: 35997 Value: 0 203 | Virtual address: 36518 Physical address: 14502 Value: 35 204 | Virtual address: 13361 Physical address: 36145 Value: 0 205 | Virtual address: 19810 Physical address: 36450 Value: 19 206 | Virtual address: 25955 Physical address: 36707 Value: 88 207 | Virtual address: 62678 Physical address: 470 Value: 61 208 | Virtual address: 26021 Physical address: 36773 Value: 0 209 | Virtual address: 29409 Physical address: 37089 Value: 0 210 | Virtual address: 38111 Physical address: 37343 Value: 55 211 | Virtual address: 58573 Physical address: 15565 Value: 0 212 | Virtual address: 56840 Physical address: 37384 Value: 0 213 | Virtual address: 41306 Physical address: 24922 Value: 40 214 | Virtual address: 54426 Physical address: 19354 Value: 53 215 | Virtual address: 3617 Physical address: 10017 Value: 0 216 | Virtual address: 50652 Physical address: 18652 Value: 0 217 | Virtual address: 41452 Physical address: 25068 Value: 0 218 | Virtual address: 20241 Physical address: 16657 Value: 0 219 | Virtual address: 31723 Physical address: 12267 Value: -6 220 | Virtual address: 53747 Physical address: 1011 Value: 124 221 | Virtual address: 28550 Physical address: 28038 Value: 27 222 | Virtual address: 23402 Physical address: 20586 Value: 22 223 | Virtual address: 21205 Physical address: 37845 Value: 0 224 | Virtual address: 56181 Physical address: 25205 Value: 0 225 | Virtual address: 57470 Physical address: 38014 Value: 56 226 | Virtual address: 39933 Physical address: 38397 Value: 0 227 | Virtual address: 34964 Physical address: 26772 Value: 0 228 | Virtual address: 24781 Physical address: 38605 Value: 0 229 | Virtual address: 41747 Physical address: 38675 Value: -60 230 | Virtual address: 62564 Physical address: 356 Value: 0 231 | Virtual address: 58461 Physical address: 15453 Value: 0 232 | Virtual address: 20858 Physical address: 39034 Value: 20 233 | Virtual address: 49301 Physical address: 8597 Value: 0 234 | Virtual address: 40572 Physical address: 39292 Value: 0 235 | Virtual address: 23840 Physical address: 39456 Value: 0 236 | Virtual address: 35278 Physical address: 39886 Value: 34 237 | Virtual address: 62905 Physical address: 28601 Value: 0 238 | Virtual address: 56650 Physical address: 13386 Value: 55 239 | Virtual address: 11149 Physical address: 40077 Value: 0 240 | Virtual address: 38920 Physical address: 3848 Value: 0 241 | Virtual address: 23430 Physical address: 20614 Value: 22 242 | Virtual address: 57592 Physical address: 38136 Value: 0 243 | Virtual address: 3080 Physical address: 40200 Value: 0 244 | Virtual address: 6677 Physical address: 6677 Value: 0 245 | Virtual address: 50704 Physical address: 26128 Value: 0 246 | Virtual address: 51883 Physical address: 27307 Value: -86 247 | Virtual address: 62799 Physical address: 28495 Value: 83 248 | Virtual address: 20188 Physical address: 40668 Value: 0 249 | Virtual address: 1245 Physical address: 40925 Value: 0 250 | Virtual address: 12220 Physical address: 2748 Value: 0 251 | Virtual address: 17602 Physical address: 41154 Value: 17 252 | Virtual address: 28609 Physical address: 28097 Value: 0 253 | Virtual address: 42694 Physical address: 20934 Value: 41 254 | Virtual address: 29826 Physical address: 41346 Value: 29 255 | Virtual address: 13827 Physical address: 31235 Value: -128 256 | Virtual address: 27336 Physical address: 28872 Value: 0 257 | Virtual address: 53343 Physical address: 35423 Value: 23 258 | Virtual address: 11533 Physical address: 41485 Value: 0 259 | Virtual address: 41713 Physical address: 41969 Value: 0 260 | Virtual address: 33890 Physical address: 42082 Value: 33 261 | Virtual address: 4894 Physical address: 13598 Value: 4 262 | Virtual address: 57599 Physical address: 38143 Value: 63 263 | Virtual address: 3870 Physical address: 18974 Value: 3 264 | Virtual address: 58622 Physical address: 15614 Value: 57 265 | Virtual address: 29780 Physical address: 41300 Value: 0 266 | Virtual address: 62553 Physical address: 345 Value: 0 267 | Virtual address: 2303 Physical address: 35327 Value: 63 268 | Virtual address: 51915 Physical address: 27339 Value: -78 269 | Virtual address: 6251 Physical address: 7531 Value: 26 270 | Virtual address: 38107 Physical address: 37339 Value: 54 271 | Virtual address: 59325 Physical address: 10429 Value: 0 272 | Virtual address: 61295 Physical address: 42351 Value: -37 273 | Virtual address: 26699 Physical address: 42571 Value: 18 274 | Virtual address: 51188 Physical address: 42996 Value: 0 275 | Virtual address: 59519 Physical address: 25983 Value: 31 276 | Virtual address: 7345 Physical address: 43185 Value: 0 277 | Virtual address: 20325 Physical address: 16741 Value: 0 278 | Virtual address: 39633 Physical address: 43473 Value: 0 279 | Virtual address: 1562 Physical address: 43546 Value: 1 280 | Virtual address: 7580 Physical address: 6300 Value: 0 281 | Virtual address: 8170 Physical address: 34026 Value: 7 282 | Virtual address: 62256 Physical address: 23856 Value: 0 283 | Virtual address: 35823 Physical address: 44015 Value: -5 284 | Virtual address: 27790 Physical address: 44174 Value: 27 285 | Virtual address: 13191 Physical address: 44423 Value: -31 286 | Virtual address: 9772 Physical address: 44588 Value: 0 287 | Virtual address: 7477 Physical address: 6197 Value: 0 288 | Virtual address: 44455 Physical address: 44967 Value: 105 289 | Virtual address: 59546 Physical address: 26010 Value: 58 290 | Virtual address: 49347 Physical address: 8643 Value: 48 291 | Virtual address: 36539 Physical address: 14523 Value: -82 292 | Virtual address: 12453 Physical address: 45221 Value: 0 293 | Virtual address: 49640 Physical address: 45544 Value: 0 294 | Virtual address: 28290 Physical address: 34946 Value: 27 295 | Virtual address: 44817 Physical address: 13073 Value: 0 296 | Virtual address: 8565 Physical address: 20085 Value: 0 297 | Virtual address: 16399 Physical address: 45583 Value: 3 298 | Virtual address: 41934 Physical address: 38862 Value: 40 299 | Virtual address: 45457 Physical address: 45969 Value: 0 300 | Virtual address: 33856 Physical address: 42048 Value: 0 301 | Virtual address: 19498 Physical address: 22570 Value: 19 302 | Virtual address: 17661 Physical address: 41213 Value: 0 303 | Virtual address: 63829 Physical address: 21845 Value: 0 304 | Virtual address: 42034 Physical address: 46130 Value: 41 305 | Virtual address: 28928 Physical address: 16384 Value: 0 306 | Virtual address: 30711 Physical address: 16375 Value: -3 307 | Virtual address: 8800 Physical address: 46432 Value: 0 308 | Virtual address: 52335 Physical address: 46703 Value: 27 309 | Virtual address: 38775 Physical address: 46967 Value: -35 310 | Virtual address: 52704 Physical address: 30176 Value: 0 311 | Virtual address: 24380 Physical address: 1596 Value: 0 312 | Virtual address: 19602 Physical address: 22674 Value: 19 313 | Virtual address: 57998 Physical address: 3214 Value: 56 314 | Virtual address: 2919 Physical address: 11623 Value: -39 315 | Virtual address: 8362 Physical address: 47274 Value: 8 316 | Virtual address: 17884 Physical address: 9948 Value: 0 317 | Virtual address: 45737 Physical address: 7849 Value: 0 318 | Virtual address: 47894 Physical address: 25622 Value: 46 319 | Virtual address: 59667 Physical address: 47379 Value: 68 320 | Virtual address: 10385 Physical address: 14737 Value: 0 321 | Virtual address: 52782 Physical address: 47662 Value: 51 322 | Virtual address: 64416 Physical address: 5024 Value: 0 323 | Virtual address: 40946 Physical address: 8434 Value: 39 324 | Virtual address: 16778 Physical address: 48010 Value: 16 325 | Virtual address: 27159 Physical address: 28695 Value: -123 326 | Virtual address: 24324 Physical address: 1540 Value: 0 327 | Virtual address: 32450 Physical address: 7106 Value: 31 328 | Virtual address: 9108 Physical address: 48276 Value: 0 329 | Virtual address: 65305 Physical address: 30489 Value: 0 330 | Virtual address: 19575 Physical address: 22647 Value: 29 331 | Virtual address: 11117 Physical address: 40045 Value: 0 332 | Virtual address: 65170 Physical address: 48530 Value: 63 333 | Virtual address: 58013 Physical address: 3229 Value: 0 334 | Virtual address: 61676 Physical address: 23276 Value: 0 335 | Virtual address: 63510 Physical address: 28182 Value: 62 336 | Virtual address: 17458 Physical address: 41010 Value: 17 337 | Virtual address: 54675 Physical address: 48787 Value: 100 338 | Virtual address: 1713 Physical address: 43697 Value: 0 339 | Virtual address: 55105 Physical address: 5185 Value: 0 340 | Virtual address: 65321 Physical address: 30505 Value: 0 341 | Virtual address: 45278 Physical address: 49118 Value: 44 342 | Virtual address: 26256 Physical address: 49296 Value: 0 343 | Virtual address: 64198 Physical address: 4550 Value: 62 344 | Virtual address: 29441 Physical address: 49409 Value: 0 345 | Virtual address: 1928 Physical address: 33160 Value: 0 346 | Virtual address: 39425 Physical address: 43265 Value: 0 347 | Virtual address: 32000 Physical address: 49664 Value: 0 348 | Virtual address: 28549 Physical address: 28037 Value: 0 349 | Virtual address: 46295 Physical address: 50135 Value: 53 350 | Virtual address: 22772 Physical address: 3060 Value: 0 351 | Virtual address: 58228 Physical address: 34164 Value: 0 352 | Virtual address: 63525 Physical address: 28197 Value: 0 353 | Virtual address: 32602 Physical address: 9562 Value: 31 354 | Virtual address: 46195 Physical address: 50035 Value: 28 355 | Virtual address: 55849 Physical address: 34601 Value: 0 356 | Virtual address: 46454 Physical address: 50294 Value: 45 357 | Virtual address: 7487 Physical address: 6207 Value: 79 358 | Virtual address: 33879 Physical address: 42071 Value: 21 359 | Virtual address: 42004 Physical address: 46100 Value: 0 360 | Virtual address: 8599 Physical address: 20119 Value: 101 361 | Virtual address: 18641 Physical address: 5585 Value: 0 362 | Virtual address: 49015 Physical address: 50551 Value: -35 363 | Virtual address: 26830 Physical address: 42702 Value: 26 364 | Virtual address: 34754 Physical address: 18114 Value: 33 365 | Virtual address: 14668 Physical address: 33356 Value: 0 366 | Virtual address: 38362 Physical address: 20442 Value: 37 367 | Virtual address: 38791 Physical address: 46983 Value: -31 368 | Virtual address: 4171 Physical address: 50763 Value: 18 369 | Virtual address: 45975 Physical address: 51095 Value: -27 370 | Virtual address: 14623 Physical address: 33311 Value: 71 371 | Virtual address: 62393 Physical address: 23993 Value: 0 372 | Virtual address: 64658 Physical address: 6546 Value: 63 373 | Virtual address: 10963 Physical address: 12499 Value: -76 374 | Virtual address: 9058 Physical address: 48226 Value: 8 375 | Virtual address: 51031 Physical address: 42839 Value: -43 376 | Virtual address: 32425 Physical address: 7081 Value: 0 377 | Virtual address: 45483 Physical address: 45995 Value: 106 378 | Virtual address: 44611 Physical address: 11075 Value: -112 379 | Virtual address: 63664 Physical address: 28336 Value: 0 380 | Virtual address: 54920 Physical address: 3720 Value: 0 381 | Virtual address: 7663 Physical address: 6383 Value: 123 382 | Virtual address: 56480 Physical address: 51360 Value: 0 383 | Virtual address: 1489 Physical address: 51665 Value: 0 384 | Virtual address: 28438 Physical address: 27926 Value: 27 385 | Virtual address: 65449 Physical address: 30633 Value: 0 386 | Virtual address: 12441 Physical address: 45209 Value: 0 387 | Virtual address: 58530 Physical address: 15522 Value: 57 388 | Virtual address: 63570 Physical address: 28242 Value: 62 389 | Virtual address: 26251 Physical address: 49291 Value: -94 390 | Virtual address: 15972 Physical address: 21092 Value: 0 391 | Virtual address: 35826 Physical address: 44018 Value: 34 392 | Virtual address: 5491 Physical address: 21619 Value: 92 393 | Virtual address: 54253 Physical address: 51949 Value: 0 394 | Virtual address: 49655 Physical address: 45559 Value: 125 395 | Virtual address: 5868 Physical address: 52204 Value: 0 396 | Virtual address: 20163 Physical address: 40643 Value: -80 397 | Virtual address: 51079 Physical address: 42887 Value: -31 398 | Virtual address: 21398 Physical address: 9110 Value: 20 399 | Virtual address: 32756 Physical address: 9716 Value: 0 400 | Virtual address: 64196 Physical address: 4548 Value: 0 401 | Virtual address: 43218 Physical address: 17618 Value: 42 402 | Virtual address: 21583 Physical address: 52303 Value: 19 403 | Virtual address: 25086 Physical address: 52734 Value: 24 404 | Virtual address: 45515 Physical address: 46027 Value: 114 405 | Virtual address: 12893 Physical address: 30301 Value: 0 406 | Virtual address: 22914 Physical address: 52866 Value: 22 407 | Virtual address: 58969 Physical address: 14937 Value: 0 408 | Virtual address: 20094 Physical address: 40574 Value: 19 409 | Virtual address: 13730 Physical address: 53154 Value: 13 410 | Virtual address: 44059 Physical address: 53275 Value: 6 411 | Virtual address: 28931 Physical address: 16387 Value: 64 412 | Virtual address: 13533 Physical address: 36317 Value: 0 413 | Virtual address: 33134 Physical address: 53614 Value: 32 414 | Virtual address: 28483 Physical address: 27971 Value: -48 415 | Virtual address: 1220 Physical address: 40900 Value: 0 416 | Virtual address: 38174 Physical address: 20254 Value: 37 417 | Virtual address: 53502 Physical address: 35582 Value: 52 418 | Virtual address: 43328 Physical address: 29504 Value: 0 419 | Virtual address: 4970 Physical address: 13674 Value: 4 420 | Virtual address: 8090 Physical address: 33946 Value: 7 421 | Virtual address: 2661 Physical address: 53861 Value: 0 422 | Virtual address: 53903 Physical address: 54159 Value: -93 423 | Virtual address: 11025 Physical address: 39953 Value: 0 424 | Virtual address: 26627 Physical address: 42499 Value: 0 425 | Virtual address: 18117 Physical address: 18885 Value: 0 426 | Virtual address: 14505 Physical address: 5801 Value: 0 427 | Virtual address: 61528 Physical address: 23128 Value: 0 428 | Virtual address: 20423 Physical address: 16839 Value: -15 429 | Virtual address: 26962 Physical address: 26962 Value: 26 430 | Virtual address: 36392 Physical address: 14376 Value: 0 431 | Virtual address: 11365 Physical address: 54373 Value: 0 432 | Virtual address: 50882 Physical address: 26306 Value: 49 433 | Virtual address: 41668 Physical address: 41924 Value: 0 434 | Virtual address: 30497 Physical address: 16161 Value: 0 435 | Virtual address: 36216 Physical address: 54648 Value: 0 436 | Virtual address: 5619 Physical address: 21747 Value: 124 437 | Virtual address: 36983 Physical address: 18295 Value: 29 438 | Virtual address: 59557 Physical address: 26021 Value: 0 439 | Virtual address: 36663 Physical address: 35639 Value: -51 440 | Virtual address: 36436 Physical address: 14420 Value: 0 441 | Virtual address: 37057 Physical address: 18369 Value: 0 442 | Virtual address: 23585 Physical address: 54817 Value: 0 443 | Virtual address: 58791 Physical address: 55207 Value: 105 444 | Virtual address: 46666 Physical address: 55370 Value: 45 445 | Virtual address: 64475 Physical address: 5083 Value: -10 446 | Virtual address: 21615 Physical address: 52335 Value: 27 447 | Virtual address: 41090 Physical address: 8834 Value: 40 448 | Virtual address: 1771 Physical address: 43755 Value: -70 449 | Virtual address: 47513 Physical address: 32153 Value: 0 450 | Virtual address: 39338 Physical address: 55722 Value: 38 451 | Virtual address: 1390 Physical address: 51566 Value: 1 452 | Virtual address: 38772 Physical address: 46964 Value: 0 453 | Virtual address: 58149 Physical address: 34085 Value: 0 454 | Virtual address: 7196 Physical address: 43036 Value: 0 455 | Virtual address: 9123 Physical address: 48291 Value: -24 456 | Virtual address: 7491 Physical address: 6211 Value: 80 457 | Virtual address: 62616 Physical address: 408 Value: 0 458 | Virtual address: 15436 Physical address: 31820 Value: 0 459 | Virtual address: 17491 Physical address: 41043 Value: 20 460 | Virtual address: 53656 Physical address: 920 Value: 0 461 | Virtual address: 26449 Physical address: 24401 Value: 0 462 | Virtual address: 34935 Physical address: 26743 Value: 29 463 | Virtual address: 19864 Physical address: 36504 Value: 0 464 | Virtual address: 51388 Physical address: 32700 Value: 0 465 | Virtual address: 15155 Physical address: 32307 Value: -52 466 | Virtual address: 64775 Physical address: 2055 Value: 65 467 | Virtual address: 47969 Physical address: 25697 Value: 0 468 | Virtual address: 16315 Physical address: 55995 Value: -18 469 | Virtual address: 1342 Physical address: 51518 Value: 1 470 | Virtual address: 51185 Physical address: 42993 Value: 0 471 | Virtual address: 6043 Physical address: 9371 Value: -26 472 | Virtual address: 21398 Physical address: 9110 Value: 20 473 | Virtual address: 3273 Physical address: 40393 Value: 0 474 | Virtual address: 9370 Physical address: 22938 Value: 9 475 | Virtual address: 35463 Physical address: 56199 Value: -95 476 | Virtual address: 28205 Physical address: 34861 Value: 0 477 | Virtual address: 2351 Physical address: 4655 Value: 75 478 | Virtual address: 28999 Physical address: 16455 Value: 81 479 | Virtual address: 47699 Physical address: 56403 Value: -108 480 | Virtual address: 46870 Physical address: 19734 Value: 45 481 | Virtual address: 22311 Physical address: 11303 Value: -55 482 | Virtual address: 22124 Physical address: 56684 Value: 0 483 | Virtual address: 22427 Physical address: 11419 Value: -26 484 | Virtual address: 49344 Physical address: 8640 Value: 0 485 | Virtual address: 23224 Physical address: 36024 Value: 0 486 | Virtual address: 5514 Physical address: 21642 Value: 5 487 | Virtual address: 20504 Physical address: 56856 Value: 0 488 | Virtual address: 376 Physical address: 57208 Value: 0 489 | Virtual address: 2014 Physical address: 33246 Value: 1 490 | Virtual address: 38700 Physical address: 46892 Value: 0 491 | Virtual address: 13098 Physical address: 44330 Value: 12 492 | Virtual address: 62435 Physical address: 24035 Value: -8 493 | Virtual address: 48046 Physical address: 25774 Value: 46 494 | Virtual address: 63464 Physical address: 17128 Value: 0 495 | Virtual address: 12798 Physical address: 31230 Value: 12 496 | Virtual address: 51178 Physical address: 42986 Value: 49 497 | Virtual address: 8627 Physical address: 20147 Value: 108 498 | Virtual address: 27083 Physical address: 27083 Value: 114 499 | Virtual address: 47198 Physical address: 29790 Value: 46 500 | Virtual address: 44021 Physical address: 57589 Value: 0 501 | Virtual address: 32792 Physical address: 4120 Value: 0 502 | Virtual address: 43996 Physical address: 57564 Value: 0 503 | Virtual address: 41126 Physical address: 8870 Value: 40 504 | Virtual address: 64244 Physical address: 4596 Value: 0 505 | Virtual address: 37047 Physical address: 18359 Value: 45 506 | Virtual address: 60281 Physical address: 57721 Value: 0 507 | Virtual address: 52904 Physical address: 47784 Value: 0 508 | Virtual address: 7768 Physical address: 57944 Value: 0 509 | Virtual address: 55359 Physical address: 58175 Value: 15 510 | Virtual address: 3230 Physical address: 40350 Value: 3 511 | Virtual address: 44813 Physical address: 13069 Value: 0 512 | Virtual address: 4116 Physical address: 50708 Value: 0 513 | Virtual address: 65222 Physical address: 48582 Value: 63 514 | Virtual address: 28083 Physical address: 3507 Value: 108 515 | Virtual address: 60660 Physical address: 7412 Value: 0 516 | Virtual address: 39 Physical address: 58407 Value: 9 517 | Virtual address: 328 Physical address: 57160 Value: 0 518 | Virtual address: 47868 Physical address: 56572 Value: 0 519 | Virtual address: 13009 Physical address: 30417 Value: 0 520 | Virtual address: 22378 Physical address: 11370 Value: 21 521 | Virtual address: 39304 Physical address: 55688 Value: 0 522 | Virtual address: 11171 Physical address: 40099 Value: -24 523 | Virtual address: 8079 Physical address: 33935 Value: -29 524 | Virtual address: 52879 Physical address: 47759 Value: -93 525 | Virtual address: 5123 Physical address: 15107 Value: 0 526 | Virtual address: 4356 Physical address: 58628 Value: 0 527 | Virtual address: 45745 Physical address: 7857 Value: 0 528 | Virtual address: 32952 Physical address: 4280 Value: 0 529 | Virtual address: 4657 Physical address: 27697 Value: 0 530 | Virtual address: 24142 Physical address: 33614 Value: 23 531 | Virtual address: 23319 Physical address: 20503 Value: -59 532 | Virtual address: 13607 Physical address: 53031 Value: 73 533 | Virtual address: 46304 Physical address: 50144 Value: 0 534 | Virtual address: 17677 Physical address: 9741 Value: 0 535 | Virtual address: 59691 Physical address: 47403 Value: 74 536 | Virtual address: 50967 Physical address: 42775 Value: -59 537 | Virtual address: 7817 Physical address: 57993 Value: 0 538 | Virtual address: 8545 Physical address: 20065 Value: 0 539 | Virtual address: 55297 Physical address: 58113 Value: 0 540 | Virtual address: 52954 Physical address: 47834 Value: 51 541 | Virtual address: 39720 Physical address: 38184 Value: 0 542 | Virtual address: 18455 Physical address: 5399 Value: 5 543 | Virtual address: 30349 Physical address: 59021 Value: 0 544 | Virtual address: 63270 Physical address: 16934 Value: 61 545 | Virtual address: 27156 Physical address: 28692 Value: 0 546 | Virtual address: 20614 Physical address: 56966 Value: 20 547 | Virtual address: 19372 Physical address: 14252 Value: 0 548 | Virtual address: 48689 Physical address: 32817 Value: 0 549 | Virtual address: 49386 Physical address: 8682 Value: 48 550 | Virtual address: 50584 Physical address: 18584 Value: 0 551 | Virtual address: 51936 Physical address: 27360 Value: 0 552 | Virtual address: 34705 Physical address: 18065 Value: 0 553 | Virtual address: 13653 Physical address: 53077 Value: 0 554 | Virtual address: 50077 Physical address: 59293 Value: 0 555 | Virtual address: 54518 Physical address: 19446 Value: 53 556 | Virtual address: 41482 Physical address: 41738 Value: 40 557 | Virtual address: 4169 Physical address: 50761 Value: 0 558 | Virtual address: 36118 Physical address: 54550 Value: 35 559 | Virtual address: 9584 Physical address: 59504 Value: 0 560 | Virtual address: 18490 Physical address: 5434 Value: 18 561 | Virtual address: 55420 Physical address: 58236 Value: 0 562 | Virtual address: 5708 Physical address: 52044 Value: 0 563 | Virtual address: 23506 Physical address: 20690 Value: 22 564 | Virtual address: 15391 Physical address: 31775 Value: 7 565 | Virtual address: 36368 Physical address: 14352 Value: 0 566 | Virtual address: 38976 Physical address: 3904 Value: 0 567 | Virtual address: 50406 Physical address: 14054 Value: 49 568 | Virtual address: 49236 Physical address: 8532 Value: 0 569 | Virtual address: 65035 Physical address: 48395 Value: -126 570 | Virtual address: 30120 Physical address: 680 Value: 0 571 | Virtual address: 62551 Physical address: 343 Value: 21 572 | Virtual address: 46809 Physical address: 55513 Value: 0 573 | Virtual address: 21687 Physical address: 52407 Value: 45 574 | Virtual address: 53839 Physical address: 54095 Value: -109 575 | Virtual address: 2098 Physical address: 35122 Value: 2 576 | Virtual address: 12364 Physical address: 45132 Value: 0 577 | Virtual address: 45366 Physical address: 45878 Value: 44 578 | Virtual address: 50437 Physical address: 18437 Value: 0 579 | Virtual address: 36675 Physical address: 35651 Value: -48 580 | Virtual address: 55382 Physical address: 58198 Value: 54 581 | Virtual address: 11846 Physical address: 59718 Value: 11 582 | Virtual address: 49127 Physical address: 50663 Value: -7 583 | Virtual address: 19900 Physical address: 36540 Value: 0 584 | Virtual address: 20554 Physical address: 56906 Value: 20 585 | Virtual address: 19219 Physical address: 14099 Value: -60 586 | Virtual address: 51483 Physical address: 15899 Value: 70 587 | Virtual address: 58090 Physical address: 3306 Value: 56 588 | Virtual address: 39074 Physical address: 4002 Value: 38 589 | Virtual address: 16060 Physical address: 21180 Value: 0 590 | Virtual address: 10447 Physical address: 14799 Value: 51 591 | Virtual address: 54169 Physical address: 51865 Value: 0 592 | Virtual address: 20634 Physical address: 56986 Value: 20 593 | Virtual address: 57555 Physical address: 38099 Value: 52 594 | Virtual address: 61210 Physical address: 42266 Value: 59 595 | Virtual address: 269 Physical address: 57101 Value: 0 596 | Virtual address: 33154 Physical address: 53634 Value: 32 597 | Virtual address: 64487 Physical address: 5095 Value: -7 598 | Virtual address: 61223 Physical address: 42279 Value: -55 599 | Virtual address: 47292 Physical address: 29884 Value: 0 600 | Virtual address: 21852 Physical address: 24156 Value: 0 601 | Virtual address: 5281 Physical address: 15265 Value: 0 602 | Virtual address: 45912 Physical address: 51032 Value: 0 603 | Virtual address: 32532 Physical address: 9492 Value: 0 604 | Virtual address: 63067 Physical address: 22107 Value: -106 605 | Virtual address: 41683 Physical address: 41939 Value: -76 606 | Virtual address: 20981 Physical address: 39157 Value: 0 607 | Virtual address: 33881 Physical address: 42073 Value: 0 608 | Virtual address: 41785 Physical address: 38713 Value: 0 609 | Virtual address: 4580 Physical address: 58852 Value: 0 610 | Virtual address: 41389 Physical address: 25005 Value: 0 611 | Virtual address: 28572 Physical address: 28060 Value: 0 612 | Virtual address: 782 Physical address: 7950 Value: 0 613 | Virtual address: 30273 Physical address: 58945 Value: 0 614 | Virtual address: 62267 Physical address: 23867 Value: -50 615 | Virtual address: 17922 Physical address: 18690 Value: 17 616 | Virtual address: 63238 Physical address: 16902 Value: 61 617 | Virtual address: 3308 Physical address: 40428 Value: 0 618 | Virtual address: 26545 Physical address: 24497 Value: 0 619 | Virtual address: 44395 Physical address: 44907 Value: 90 620 | Virtual address: 39120 Physical address: 4048 Value: 0 621 | Virtual address: 21706 Physical address: 52426 Value: 21 622 | Virtual address: 7144 Physical address: 26600 Value: 0 623 | Virtual address: 30244 Physical address: 58916 Value: 0 624 | Virtual address: 3725 Physical address: 10125 Value: 0 625 | Virtual address: 54632 Physical address: 48744 Value: 0 626 | Virtual address: 30574 Physical address: 16238 Value: 29 627 | Virtual address: 8473 Physical address: 19993 Value: 0 628 | Virtual address: 12386 Physical address: 45154 Value: 12 629 | Virtual address: 41114 Physical address: 8858 Value: 40 630 | Virtual address: 57930 Physical address: 3146 Value: 56 631 | Virtual address: 15341 Physical address: 32493 Value: 0 632 | Virtual address: 15598 Physical address: 31982 Value: 15 633 | Virtual address: 59922 Physical address: 10514 Value: 58 634 | Virtual address: 18226 Physical address: 2354 Value: 17 635 | Virtual address: 48162 Physical address: 17698 Value: 47 636 | Virtual address: 41250 Physical address: 24866 Value: 40 637 | Virtual address: 1512 Physical address: 51688 Value: 0 638 | Virtual address: 2546 Physical address: 4850 Value: 2 639 | Virtual address: 41682 Physical address: 41938 Value: 40 640 | Virtual address: 322 Physical address: 57154 Value: 0 641 | Virtual address: 880 Physical address: 8048 Value: 0 642 | Virtual address: 20891 Physical address: 39067 Value: 102 643 | Virtual address: 56604 Physical address: 13340 Value: 0 644 | Virtual address: 40166 Physical address: 1254 Value: 39 645 | Virtual address: 26791 Physical address: 42663 Value: 41 646 | Virtual address: 44560 Physical address: 11024 Value: 0 647 | Virtual address: 38698 Physical address: 46890 Value: 37 648 | Virtual address: 64127 Physical address: 4479 Value: -97 649 | Virtual address: 15028 Physical address: 24756 Value: 0 650 | Virtual address: 38669 Physical address: 46861 Value: 0 651 | Virtual address: 45637 Physical address: 7749 Value: 0 652 | Virtual address: 43151 Physical address: 17551 Value: 35 653 | Virtual address: 9465 Physical address: 23033 Value: 0 654 | Virtual address: 2498 Physical address: 4802 Value: 2 655 | Virtual address: 13978 Physical address: 31386 Value: 13 656 | Virtual address: 16326 Physical address: 56006 Value: 15 657 | Virtual address: 51442 Physical address: 32754 Value: 50 658 | Virtual address: 34845 Physical address: 26653 Value: 0 659 | Virtual address: 63667 Physical address: 28339 Value: 44 660 | Virtual address: 39370 Physical address: 55754 Value: 38 661 | Virtual address: 55671 Physical address: 60023 Value: 93 662 | Virtual address: 64496 Physical address: 5104 Value: 0 663 | Virtual address: 7767 Physical address: 57943 Value: -107 664 | Virtual address: 6283 Physical address: 7563 Value: 34 665 | Virtual address: 55884 Physical address: 34636 Value: 0 666 | Virtual address: 61103 Physical address: 6063 Value: -85 667 | Virtual address: 10184 Physical address: 60360 Value: 0 668 | Virtual address: 39543 Physical address: 43383 Value: -99 669 | Virtual address: 9555 Physical address: 59475 Value: 84 670 | Virtual address: 13963 Physical address: 31371 Value: -94 671 | Virtual address: 58975 Physical address: 14943 Value: -105 672 | Virtual address: 19537 Physical address: 22609 Value: 0 673 | Virtual address: 6101 Physical address: 9429 Value: 0 674 | Virtual address: 41421 Physical address: 25037 Value: 0 675 | Virtual address: 45502 Physical address: 46014 Value: 44 676 | Virtual address: 29328 Physical address: 37008 Value: 0 677 | Virtual address: 8149 Physical address: 34005 Value: 0 678 | Virtual address: 25450 Physical address: 60522 Value: 24 679 | Virtual address: 58944 Physical address: 14912 Value: 0 680 | Virtual address: 50666 Physical address: 18666 Value: 49 681 | Virtual address: 23084 Physical address: 35884 Value: 0 682 | Virtual address: 36468 Physical address: 14452 Value: 0 683 | Virtual address: 33645 Physical address: 60781 Value: 0 684 | Virtual address: 25002 Physical address: 52650 Value: 24 685 | Virtual address: 53715 Physical address: 979 Value: 116 686 | Virtual address: 60173 Physical address: 57613 Value: 0 687 | Virtual address: 46354 Physical address: 50194 Value: 45 688 | Virtual address: 4708 Physical address: 27748 Value: 0 689 | Virtual address: 28208 Physical address: 34864 Value: 0 690 | Virtual address: 58844 Physical address: 55260 Value: 0 691 | Virtual address: 22173 Physical address: 56733 Value: 0 692 | Virtual address: 8535 Physical address: 20055 Value: 85 693 | Virtual address: 42261 Physical address: 10773 Value: 0 694 | Virtual address: 29687 Physical address: 49655 Value: -3 695 | Virtual address: 37799 Physical address: 29351 Value: -23 696 | Virtual address: 22566 Physical address: 2854 Value: 22 697 | Virtual address: 62520 Physical address: 312 Value: 0 698 | Virtual address: 4098 Physical address: 50690 Value: 4 699 | Virtual address: 47999 Physical address: 25727 Value: -33 700 | Virtual address: 49660 Physical address: 45564 Value: 0 701 | Virtual address: 37063 Physical address: 18375 Value: 49 702 | Virtual address: 41856 Physical address: 38784 Value: 0 703 | Virtual address: 5417 Physical address: 21545 Value: 0 704 | Virtual address: 48856 Physical address: 32984 Value: 0 705 | Virtual address: 10682 Physical address: 27578 Value: 10 706 | Virtual address: 22370 Physical address: 11362 Value: 21 707 | Virtual address: 63281 Physical address: 16945 Value: 0 708 | Virtual address: 62452 Physical address: 24052 Value: 0 709 | Virtual address: 50532 Physical address: 18532 Value: 0 710 | Virtual address: 9022 Physical address: 48190 Value: 8 711 | Virtual address: 59300 Physical address: 10404 Value: 0 712 | Virtual address: 58660 Physical address: 55076 Value: 0 713 | Virtual address: 56401 Physical address: 51281 Value: 0 714 | Virtual address: 8518 Physical address: 20038 Value: 8 715 | Virtual address: 63066 Physical address: 22106 Value: 61 716 | Virtual address: 63250 Physical address: 16914 Value: 61 717 | Virtual address: 48592 Physical address: 2000 Value: 0 718 | Virtual address: 28771 Physical address: 1379 Value: 24 719 | Virtual address: 37673 Physical address: 29225 Value: 0 720 | Virtual address: 60776 Physical address: 23656 Value: 0 721 | Virtual address: 56438 Physical address: 51318 Value: 55 722 | Virtual address: 60424 Physical address: 7176 Value: 0 723 | Virtual address: 39993 Physical address: 1081 Value: 0 724 | Virtual address: 56004 Physical address: 34756 Value: 0 725 | Virtual address: 59002 Physical address: 14970 Value: 57 726 | Virtual address: 33982 Physical address: 42174 Value: 33 727 | Virtual address: 25498 Physical address: 60570 Value: 24 728 | Virtual address: 57047 Physical address: 37591 Value: -75 729 | Virtual address: 1401 Physical address: 51577 Value: 0 730 | Virtual address: 15130 Physical address: 32282 Value: 14 731 | Virtual address: 42960 Physical address: 19664 Value: 0 732 | Virtual address: 61827 Physical address: 22403 Value: 96 733 | Virtual address: 32442 Physical address: 7098 Value: 31 734 | Virtual address: 64304 Physical address: 4912 Value: 0 735 | Virtual address: 30273 Physical address: 58945 Value: 0 736 | Virtual address: 38082 Physical address: 37314 Value: 37 737 | Virtual address: 22404 Physical address: 11396 Value: 0 738 | Virtual address: 3808 Physical address: 10208 Value: 0 739 | Virtual address: 16883 Physical address: 48115 Value: 124 740 | Virtual address: 23111 Physical address: 35911 Value: -111 741 | Virtual address: 62417 Physical address: 24017 Value: 0 742 | Virtual address: 60364 Physical address: 57804 Value: 0 743 | Virtual address: 4542 Physical address: 58814 Value: 4 744 | Virtual address: 14829 Physical address: 33517 Value: 0 745 | Virtual address: 44964 Physical address: 13220 Value: 0 746 | Virtual address: 33924 Physical address: 42116 Value: 0 747 | Virtual address: 2141 Physical address: 35165 Value: 0 748 | Virtual address: 19245 Physical address: 14125 Value: 0 749 | Virtual address: 47168 Physical address: 29760 Value: 0 750 | Virtual address: 24048 Physical address: 39664 Value: 0 751 | Virtual address: 1022 Physical address: 8190 Value: 0 752 | Virtual address: 23075 Physical address: 35875 Value: -120 753 | Virtual address: 24888 Physical address: 52536 Value: 0 754 | Virtual address: 49247 Physical address: 8543 Value: 23 755 | Virtual address: 4900 Physical address: 13604 Value: 0 756 | Virtual address: 22656 Physical address: 2944 Value: 0 757 | Virtual address: 34117 Physical address: 60997 Value: 0 758 | Virtual address: 55555 Physical address: 59907 Value: 64 759 | Virtual address: 48947 Physical address: 50483 Value: -52 760 | Virtual address: 59533 Physical address: 25997 Value: 0 761 | Virtual address: 21312 Physical address: 9024 Value: 0 762 | Virtual address: 21415 Physical address: 9127 Value: -23 763 | Virtual address: 813 Physical address: 7981 Value: 0 764 | Virtual address: 19419 Physical address: 14299 Value: -10 765 | Virtual address: 1999 Physical address: 33231 Value: -13 766 | Virtual address: 20155 Physical address: 40635 Value: -82 767 | Virtual address: 21521 Physical address: 52241 Value: 0 768 | Virtual address: 13670 Physical address: 53094 Value: 13 769 | Virtual address: 19289 Physical address: 14169 Value: 0 770 | Virtual address: 58483 Physical address: 15475 Value: 28 771 | Virtual address: 41318 Physical address: 24934 Value: 40 772 | Virtual address: 16151 Physical address: 55831 Value: -59 773 | Virtual address: 13611 Physical address: 53035 Value: 74 774 | Virtual address: 21514 Physical address: 52234 Value: 21 775 | Virtual address: 13499 Physical address: 36283 Value: 46 776 | Virtual address: 45583 Physical address: 7695 Value: -125 777 | Virtual address: 49013 Physical address: 50549 Value: 0 778 | Virtual address: 64843 Physical address: 2123 Value: 82 779 | Virtual address: 63485 Physical address: 17149 Value: 0 780 | Virtual address: 38697 Physical address: 46889 Value: 0 781 | Virtual address: 59188 Physical address: 10292 Value: 0 782 | Virtual address: 24593 Physical address: 38417 Value: 0 783 | Virtual address: 57641 Physical address: 61225 Value: 0 784 | Virtual address: 36524 Physical address: 14508 Value: 0 785 | Virtual address: 56980 Physical address: 37524 Value: 0 786 | Virtual address: 36810 Physical address: 35786 Value: 35 787 | Virtual address: 6096 Physical address: 9424 Value: 0 788 | Virtual address: 11070 Physical address: 39998 Value: 10 789 | Virtual address: 60124 Physical address: 10716 Value: 0 790 | Virtual address: 37576 Physical address: 21448 Value: 0 791 | Virtual address: 15096 Physical address: 24824 Value: 0 792 | Virtual address: 45247 Physical address: 49087 Value: 47 793 | Virtual address: 32783 Physical address: 4111 Value: 3 794 | Virtual address: 58390 Physical address: 15382 Value: 57 795 | Virtual address: 60873 Physical address: 23753 Value: 0 796 | Virtual address: 23719 Physical address: 54951 Value: 41 797 | Virtual address: 24385 Physical address: 1601 Value: 0 798 | Virtual address: 22307 Physical address: 11299 Value: -56 799 | Virtual address: 17375 Physical address: 61663 Value: -9 800 | Virtual address: 15990 Physical address: 21110 Value: 15 801 | Virtual address: 20526 Physical address: 56878 Value: 20 802 | Virtual address: 25904 Physical address: 36656 Value: 0 803 | Virtual address: 42224 Physical address: 46320 Value: 0 804 | Virtual address: 9311 Physical address: 22879 Value: 23 805 | Virtual address: 7862 Physical address: 58038 Value: 7 806 | Virtual address: 3835 Physical address: 10235 Value: -66 807 | Virtual address: 30535 Physical address: 16199 Value: -47 808 | Virtual address: 65179 Physical address: 48539 Value: -90 809 | Virtual address: 57387 Physical address: 37931 Value: 10 810 | Virtual address: 63579 Physical address: 28251 Value: 22 811 | Virtual address: 4946 Physical address: 13650 Value: 4 812 | Virtual address: 9037 Physical address: 48205 Value: 0 813 | Virtual address: 61033 Physical address: 5993 Value: 0 814 | Virtual address: 55543 Physical address: 58359 Value: 61 815 | Virtual address: 50361 Physical address: 14009 Value: 0 816 | Virtual address: 6480 Physical address: 29008 Value: 0 817 | Virtual address: 14042 Physical address: 31450 Value: 13 818 | Virtual address: 21531 Physical address: 52251 Value: 6 819 | Virtual address: 39195 Physical address: 55579 Value: 70 820 | Virtual address: 37511 Physical address: 21383 Value: -95 821 | Virtual address: 23696 Physical address: 54928 Value: 0 822 | Virtual address: 27440 Physical address: 15664 Value: 0 823 | Virtual address: 28201 Physical address: 34857 Value: 0 824 | Virtual address: 23072 Physical address: 35872 Value: 0 825 | Virtual address: 7814 Physical address: 57990 Value: 7 826 | Virtual address: 6552 Physical address: 29080 Value: 0 827 | Virtual address: 43637 Physical address: 12661 Value: 0 828 | Virtual address: 35113 Physical address: 39721 Value: 0 829 | Virtual address: 34890 Physical address: 26698 Value: 34 830 | Virtual address: 61297 Physical address: 42353 Value: 0 831 | Virtual address: 45633 Physical address: 7745 Value: 0 832 | Virtual address: 61431 Physical address: 42487 Value: -3 833 | Virtual address: 46032 Physical address: 51152 Value: 0 834 | Virtual address: 18774 Physical address: 61782 Value: 18 835 | Virtual address: 62991 Physical address: 22031 Value: -125 836 | Virtual address: 28059 Physical address: 3483 Value: 102 837 | Virtual address: 35229 Physical address: 39837 Value: 0 838 | Virtual address: 51230 Physical address: 32542 Value: 50 839 | Virtual address: 14405 Physical address: 5701 Value: 0 840 | Virtual address: 52242 Physical address: 46610 Value: 51 841 | Virtual address: 43153 Physical address: 17553 Value: 0 842 | Virtual address: 2709 Physical address: 53909 Value: 0 843 | Virtual address: 47963 Physical address: 25691 Value: -42 844 | Virtual address: 36943 Physical address: 18255 Value: 19 845 | Virtual address: 54066 Physical address: 51762 Value: 52 846 | Virtual address: 10054 Physical address: 60230 Value: 9 847 | Virtual address: 43051 Physical address: 17451 Value: 10 848 | Virtual address: 11525 Physical address: 41477 Value: 0 849 | Virtual address: 17684 Physical address: 9748 Value: 0 850 | Virtual address: 41681 Physical address: 41937 Value: 0 851 | Virtual address: 27883 Physical address: 44267 Value: 58 852 | Virtual address: 56909 Physical address: 37453 Value: 0 853 | Virtual address: 45772 Physical address: 7884 Value: 0 854 | Virtual address: 27496 Physical address: 15720 Value: 0 855 | Virtual address: 46842 Physical address: 55546 Value: 45 856 | Virtual address: 38734 Physical address: 46926 Value: 37 857 | Virtual address: 28972 Physical address: 16428 Value: 0 858 | Virtual address: 59684 Physical address: 47396 Value: 0 859 | Virtual address: 11384 Physical address: 54392 Value: 0 860 | Virtual address: 21018 Physical address: 37658 Value: 20 861 | Virtual address: 2192 Physical address: 35216 Value: 0 862 | Virtual address: 18384 Physical address: 2512 Value: 0 863 | Virtual address: 13464 Physical address: 36248 Value: 0 864 | Virtual address: 31018 Physical address: 61994 Value: 30 865 | Virtual address: 62958 Physical address: 28654 Value: 61 866 | Virtual address: 30611 Physical address: 16275 Value: -28 867 | Virtual address: 1913 Physical address: 33145 Value: 0 868 | Virtual address: 18904 Physical address: 61912 Value: 0 869 | Virtual address: 26773 Physical address: 42645 Value: 0 870 | Virtual address: 55491 Physical address: 58307 Value: 48 871 | Virtual address: 21899 Physical address: 24203 Value: 98 872 | Virtual address: 64413 Physical address: 5021 Value: 0 873 | Virtual address: 47134 Physical address: 29726 Value: 46 874 | Virtual address: 23172 Physical address: 35972 Value: 0 875 | Virtual address: 7262 Physical address: 43102 Value: 7 876 | Virtual address: 12705 Physical address: 31137 Value: 0 877 | Virtual address: 7522 Physical address: 6242 Value: 7 878 | Virtual address: 58815 Physical address: 55231 Value: 111 879 | Virtual address: 34916 Physical address: 26724 Value: 0 880 | Virtual address: 3802 Physical address: 10202 Value: 3 881 | Virtual address: 58008 Physical address: 3224 Value: 0 882 | Virtual address: 1239 Physical address: 40919 Value: 53 883 | Virtual address: 63947 Physical address: 21963 Value: 114 884 | Virtual address: 381 Physical address: 57213 Value: 0 885 | Virtual address: 60734 Physical address: 23614 Value: 59 886 | Virtual address: 48769 Physical address: 32897 Value: 0 887 | Virtual address: 41938 Physical address: 38866 Value: 40 888 | Virtual address: 38025 Physical address: 37257 Value: 0 889 | Virtual address: 55099 Physical address: 5179 Value: -50 890 | Virtual address: 56691 Physical address: 13427 Value: 92 891 | Virtual address: 39530 Physical address: 43370 Value: 38 892 | Virtual address: 59003 Physical address: 14971 Value: -98 893 | Virtual address: 6029 Physical address: 9357 Value: 0 894 | Virtual address: 20920 Physical address: 39096 Value: 0 895 | Virtual address: 8077 Physical address: 33933 Value: 0 896 | Virtual address: 42633 Physical address: 20873 Value: 0 897 | Virtual address: 17443 Physical address: 40995 Value: 8 898 | Virtual address: 53570 Physical address: 834 Value: 52 899 | Virtual address: 22833 Physical address: 52785 Value: 0 900 | Virtual address: 3782 Physical address: 10182 Value: 3 901 | Virtual address: 47758 Physical address: 56462 Value: 46 902 | Virtual address: 22136 Physical address: 56696 Value: 0 903 | Virtual address: 22427 Physical address: 11419 Value: -26 904 | Virtual address: 23867 Physical address: 39483 Value: 78 905 | Virtual address: 59968 Physical address: 10560 Value: 0 906 | Virtual address: 62166 Physical address: 62422 Value: 60 907 | Virtual address: 6972 Physical address: 26428 Value: 0 908 | Virtual address: 63684 Physical address: 28356 Value: 0 909 | Virtual address: 46388 Physical address: 50228 Value: 0 910 | Virtual address: 41942 Physical address: 38870 Value: 40 911 | Virtual address: 36524 Physical address: 14508 Value: 0 912 | Virtual address: 9323 Physical address: 22891 Value: 26 913 | Virtual address: 31114 Physical address: 62090 Value: 30 914 | Virtual address: 22345 Physical address: 11337 Value: 0 915 | Virtual address: 46463 Physical address: 50303 Value: 95 916 | Virtual address: 54671 Physical address: 48783 Value: 99 917 | Virtual address: 9214 Physical address: 48382 Value: 8 918 | Virtual address: 7257 Physical address: 43097 Value: 0 919 | Virtual address: 33150 Physical address: 53630 Value: 32 920 | Virtual address: 41565 Physical address: 41821 Value: 0 921 | Virtual address: 26214 Physical address: 49254 Value: 25 922 | Virtual address: 3595 Physical address: 9995 Value: -126 923 | Virtual address: 17932 Physical address: 18700 Value: 0 924 | Virtual address: 34660 Physical address: 18020 Value: 0 925 | Virtual address: 51961 Physical address: 27385 Value: 0 926 | Virtual address: 58634 Physical address: 55050 Value: 57 927 | Virtual address: 57990 Physical address: 3206 Value: 56 928 | Virtual address: 28848 Physical address: 1456 Value: 0 929 | Virtual address: 49920 Physical address: 59136 Value: 0 930 | Virtual address: 18351 Physical address: 2479 Value: -21 931 | Virtual address: 53669 Physical address: 933 Value: 0 932 | Virtual address: 33996 Physical address: 42188 Value: 0 933 | Virtual address: 6741 Physical address: 6741 Value: 0 934 | Virtual address: 64098 Physical address: 4450 Value: 62 935 | Virtual address: 606 Physical address: 17246 Value: 0 936 | Virtual address: 27383 Physical address: 28919 Value: -67 937 | Virtual address: 63140 Physical address: 22180 Value: 0 938 | Virtual address: 32228 Physical address: 49892 Value: 0 939 | Virtual address: 63437 Physical address: 17101 Value: 0 940 | Virtual address: 29085 Physical address: 16541 Value: 0 941 | Virtual address: 65080 Physical address: 48440 Value: 0 942 | Virtual address: 38753 Physical address: 46945 Value: 0 943 | Virtual address: 16041 Physical address: 21161 Value: 0 944 | Virtual address: 9041 Physical address: 48209 Value: 0 945 | Virtual address: 42090 Physical address: 46186 Value: 41 946 | Virtual address: 46388 Physical address: 50228 Value: 0 947 | Virtual address: 63650 Physical address: 28322 Value: 62 948 | Virtual address: 36636 Physical address: 35612 Value: 0 949 | Virtual address: 21947 Physical address: 24251 Value: 110 950 | Virtual address: 19833 Physical address: 36473 Value: 0 951 | Virtual address: 36464 Physical address: 14448 Value: 0 952 | Virtual address: 8541 Physical address: 20061 Value: 0 953 | Virtual address: 12712 Physical address: 31144 Value: 0 954 | Virtual address: 48955 Physical address: 50491 Value: -50 955 | Virtual address: 39206 Physical address: 55590 Value: 38 956 | Virtual address: 15578 Physical address: 31962 Value: 15 957 | Virtual address: 49205 Physical address: 8501 Value: 0 958 | Virtual address: 7731 Physical address: 57907 Value: -116 959 | Virtual address: 43046 Physical address: 17446 Value: 42 960 | Virtual address: 60498 Physical address: 7250 Value: 59 961 | Virtual address: 9237 Physical address: 22805 Value: 0 962 | Virtual address: 47706 Physical address: 56410 Value: 46 963 | Virtual address: 43973 Physical address: 57541 Value: 0 964 | Virtual address: 42008 Physical address: 46104 Value: 0 965 | Virtual address: 27460 Physical address: 15684 Value: 0 966 | Virtual address: 24999 Physical address: 52647 Value: 105 967 | Virtual address: 51933 Physical address: 27357 Value: 0 968 | Virtual address: 34070 Physical address: 60950 Value: 33 969 | Virtual address: 65155 Physical address: 48515 Value: -96 970 | Virtual address: 59955 Physical address: 10547 Value: -116 971 | Virtual address: 9277 Physical address: 22845 Value: 0 972 | Virtual address: 20420 Physical address: 16836 Value: 0 973 | Virtual address: 44860 Physical address: 13116 Value: 0 974 | Virtual address: 50992 Physical address: 42800 Value: 0 975 | Virtual address: 10583 Physical address: 27479 Value: 85 976 | Virtual address: 57751 Physical address: 61335 Value: 101 977 | Virtual address: 23195 Physical address: 35995 Value: -90 978 | Virtual address: 27227 Physical address: 28763 Value: -106 979 | Virtual address: 42816 Physical address: 19520 Value: 0 980 | Virtual address: 58219 Physical address: 34155 Value: -38 981 | Virtual address: 37606 Physical address: 21478 Value: 36 982 | Virtual address: 18426 Physical address: 2554 Value: 17 983 | Virtual address: 21238 Physical address: 37878 Value: 20 984 | Virtual address: 11983 Physical address: 59855 Value: -77 985 | Virtual address: 48394 Physical address: 1802 Value: 47 986 | Virtual address: 11036 Physical address: 39964 Value: 0 987 | Virtual address: 30557 Physical address: 16221 Value: 0 988 | Virtual address: 23453 Physical address: 20637 Value: 0 989 | Virtual address: 49847 Physical address: 31671 Value: -83 990 | Virtual address: 30032 Physical address: 592 Value: 0 991 | Virtual address: 48065 Physical address: 25793 Value: 0 992 | Virtual address: 6957 Physical address: 26413 Value: 0 993 | Virtual address: 2301 Physical address: 35325 Value: 0 994 | Virtual address: 7736 Physical address: 57912 Value: 0 995 | Virtual address: 31260 Physical address: 23324 Value: 0 996 | Virtual address: 17071 Physical address: 175 Value: -85 997 | Virtual address: 8940 Physical address: 46572 Value: 0 998 | Virtual address: 9929 Physical address: 44745 Value: 0 999 | Virtual address: 45563 Physical address: 46075 Value: 126 1000 | Virtual address: 12107 Physical address: 2635 Value: -46 1001 | -------------------------------------------------------------------------------- /ch13/LockingExample.java: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple program demonstrating file locking. 3 | * This program acquires an exclusive lock on the 4 | * first half of the file and a shared lock on the second half. 5 | * 6 | * Usage 7 | * java LockingExample 8 | * 9 | * Figure 13.2 10 | * 11 | * @author Gagne, Galvin, Silberschatz 12 | * Operating System Concepts - Tenth Edition 13 | * Copyright John Wiley & Sons - 2018. 14 | */ 15 | 16 | import java.io.*; 17 | import java.nio.channels.*; 18 | 19 | public class LockingExample { 20 | public static final boolean EXCLUSIVE = false; 21 | public static final boolean SHARED = true; 22 | 23 | public static void main(String args[]) throws IOException { 24 | if (args.length != 1) { 25 | System.err.println("Usage: java LockingExample "); 26 | System.exit(0); 27 | } 28 | 29 | FileLock sharedLock = null; 30 | FileLock exclusiveLock = null; 31 | 32 | try { 33 | RandomAccessFile raf = new RandomAccessFile(args[0], "rw"); 34 | 35 | // get the channel for the file 36 | FileChannel channel = raf.getChannel(); 37 | 38 | System.out.println("trying to acquire lock ..."); 39 | // this locks the first half of the file - exclusive 40 | exclusiveLock = channel.lock(0, raf.length()/2, EXCLUSIVE); 41 | System.out.println("lock acquired ..."); 42 | 43 | /** 44 | * Now modify the data . . . 45 | */ 46 | 47 | try { 48 | // sleep for 10 seconds 49 | Thread.sleep(10000); 50 | } 51 | catch (InterruptedException ie) { } 52 | 53 | // release the lock 54 | exclusiveLock.release(); 55 | System.out.println("lock released ..."); 56 | 57 | // this locks the second half of the file - shared 58 | sharedLock = channel.lock(raf.length()/2 + 1, raf.length(), SHARED); 59 | 60 | /** 61 | * Now read the data . . . 62 | */ 63 | 64 | // release the lock 65 | exclusiveLock.release(); 66 | } catch (java.io.IOException ioe) { 67 | System.err.println(ioe); 68 | } 69 | finally { 70 | if (exclusiveLock != null) 71 | exclusiveLock.release(); 72 | if (sharedLock != null) 73 | sharedLock.release(); 74 | } 75 | } 76 | } 77 | 78 | -------------------------------------------------------------------------------- /ch13/README: -------------------------------------------------------------------------------- 1 | These files represent shared memory using the Windows API. 2 | 3 | These programs can be compiled using an ordinary Windows development environment. 4 | 5 | Ordinarily, when we have a producer-consumer paradigm, both processes are running 6 | comcurrently. To simulate this, we have the producer enter a "while (1) ;" 7 | loop so that it maintains running (there are other ways this could have been 8 | accomplished, the while loop appears to be the simplest approach.) 9 | 10 | To demonstrate this, start the producer process first, followed by the consumer. 11 | 12 | It appears that some environments require having the file temp.txt in the same 13 | directory as the producer program. We include a simple empty file for such 14 | purposes. 15 | -------------------------------------------------------------------------------- /ch13/consumer.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Illustrate memory-mapping files in Windows 3 | * 4 | * Consumer code. 5 | * 6 | * Figure 13.16 7 | * 8 | * @author Gagne, Galvin, Silberschatz 9 | * Operating System Concepts - Tenth Edition 10 | * Copyright John Wiley & Sons - 2018. 11 | */ 12 | 13 | #include 14 | #include 15 | 16 | int main(int argc, char *argv[]) { 17 | HANDLE hMapFile; 18 | LPVOID lpMapAddress; 19 | 20 | hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, // read/write permission 21 | FALSE, // Do not inherit the name 22 | TEXT("SharedObject")); // of the mapping object. 23 | 24 | if (hMapFile == NULL) 25 | { 26 | printf("Could not open file mapping object (%d).\n", GetLastError()); 27 | return -1; 28 | } 29 | 30 | lpMapAddress = MapViewOfFile(hMapFile, // handle to mapping object 31 | FILE_MAP_ALL_ACCESS, // read/write permission 32 | 0, // max. object size 33 | 0, // size of hFile 34 | 0); // map entire file 35 | 36 | if (lpMapAddress == NULL) 37 | { 38 | printf("Could not map view of file (%d).\n", GetLastError()); 39 | return -1; 40 | } 41 | 42 | printf("%s\n",lpMapAddress); 43 | 44 | UnmapViewOfFile(lpMapAddress); 45 | CloseHandle(hMapFile); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /ch13/input.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/greggagne/osc10e/156234e9ba790c0b156d9375c93d7bc07530539e/ch13/input.txt -------------------------------------------------------------------------------- /ch13/producer.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Illustrate memory-mapping files in Win32 3 | * 4 | * Producer code. 5 | * 6 | * Figure 13.15 7 | * 8 | * @author Gagne, Galvin, Silberschatz 9 | * Operating System Concepts - Tenth Edition 10 | * Copyright John Wiley & Sons - 2018. 11 | */ 12 | 13 | #include 14 | #include 15 | 16 | int main(int argc, char *argv[]) 17 | { 18 | HANDLE hFile, hMapFile; 19 | LPVOID mapAddress; 20 | 21 | // first create/open the file 22 | hFile = CreateFile("temp.txt", 23 | GENERIC_READ | GENERIC_WRITE, 24 | 0, 25 | NULL, 26 | OPEN_ALWAYS, 27 | FILE_ATTRIBUTE_NORMAL, 28 | NULL); 29 | 30 | if (hFile == INVALID_HANDLE_VALUE) { 31 | fprintf(stderr,"Could not open file temp.txt (%d).\n",GetLastError()); 32 | return -1; 33 | } 34 | 35 | // now obtain a mapping for it 36 | 37 | hMapFile = CreateFileMapping(hFile, 38 | NULL, 39 | PAGE_READWRITE, 40 | 0, 41 | 0, 42 | TEXT("SharedObject")); 43 | 44 | if (hMapFile == NULL) { 45 | fprintf(stderr,"Could not create mapping (%d).\n", GetLastError()); 46 | return -1; 47 | } 48 | 49 | // now establish a mapped viewing of the file 50 | 51 | mapAddress = MapViewOfFile(hMapFile,FILE_MAP_ALL_ACCESS,0,0,0); 52 | 53 | if(mapAddress == NULL) { 54 | printf("Could not map view of file (%d).\n", GetLastError()); 55 | return -1; 56 | } 57 | 58 | // write to shared memory 59 | 60 | sprintf((char *)mapAddress,"%s","Shared memory message"); 61 | 62 | while (1); 63 | // remove the file mapping 64 | UnmapViewOfFile(mapAddress); 65 | 66 | // close all handles 67 | CloseHandle(hMapFile); 68 | CloseHandle(hFile); 69 | } 70 | 71 | -------------------------------------------------------------------------------- /ch13/temp.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ch19/DNSLookUp.java: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple program demonstrating DNS lookup 3 | * 4 | * Usage: 5 | * java DNSLookUp 6 | */ 7 | 8 | import java.io.*; 9 | import java.net.*; 10 | 11 | public class DNSLookUp 12 | { 13 | public static void main(String[] args) { 14 | if (args.length != 1) { 15 | System.err.println("Usage: java DNSLookUp "); 16 | System.exit(0); 17 | } 18 | 19 | InetAddress hostAddress; 20 | 21 | try { 22 | hostAddress = InetAddress.getByName(args[0]); 23 | System.out.println(hostAddress.getHostAddress()); 24 | } 25 | catch (UnknownHostException uhe) { 26 | System.err.println("Unknown host: " + args[0]); 27 | } 28 | } 29 | } 30 | 31 | -------------------------------------------------------------------------------- /ch2/Makefile: -------------------------------------------------------------------------------- 1 | obj-m += simple.o 2 | all: 3 | make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 4 | clean: 5 | make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 6 | -------------------------------------------------------------------------------- /ch2/hello.c: -------------------------------------------------------------------------------- 1 | /** 2 | * hello.c 3 | * 4 | * Kernel module that communicates with /proc file system. 5 | * 6 | * The makefile must be modified to compile this program. 7 | * Change the line "simple.o" to "hello.o" 8 | * 9 | * Operating System Concepts - 10th Edition 10 | * Copyright John Wiley & Sons - 2018 11 | */ 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | #define BUFFER_SIZE 128 20 | 21 | #define PROC_NAME "hello" 22 | #define MESSAGE "Hello World\n" 23 | 24 | /** 25 | * Function prototypes 26 | */ 27 | static ssize_t proc_read(struct file *file, char *buf, size_t count, loff_t *pos); 28 | 29 | static struct file_operations proc_ops = { 30 | .owner = THIS_MODULE, 31 | .read = proc_read, 32 | }; 33 | 34 | 35 | /* This function is called when the module is loaded. */ 36 | static int proc_init(void) 37 | { 38 | 39 | // creates the /proc/hello entry 40 | // the following function call is a wrapper for 41 | // proc_create_data() passing NULL as the last argument 42 | proc_create(PROC_NAME, 0, NULL, &proc_ops); 43 | 44 | printk(KERN_INFO "/proc/%s created\n", PROC_NAME); 45 | 46 | return 0; 47 | } 48 | 49 | /* This function is called when the module is removed. */ 50 | static void proc_exit(void) { 51 | 52 | // removes the /proc/hello entry 53 | remove_proc_entry(PROC_NAME, NULL); 54 | 55 | printk( KERN_INFO "/proc/%s removed\n", PROC_NAME); 56 | } 57 | 58 | /** 59 | * This function is called each time the /proc/hello is read. 60 | * 61 | * This function is called repeatedly until it returns 0, so 62 | * there must be logic that ensures it ultimately returns 0 63 | * once it has collected the data that is to go into the 64 | * corresponding /proc file. 65 | * 66 | * params: 67 | * 68 | * file: 69 | * buf: buffer in user space 70 | * count: 71 | * pos: 72 | */ 73 | static ssize_t proc_read(struct file *file, char __user *usr_buf, size_t count, loff_t *pos) 74 | { 75 | int rv = 0; 76 | char buffer[BUFFER_SIZE]; 77 | static int completed = 0; 78 | 79 | if (completed) { 80 | completed = 0; 81 | return 0; 82 | } 83 | 84 | completed = 1; 85 | 86 | rv = sprintf(buffer, "Hello World\n"); 87 | 88 | // copies the contents of buffer to userspace usr_buf 89 | copy_to_user(usr_buf, buffer, rv); 90 | 91 | return rv; 92 | } 93 | 94 | 95 | /* Macros for registering module entry and exit points. */ 96 | module_init( proc_init ); 97 | module_exit( proc_exit ); 98 | 99 | MODULE_LICENSE("GPL"); 100 | MODULE_DESCRIPTION("Hello Module"); 101 | MODULE_AUTHOR("SGG"); 102 | -------------------------------------------------------------------------------- /ch2/simple.c: -------------------------------------------------------------------------------- 1 | /** 2 | * simple.c 3 | * 4 | * A simple kernel module. 5 | * 6 | * To compile, run makefile by entering "make" 7 | * 8 | * Operating System Concepts - 10th Edition 9 | * Copyright John Wiley & Sons - 2018 10 | */ 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | /* This function is called when the module is loaded. */ 17 | static int simple_init(void) 18 | { 19 | printk(KERN_INFO "Loading Module\n"); 20 | 21 | return 0; 22 | } 23 | 24 | /* This function is called when the module is removed. */ 25 | static void simple_exit(void) { 26 | printk(KERN_INFO "Removing Module\n"); 27 | } 28 | 29 | /* Macros for registering module entry and exit points. */ 30 | module_init( simple_init ); 31 | module_exit( simple_exit ); 32 | 33 | MODULE_LICENSE("GPL"); 34 | MODULE_DESCRIPTION("Simple Module"); 35 | MODULE_AUTHOR("SGG"); 36 | 37 | -------------------------------------------------------------------------------- /ch3/DateClient.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Client program requesting current date from server. 3 | * 4 | * Figure 3.28 5 | * 6 | * @author Silberschatz, Gagne and Galvin 7 | * Operating System Concepts - Tenth Edition 8 | */ 9 | 10 | import java.net.*; 11 | import java.io.*; 12 | 13 | public class DateClient 14 | { 15 | public static void main(String[] args) { 16 | try { 17 | // this could be changed to an IP name or address other than the localhost 18 | Socket sock = new Socket("127.0.0.1",6013); 19 | InputStream in = sock.getInputStream(); 20 | BufferedReader bin = new BufferedReader(new InputStreamReader(in)); 21 | 22 | String line; 23 | while( (line = bin.readLine()) != null) 24 | System.out.println(line); 25 | 26 | sock.close(); 27 | } 28 | catch (IOException ioe) { 29 | System.err.println(ioe); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ch3/DateServer.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Time-of-day server listening to port 6013. 3 | * 4 | * Figure 3.27 5 | * 6 | * @author Silberschatz, Gagne, and Galvin. 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018. 9 | */ 10 | 11 | import java.net.*; 12 | import java.io.*; 13 | 14 | public class DateServer 15 | { 16 | public static void main(String[] args) { 17 | try { 18 | ServerSocket sock = new ServerSocket(6013); 19 | 20 | // now listen for connections 21 | while (true) { 22 | Socket client = sock.accept(); 23 | // we have a connection 24 | 25 | PrintWriter pout = new PrintWriter(client.getOutputStream(), true); 26 | // write the Date to the socket 27 | pout.println(new java.util.Date().toString()); 28 | 29 | // close the socket and resume listening for more connections 30 | client.close(); 31 | } 32 | } 33 | catch (IOException ioe) { 34 | System.err.println(ioe); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ch3/fig3-30.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Figure 3.30 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | int value = 5; 11 | 12 | int main() 13 | { 14 | pid_t pid; 15 | 16 | pid = fork(); 17 | 18 | if (pid == 0) { /* child process */ 19 | value += 15; 20 | return 0; 21 | } 22 | else if (pid > 0) { /* parent process */ 23 | wait(NULL); 24 | printf ("PARENT: value = %d\n",value); /* LINE A */ 25 | return 0; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ch3/fig3-31.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Figure 3.31 3 | */ 4 | 5 | #include 6 | #include 7 | 8 | int main() 9 | { 10 | fork(); 11 | 12 | fork(); 13 | 14 | fork(); 15 | 16 | return 0; 17 | } 18 | -------------------------------------------------------------------------------- /ch3/fig3-32.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Figure 3.32 3 | */ 4 | 5 | #include 6 | #include 7 | 8 | int main() 9 | { 10 | int i; 11 | 12 | for (i = 0; i < 4; i++) 13 | fork(); 14 | 15 | return 0; 16 | } 17 | -------------------------------------------------------------------------------- /ch3/fig3-33.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Figure 3.33 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | int main() 11 | { 12 | pid_t pid; 13 | /* fork a child process */ 14 | pid = fork(); 15 | 16 | if (pid < 0) { /* error occurred */ 17 | fprintf(stderr, "Fork Failed"); 18 | return 1; 19 | } 20 | else if (pid == 0) { /* child process */ 21 | execlp("/bin/ls","ls",NULL); 22 | printf("LINE J"); 23 | } 24 | else { /* parent process */ 25 | /* parent will wait for the child to complete */ 26 | wait(NULL); 27 | printf("Child Complete"); 28 | } 29 | 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /ch3/fig3-34.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Figure 3.34 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | int main() 11 | { 12 | pid_t pid, pid1; 13 | 14 | /* fork a child process */ 15 | pid = fork(); 16 | if (pid < 0) { 17 | /* error occurred */ 18 | fprintf(stderr, "Fork Failed"); 19 | return 1; 20 | } 21 | else if (pid == 0) { /* child process */ 22 | pid1 = getpid(); 23 | printf("child: pid = %d\n",pid); /* A */ 24 | printf("child: pid1 = %d\n",pid1); /* B */ 25 | } 26 | else { /* parent process */ 27 | pid1 = getpid(); 28 | printf("parent: pid = %d\n",pid); /* C */ 29 | printf("parent: pid1 = %d\n",pid1); /* D */ 30 | wait(NULL); 31 | } 32 | 33 | return 0; 34 | } 35 | -------------------------------------------------------------------------------- /ch3/fig3-35.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Figure 3.35 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | #define SIZE 5 11 | 12 | int nums[SIZE] = {0,1,2,3,4}; 13 | 14 | int main() 15 | { 16 | int i; 17 | pid_t pid; 18 | 19 | pid = fork(); 20 | 21 | if (pid == 0) { 22 | for (i = 0; i < SIZE; i++) { 23 | nums[i] *= -i; 24 | printf("CHILD: %d\n",nums[i]); /* LINE X */ 25 | } 26 | } 27 | else if (pid > 0) { 28 | wait(NULL); 29 | 30 | for (i = 0; i < SIZE; i++) 31 | printf("PARENT: %d\n",nums[i]); /* LINE Y */ 32 | } 33 | 34 | return 0; 35 | } 36 | -------------------------------------------------------------------------------- /ch3/multi-fork.c: -------------------------------------------------------------------------------- 1 | // How many processes are created?? 2 | 3 | #include 4 | #include 5 | 6 | int main() 7 | { 8 | //printf("%d*\n",getpid()); 9 | fork(); 10 | 11 | //printf("%d**\n",getpid()); 12 | fork(); 13 | 14 | //printf("%d***\n",getpid()); 15 | fork(); 16 | 17 | //printf("%d****\n",getpid()); 18 | 19 | return 0; 20 | } 21 | -------------------------------------------------------------------------------- /ch3/newproc-posix.c: -------------------------------------------------------------------------------- 1 | /** 2 | * This program forks a separate process using the fork()/exec() system calls. 3 | * 4 | * Figure 3.08 5 | * 6 | * @author Silberschatz, Galvin, and Gagne 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | int main() 17 | { 18 | pid_t pid; 19 | 20 | /* fork a child process */ 21 | pid = fork(); 22 | 23 | if (pid < 0) { /* error occurred */ 24 | fprintf(stderr, "Fork Failed\n"); 25 | return 1; 26 | } 27 | else if (pid == 0) { /* child process */ 28 | printf("I am the child %d\n",pid); 29 | execlp("/bin/ls","ls",NULL); 30 | } 31 | else { /* parent process */ 32 | /* parent will wait for the child to complete */ 33 | printf("I am the parent %d\n",pid); 34 | wait(NULL); 35 | 36 | printf("Child Complete\n"); 37 | } 38 | 39 | return 0; 40 | } 41 | -------------------------------------------------------------------------------- /ch3/newproc-win32.c: -------------------------------------------------------------------------------- 1 | /** 2 | * This program creates a separate process using the CreateProcess() system call. 3 | * 4 | * Figure 3.10 5 | * 6 | * @author Gagne, Galvin, Silberschatz, Galvin, and Gagne 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | #include 12 | #include 13 | 14 | int main( VOID ) 15 | { 16 | STARTUPINFO si; 17 | PROCESS_INFORMATION pi; 18 | 19 | ZeroMemory( &si, sizeof(si) ); 20 | si.cb = sizeof(si); 21 | ZeroMemory( &pi, sizeof(pi) ); 22 | 23 | // Start the child process. 24 | if( !CreateProcess( NULL, // No module name (use command line). 25 | "C:\\WINDOWS\\system32\\mspaint.exe", // Command line. 26 | NULL, // Process handle not inheritable. 27 | NULL, // Thread handle not inheritable. 28 | FALSE, // Set handle inheritance to FALSE. 29 | 0, // No creation flags. 30 | NULL, // Use parent's environment block. 31 | NULL, // Use parent's starting directory. 32 | &si, // Pointer to STARTUPINFO structure. 33 | &pi ) // Pointer to PROCESS_INFORMATION structure. 34 | ) 35 | { 36 | printf( "CreateProcess failed (%d).\n", GetLastError() ); 37 | return -1; 38 | } 39 | 40 | // Wait until child process exits. 41 | WaitForSingleObject( pi.hProcess, INFINITE ); 42 | 43 | // Close process and thread handles. 44 | CloseHandle( pi.hProcess ); 45 | CloseHandle( pi.hThread ); 46 | } 47 | 48 | -------------------------------------------------------------------------------- /ch3/pid.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Kernel module that communicates with /proc file system. 3 | * 4 | * This provides the base logic for Project 2 - displaying task information 5 | */ 6 | 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #define BUFFER_SIZE 128 17 | #define PROC_NAME "pid" 18 | 19 | /* the current pid */ 20 | static long l_pid; 21 | 22 | /** 23 | * Function prototypes 24 | */ 25 | static ssize_t proc_read(struct file *file, char *buf, size_t count, loff_t *pos); 26 | static ssize_t proc_write(struct file *file, const char __user *usr_buf, size_t count, loff_t *pos); 27 | 28 | static struct file_operations proc_ops = { 29 | .owner = THIS_MODULE, 30 | .read = proc_read, 31 | }; 32 | 33 | /* This function is called when the module is loaded. */ 34 | static int proc_init(void) 35 | { 36 | // creates the /proc/procfs entry 37 | proc_create(PROC_NAME, 0666, NULL, &proc_ops); 38 | 39 | printk(KERN_INFO "/proc/%s created\n", PROC_NAME); 40 | 41 | return 0; 42 | } 43 | 44 | /* This function is called when the module is removed. */ 45 | static void proc_exit(void) 46 | { 47 | // removes the /proc/procfs entry 48 | remove_proc_entry(PROC_NAME, NULL); 49 | 50 | printk( KERN_INFO "/proc/%s removed\n", PROC_NAME); 51 | } 52 | 53 | /** 54 | * This function is called each time the /proc/pid is read. 55 | * 56 | * This function is called repeatedly until it returns 0, so 57 | * there must be logic that ensures it ultimately returns 0 58 | * once it has collected the data that is to go into the 59 | * corresponding /proc file. 60 | */ 61 | static ssize_t proc_read(struct file *file, char __user *usr_buf, size_t count, loff_t *pos) 62 | { 63 | int rv = 0; 64 | char buffer[BUFFER_SIZE]; 65 | static int completed = 0; 66 | struct task_struct *tsk = NULL; 67 | 68 | if (completed) { 69 | completed = 0; 70 | return 0; 71 | } 72 | 73 | tsk = pid_task(find_vpid(l_pid), PIDTYPE_PID); 74 | 75 | completed = 1; 76 | 77 | // copies the contents of kernel buffer to userspace usr_buf 78 | if (copy_to_user(usr_buf, buffer, rv)) { 79 | rv = -1; 80 | } 81 | 82 | return rv; 83 | } 84 | 85 | /** 86 | * This function is called each time we write to the /proc file system. 87 | */ 88 | static ssize_t proc_write(struct file *file, const char __user *usr_buf, size_t count, loff_t *pos) 89 | { 90 | char *k_mem; 91 | 92 | // allocate kernel memory 93 | k_mem = kmalloc(count, GFP_KERNEL); 94 | 95 | /* copies user space usr_buf to kernel buffer */ 96 | if (copy_from_user(k_mem, usr_buf, count)) { 97 | printk( KERN_INFO "Error copying from user\n"); 98 | return -1; 99 | } 100 | 101 | /** 102 | * kstrol() will not work because the strings are not guaranteed 103 | * to be null-terminated. 104 | * 105 | * sscanf() must be used instead. 106 | */ 107 | 108 | kfree(k_mem); 109 | 110 | return count; 111 | } 112 | 113 | /* Macros for registering module entry and exit points. */ 114 | module_init( proc_init ); 115 | module_exit( proc_exit ); 116 | 117 | MODULE_LICENSE("GPL"); 118 | MODULE_DESCRIPTION("Module"); 119 | MODULE_AUTHOR("SGG"); 120 | 121 | -------------------------------------------------------------------------------- /ch3/shm-posix-consumer.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Simple program demonstrating shared memory in POSIX systems. 3 | * 4 | * This is the consumer process 5 | * 6 | * Figure 3.18 7 | * 8 | * To compile, enter 9 | * gcc shm-posix-consumer.c -lrt 10 | * 11 | * @author Gagne, Galvin, Silberschatz 12 | * Operating System Concepts - Tenth Edition 13 | * Copyright John Wiley & Sons - 2018 14 | */ 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | 24 | int main() 25 | { 26 | const char *name = "OS"; 27 | const int SIZE = 4096; 28 | 29 | int shm_fd; 30 | void *ptr; 31 | int i; 32 | 33 | /* open the shared memory segment */ 34 | shm_fd = shm_open(name, O_RDONLY, 0666); 35 | if (shm_fd == -1) { 36 | printf("shared memory failed\n"); 37 | exit(-1); 38 | } 39 | 40 | /* now map the shared memory segment in the address space of the process */ 41 | ptr = mmap(0,SIZE, PROT_READ, MAP_SHARED, shm_fd, 0); 42 | if (ptr == MAP_FAILED) { 43 | printf("Map failed\n"); 44 | exit(-1); 45 | } 46 | 47 | /* now read from the shared memory region */ 48 | printf("%s",(char *)ptr); 49 | 50 | /* remove the shared memory segment */ 51 | if (shm_unlink(name) == -1) { 52 | printf("Error removing %s\n",name); 53 | exit(-1); 54 | } 55 | 56 | return 0; 57 | } 58 | -------------------------------------------------------------------------------- /ch3/shm-posix-producer.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Simple program demonstrating shared memory in POSIX systems. 3 | * 4 | * This is the producer process that writes to the shared memory region. 5 | * 6 | * Figure 3.16 7 | * 8 | * To compile, enter 9 | * gcc shm-posix-producer.c -lrt 10 | * 11 | * @author Silberschatz, Galvin, and Gagne 12 | * Operating System Concepts - Tenth Edition 13 | * Copyright John Wiley & Sons - 2018 14 | */ 15 | 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | 27 | int main() 28 | { 29 | const int SIZE = 4096; 30 | const char *name = "OS"; 31 | const char *message0= "Studying "; 32 | const char *message1= "Operating Systems "; 33 | const char *message2= "Is Fun!"; 34 | 35 | int shm_fd; 36 | void *ptr; 37 | 38 | /* create the shared memory segment */ 39 | shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666); 40 | 41 | /* configure the size of the shared memory segment */ 42 | ftruncate(shm_fd,SIZE); 43 | 44 | /* now map the shared memory segment in the address space of the process */ 45 | ptr = mmap(0,SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); 46 | if (ptr == MAP_FAILED) { 47 | printf("Map failed\n"); 48 | return -1; 49 | } 50 | 51 | /** 52 | * Now write to the shared memory region. 53 | * 54 | * Note we must increment the value of ptr after each write. 55 | */ 56 | sprintf(ptr,"%s",message0); 57 | ptr += strlen(message0); 58 | sprintf(ptr,"%s",message1); 59 | ptr += strlen(message1); 60 | sprintf(ptr,"%s",message2); 61 | ptr += strlen(message2); 62 | 63 | return 0; 64 | } 65 | -------------------------------------------------------------------------------- /ch3/simple-shell.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Simple shell interface program. 3 | * 4 | * Operating System Concepts - Tenth Edition 5 | * Copyright John Wiley & Sons - 2018 6 | */ 7 | 8 | #include 9 | #include 10 | 11 | #define MAX_LINE 80 /* 80 chars per line, per command */ 12 | 13 | int main(void) 14 | { 15 | char *args[MAX_LINE/2 + 1]; /* command line (of 80) has max of 40 arguments */ 16 | int should_run = 1; 17 | 18 | while (should_run){ 19 | printf("osh>"); 20 | fflush(stdout); 21 | 22 | /** 23 | * After reading user input, the steps are: 24 | * (1) fork a child process 25 | * (2) the child process will invoke execvp() 26 | * (3) if command included &, parent will invoke wait() 27 | */ 28 | } 29 | 30 | return 0; 31 | } 32 | -------------------------------------------------------------------------------- /ch3/unix_pipe.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Example program demonstrating UNIX pipes. 3 | * 4 | * Figures 3.21 & 3.22 5 | * 6 | * @author Silberschatz, Galvin, and Gagne 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #define BUFFER_SIZE 25 17 | #define READ_END 0 18 | #define WRITE_END 1 19 | 20 | int main(void) 21 | { 22 | char write_msg[BUFFER_SIZE] = "Greetings"; 23 | char read_msg[BUFFER_SIZE]; 24 | pid_t pid; 25 | int fd[2]; 26 | 27 | /* create the pipe */ 28 | if (pipe(fd) == -1) { 29 | fprintf(stderr,"Pipe failed"); 30 | return 1; 31 | } 32 | 33 | /* now fork a child process */ 34 | pid = fork(); 35 | 36 | if (pid < 0) { 37 | fprintf(stderr, "Fork failed"); 38 | return 1; 39 | } 40 | 41 | if (pid > 0) { /* parent process */ 42 | /* close the unused end of the pipe */ 43 | close(fd[READ_END]); 44 | 45 | /* write to the pipe */ 46 | write(fd[WRITE_END], write_msg, strlen(write_msg)+1); 47 | 48 | /* close the write end of the pipe */ 49 | close(fd[WRITE_END]); 50 | } 51 | else { /* child process */ 52 | /* close the unused end of the pipe */ 53 | close(fd[WRITE_END]); 54 | 55 | /* read from the pipe */ 56 | read(fd[READ_END], read_msg, BUFFER_SIZE); 57 | printf("child read %s\n",read_msg); 58 | 59 | /* close the write end of the pipe */ 60 | close(fd[READ_END]); 61 | } 62 | 63 | return 0; 64 | } 65 | -------------------------------------------------------------------------------- /ch3/win32-pipe-child.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Simple program demonstrating Win32 anonymous pipes. 3 | * 4 | * Figure 3.25 5 | * 6 | * @author Silberschatz, Gagne, and Galvin. 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | #include 12 | #include 13 | 14 | #define BUFFER_SIZE 25 15 | 16 | int main(VOID) 17 | { 18 | HANDLE ReadHandle, WriteHandle; 19 | CHAR buffer[BUFFER_SIZE]; 20 | DWORD read; 21 | 22 | ReadHandle = GetStdHandle(STD_INPUT_HANDLE); 23 | WriteHandle= GetStdHandle(STD_OUTPUT_HANDLE); 24 | 25 | /* have the child read from the pipe */ 26 | if (ReadFile(ReadHandle, buffer, BUFFER_SIZE, &read, NULL)) 27 | printf("child: >%s<",buffer); 28 | else 29 | fprintf(stderr, "Child: Error reading from pipe\n"); 30 | 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /ch3/win32-pipe-parent.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Simple program demonstrating Win32 anonymous pipes. 3 | * 4 | * Figures 3.23 & 3.24 5 | * 6 | * @author Silberschatz, Gagne and Galvin. 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #define BUFFER_SIZE 25 16 | 17 | int main(VOID) 18 | { 19 | HANDLE ReadHandle, WriteHandle; 20 | STARTUPINFO si; 21 | PROCESS_INFORMATION pi; 22 | char message[BUFFER_SIZE] = "Greetings"; 23 | DWORD written; 24 | 25 | /* set up security attributes so that pipe handles are inherited */ 26 | SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL,TRUE}; 27 | 28 | /* allocate memory */ 29 | ZeroMemory(&pi, sizeof(pi)); 30 | 31 | /* create the pipe */ 32 | if ( !CreatePipe(&ReadHandle, &WriteHandle, &sa, 0)) { 33 | fprintf(stderr,"Create Pipe Failed\n"); 34 | return 1; 35 | } 36 | 37 | /* establish the START_INFO structure for the child process */ 38 | GetStartupInfo(&si); 39 | si.hStdError = GetStdHandle(STD_ERROR_HANDLE); 40 | si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE); 41 | 42 | /* redirect the standard input to the read end of the pipe */ 43 | si.hStdInput = ReadHandle; 44 | si.dwFlags = STARTF_USESTDHANDLES; 45 | 46 | /* we do not want the child to inherit the write end of the pipe */ 47 | SetHandleInformation( WriteHandle, HANDLE_FLAG_INHERIT, 0); 48 | 49 | /* create the child process */ 50 | if (!CreateProcess(NULL, 51 | ".\\child.exe", 52 | NULL, 53 | NULL, 54 | TRUE, /* inherit handles */ 55 | 0, 56 | NULL, 57 | NULL, 58 | &si, 59 | &pi)) 60 | { 61 | fprintf(stderr, "Process Creation Failed\n"); 62 | return -1; 63 | } 64 | 65 | /* close the unused end of the pipe */ 66 | CloseHandle(ReadHandle); 67 | 68 | /* the parent now wants to write to the pipe */ 69 | if (!WriteFile (WriteHandle, message, BUFFER_SIZE, &written, NULL)) 70 | fprintf(stderr, "Error writing to pipe\n"); 71 | 72 | /* close the write end of the pipe */ 73 | CloseHandle(WriteHandle); 74 | 75 | /* wait for the child to exit */ 76 | WaitForSingleObject(pi.hProcess, INFINITE); 77 | 78 | /* close all handles */ 79 | CloseHandle(pi.hProcess); 80 | CloseHandle(pi.hThread); 81 | } 82 | -------------------------------------------------------------------------------- /ch4/Driver.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Summation program using exectuors/callable/futures 3 | * 4 | * Figure 4.14 5 | * 6 | * @author Gagne, Galvin, Silberschatz 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | import java.util.concurrent.*; 12 | 13 | class Summation implements Callable 14 | { 15 | private int upper; 16 | 17 | public Summation(int upper) { 18 | this.upper = upper; 19 | } 20 | 21 | public Integer call() { 22 | int sum = 0; 23 | for (int i = 1; i <= upper; i++) 24 | sum += i; 25 | 26 | return new Integer(sum); 27 | } 28 | } 29 | 30 | 31 | public class Driver 32 | { 33 | public static void main(String[] args) { 34 | if (args.length == 1) { 35 | int upper = Integer.parseInt(args[0]); 36 | 37 | ExecutorService pool = Executors.newSingleThreadExecutor(); 38 | Future result = pool.submit(new Summation(upper)); 39 | 40 | try { 41 | System.out.println("sum = " + result.get()); 42 | } 43 | catch (InterruptedException | ExecutionException ie) { } 44 | 45 | pool.shutdown(); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ch4/SumTask.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Fork/join parallelism in Java 3 | * 4 | * Figure 4.18 5 | * 6 | * @author Gagne, Galvin, Silberschatz 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | import java.util.concurrent.*; 12 | 13 | public class SumTask extends RecursiveTask 14 | { 15 | static final int SIZE = 10000; 16 | static final int THRESHOLD = 1000; 17 | 18 | private int begin; 19 | private int end; 20 | private int[] array; 21 | 22 | public SumTask(int begin, int end, int[] array) { 23 | this.begin = begin; 24 | this.end = end; 25 | this.array = array; 26 | } 27 | 28 | protected Integer compute() { 29 | if (end - begin < THRESHOLD) { 30 | // conquer stage 31 | int sum = 0; 32 | for (int i = begin; i <= end; i++) 33 | sum += array[i]; 34 | 35 | return sum; 36 | } 37 | else { 38 | // divide stage 39 | int mid = begin + (end - begin) / 2; 40 | 41 | SumTask leftTask = new SumTask(begin, mid, array); 42 | SumTask rightTask = new SumTask(mid + 1, end, array); 43 | 44 | leftTask.fork(); 45 | rightTask.fork(); 46 | 47 | return rightTask.join() + leftTask.join(); 48 | } 49 | } 50 | 51 | public static void main(String[] args) { 52 | ForkJoinPool pool = new ForkJoinPool(); 53 | int[] array = new int[SIZE]; 54 | 55 | // create SIZE random integers between 0 and 9 56 | java.util.Random rand = new java.util.Random(); 57 | 58 | for (int i = 0; i < SIZE; i++) { 59 | array[i] = rand.nextInt(10); 60 | } 61 | 62 | // use fork-join parallelism to sum the array 63 | SumTask task = new SumTask(0, SIZE-1, array); 64 | 65 | int sum = pool.invoke(task); 66 | 67 | System.out.println("The sum is " + sum); 68 | } 69 | } 70 | 71 | -------------------------------------------------------------------------------- /ch4/ThreadPoolExample.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Creating a Java thread pool. 3 | * 4 | * Figure 4.15 5 | * 6 | * @author Gagne, Galvin, Silberschatz 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | import java.util.concurrent.*; 12 | 13 | class Task implements Runnable 14 | { 15 | public void run() { 16 | System.out.println(Thread.currentThread().getName()); 17 | } 18 | } 19 | 20 | public class ThreadPoolExample 21 | { 22 | public static void main(String[] args) { 23 | int numTasks = Integer.parseInt(args[0].trim()); 24 | 25 | ExecutorService pool = Executors.newCachedThreadPool(); 26 | 27 | for (int i = 0; i < numTasks; i++) 28 | pool.execute(new Task()); 29 | 30 | // The following invovles using a lambda function 31 | // pool.execute( () -> {System.out.println(Thread.currentThread().getName());}); 32 | 33 | pool.shutdown(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ch4/fig4-23.c: -------------------------------------------------------------------------------- 1 | /** 2 | * A pthread program illustrating how to 3 | * create a simple thread and some of the pthread API 4 | * This program implements the summation function where 5 | * the summation operation is run as a separate thread. 6 | * 7 | * Most Unix/Linux/OS X users 8 | * gcc fig4-23.c -lpthread 9 | * 10 | * Figure 4.23 11 | * 12 | * @author Gagne, Galvin, Silberschatz 13 | * Operating System Concepts - Tenth Edition 14 | * Copyright John Wiley & Sons - 2018 15 | */ 16 | 17 | #include 18 | #include 19 | #include 20 | #include 21 | 22 | int value = 0; 23 | void *runner(void *param); /* the thread */ 24 | 25 | int main(int argc, char *argv[]) 26 | { 27 | pid_t pid; 28 | pthread_t tid; pthread_attr_t attr; 29 | pid = fork(); 30 | 31 | if (pid == 0) { /* child process */ 32 | pthread_attr_init(&attr); 33 | pthread_create(&tid,&attr,runner,NULL); 34 | pthread_join(tid,NULL); 35 | printf("CHILD: value = %d",value); /* LINE C */ 36 | } 37 | else if (pid > 0) { /* parent process */ 38 | wait(NULL); 39 | printf("PARENT: value = %d",value); /* LINE P */ 40 | } 41 | } 42 | 43 | void *runner(void *param) { 44 | value = 5; 45 | pthread_exit(0); 46 | } 47 | -------------------------------------------------------------------------------- /ch4/openmp.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Example of openmp parallel region 3 | * 4 | * To compile, enter: 5 | * 6 | * gcc -fopenmp openmp.c 7 | * 8 | * You should see the message "I am a parallel region" for each 9 | * processing core on your system. 10 | * 11 | * For those using a virtual machine, make sure you set the number of 12 | * processing cores > 1 to see parallel execution of the parallel region. 13 | */ 14 | 15 | #include 16 | #include 17 | 18 | int main(int argc, char *argv[]) 19 | { 20 | /* sequential code */ 21 | 22 | #pragma omp parallel 23 | { 24 | printf("I am a parallel region\n"); 25 | } 26 | 27 | /* sequential code */ 28 | 29 | return 0; 30 | } 31 | -------------------------------------------------------------------------------- /ch4/thrd-posix.c: -------------------------------------------------------------------------------- 1 | /** 2 | * A pthread program illustrating how to 3 | * create a simple thread and some of the pthread API 4 | * This program implements the summation function where 5 | * the summation operation is run as a separate thread. 6 | * 7 | * Most Unix/Linux/OS X users 8 | * gcc thrd.c -lpthread 9 | * 10 | * Figure 4.11 11 | * 12 | * @author Gagne, Galvin, Silberschatz 13 | * Operating System Concepts - Tenth Edition 14 | * Copyright John Wiley & Sons - 2018 15 | */ 16 | 17 | #include 18 | #include 19 | #include 20 | 21 | int sum; /* this data is shared by the thread(s) */ 22 | 23 | void *runner(void *param); /* the thread */ 24 | 25 | int main(int argc, char *argv[]) 26 | { 27 | pthread_t tid; /* the thread identifier */ 28 | pthread_attr_t attr; /* set of attributes for the thread */ 29 | 30 | if (argc != 2) { 31 | fprintf(stderr,"usage: a.out \n"); 32 | /*exit(1);*/ 33 | return -1; 34 | } 35 | 36 | if (atoi(argv[1]) < 0) { 37 | fprintf(stderr,"Argument %d must be non-negative\n",atoi(argv[1])); 38 | /*exit(1);*/ 39 | return -1; 40 | } 41 | 42 | /* get the default attributes */ 43 | pthread_attr_init(&attr); 44 | 45 | /* create the thread */ 46 | pthread_create(&tid,&attr,runner,argv[1]); 47 | 48 | /* now wait for the thread to exit */ 49 | pthread_join(tid,NULL); 50 | 51 | printf("sum = %d\n",sum); 52 | } 53 | 54 | /** 55 | * The thread will begin control in this function 56 | */ 57 | void *runner(void *param) 58 | { 59 | int i, upper = atoi(param); 60 | sum = 0; 61 | 62 | if (upper > 0) { 63 | for (i = 1; i <= upper; i++) 64 | sum += i; 65 | } 66 | 67 | pthread_exit(0); 68 | } 69 | -------------------------------------------------------------------------------- /ch4/thrd-win32.c: -------------------------------------------------------------------------------- 1 | /** 2 | * This program creates a separate thread using the CreateThread() system call. 3 | * 4 | * Figure 4.13 5 | * 6 | * @author Gagne, Galvin, Silberschatz 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018 9 | */ 10 | 11 | #include 12 | #include 13 | 14 | 15 | DWORD Sum; /* data is shared by the thread(s) */ 16 | 17 | /* the thread runs in this separate function */ 18 | DWORD WINAPI Summation(PVOID Param) 19 | { 20 | DWORD Upper = *(DWORD *)Param; 21 | 22 | for (DWORD i = 0; i <= Upper; i++) 23 | Sum += i; 24 | 25 | 26 | 27 | return 0; 28 | } 29 | 30 | 31 | int main(int argc, char *argv[]) 32 | { 33 | DWORD ThreadId; 34 | HANDLE ThreadHandle; 35 | int Param; 36 | 37 | // do some basic error checking 38 | if (argc != 2) { 39 | fprintf(stderr,"An integer parameter is required\n"); 40 | return -1; 41 | } 42 | 43 | Param = atoi(argv[1]); 44 | 45 | if (Param < 0) { 46 | fprintf(stderr, "an integer >= 0 is required \n"); 47 | return -1; 48 | } 49 | 50 | // create the thread 51 | ThreadHandle = CreateThread(NULL, 0, Summation, &Param, 0, &ThreadId); 52 | 53 | if (ThreadHandle != NULL) { 54 | WaitForSingleObject(ThreadHandle, INFINITE); 55 | CloseHandle(ThreadHandle); 56 | printf("sum = %d\n",Sum); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /ch5/posix-rt.c: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple pthread program illustrating RT pthread scheduling. 3 | * 4 | * Figure 5.25 5 | * 6 | * To compile: 7 | * 8 | * gcc posix-rt.c -o posix-rt -lpthread 9 | * 10 | * @author Gagne, Galvin, Silberschatz 11 | * Operating System Concepts - Tenth Edition 12 | * Copyright John Wiley & Sons - 2018. 13 | */ 14 | 15 | #include 16 | #include 17 | #define NUM_THREADS 5 18 | 19 | /* the thread runs in this function */ 20 | void *runner(void *param); 21 | 22 | int main(int argc, char *argv[]) 23 | { 24 | int i, policy; 25 | pthread_t tid[NUM_THREADS]; /* the thread identifier */ 26 | pthread_attr_t attr; /* set of attributes for the thread */ 27 | 28 | /* get the default attributes */ 29 | pthread_attr_init(&attr); 30 | 31 | /* get the current scheduling policy */ 32 | if (pthread_attr_getschedpolicy(&attr,&policy) != 0) 33 | fprintf(stderr, "Unable to get policy.\n"); 34 | else { 35 | if (policy == SCHED_OTHER) 36 | printf("SCHED_OTHER\n"); 37 | else if (policy == SCHED_RR) 38 | printf("SCHED_OTHER\n"); 39 | else if (policy == SCHED_FIFO) 40 | printf("SCHED_FIFO\n"); 41 | } 42 | 43 | /* set the scheduling policy - FIFO, RT, or OTHER */ 44 | if (pthread_attr_setschedpolicy(&attr, SCHED_OTHER) != 0) 45 | printf("unable to set scheduling policy to SCHED_OTHER \n"); 46 | 47 | /* create the threads */ 48 | for (i = 0; i < NUM_THREADS; i++) 49 | pthread_create(&tid[i],&attr,runner,NULL); 50 | 51 | /** 52 | * Now join on each thread 53 | */ 54 | for (i = 0; i < NUM_THREADS; i++) 55 | pthread_join(tid[i], NULL); 56 | } 57 | 58 | /** 59 | * The thread will begin control in this function. 60 | */ 61 | void *runner(void *param) 62 | { 63 | /* do some work ... */ 64 | 65 | pthread_exit(0); 66 | } 67 | 68 | -------------------------------------------------------------------------------- /ch5/posix-sched.c: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple pthread program illustrating POSIX scheduling. 3 | * 4 | * Figure 5.10 5 | * 6 | * To compile: 7 | * 8 | * gcc posix-sched.c -o posix-sched -lpthread 9 | * 10 | * @author Gagne, Galvin, Silberschatz 11 | * Operating System Concepts - Tenth Edition 12 | * Copyright John Wiley & Sons - 2018. 13 | */ 14 | 15 | #include 16 | #include 17 | #define NUM_THREADS 5 18 | 19 | /* the thread runs in this function */ 20 | void *runner(void *param); 21 | 22 | int main(int argc, char *argv[]) 23 | { 24 | int i, scope; 25 | pthread_t tid[NUM_THREADS]; /* the thread identifier */ 26 | pthread_attr_t attr; /* set of attributes for the thread */ 27 | 28 | /* get the default attributes */ 29 | pthread_attr_init(&attr); 30 | 31 | /* first inquire on the current scope */ 32 | if (pthread_attr_getscope(&attr,&scope) != 0) 33 | fprintf(stderr, "Unable to get scheduling scope.\n"); 34 | else { 35 | if (scope == PTHREAD_SCOPE_PROCESS) 36 | printf("PTHREAD_SCOPE_PROCESS\n"); 37 | else if (scope == PTHREAD_SCOPE_SYSTEM) 38 | printf("PTHREAD_SCOPE_SYSTEM\n"); 39 | else 40 | fprintf(stderr,"Illegal scope value.\n"); 41 | } 42 | 43 | /* set the scheduling algorithm to PCS or SCS */ 44 | if (pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM) != 0) 45 | printf("unable to set scheduling policy.\n"); 46 | 47 | /* create the threads */ 48 | for (i = 0; i < NUM_THREADS; i++) 49 | pthread_create(&tid[i],&attr,runner,NULL); 50 | 51 | /** 52 | * Now join on each thread 53 | */ 54 | for (i = 0; i < NUM_THREADS; i++) 55 | pthread_join(tid[i], NULL); 56 | } 57 | 58 | /** 59 | * The thread will begin control in this function. 60 | */ 61 | void *runner(void *param) 62 | { 63 | /* do some work ... */ 64 | 65 | pthread_exit(0); 66 | } 67 | 68 | -------------------------------------------------------------------------------- /ch5/project/java/Algorithm.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Interface representing a generic scheduling algorithm. 3 | * 4 | * @author Greg Gagne - March 2016 5 | */ 6 | 7 | public interface Algorithm 8 | { 9 | /** 10 | * Invokes the scheduler 11 | */ 12 | public abstract void schedule(); 13 | 14 | /** 15 | * Selects the next task using the appropriate scheduling algorithm 16 | */ 17 | public abstract Task pickNextTask(); 18 | } 19 | -------------------------------------------------------------------------------- /ch5/project/java/CPU.java: -------------------------------------------------------------------------------- 1 | /** 2 | * "Virtual" CPU 3 | * 4 | * This virtual CPU also maintains system time. 5 | * 6 | * @author Greg Gagne - March 2016 7 | */ 8 | 9 | public class CPU 10 | { 11 | /** 12 | * Run the specified task for the specified slice of time. 13 | */ 14 | public static void run(Task task, int slice) { 15 | System.out.println("Will run " + task); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ch5/project/java/Driver.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Driver.java 3 | * 4 | * Demonstrates different scheduling algorithms. 5 | * 6 | * Usage: 7 | * 8 | * java Driver 9 | * 10 | * where 11 | * schedule is schedule of tasks 12 | * 13 | * algorithm = [FCFS, SJF, PRI, RR, PRI-RR] 14 | */ 15 | 16 | import java.util.*; 17 | import java.io.*; 18 | 19 | public class Driver 20 | { 21 | public static void main(String[] args) throws IOException { 22 | if (args.length != 2) { 23 | System.err.println("Usage: java Driver "); 24 | System.exit(0); 25 | } 26 | 27 | BufferedReader inFile = new BufferedReader(new FileReader(args[1])); 28 | 29 | String schedule; 30 | 31 | // create the queue of tasks 32 | List queue = new ArrayList(); 33 | 34 | // read in the tasks and populate the ready queue 35 | while ( (schedule = inFile.readLine()) != null) { 36 | String[] params = schedule.split(",\\s*"); 37 | queue.add(new Task(params[0], Integer.parseInt(params[1]), Integer.parseInt(params[2]))); 38 | } 39 | 40 | inFile.close(); 41 | 42 | Algorithm scheduler = null; 43 | String choice = args[0].toUpperCase(); 44 | 45 | switch(choice) { 46 | case "FCFS": 47 | scheduler = new FCFS(queue); 48 | break; 49 | case "SJF": 50 | scheduler = new SJF(queue); 51 | break; 52 | case "PRI": 53 | scheduler = new Priority(queue); 54 | break; 55 | case "RR": 56 | scheduler = new RR(queue); 57 | break; 58 | case "PRI-RR": 59 | scheduler = new PriorityRR(queue); 60 | break; 61 | default: 62 | System.err.println("Invalid algorithm"); 63 | System.exit(0); 64 | } 65 | 66 | // start the scheduler 67 | scheduler.schedule(); 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /ch5/project/java/README: -------------------------------------------------------------------------------- 1 | Completing this project will require writing the following Java classes: 2 | 3 | FCFS.java 4 | SJF.java 5 | RR.java 6 | Priority.java 7 | PriorityRR.java 8 | 9 | Each of these classes must implement the Algorithm.java interface. 10 | 11 | -------------------------------------------------------------------------------- /ch5/project/java/Task.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Task to be scheduled by the scheduling alogrithm. 3 | * 4 | * Each task is represented by 5 | * 6 | * String name - a task name, not necessarily unique 7 | * 8 | * int tid - unique task identifier 9 | * 10 | * int priority - the relative priority of a task where a higher number indicates 11 | * higher relative priority. 12 | * 13 | * int burst - the CPU burst of this this task 14 | */ 15 | 16 | import java.util.concurrent.atomic.AtomicInteger; 17 | 18 | public class Task 19 | { 20 | // the representation of each task 21 | private String name; 22 | private int tid; 23 | private int priority; 24 | private int burst; 25 | 26 | /** 27 | * We use an atomic integer to assign each task a unique task id. 28 | */ 29 | private static AtomicInteger tidAllocator = new AtomicInteger(); 30 | 31 | public Task(String name, int priority, int burst) { 32 | this.name = name; 33 | this.priority = priority; 34 | this.burst = burst; 35 | 36 | this.tid = tidAllocator.getAndIncrement(); 37 | } 38 | 39 | /** 40 | * Appropriate getters 41 | */ 42 | public String getName() { 43 | return name; 44 | } 45 | 46 | public int getTid() { 47 | return tid; 48 | } 49 | 50 | public int getPriority() { 51 | return priority; 52 | } 53 | 54 | public int getBurst() { 55 | return burst; 56 | } 57 | 58 | /** 59 | * Appropriate setters 60 | */ 61 | public int setPriority(int priority) { 62 | this.priority = priority; 63 | 64 | return priority; 65 | } 66 | 67 | public int setBurst(int burst) { 68 | this.burst = burst; 69 | 70 | return burst; 71 | } 72 | 73 | /** 74 | * We override equals() so we can use a 75 | * Task object in Java collection classes. 76 | */ 77 | public boolean equals(Object other) { 78 | if (other == this) 79 | return true; 80 | 81 | if (!(other instanceof Task)) 82 | return false; 83 | 84 | /** 85 | * Otherwise we are dealing with another Task. 86 | * two tasks are equal if they have the same tid. 87 | */ 88 | Task rhs = (Task)other; 89 | return (this.tid == rhs.tid) ? true : false; 90 | } 91 | 92 | public String toString() { 93 | return 94 | "Name: " + name + "\n" + 95 | "Tid: " + tid + "\n" + 96 | "Priority: " + priority + "\n" + 97 | "Burst: " + burst + "\n"; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /ch5/project/java/book.txt: -------------------------------------------------------------------------------- 1 | P1, 4, 5 2 | P2, 1, 3 3 | P3, 2, 1 4 | P4, 2, 7 5 | P5, 3, 4 6 | -------------------------------------------------------------------------------- /ch5/project/java/rr-schedule.txt: -------------------------------------------------------------------------------- 1 | T1, 40, 50 2 | T2, 40, 50 3 | T3, 40, 50 4 | T4, 40, 50 5 | T5, 40, 50 6 | T6, 40, 50 7 | -------------------------------------------------------------------------------- /ch5/project/java/run.txt: -------------------------------------------------------------------------------- 1 | Priority with RR Scheduling 2 | 3 | Will run Name: T8 4 | Tid: 7 5 | Priority: 10 6 | Burst: 25 7 | 8 | Task T8 finished. 9 | 10 | Will run Name: T4 11 | Tid: 3 12 | Priority: 5 13 | Burst: 15 14 | 15 | Will run Name: T5 16 | Tid: 4 17 | Priority: 5 18 | Burst: 20 19 | 20 | Will run Name: T4 21 | Tid: 3 22 | Priority: 5 23 | Burst: 5 24 | 25 | Task T4 finished. 26 | 27 | Will run Name: T5 28 | Tid: 4 29 | Priority: 5 30 | Burst: 10 31 | 32 | Task T5 finished. 33 | 34 | Will run Name: T1 35 | Tid: 0 36 | Priority: 4 37 | Burst: 20 38 | 39 | Task T1 finished. 40 | 41 | Will run Name: T2 42 | Tid: 1 43 | Priority: 3 44 | Burst: 25 45 | 46 | Will run Name: T3 47 | Tid: 2 48 | Priority: 3 49 | Burst: 25 50 | 51 | Will run Name: T7 52 | Tid: 6 53 | Priority: 3 54 | Burst: 30 55 | 56 | Will run Name: T2 57 | Tid: 1 58 | Priority: 3 59 | Burst: 15 60 | 61 | Will run Name: T3 62 | Tid: 2 63 | Priority: 3 64 | Burst: 15 65 | 66 | Will run Name: T7 67 | Tid: 6 68 | Priority: 3 69 | Burst: 20 70 | 71 | Will run Name: T2 72 | Tid: 1 73 | Priority: 3 74 | Burst: 5 75 | 76 | Task T2 finished. 77 | 78 | Will run Name: T3 79 | Tid: 2 80 | Priority: 3 81 | Burst: 5 82 | 83 | Task T3 finished. 84 | 85 | Will run Name: T7 86 | Tid: 6 87 | Priority: 3 88 | Burst: 10 89 | 90 | Task T7 finished. 91 | 92 | Will run Name: T6 93 | Tid: 5 94 | Priority: 1 95 | Burst: 10 96 | 97 | Task T6 finished. 98 | 99 | -------------------------------------------------------------------------------- /ch5/project/java/schedule.txt: -------------------------------------------------------------------------------- 1 | T1, 4, 20 2 | T2, 3, 25 3 | T3, 3, 25 4 | T4, 5, 15 5 | T5, 5, 20 6 | T6, 1, 10 7 | T7, 3, 30 8 | T8, 10, 25 9 | -------------------------------------------------------------------------------- /ch5/project/posix/CPU.c: -------------------------------------------------------------------------------- 1 | /** 2 | * "Virtual" CPU that also maintains track of system time. 3 | */ 4 | 5 | #include 6 | 7 | #include "task.h" 8 | 9 | // run this task for the specified time slice 10 | void run(Task *task, int slice) { 11 | printf("Running task = [%s] [%d] [%d] for %d units.\n",task->name, task->priority, task->burst, slice); 12 | } 13 | -------------------------------------------------------------------------------- /ch5/project/posix/Makefile: -------------------------------------------------------------------------------- 1 | # makefile for scheduling program 2 | # 3 | # make rr - for round-robin scheduling 4 | # make fcfs - for FCFS scheduling 5 | # make sjf - for SJF scheduling 6 | # make priority - for priority scheduling 7 | # make priority_rr - for priority with round robin scheduling 8 | 9 | CC=gcc 10 | CFLAGS=-Wall 11 | 12 | clean: 13 | rm -rf *.o 14 | rm -rf fcfs 15 | rm -rf sjf 16 | rm -rf rr 17 | rm -rf priority 18 | rm -rf priority_rr 19 | 20 | rr: driver.o list.o CPU.o schedule_rr.o 21 | $(CC) $(CFLAGS) -o rr driver.o schedule_rr.o list.o CPU.o 22 | 23 | sjf: driver.o list.o CPU.o schedule_sjf.o 24 | $(CC) $(CFLAGS) -o sjf driver.o schedule_sjf.o list.o CPU.o 25 | 26 | fcfs: driver.o list.o CPU.o schedule_fcfs.o 27 | $(CC) $(CFLAGS) -o fcfs driver.o schedule_fcfs.o list.o CPU.o 28 | 29 | priority: driver.o list.o CPU.o schedule_priority.o 30 | $(CC) $(CFLAGS) -o priority driver.o schedule_priority.o list.o CPU.o 31 | 32 | schedule_fcfs.o: schedule_fcfs.c 33 | $(CC) $(CFLAGS) -c schedule_fcfs.c 34 | 35 | priority_rr: driver.o list.o CPU.o schedule_priority_rr.o 36 | $(CC) $(CFLAGS) -o priority_rr driver.o schedule_priority_rr.o list.o CPU.o 37 | 38 | driver.o: driver.c 39 | $(CC) $(CFLAGS) -c driver.c 40 | 41 | schedule_sjf.o: schedule_sjf.c 42 | $(CC) $(CFLAGS) -c schedule_sjf.c 43 | 44 | schedule_priority.o: schedule_priority.c 45 | $(CC) $(CFLAGS) -c schedule_priority.c 46 | 47 | schedule_rr.o: schedule_rr.c 48 | $(CC) $(CFLAGS) -c schedule_rr.c 49 | 50 | list.o: list.c list.h 51 | $(CC) $(CFLAGS) -c list.c 52 | 53 | CPU.o: CPU.c cpu.h 54 | $(CC) $(CFLAGS) -c CPU.c 55 | -------------------------------------------------------------------------------- /ch5/project/posix/README: -------------------------------------------------------------------------------- 1 | Completing this project will require writing the following C files: 2 | 3 | schedule_fcfs.c 4 | schedule_sjf.c 5 | schedule_rr.c 6 | schedule_priority.c 7 | schedule_priority_rr.c 8 | 9 | The supporting files invoke the appropriate scheduling algorithm. 10 | 11 | For example, to build the FCFS scheduler, enter 12 | 13 | make fcfs 14 | 15 | which builds the fcfs executable file. 16 | -------------------------------------------------------------------------------- /ch5/project/posix/book.txt: -------------------------------------------------------------------------------- 1 | P1, 4, 5 2 | P2, 1, 3 3 | P3, 2, 1 4 | P4, 2, 7 5 | P5, 3, 4 6 | -------------------------------------------------------------------------------- /ch5/project/posix/cpu.h: -------------------------------------------------------------------------------- 1 | // length of a time quantum 2 | #define QUANTUM 10 3 | 4 | // run the specified task for the following time slice 5 | void run(Task *task, int slice); 6 | -------------------------------------------------------------------------------- /ch5/project/posix/driver.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Driver.c 3 | * 4 | * Schedule is in the format 5 | * 6 | * [name] [priority] [CPU burst] 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | #include "task.h" 14 | #include "list.h" 15 | #include "schedulers.h" 16 | 17 | #define SIZE 100 18 | 19 | int main(int argc, char *argv[]) 20 | { 21 | FILE *in; 22 | char *temp; 23 | char task[SIZE]; 24 | 25 | char *name; 26 | int priority; 27 | int burst; 28 | 29 | in = fopen(argv[1],"r"); 30 | 31 | while (fgets(task,SIZE,in) != NULL) { 32 | temp = strdup(task); 33 | name = strsep(&temp,","); 34 | priority = atoi(strsep(&temp,",")); 35 | burst = atoi(strsep(&temp,",")); 36 | 37 | // add the task to the scheduler's list of tasks 38 | add(name,priority,burst); 39 | 40 | free(temp); 41 | } 42 | 43 | fclose(in); 44 | 45 | // invoke the scheduler 46 | schedule(); 47 | 48 | return 0; 49 | } 50 | -------------------------------------------------------------------------------- /ch5/project/posix/list.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Various list operations 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | #include "list.h" 10 | #include "task.h" 11 | 12 | 13 | // add a new task to the list of tasks 14 | void insert(struct node **head, Task *newTask) { 15 | // add the new task to the list 16 | struct node *newNode = malloc(sizeof(struct node)); 17 | 18 | newNode->task = newTask; 19 | newNode->next = *head; 20 | *head = newNode; 21 | } 22 | 23 | // delete the selected task from the list 24 | void delete(struct node **head, Task *task) { 25 | struct node *temp; 26 | struct node *prev; 27 | 28 | temp = *head; 29 | // special case - beginning of list 30 | if (strcmp(task->name,temp->task->name) == 0) { 31 | *head = (*head)->next; 32 | } 33 | else { 34 | // interior or last element in the list 35 | prev = *head; 36 | temp = temp->next; 37 | while (strcmp(task->name,temp->task->name) != 0) { 38 | prev = temp; 39 | temp = temp->next; 40 | } 41 | 42 | prev->next = temp->next; 43 | } 44 | } 45 | 46 | // traverse the list 47 | void traverse(struct node *head) { 48 | struct node *temp; 49 | temp = head; 50 | 51 | while (temp != NULL) { 52 | printf("[%s] [%d] [%d]\n",temp->task->name, temp->task->priority, temp->task->burst); 53 | temp = temp->next; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /ch5/project/posix/list.h: -------------------------------------------------------------------------------- 1 | /** 2 | * list data structure containing the tasks in the system 3 | */ 4 | 5 | #include "task.h" 6 | 7 | struct node { 8 | Task *task; 9 | struct node *next; 10 | }; 11 | 12 | // insert and delete operations. 13 | void insert(struct node **head, Task *task); 14 | void delete(struct node **head, Task *task); 15 | void traverse(struct node *head); 16 | -------------------------------------------------------------------------------- /ch5/project/posix/pri-schedule.txt: -------------------------------------------------------------------------------- 1 | T1, 1, 50 2 | T2, 1, 50 3 | T3, 1, 50 4 | T4, 1, 50 5 | T5, 1, 50 6 | T6, 1, 50 7 | -------------------------------------------------------------------------------- /ch5/project/posix/rr-schedule.txt: -------------------------------------------------------------------------------- 1 | T1, 40, 50 2 | T2, 40, 50 3 | T3, 40, 50 4 | T4, 40, 50 5 | T5, 40, 50 6 | T6, 40, 50 7 | -------------------------------------------------------------------------------- /ch5/project/posix/schedule.txt: -------------------------------------------------------------------------------- 1 | T1, 4, 20 2 | T2, 3, 25 3 | T3, 3, 25 4 | T4, 5, 15 5 | T5, 5, 20 6 | T6, 1, 10 7 | T7, 3, 30 8 | T8, 10, 25 9 | -------------------------------------------------------------------------------- /ch5/project/posix/schedulers.h: -------------------------------------------------------------------------------- 1 | #define MIN_PRIORITY 1 2 | #define MAX_PRIORITY 10 3 | 4 | // add a task to the list 5 | void add(char *name, int priority, int burst); 6 | 7 | // invoke the scheduler 8 | void schedule(); 9 | -------------------------------------------------------------------------------- /ch5/project/posix/task.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Representation of a task in the system. 3 | */ 4 | 5 | #ifndef TASK_H 6 | #define TASK_H 7 | 8 | // representation of a task 9 | typedef struct task { 10 | char *name; 11 | int tid; 12 | int priority; 13 | int burst; 14 | } Task; 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /ch7/BoundedBuffer.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Bounded buffer using Java synchronization 3 | * 4 | * Figures 7.9 and 7.11 5 | * 6 | * @author Gagne, Galvin, Silberschatz 7 | * Operating System Concepts - Tenth Edition 8 | * Copyright John Wiley & Sons - 2018. 9 | */ 10 | 11 | @SuppressWarnings("unchecked") 12 | 13 | public class BoundedBuffer 14 | { 15 | private static final int BUFFER_SIZE = 5; 16 | 17 | private int count, in, out; 18 | private E[] buffer; 19 | 20 | public BoundedBuffer() { 21 | count = 0; 22 | in = 0; 23 | out = 0; 24 | buffer = (E[]) new Object[BUFFER_SIZE]; 25 | } 26 | 27 | public synchronized void insert(E item) { 28 | while (count == BUFFER_SIZE) { 29 | try { 30 | wait(); 31 | } 32 | catch (InterruptedException ie) { } 33 | } 34 | 35 | buffer[in] = item; 36 | in = (in + 1) % BUFFER_SIZE; 37 | count++; 38 | 39 | notify(); 40 | } 41 | 42 | public synchronized E remove() { 43 | E item; 44 | 45 | while (count == 0) { 46 | try { 47 | wait(); 48 | } 49 | catch (InterruptedException ie) { } 50 | } 51 | 52 | item = buffer[out]; 53 | out = (out + 1) % BUFFER_SIZE; 54 | count--; 55 | 56 | notify(); 57 | 58 | return item; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /ch7/project-1/java/Client.java: -------------------------------------------------------------------------------- 1 | public class Client 2 | { 3 | public static void main(String[] args) { 4 | ThreadPool pool = new ThreadPool(); 5 | 6 | pool.add(new Task(5,10)); 7 | pool.add(new Task(1,2)); 8 | pool.add(new Task(5,1)); 9 | pool.add(new Task(15,0)); 10 | pool.add(new Task(75,7)); 11 | pool.add(new Task(12,-10)); 12 | 13 | pool.shutdown(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ch7/project-1/java/README: -------------------------------------------------------------------------------- 1 | This directory contains the necessary source files to implement and 2 | test a thread pool using Java synchronization. 3 | 4 | Files: 5 | 6 | - TestCancel.java (Covers specifics on thread cancelation in Java) 7 | 8 | - Client.java & Task.java (example client program that uses thread pool) 9 | 10 | - ThreadPool.java (skeleton of thread pool implementation) 11 | 12 | This project involves implementing the remainder of the ThreadPool.java class. 13 | -------------------------------------------------------------------------------- /ch7/project-1/java/Task.java: -------------------------------------------------------------------------------- 1 | public class Task implements Runnable 2 | { 3 | private int a; 4 | private int b; 5 | 6 | public Task(int a, int b) { 7 | this.a = a; 8 | this.b = b; 9 | } 10 | 11 | public void run() { 12 | System.out.println("I am a task result = " + (a + b)); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ch7/project-1/java/TestCancel.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Demonstration of interrupting a Java thread. 3 | */ 4 | 5 | class Worker implements Runnable 6 | { 7 | /** 8 | * Method invoked by workers ... 9 | */ 10 | public void doWork() throws InterruptedException { 11 | try { 12 | Thread.sleep(1000); 13 | } 14 | catch (InterruptedException ie) { 15 | throw ie; 16 | } 17 | } 18 | 19 | /** 20 | * The thread may be interrupted either when in the 21 | * doWork() method, or it checks its interruption 22 | * status with the isInterrupted() method. 23 | */ 24 | public void run() { 25 | try { 26 | while (!Thread.currentThread().isInterrupted()) { 27 | doWork(); 28 | System.out.println("I am a thread\n"); 29 | } 30 | } 31 | catch (InterruptedException ie) { 32 | // caught exception thrown from doWork() 33 | } 34 | } 35 | } 36 | 37 | public class TestCancel 38 | { 39 | public static void main(String[] args) throws InterruptedException { 40 | Runnable task = new Worker(); 41 | Thread worker = new Thread(task); 42 | 43 | worker.start(); 44 | 45 | Thread.sleep(3000); 46 | 47 | // sets the interruption status of the worker thread 48 | worker.interrupt(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /ch7/project-1/java/ThreadPool.java: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple thread pool API. 3 | * 4 | * Tasks that wish to get run by the thread pool must implement the 5 | * java.lang.Runnable interface. 6 | */ 7 | 8 | public class ThreadPool 9 | { 10 | /** 11 | * Create a default size thread pool. 12 | */ 13 | public ThreadPool() { 14 | 15 | } 16 | 17 | 18 | /** 19 | * Create a thread pool with a specified size. 20 | * 21 | * @param int size The number of threads in the pool. 22 | */ 23 | public ThreadPool(int size) { 24 | 25 | } 26 | 27 | 28 | /** 29 | * shut down the pool. 30 | */ 31 | public void shutdown() { 32 | } 33 | 34 | /** 35 | * Add work to the queue. 36 | */ 37 | public void add(Runnable task) { 38 | 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /ch7/project-1/posix/Makefile: -------------------------------------------------------------------------------- 1 | # makefile for thread pool 2 | # 3 | 4 | CC=gcc 5 | CFLAGS=-Wall 6 | PTHREADS=-lpthread 7 | 8 | all: client.o threadpool.o 9 | $(CC) $(CFLAGS) -o example client.o threadpool.o $(PTHREADS) 10 | 11 | client.o: client.c 12 | $(CC) $(CFLAGS) -c client.c $(PTHREADS) 13 | 14 | threadpool.o: threadpool.c threadpool.h 15 | $(CC) $(CFLAGS) -c threadpool.c $(PTHREADS) 16 | 17 | clean: 18 | rm -rf *.o 19 | rm -rf example 20 | 21 | -------------------------------------------------------------------------------- /ch7/project-1/posix/README: -------------------------------------------------------------------------------- 1 | These files support the POSIX implementation of the thread pool project. 2 | 3 | Source files: 4 | 5 | - client.c (client program that uses thread pool) 6 | 7 | - threadpool.c (implementation of thread pool) 8 | 9 | - threadpool.h (header file containing function prototypes) 10 | 11 | Makefile 12 | 13 | To run the make file, enter "make" 14 | 15 | To run the example program, enter "./example" 16 | -------------------------------------------------------------------------------- /ch7/project-1/posix/client.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Example client program that uses thread pool. 3 | */ 4 | 5 | #include 6 | #include 7 | #include "threadpool.h" 8 | 9 | struct data 10 | { 11 | int a; 12 | int b; 13 | }; 14 | 15 | void add(void *param) 16 | { 17 | struct data *temp; 18 | temp = (struct data*)param; 19 | 20 | printf("I add two values %d and %d result = %d\n",temp->a, temp->b, temp->a + temp->b); 21 | } 22 | 23 | int main(void) 24 | { 25 | // create some work to do 26 | struct data work; 27 | work.a = 5; 28 | work.b = 10; 29 | 30 | // initialize the thread pool 31 | pool_init(); 32 | 33 | // submit the work to the queue 34 | pool_submit(&add,&work); 35 | 36 | // may be helpful 37 | //sleep(3); 38 | 39 | pool_shutdown(); 40 | 41 | return 0; 42 | } 43 | -------------------------------------------------------------------------------- /ch7/project-1/posix/threadpool.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Implementation of thread pool. 3 | */ 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "threadpool.h" 10 | 11 | #define QUEUE_SIZE 10 12 | #define NUMBER_OF_THREADS 3 13 | 14 | #define TRUE 1 15 | 16 | // this represents work that has to be 17 | // completed by a thread in the pool 18 | typedef struct 19 | { 20 | void (*function)(void *p); 21 | void *data; 22 | } 23 | task; 24 | 25 | // the work queue 26 | task worktodo; 27 | 28 | // the worker bee 29 | pthread_t bee; 30 | 31 | // insert a task into the queue 32 | // returns 0 if successful or 1 otherwise, 33 | int enqueue(task t) 34 | { 35 | return 0; 36 | } 37 | 38 | // remove a task from the queue 39 | task dequeue() 40 | { 41 | return worktodo; 42 | } 43 | 44 | // the worker thread in the thread pool 45 | void *worker(void *param) 46 | { 47 | // execute the task 48 | execute(worktodo.function, worktodo.data); 49 | 50 | pthread_exit(0); 51 | } 52 | 53 | /** 54 | * Executes the task provided to the thread pool 55 | */ 56 | void execute(void (*somefunction)(void *p), void *p) 57 | { 58 | (*somefunction)(p); 59 | } 60 | 61 | /** 62 | * Submits work to the pool. 63 | */ 64 | int pool_submit(void (*somefunction)(void *p), void *p) 65 | { 66 | worktodo.function = somefunction; 67 | worktodo.data = p; 68 | 69 | return 0; 70 | } 71 | 72 | // initialize the thread pool 73 | void pool_init(void) 74 | { 75 | pthread_create(&bee,NULL,worker,NULL); 76 | } 77 | 78 | // shutdown the thread pool 79 | void pool_shutdown(void) 80 | { 81 | pthread_join(bee,NULL); 82 | } 83 | -------------------------------------------------------------------------------- /ch7/project-1/posix/threadpool.h: -------------------------------------------------------------------------------- 1 | // function prototypes 2 | void execute(void (*somefunction)(void *p), void *p); 3 | int pool_submit(void (*somefunction)(void *p), void *p); 4 | void *worker(void *param); 5 | void pool_init(void); 6 | void pool_shutdown(void); 7 | -------------------------------------------------------------------------------- /ch8/DeadlockExample.java: -------------------------------------------------------------------------------- 1 | /** 2 | * This program gives an example of how deadlock can occur between threads. 3 | * This program differs from the book as each thread will sleep a random 4 | * amount of time between calls to the synchronized statement. It may require 5 | * several runs of the program to deadlock the threads. 6 | * 7 | * Figure 8.1 8 | * 9 | * WHAT IS INTERESTING TO DO IS GET A THREAD DUMP TO SEE 10 | * HOW THE JVM DETECTS DEADLOCK FROM A STACK DUMP 11 | * 12 | * TO GET A STACK DUMP: 13 | * 14 | * \ (MAC/UNIX) 15 | * 16 | * BREAK (WINDOWS) 17 | * 18 | * @author Gagne, Galvin, Silberschatz 19 | * Operating System Concepts - Tenth Edition 20 | * Copyright John Wiley & Sons - 2018. 21 | */ 22 | 23 | 24 | import java.util.concurrent.locks.*; 25 | 26 | class A implements Runnable 27 | { 28 | private Lock first, second; 29 | 30 | public A(Lock first, Lock second) { 31 | this.first = first; 32 | this.second = second; 33 | } 34 | 35 | public void run() { 36 | try { 37 | first.lock(); 38 | System.out.println("Thread A got first lock."); 39 | // do something 40 | 41 | try { 42 | Thread.sleep( ((int)(3*Math.random()))*1000); 43 | } 44 | catch (InterruptedException e) {} 45 | 46 | 47 | second.lock(); 48 | System.out.println("Thread A got second lock."); 49 | // do something 50 | 51 | } 52 | finally { 53 | first.unlock(); 54 | second.unlock(); 55 | } 56 | } 57 | } 58 | 59 | class B implements Runnable 60 | { 61 | private Lock first, second; 62 | 63 | 64 | public B(Lock first, Lock second) { 65 | this.first = first; 66 | this.second = second; 67 | } 68 | 69 | public void run() { 70 | try { 71 | second.lock(); 72 | System.out.println("Thread B got second lock."); 73 | // do something 74 | 75 | try { 76 | Thread.sleep( ((int)(3*Math.random()))*1000); 77 | } 78 | catch (InterruptedException e) {} 79 | 80 | first.lock(); 81 | System.out.println("Thread B got first lock."); 82 | // do something 83 | 84 | } 85 | finally { 86 | second.unlock(); 87 | first.unlock(); 88 | } 89 | } 90 | } 91 | 92 | 93 | public class DeadlockExample 94 | { 95 | public static void main(String arg[]) { 96 | Lock lockX = new ReentrantLock(); 97 | Lock lockY = new ReentrantLock(); 98 | 99 | Thread threadA = new Thread(new A(lockX,lockY)); 100 | Thread threadB = new Thread(new B(lockX,lockY)); 101 | 102 | threadA.start(); 103 | threadB.start(); 104 | } 105 | } 106 | 107 | --------------------------------------------------------------------------------