diff --git a/assets/ostep_1680491762166_0.edn b/assets/ostep_1680491762166_0.edn index 17168b3..2330e0d 100644 --- a/assets/ostep_1680491762166_0.edn +++ b/assets/ostep_1680491762166_0.edn @@ -1865,562 +1865,672 @@ :page 138}, :content {:text "Linux Multiprocessor Schedulers"}, :properties {:color "yellow"}} - {:id #uuid "642faf44-5876-46b3-acb4-b786f390716f", - :page 141, - :position {:bounding {:x1 151.36608123779297, - :y1 528.0178985595703, - :x2 312.84705352783203, - :y2 550.3036041259766, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 151.36608123779297, - :y1 528.0178985595703, - :x2 312.84705352783203, - :y2 550.3036041259766, - :width 806.3999999999999, - :height 1209.6}), - :page 141}, - :content {:text "super-linear speedup"}, + {:id #uuid "64302439-30a1-4724-ab5f-0d90ab8530e2", + :page 193, + :position {:bounding {:x1 321.890625, + :y1 927.90625, + :x2 547.6137084960938, + :y2 956.90625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 321.890625, + :y1 927.90625, + :x2 547.6137084960938, + :y2 956.90625, + :width 1036.8, + :height 1555.2}), + :page 193}, + :content {:text "external fragmentation"}, :properties {:color "yellow"}} - {:id #uuid "642fb2f2-b9a4-48f4-b847-2b30d632db32", - :page 142, - :position {:bounding {:x1 498.49041748046875, - :y1 861.4910888671875, - :x2 549.4505004882812, - :y2 878.0625305175781, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 498.49041748046875, - :y1 861.4910888671875, - :x2 549.4505004882812, - :y2 878.0625305175781, - :width 806.3999999999999, - :height 1209.6}), - :page 142}, - :content {:text "paranoid"}, - :properties {:color "green"}} - {:id #uuid "642fb3d2-e51f-4b9b-8a79-dea9d8e6a7b0", - :page 143, - :position {:bounding {:x1 641.2160110473633, - :y1 464.18752670288086, - :x2 665.7519607543945, - :y2 480.75893783569336, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 641.2160110473633, - :y1 464.18752670288086, - :x2 665.7519607543945, - :y2 480.75893783569336, - :width 806.3999999999999, - :height 1209.6}), - :page 143}, - :content {:text "rage"}, - :properties {:color "green"}} - {:id #uuid "642fb4c0-5c56-44e9-aac6-396212698309", - :page 144, - :position {:bounding {:x1 408.4881896972656, - :y1 858.1786193847656, - :x2 470.48919677734375, - :y2 874.7500610351562, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 408.4881896972656, - :y1 858.1786193847656, - :x2 470.48919677734375, - :y2 874.7500610351562, - :width 806.3999999999999, - :height 1209.6}), - :page 144}, - :content {:text "inundated "}, - :properties {:color "green"}} - {:id #uuid "642fb51d-f82c-40b4-82ad-878ee13a2264", - :page 145, - :position {:bounding {:x1 185.1488800048828, - :y1 464.1875228881836, - :x2 222.21925354003906, - :y2 480.7589340209961, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 185.1488800048828, - :y1 464.1875228881836, - :x2 222.21925354003906, - :y2 480.7589340209961, - :width 806.3999999999999, - :height 1209.6}), - :page 145}, - :content {:text "errant"}, - :properties {:color "green"}} - {:id #uuid "642fb54e-23c4-4667-955d-ad09fbbf6268", - :page 146, - :position {:bounding {:x1 467.1715717315674, - :y1 444.8214416503906, - :x2 508.98282051086426, - :y2 461.39288330078125, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 467.1715717315674, - :y1 444.8214416503906, - :x2 508.98282051086426, - :y2 461.39288330078125, - :width 806.3999999999999, - :height 1209.6}), - :page 146}, - :content {:text "darned"}, - :properties {:color "green"}} - {:id #uuid "642fb9df-d4c2-4b75-9341-e9ea53d42dcc", - :page 148, - :position {:bounding {:x1 406.32401275634766, - :y1 702.6160888671875, - :x2 457.8776626586914, - :y2 720.3303833007812, - :width 864, - :height 1296}, - :rects ({:x1 406.32401275634766, - :y1 702.6160888671875, - :x2 457.8776626586914, - :y2 720.3303833007812, - :width 864, - :height 1296}), - :page 148}, - :content {:text "pesky "}, - :properties {:color "green"}} - {:id #uuid "642fbad1-cda0-4ef4-97f7-38c3519042f4", - :page 148, - :position {:bounding {:x1 328.5535888671875, - :y1 740.8035888671875, - :x2 439.8475036621094, - :y2 764.232177734375, - :width 864, - :height 1296}, - :rects ({:x1 328.5535888671875, - :y1 740.8035888671875, - :x2 439.8475036621094, - :y2 764.232177734375, - :width 864, - :height 1296}), - :page 148}, - :content {:text "address space"}, - :properties {:color "yellow"}} - {:id #uuid "642fbb24-877c-4c90-9e13-4e613e2e23d3", - :page 149, - :position {:bounding {:x1 658.6038513183594, - :y1 977.8750610351562, - :x2 690.0156555175781, - :y2 995.58935546875, - :width 864, - :height 1296}, - :rects ({:x1 658.6038513183594, - :y1 977.8750610351562, - :x2 690.0156555175781, - :y2 995.58935546875, - :width 864, - :height 1296}), - :page 149}, - :content {:text "alas"}, - :properties {:color "green"}} - {:id #uuid "642fbb6e-9a9a-4ff6-92ea-b36903da1b88", - :page 150, - :position {:bounding {:x1 116.09821701049805, - :y1 440.86608123779297, - :x2 176.94826126098633, - :y2 458.58040618896484, - :width 864, - :height 1296}, - :rects ({:x1 116.09821701049805, - :y1 440.86608123779297, - :x2 176.94826126098633, - :y2 458.58040618896484, - :width 864, - :height 1296}), - :page 150}, - :content {:text "tandem "}, - :properties {:color "green"}} - {:id #uuid "642fbc3d-d70b-4adb-bb0b-6b7038480589", - :page 150, - :position {:bounding {:x1 295.0501594543457, - :y1 1102.3929138183594, - :x2 362.9385566711426, - :y2 1116.1072082519531, - :width 864, - :height 1296}, - :rects ({:x1 295.0501594543457, - :y1 1102.3929138183594, - :x2 362.9385566711426, - :y2 1116.1072082519531, - :width 864, - :height 1296}), - :page 150}, - :content {:text "stipulated "}, - :properties {:color "green"}} - {:id #uuid "642fbfcb-7327-44b8-9b25-308728264a81", - :page 159, - :position {:bounding {:x1 185.8641815185547, - :y1 987.4286193847656, - :x2 255.6378631591797, - :y2 1005.1429138183594, - :width 864, - :height 1296}, - :rects ({:x1 185.8641815185547, - :y1 987.4286193847656, - :x2 255.6378631591797, - :y2 1005.1429138183594, - :width 864, - :height 1296}), - :page 159}, - :content {:text "scribble "}, - :properties {:color "green"}} - {:id #uuid "642fc139-afc3-4ba4-ad01-4cc33d9e535c", - :page 155, - :position {:bounding {:x1 532.6004333496094, - :y1 346.8839416503906, - :x2 691.9529724121094, - :y2 384.5982360839844, - :width 864, - :height 1296}, - :rects ({:x1 532.6004333496094, - :y1 346.8839416503906, - :x2 691.9529724121094, - :y2 384.5982360839844, - :width 864, - :height 1296}), - :page 155}, - :content {:text "Memory API"}, - :properties {:color "yellow"}} - {:id #uuid "642fc48b-e5bf-4043-b042-218445c2b714", - :page 167, - :position {:bounding {:x1 171.89286041259766, - :y1 642.3482513427734, - :x2 300.2626724243164, - :y2 664.0625457763672, - :width 864, - :height 1296}, - :rects ({:x1 171.89286041259766, - :y1 642.3482513427734, - :x2 300.2626724243164, - :y2 664.0625457763672, - :width 864, - :height 1296}), - :page 167}, + {:id #uuid "6430258a-4890-4fea-97c3-2d6bef20b251", + :page 194, + :position {:bounding {:x1 206.265625, + :y1 392.46875, + :x2 360.2623596191406, + :y2 418.46875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.265625, + :y1 392.46875, + :x2 360.2623596191406, + :y2 418.46875, + :width 1036.8, + :height 1555.2}), + :page 194}, :content {:text "Assumptions"}, :properties {:color "yellow"}} - {:id #uuid "642fc65f-1147-459c-8906-5ffca38b1e66", - :page 170, - :position {:bounding {:x1 108.3486328125, - :y1 864.0803985595703, - :x2 460.24578857421875, - :y2 884.6518249511719, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 108.3486328125, - :y1 864.0803985595703, - :x2 460.24578857421875, - :y2 884.6518249511719, - :width 806.3999999999999, - :height 1209.6}), - :page 170}, - :content {:text "Dynamic (Hardware-based) Relocation"}, - :properties {:color "yellow"}} - {:id #uuid "642fc677-cbd4-47fd-bd90-3ed0cd56cc5b", - :page 171, - :position {:bounding {:x1 339.95838165283203, - :y1 182.0178680419922, - :x2 573.7257461547852, - :y2 198.5892791748047, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 339.95838165283203, - :y1 182.0178680419922, - :x2 573.7257461547852, - :y2 198.5892791748047, - :width 806.3999999999999, - :height 1209.6}), - :page 171}, - :content {:text "SOFTWARE-BASED RELOCATION"}, - :properties {:color "yellow"}} - {:id #uuid "642fced7-c809-4d1e-bddb-da6474e851b8", - :page 172, + {:id #uuid "64302a62-c183-4dbf-94de-1861deb192f4", + :page 195, + :position {:bounding {:x1 275.55950927734375, + :y1 565.21875, + :x2 372.89495849609375, + :y2 586.21875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 275.55950927734375, + :y1 565.21875, + :x2 372.89495849609375, + :y2 586.21875, + :width 1036.8, + :height 1555.2}), + :page 195}, + :content {:text "coalescing"}, + :properties {:color "green"}} + {:id #uuid "64302ac2-a341-467e-9469-baca1e8aa7f2", + :page 195, :position {:bounding {:x1 0, - :y1 462.2857360839844, - :x2 645.8682518005371, - :y2 768.1161193847656, - :width 806.3999999999999, - :height 1209.6}, + :y1 285, + :x2 830.3397216796875, + :y2 779.15625, + :width 1036.8, + :height 1555.2}, :rects ({:x1 0, - :y1 462.2857360839844, + :y1 285, :x2 0, - :y2 481.71429443359375, - :width 806.3999999999999, - :height 1209.6} - {:x1 582.5714378356934, - :y1 727.2321472167969, - :x2 645.8682518005371, - :y2 749.5179138183594, - :width 806.3999999999999, - :height 1209.6} - {:x1 108.35714340209961, - :y1 745.8304138183594, - :x2 307.23522567749023, - :y2 768.1161193847656, - :width 806.3999999999999, - :height 1209.6} - {:x1 108.35714340209961, - :y1 748.6875305175781, - :x2 307.23522567749023, - :y2 765.4286193847656, - :width 806.3999999999999, - :height 1209.6}), - :page 172}, - :content {:text "memory management unit (MMU)"}, + :y2 307, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 734.25, + :x2 830.3397216796875, + :y2 755.25, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 758.15625, + :x2 335.2363586425781, + :y2 779.15625, + :width 1036.8, + :height 1555.2}), + :page 195}, + :content {:text "A free list contains a set of elements that describe the free space still remaining in the heap."}, :properties {:color "yellow"}} - {:id #uuid "642fcf85-6cfb-4eb9-aef2-ddcef7027b70", - :page 173, - :position {:bounding {:x1 594.1667251586914, - :y1 801.4464416503906, - :x2 631.7198867797852, - :y2 818.0178833007812, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 594.1667251586914, - :y1 801.4464416503906, - :x2 631.7198867797852, - :y2 818.0178833007812, - :width 806.3999999999999, - :height 1209.6}), - :page 173}, - :content {:text "havoc"}, + {:id #uuid "64302b20-f76e-4516-868f-0ecab376328f", + :page 196, + :position {:bounding {:x1 697.3678588867188, + :y1 479.21875, + :x2 749.7317504882812, + :y2 500.21875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 697.3678588867188, + :y1 479.21875, + :x2 749.7317504882812, + :y2 500.21875, + :width 1036.8, + :height 1555.2}), + :page 196}, + :content {:text "intact"}, :properties {:color "green"}} - {:id #uuid "642fcf90-3133-4002-b986-4fd8157ab707", - :page 173, - :position {:bounding {:x1 263.87279510498047, - :y1 822.919677734375, - :x2 300.8291549682617, - :y2 839.4910888671875, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 263.87279510498047, - :y1 822.919677734375, - :x2 300.8291549682617, - :y2 839.4910888671875, - :width 806.3999999999999, - :height 1209.6}), - :page 173}, - :content {:text "wreak"}, + {:id #uuid "64302b32-b01b-4cb2-b027-5ad59bd7ec11", + :page 196, + :position {:bounding {:x1 254.9693603515625, + :y1 578.34375, + :x2 355.1087341308594, + :y2 599.34375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 254.9693603515625, + :y1 578.34375, + :x2 355.1087341308594, + :y2 599.34375, + :width 1036.8, + :height 1555.2}), + :page 196}, + :content {:text "corollary "}, :properties {:color "green"}} - {:id #uuid "642fcfa9-c026-4885-9f50-029ca80ce148", - :page 174, - :position {:bounding {:x1 295.96537590026855, - :y1 470.6607437133789, - :x2 344.6133556365967, - :y2 487.2321548461914, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 295.96537590026855, - :y1 470.6607437133789, - :x2 344.6133556365967, - :y2 487.2321548461914, - :width 806.3999999999999, - :height 1209.6}), - :page 174}, - :content {:text "ghastly"}, - :properties {:color "green"}} - {:id #uuid "642fcff1-ae71-4756-9847-5ab85c41be06", - :page 174, - :position {:bounding {:x1 563.5171890258789, - :y1 819.3750610351562, - :x2 622.2142715454102, - :y2 835.9464874267578, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 563.5171890258789, - :y1 819.3750610351562, - :x2 622.2142715454102, - :y2 835.9464874267578, - :width 806.3999999999999, - :height 1209.6}), - :page 174}, - :content {:text "junctures"}, - :properties {:color "green"}} - {:id #uuid "642fd071-db9c-4f0e-886f-b6ba3e5e4f7d", - :page 175, - :position {:bounding {:x1 263.1218795776367, - :y1 857.2053833007812, - :x2 331.5805435180664, - :y2 873.7768249511719, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 263.1218795776367, - :y1 857.2053833007812, - :x2 331.5805435180664, - :y2 873.7768249511719, - :width 806.3999999999999, - :height 1209.6}), - :page 175}, - :content {:text "oblivious "}, - :properties {:color "green"}} - {:id #uuid "642fd1ed-22a9-4443-b02f-bc35fe42e50b", - :page 174, - :position {:bounding {:x1 245.77680206298828, - :y1 412.4821662902832, - :x2 599.3089981079102, - :y2 434.76787185668945, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 245.77680206298828, - :y1 412.4821662902832, - :x2 599.3089981079102, - :y2 434.76787185668945, - :width 806.3999999999999, - :height 1209.6}), - :page 174}, - :content {:text "Dynamic Relocation: Hardware Requirements"}, + {:id #uuid "64302da4-d1d5-41df-8ec8-883712d948d5", + :page 195, + :position {:bounding {:x1 139.3125, + :y1 691.859375, + :x2 408.8620910644531, + :y2 722.859375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 691.859375, + :x2 408.8620910644531, + :y2 722.859375, + :width 1036.8, + :height 1555.2}), + :page 195}, + :content {:text "Splitting and Coalescing"}, :properties {:color "yellow"}} - {:id #uuid "642fd1f4-d573-4dbc-9e48-02adacc69e5e", - :page 175, - :position {:bounding {:x1 258.5803756713867, - :y1 304.2589302062988, - :x2 690.6892623901367, - :y2 326.5446662902832, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 258.5803756713867, - :y1 304.2589302062988, - :x2 690.6892623901367, - :y2 326.5446662902832, - :width 806.3999999999999, - :height 1209.6}), - :page 175}, - :content {:text "Dynamic Relocation: Operating System Responsibilities"}, + {:id #uuid "64302eab-54b3-4e8c-a105-cc3e8747c0f3", + :page 197, + :position {:bounding {:x1 139.3125, + :y1 814.921875, + :x2 576.952392578125, + :y2 845.921875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 814.921875, + :x2 576.952392578125, + :y2 845.921875, + :width 1036.8, + :height 1555.2}), + :page 197}, + :content {:text "Tracking The Size Of Allocated Regions"}, :properties {:color "yellow"}} - {:id #uuid "642fd2f3-e05f-453c-8286-15e7807e8e97", - :page 178, + {:id #uuid "64303176-25c9-4d28-bd6e-b5b00bf74e3a", + :page 197, + :position {:bounding {:x1 265.125, + :y1 733.9375, + :x2 704.548095703125, + :y2 762.9375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 381.796875, + :y1 733.9375, + :x2 704.548095703125, + :y2 762.9375, + :width 1036.8, + :height 1555.2} + {:x1 265.125, + :y1 736.5, + :x2 381.8045654296875, + :y2 757.5, + :width 1036.8, + :height 1555.2}), + :page 197}, + :content {:text "Figure 17.2: Specific Contents Of The Header"}, + :properties {:color "yellow"}} + {:id #uuid "643032f8-4103-4d7c-b471-fae4364ce7b5", + :page 198, + :position {:bounding {:x1 206.28125, + :y1 625.40625, + :x2 457.9869079589844, + :y2 656.40625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.28125, + :y1 625.40625, + :x2 457.9869079589844, + :y2 656.40625, + :width 1036.8, + :height 1555.2}), + :page 198}, + :content {:text "Embedding A Free List"}, + :properties {:color "yellow"}} + {:id #uuid "643034f6-efa7-4f59-80a9-3561c52a5218", + :page 203, + :position {:bounding {:x1 139.3125, + :y1 604.0625, + :x2 317.9329528808594, + :y2 630.0625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 604.0625, + :x2 317.9329528808594, + :y2 630.0625, + :width 1036.8, + :height 1555.2}), + :page 203}, + :content {:text "Basic Strategies"}, + :properties {:color "yellow"}} + {:id #uuid "6430350b-81b6-44db-a10d-fb0b392e957c", + :page 203, + :position {:bounding {:x1 139.3125, + :y1 943.015625, + :x2 220.99745178222656, + :y2 974.015625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 943.015625, + :x2 220.99745178222656, + :y2 974.015625, + :width 1036.8, + :height 1555.2}), + :page 203}, + :content {:text "Best Fit"}, + :properties {:color "yellow"}} + {:id #uuid "6430350e-5d5f-4e5a-9342-7b57874ffda8", + :page 203, + :position {:bounding {:x1 139.3125, + :y1 1228.15625, + :x2 237.8300018310547, + :y2 1259.15625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 1228.15625, + :x2 237.8300018310547, + :y2 1259.15625, + :width 1036.8, + :height 1555.2}), + :page 203}, + :content {:text "Worst Fit"}, + :properties {:color "yellow"}} + {:id #uuid "64303512-4b59-4c95-b86d-62a2e1349490", + :page 204, + :position {:bounding {:x1 206.265625, + :y1 339.03125, + :x2 290.59710693359375, + :y2 370.03125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.265625, + :y1 339.03125, + :x2 290.59710693359375, + :y2 370.03125, + :width 1036.8, + :height 1555.2}), + :page 204}, + :content {:text "First Fit"}, + :properties {:color "yellow"}} + {:id #uuid "64303515-c336-4934-987d-4ea4a29a7dfd", + :page 204, + :position {:bounding {:x1 206.265625, + :y1 621.4375, + :x2 293.2553405761719, + :y2 652.4375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 206.265625, + :y1 621.4375, + :x2 293.2553405761719, + :y2 652.4375, + :width 1036.8, + :height 1555.2}), + :page 204}, + :content {:text "Next Fit"}, + :properties {:color "yellow"}} + {:id #uuid "6430382d-9e37-412f-b983-e2a7f624954a", + :page 204, + :position {:bounding {:x1 663.82666015625, + :y1 874.3125, + :x2 747.8853759765625, + :y2 895.3125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 663.82666015625, + :y1 874.3125, + :x2 747.8853759765625, + :y2 895.3125, + :width 1036.8, + :height 1555.2}), + :page 204}, + :content {:text "Envision "}, + :properties {:color "green"}} + {:id #uuid "64303831-b777-42c4-a349-d6e95ac91b25", + :page 204, + :position {:bounding {:x1 791.7130737304688, + :y1 735.59375, + :x2 897.3075561523438, + :y2 756.59375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 791.7130737304688, + :y1 735.59375, + :x2 897.3075561523438, + :y2 756.59375, + :width 1036.8, + :height 1555.2}), + :page 204}, + :content {:text "splintering"}, + :properties {:color "green"}} + {:id #uuid "64303b17-81c8-4d92-ab80-1e48c3598403", + :page 205, + :position {:bounding {:x1 139.3125, + :y1 651, + :x2 317.9664611816406, + :y2 682, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 139.3125, + :y1 651, + :x2 317.9664611816406, + :y2 682, + :width 1036.8, + :height 1555.2}), + :page 205}, + :content {:text "Segregated Lists"}, + :properties {:color "yellow"}} + {:id #uuid "64303b24-47e4-4016-8111-519c599e6cca", + :page 205, :position {:bounding {:x1 0, - :y1 190.2857208251953, - :x2 645.8295669555664, - :y2 413.9375457763672, - :width 806.3999999999999, - :height 1209.6}, + :y1 269, + :x2 830.3434448242188, + :y2 810.703125, + :width 1036.8, + :height 1555.2}, :rects ({:x1 0, - :y1 190.2857208251953, + :y1 269, :x2 0, - :y2 209.7142791748047, - :width 806.3999999999999, - :height 1209.6} - {:x1 624.4375381469727, - :y1 373.05357360839844, - :x2 645.8295669555664, - :y2 395.3392791748047, - :width 806.3999999999999, - :height 1209.6} - {:x1 108.35714721679688, - :y1 391.6518096923828, - :x2 266.05450439453125, - :y2 413.9375457763672, - :width 806.3999999999999, - :height 1209.6} - {:x1 108.35714721679688, - :y1 394.5089569091797, - :x2 266.05450439453125, - :y2 411.2500457763672, - :width 806.3999999999999, - :height 1209.6}), - :page 178}, - :content {:text "internal fragmentation"}, + :y2 291, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 285, + :x2 0, + :y2 307, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 301, + :x2 0, + :y2 323, + :width 1036.8, + :height 1555.2} + {:x1 588.3651123046875, + :y1 717.96875, + :x2 830.3397827148438, + :y2 738.96875, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 741.875, + :x2 830.3272094726562, + :y2 763.390625, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 765.796875, + :x2 830.3434448242188, + :y2 787.3125, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 789.703125, + :x2 458.33245849609375, + :y2 810.703125, + :width 1036.8, + :height 1555.2}), + :page 205}, + :content {:text "f a particular application has one (or a few) popular-sized request that it makes, keep a separate list just to manage objects of that size; all other requests are forwarded to a more general memory allocator."}, :properties {:color "yellow"}} - {:id #uuid "642fd36e-c0a7-4ead-a3a8-f085d6576229", - :page 167, - :position {:bounding {:x1 261.12808990478516, - :y1 205.67858013510704, - :x2 533.4398574829102, - :y2 227.96430096030235, - :width 806.3999999999999, - :height 1209.6}, - :rects ({:x1 261.4018020629883, - :y1 205.67858013510704, - :x2 533.4398574829102, - :y2 227.96430096030235, - :width 806.3999999999999, - :height 1209.6} - {:x1 261.12808990478516, - :y1 207.41965374350548, - :x2 533.4398574829102, - :y2 223.99108013510704, - :width 806.3999999999999, - :height 1209.6}), - :page 167}, - :content {:text "hardware-based address translation"}, + {:id #uuid "64303d7c-6ac2-462c-98c9-1b61ea58a396", + :page 205, + :position {:bounding {:x1 0, + :y1 509, + :x2 830.3489379882812, + :y2 1129.984375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 509, + :x2 0, + :y2 531, + :width 1036.8, + :height 1555.2} + {:x1 770.578125, + :y1 1077.078125, + :x2 830.3489379882812, + :y2 1106.078125, + :width 1036.8, + :height 1555.2} + {:x1 279.8678283691406, + :y1 1079.640625, + :x2 830.3489379882812, + :y2 1101.15625, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1100.984375, + :x2 206.98757934570312, + :y2 1129.984375, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1104.984375, + :x2 750.18896484375, + :y2 1126.5, + :width 1036.8, + :height 1555.2}), + :page 205}, + :content {:text ", when the kernel boots up, it allocates a number of object caches for kernel objects that are likely to be requested frequently"}, :properties {:color "yellow"}} - {:id #uuid "642fd5c3-30f9-4770-8ec5-09555d21c4ab", - :page 181, - :position {:bounding {:x1 116.09822082519531, - :y1 958.7767944335938, - :x2 514.5045623779297, - :y2 980.4910888671875, - :width 864, - :height 1296}, - :rects ({:x1 116.09822082519531, - :y1 958.7767944335938, - :x2 514.5045623779297, - :y2 980.4910888671875, - :width 864, - :height 1296}), - :page 181}, - :content {:text "Segmentation: Generalized Base/Bounds"}, + {:id #uuid "64303d8e-54a3-4b7f-a879-7c2533ad8b02", + :page 205, + :position {:bounding {:x1 0, + :y1 573, + :x2 830.3426208496094, + :y2 1225.625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 573, + :x2 0, + :y2 595, + :width 1036.8, + :height 1555.2} + {:x1 238.18783569335938, + :y1 1175.28125, + :x2 830.3426208496094, + :y2 1196.28125, + :width 1036.8, + :height 1555.2} + {:x1 197.546875, + :y1 1196.625, + :x2 254.109375, + :y2 1225.625, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1199.1875, + :x2 757.2152099609375, + :y2 1220.703125, + :width 1036.8, + :height 1555.2}), + :page 205}, + :content {:text "hen a given cache is running low on free space, it requests some slabs of memory from a more general memory allocator ("}, :properties {:color "yellow"}} - {:id #uuid "642fda54-4040-4d9b-ab00-13523aeb54c4", - :page 185, - :position {:bounding {:x1 378.80360412597656, - :y1 1097.276840209961, - :x2 524.0114593505859, - :y2 1120.7054138183594, - :width 864, - :height 1296}, - :rects ({:x1 378.80360412597656, - :y1 1097.276840209961, - :x2 448.84825134277344, - :y2 1120.7054138183594, - :width 864, - :height 1296} - {:x1 443.54466247558594, - :y1 1100.1339874267578, - :x2 524.0114593505859, - :y2 1118.0625610351562, - :width 864, - :height 1296}), - :page 185}, - :content {:text "implicit approach,"}, + {:id #uuid "64303da3-9def-447a-9cc8-08942db17f38", + :page 205, + :position {:bounding {:x1 0, + :y1 621, + :x2 830.3461303710938, + :y2 1315.8125, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 621, + :x2 0, + :y2 643, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 637, + :x2 0, + :y2 659, + :width 1036.8, + :height 1555.2} + {:x1 366.1932678222656, + :y1 1247.015625, + :x2 830.3406982421875, + :y2 1268.015625, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1270.921875, + :x2 830.3461303710938, + :y2 1292.4375, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 1294.8125, + :x2 372.8996276855469, + :y2 1315.8125, + :width 1036.8, + :height 1555.2}), + :page 205}, + :content {:text "when the reference counts of the objects within a given slab all go to zero, the general allocator can reclaim them from the specialized allocato"}, :properties {:color "yellow"}} - {:id #uuid "642fdca4-df4b-4515-8e96-ef4b05a7bb62", - :page 186, - :position {:bounding {:x1 566.0081558227539, - :y1 391.0178680419922, - :x2 707.7133255004883, - :y2 408.73216247558594, - :width 864, - :height 1296}, - :rects ({:x1 566.0081558227539, - :y1 391.0178680419922, - :x2 707.7133255004883, - :y2 408.73216247558594, - :width 864, - :height 1296}), - :page 186}, - :content {:text "it grows backwards"}, + {:id #uuid "64303db7-987f-47ed-84de-c17e421159aa", + :page 206, + :position {:bounding {:x1 0, + :y1 237, + :x2 897.280029296875, + :y2 679.15625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 237, + :x2 0, + :y2 259, + :width 1036.8, + :height 1555.2} + {:x1 326.44189453125, + :y1 634.25, + :x2 897.280029296875, + :y2 655.765625, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 658.15625, + :x2 843.4315795898438, + :y2 679.15625, + :width 1036.8, + :height 1555.2}), + :page 206}, + :content {:text "ee objects on the lists in a pre-initialized state. Bonwick shows that initialization and destruction of data structures is costly "}, :properties {:color "yellow"}} - {:id #uuid "642fe0dc-7d4b-41af-a136-69164ee77ab4", - :page 187, - :position {:bounding {:x1 116.09822273254395, - :y1 179.01787185668945, - :x2 308.1895008087158, - :y2 200.73215103149414, - :width 864, - :height 1296}, - :rects ({:x1 116.09822273254395, - :y1 179.01787185668945, - :x2 308.1895008087158, - :y2 200.73215103149414, - :width 864, - :height 1296}), - :page 187}, - :content {:text "Support for Sharing"}, + {:id #uuid "64303dc5-8073-4659-9f39-ec6167683a7d", + :page 206, + :position {:bounding {:x1 265.65625, + :y1 878.625, + :x2 490.42877197265625, + :y2 907.625, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 265.65625, + :y1 878.625, + :x2 490.42877197265625, + :y2 907.625, + :width 1036.8, + :height 1555.2}), + :page 206}, + :content {:text "binary buddy allocator"}, + :properties {:color "yellow"}} + {:id #uuid "64303f3a-2b0f-4106-8ab1-48e4839fe971", + :page 206, + :position {:bounding {:x1 0, + :y1 397, + :x2 897.3008422851562, + :y2 1002.546875, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 397, + :x2 0, + :y2 419, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 413, + :x2 0, + :y2 435, + :width 1036.8, + :height 1555.2} + {:x1 808.667236328125, + :y1 933.734375, + :x2 897.3008422851562, + :y2 954.734375, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 957.640625, + :x2 897.2750854492188, + :y2 979.15625, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 981.546875, + :x2 551.7743530273438, + :y2 1002.546875, + :width 1036.8, + :height 1555.2}), + :page 206}, + :content {:text "earch for free space recursively divides free space by two until a block that is big enough to accommodate the request is"}, + :properties {:color "yellow"}} + {:id #uuid "64304015-d9ff-408b-bf88-cf37a33e832d", + :page 206, + :position {:bounding {:x1 0, + :y1 621, + :x2 897.265869140625, + :y2 1339.734375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 621, + :x2 0, + :y2 643, + :width 1036.8, + :height 1555.2} + {:x1 0, + :y1 637, + :x2 0, + :y2 659, + :width 1036.8, + :height 1555.2} + {:x1 720.0787353515625, + :y1 1270.921875, + :x2 897.265869140625, + :y2 1291.921875, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 1294.8125, + :x2 897.259765625, + :y2 1316.328125, + :width 1036.8, + :height 1555.2} + {:x1 206.265625, + :y1 1318.734375, + :x2 662.5130615234375, + :y2 1339.734375, + :width 1036.8, + :height 1555.2}), + :page 206}, + :content {:text " This recursive coalescing process continues up the tree, either restoring the entire free space or stopping when a buddy is found to be in use."}, + :properties {:color "yellow"}} + {:id #uuid "643040e1-7784-424c-9096-d3e22fddbf9e", + :page 207, + :position {:bounding {:x1 0, + :y1 141, + :x2 830.3450317382812, + :y2 715.359375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 0, + :y1 141, + :x2 0, + :y2 163, + :width 1036.8, + :height 1555.2} + {:x1 372.8900146484375, + :y1 670.453125, + :x2 830.3450317382812, + :y2 691.453125, + :width 1036.8, + :height 1555.2} + {:x1 139.3125, + :y1 694.359375, + :x2 243.44570922851562, + :y2 715.359375, + :width 1036.8, + :height 1555.2}), + :page 207}, + :content {:text " the address of each buddy pair only differs by a single bi"}, + :properties {:color "yellow"}} + {:id #uuid "643044ff-fd8a-45fe-b564-f93683425ab3", + :page 211, + :position {:bounding {:x1 523.1875, + :y1 793.984375, + :x2 569.8348388671875, + :y2 822.984375, + :width 1036.8, + :height 1555.2}, + :rects ({:x1 523.1875, + :y1 793.984375, + :x2 569.8348388671875, + :y2 822.984375, + :width 1036.8, + :height 1555.2}), + :page 211}, + :content {:text "page"}, :properties {:color "yellow"}}], - :extra {:page 192}} + :extra {:page 211}} diff --git a/pages/hls__ostep_1680491762166_0.md b/pages/hls__ostep_1680491762166_0.md index 15829ed..5ccf56b 100644 --- a/pages/hls__ostep_1680491762166_0.md +++ b/pages/hls__ostep_1680491762166_0.md @@ -509,22 +509,22 @@ file-path:: ../assets/ostep_1680491762166_0.pdf ls-type:: annotation id:: 642faf44-5876-46b3-acb4-b786f390716f hl-color:: yellow -- paranoid - ls-type:: annotation +- paranoid 多疑的;偏执狂;妄想症患者 hl-page:: 142 - hl-color:: green + ls-type:: annotation id:: 642fb2f2-b9a4-48f4-b847-2b30d632db32 -- rage - ls-type:: annotation + hl-color:: green +- rage 暴怒;狂怒;迅速蔓延;快速扩散: hl-page:: 143 - hl-color:: green - id:: 642fb3d2-e51f-4b9b-8a79-dea9d8e6a7b0 -- inundated ls-type:: annotation - hl-page:: 144 + id:: 642fb3d2-e51f-4b9b-8a79-dea9d8e6a7b0 hl-color:: green +- inundate 泛滥;淹没;浸水; + hl-page:: 144 + ls-type:: annotation id:: 642fb4c0-5c56-44e9-aac6-396212698309 -- errant + hl-color:: green +- errant 周游的;不定的;错误的;偏离正路的 ls-type:: annotation hl-page:: 145 hl-color:: green @@ -534,7 +534,7 @@ file-path:: ../assets/ostep_1680491762166_0.pdf hl-page:: 146 hl-color:: green id:: 642fb54e-23c4-4667-955d-ad09fbbf6268 -- pesky +- pesky 烦人的;让人讨厌的 ls-type:: annotation hl-page:: 148 hl-color:: green @@ -545,11 +545,6 @@ file-path:: ../assets/ostep_1680491762166_0.pdf id:: 642fbad1-cda0-4ef4-97f7-38c3519042f4 hl-color:: yellow - Goal: transparency, efficiency and protection -- alas - ls-type:: annotation - hl-page:: 149 - hl-color:: green - id:: 642fbb24-877c-4c90-9e13-4e613e2e23d3 - tandem ls-type:: annotation hl-page:: 150 @@ -581,6 +576,7 @@ file-path:: ../assets/ostep_1680491762166_0.pdf hl-color:: yellow id:: 642fc48b-e5bf-4043-b042-218445c2b714 - Address space mapped to contiguous physical memory + id:: 6430040b-bfaa-4148-a49a-1a22350e0c33 - Address space can be totally held in physical memory(no too big) - Each address space is the same size. - Dynamic (Hardware-based) Relocation @@ -640,7 +636,7 @@ file-path:: ../assets/ostep_1680491762166_0.pdf hl-page:: 174 hl-color:: green id:: 642fcff1-ae71-4756-9847-5ab85c41be06 -- oblivious +- oblivious 未察觉;不注意;忘记 ls-type:: annotation hl-page:: 175 hl-color:: green @@ -650,7 +646,7 @@ file-path:: ../assets/ostep_1680491762166_0.pdf hl-page:: 181 hl-color:: yellow id:: 642fd5c3-30f9-4770-8ec5-09555d21c4ab - - Divide the address space into contiguous segments, and **the address space as a whole is no more contiguous in physical memory**. + - Divide the address space into contiguous segments, and **the address space as a whole is no more contiguous in physical memory**. ((6430040b-bfaa-4148-a49a-1a22350e0c33)) - A base and bounds pair per logical segment of the address space. Place each one of those segments in different parts of physical memory, and thus avoid filling physical memory with unused virtual address space. Conforming to this, MMU should add some registers. - Selecting segment: which segment does a virtual address refer to? - Explicit method: use the top few bits of the virtual address as segment selector, and the rest as in-segment offset. @@ -674,5 +670,169 @@ file-path:: ../assets/ostep_1680491762166_0.pdf id:: 642fe0dc-7d4b-41af-a136-69164ee77ab4 hl-color:: yellow - Attach several protection bits to Segment Register. For example, by setting code segment to read-only, you can safely share the segment across processes, thus saving the memory to hold a copy of code when a program creates many processes. - - Problem 1: variable-sized segments cause external fragments by chopping free memory into odd-sized pieces - - Problem 2: not flexible enough. What if we want a large enough but sparsely-allocated heap(the heap segment could be very large but wastefully used)? \ No newline at end of file + - Problem 1: variable-sized segments cause ((64302439-30a1-4724-ab5f-0d90ab8530e2)) + id:: 6430040b-2a6e-4342-8db8-bc92893d0a3f + - Problem 2: not flexible enough. What if we want a large enough but sparsely-allocated heap(the heap segment could be very large but wastefully used)? +- external fragmentation + hl-page:: 193 + ls-type:: annotation + id:: 64302439-30a1-4724-ab5f-0d90ab8530e2 + hl-color:: yellow + - the free space gets chopped into little pieces of different size(fragmented); subsequent requests may fail because there is no single contiguous space that can satisfy the request, even though the total amount of free space suffices. +- Assumptions on free space management + hl-page:: 194 + ls-type:: annotation + id:: 6430258a-4890-4fea-97c3-2d6bef20b251 + hl-color:: yellow + - Assume a pair of interface `void* malloc(size_t size)` and `void free(void* ptr)`, and a generic data structure `free list`(not necessarily be a list) + - Ignore internal fragmentation + - No reallocation, no compaction + - Assume the allocator manages a contiguous and size-fixed region of bytes +- coalesce 联合;合并 + hl-page:: 195 + ls-type:: annotation + id:: 64302a62-c183-4dbf-94de-1861deb192f4 + hl-color:: green +- intact 完整的;原封不动的;未受损伤的 + ls-type:: annotation + hl-page:: 196 + hl-color:: green + id:: 64302b20-f76e-4516-868f-0ecab376328f +- corollary 必然的结果(或结论) + hl-page:: 196 + ls-type:: annotation + id:: 64302b32-b01b-4cb2-b027-5ad59bd7ec11 + hl-color:: green +- Low-level mechanisms(some discussion on practical stuff) + - A free list contains a set of elements that describe the free space still remaining in the heap. For example, `{addr, len}` + hl-page:: 195 + ls-type:: annotation + id:: 64302ac2-a341-467e-9469-baca1e8aa7f2 + hl-color:: yellow + - Splitting and Coalescing + ls-type:: annotation + hl-page:: 195 + hl-color:: yellow + id:: 64302da4-d1d5-41df-8ec8-883712d948d5 + - split: if the request is smaller than a free block, then the allocator splits the block, take requested part and put the rest part back to free list + - coalesce: when returning a free chunk, the allocator looks for its nearby chunks in the free list and merge them into larger free chunk + - Tracking The Size Of Allocated Regions + ls-type:: annotation + hl-page:: 197 + hl-color:: yellow + id:: 64302eab-54b3-4e8c-a105-cc3e8747c0f3 + - Store some extra info in a header, which generally contains a size field and some other checking or speedup fields. Commonly, the header is placed just before the handed-out chunk of memory. + - When allocating, we look for a free block that fits `N+sizeof(header)` instead of merely `N`. In other words, the header is allocated along with the requested chunk of memory, though the pointer to return doesn't include header. See ((64303176-25c9-4d28-bd6e-b5b00bf74e3a)). The header's location could be calculated through pointer arithmetic `ptr - sizeof(header)`. + - Figure 17.2: Specific Contents Of The Header + hl-page:: 197 + ls-type:: annotation + id:: 64303176-25c9-4d28-bd6e-b5b00bf74e3a + hl-color:: yellow + - Embedding A Free List + ls-type:: annotation + hl-page:: 198 + hl-color:: yellow + id:: 643032f8-4103-4d7c-b471-fae4364ce7b5 + - The free list's nodes resides in the chunk of memory that it is going to manage, because we cannot use stuff like `malloc` now. + - The implementation described in the textbook, can be concluded as: + Node structure `{size, *next}` + Each node resides at the start of a contiguous free chunk of memory + When allocated, the node moves to the start of the remaining free memory +- Basic Strategies: quite boring policies + hl-page:: 203 + ls-type:: annotation + id:: 643034f6-efa7-4f59-80a9-3561c52a5218 + hl-color:: yellow + - Best Fit: pick the smallest chunk of memory that is as big or bigger than the requested size + hl-page:: 203 + ls-type:: annotation + id:: 6430350b-81b6-44db-a10d-fb0b392e957c + hl-color:: yellow + - Try to reduce wasted space, though performance is compromised and many small free fragments are generated + - Worst Fit: pick the largest chunk of memory that is as big or bigger than the requested size + hl-page:: 203 + ls-type:: annotation + id:: 6430350e-5d5f-4e5a-9342-7b57874ffda8 + hl-color:: yellow + - Try to leave big chunks free and void small fragments, though costly and may not work as expected(in contrast leading to excess fragmentation) + - First Fit: select the first block that is big enough + hl-page:: 204 + ls-type:: annotation + id:: 64303512-4b59-4c95-b86d-62a2e1349490 + hl-color:: yellow + - No exhaustive search, thus fast. + - Problem: small pieces tend to accumulate at the beginning of the free list(first fit tends to take memory there), performance become worse. One alleviation approach is to use address-based ordering, which makes coalescing easier by keeping the list ordered by the address of free chunks. + - Next Fit: modified version of first fit. Try not to always take memory from the beginning. + hl-page:: 204 + ls-type:: annotation + id:: 64303515-c336-4934-987d-4ea4a29a7dfd + hl-color:: yellow +- Envision 想像,展望 + ls-type:: annotation + hl-page:: 204 + hl-color:: green + id:: 6430382d-9e37-412f-b983-e2a7f624954a +- splinter 尖片, 碎片;刺 + hl-page:: 204 + ls-type:: annotation + id:: 64303831-b777-42c4-a349-d6e95ac91b25 + hl-color:: green +- **Segregated Lists** + hl-page:: 205 + ls-type:: annotation + id:: 64303b17-81c8-4d92-ab80-1e48c3598403 + hl-color:: yellow + - Basic Idea: If a particular application has one (or a few) popular-sized request, keep a separate list just to manage objects of that size; all other requests are forwarded to a more general memory allocator. + hl-page:: 205 + ls-type:: annotation + id:: 64303b24-47e4-4016-8111-519c599e6cca + hl-color:: yellow + - Advantage: reduced fragmentation, faster service IF requests are of the RIGHT size + Problem: how to figure out that? + - Real world example: `slab`. + - At kernel bootstrap, allocate a number of object caches for kernel objects that are likely to be requested frequently + hl-page:: 205 + ls-type:: annotation + id:: 64303d7c-6ac2-462c-98c9-1b61ea58a396 + hl-color:: yellow + - When a given cache is running low on free space, it requests some slabs of memory from a more general memory allocator + hl-page:: 205 + ls-type:: annotation + id:: 64303d8e-54a3-4b7f-a879-7c2533ad8b02 + hl-color:: yellow + - When the reference counts of the objects within a given slab all go to 0, the general allocator can reclaim them from the specialized allocator + hl-page:: 205 + ls-type:: annotation + id:: 64303da3-9def-447a-9cc8-08942db17f38 + hl-color:: yellow + - Free objects on the segregated lists are set in a **pre-initialized state**, in that initialization and destruction of data structures is costly + hl-page:: 206 + ls-type:: annotation + id:: 64303db7-987f-47ed-84de-c17e421159aa + hl-color:: yellow +- **Binary Buddy Allocator**: simplify coalescing + hl-page:: 206 + ls-type:: annotation + id:: 64303dc5-8073-4659-9f39-ec6167683a7d + hl-color:: yellow + - Allocation: Recursively divide free space by 2 until a block which is MERELY big enough to accommodate the request (and a further split would be too small), is found. + hl-page:: 206 + ls-type:: annotation + id:: 64303f3a-2b0f-4106-8ab1-48e4839fe971 + hl-color:: yellow + - Deallocation: When a block is returned, check whether its buddy is free. If so, coalesce with its buddy. Recursively coalesce up the tree, and stop when a buddy is in use. + hl-page:: 206 + ls-type:: annotation + id:: 64304015-d9ff-408b-bf88-cf37a33e832d + hl-color:: yellow + - Good quality: the address of each buddy pair only differs by a single bit, no matter the base address. + hl-page:: 207 + ls-type:: annotation + id:: 643040e1-7784-424c-9096-d3e22fddbf9e + hl-color:: yellow +- Page: fixed-sized memory unit in address space + hl-page:: 211 + ls-type:: annotation + id:: 643044ff-fd8a-45fe-b564-f93683425ab3 + hl-color:: yellow + Page frame: physical memory as an array of fixed-sized slots \ No newline at end of file