├── .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 |
--------------------------------------------------------------------------------