1:"$Sreact.fragment" 2:I[9766,[],""] 3:I[98924,[],""] 5:I[27346,["316","static/chunks/ad2866b8-635304a38afc0b68.js","239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","869","static/chunks/869-f328dfc4a7854a42.js","217","static/chunks/217-b882ca4bd6228d18.js","531","static/chunks/531-c61cd8adb4f12f15.js","368","static/chunks/368-fb0c58a608326176.js","309","static/chunks/app/%5Blang%5D/docs/%5B%5B...slug%5D%5D/page-a405d0666d803277.js"],"ScrollArea"] 6:I[29505,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"default"] 8:I[24431,[],"OutletBoundary"] a:I[15278,[],"AsyncMetadataOutlet"] c:I[24431,[],"ViewportBoundary"] e:I[24431,[],"MetadataBoundary"] f:"$Sreact.suspense" 11:I[57150,[],""] :HL["/_next/static/css/c9fbdf6b51c9cc9f.css","style"] 0:{"P":null,"b":"FATp18w24-oXdWnXMc_-_","p":"","c":["","en","docs","guides","first-allocation-policy"],"i":false,"f":[[["",{"children":[["lang","en","d"],{"children":["docs",{"children":[["slug","guides/first-allocation-policy","oc"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true]}],["",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["lang","en","d"],["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/c9fbdf6b51c9cc9f.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],"$L4"]}],{"children":["docs",["$","$1","c",{"children":[null,["$","div",null,{"className":"flex items-start gap-8","children":[["$","aside","leftbar",{"className":"md:flex hidden flex-[1.5] min-w-[238px] sticky top-16 flex-col h-[93.75vh] overflow-y-auto","children":["$","$L5",null,{"className":"py-4","children":["$","$L6",null,{}]}]}],["$","div",null,{"className":"flex-[6]","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":[["slug","guides/first-allocation-policy","oc"],["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":["$L7",null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true} 12:I[97397,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","160","static/chunks/app/%5Blang%5D/layout-91542d54d0202719.js"],"ClientDictionary"] 4:["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"__variable_6f2fcd __variable_33c22e font-regular antialiased tracking-wide","suppressHydrationWarning":true,"children":["$","$L12",null,{"dict":{"metadata":{"title":"USM: High Velocity Linux Memory Manager Development","description":"Craft custom, high-performance memory policies in userspace without touching the kernel. USM is a framework for the rapid development of memory management policies in Linux."},"home":{"follow_github":"Star us on GitHub","main_header":"USM: High Velocity Linux Memory Manager Development","sub_header":"Craft custom, high-performance memory policies without touching the kernel. Go from idea to implementation in hours, not months, solving real-world bottlenecks like fragmentation and suboptimal caching.","get_started":"Get Started","see_the_why":"See the Showcase","problem_title":"The Problem: A 'One-Size-Fits-All' Kernel","problem_subtitle":"The general-purpose Linux Memory Manager isn't optimized for specialized workloads, leading to performance spikes, memory fragmentation, and instability under pressure.","solution_title":"The Solution: A Microkernel-Inspired Architecture","solution_subtitle":"USM solves this by moving memory management policy into an isolated userspace process, leaving only a minimal, safe mechanism in the kernel. This allows for rapid, safe development of application-aware strategies.","aha_title":"This is a Complete Memory Allocator","aha_subtitle":"Writing a memory policy is now as simple as implementing a C function. Below is a complete, working 'first-fit' allocator."},"contributors":{"title":"Contributors","subtitle":"Meet the team contributing to the USM project."},"contact":{"title":"Contact Us","subtitle":"Get in touch with the project supervisors.","alain_tchana_role":"Professor, Ensimag - Grenoble INP - UGA","papa_assane_fall_role":"Researcher, Inria"},"navbar":{"search":{"search_documentation":"Search documentation...","no_results_found":"No results found for","type_something":"Type something to search..."},"theme":{"light":"Light","dark":"Dark","system":"System"},"links":{"documentation":"Documentation","guides":"Guides","contact":"Contact","contributors":"Contributors","blog":"Blog","community":"Community"}},"blog":{"title":"USM Blog","sub_title":"Updates, deep dives, and news from the USM team.","published_on":"Published on","posted_by":"Posted by","back_to_blog":"Back to Blog"},"footer":{"built_by":"Built by","source_code_available":"The source code is available on","deploy":"Deploy","sponsor":"Sponsor"},"docs":{"on_this_page":"On this page","previous":"Previous","next":"Next"},"leftbar":{"getting_started":"Getting Started","introduction":"Introduction","core_concepts":"Core Concepts","test":"Tests","environment_setup":"Environment Setup","guides":"Guides","first_allocation_policy":"Your First Allocation Policy","first_eviction_policy":"Your First Eviction Policy","Christine":"Coordinative Scheduling with Christine","PTEMagnet":"PTEMagnet as a USM Policy","advanced_policies":"Advanced Policies","api_reference":"API Reference","api_policy_ops":"Policy Interfaces (_ops)","api_data_structures":"Data Structures","api_configuration_file":"Configuration File","community":"Community","contributing":"Contributing","roadmap":"Roadmap","using_media":"DEV: Adding Media (Images & Videos)","tools":"Tools","process_visualizer":"USM Visualizer","visualizer":{"launch":"Run","placeholder":"Enter command (e.g. ./littleTest 8)"}},"error":{"oops":"Oops!","something_went_wrong":"Something went wrong","sub_text":"An unexpected error occurred. Please try again later.","reload_page":"Reload Page","back_to_homepage":"Back to Homepage"},"not_found":{"404":"404","page_not_found":"Page Not Found","sub_text":"The page you are looking for does not exist.","back_to_homepage":"Back to Homepage","go_back":"Go Back"}},"children":"$L13"}]}]}] 14:I[30358,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","160","static/chunks/app/%5Blang%5D/layout-91542d54d0202719.js"],"ThemeProvider"] 15:I[31856,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"Sheet"] 16:I[31856,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"SheetTrigger"] 17:I[31856,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"SheetContent"] 18:I[54679,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"DialogTitle"] 19:I[31856,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"SheetHeader"] 1a:I[31856,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"SheetClose"] 1b:I[79191,["316","static/chunks/ad2866b8-635304a38afc0b68.js","239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","869","static/chunks/869-f328dfc4a7854a42.js","217","static/chunks/217-b882ca4bd6228d18.js","531","static/chunks/531-c61cd8adb4f12f15.js","368","static/chunks/368-fb0c58a608326176.js","309","static/chunks/app/%5Blang%5D/docs/%5B%5B...slug%5D%5D/page-a405d0666d803277.js"],"default"] 1c:I[52619,["316","static/chunks/ad2866b8-635304a38afc0b68.js","239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","869","static/chunks/869-f328dfc4a7854a42.js","217","static/chunks/217-b882ca4bd6228d18.js","531","static/chunks/531-c61cd8adb4f12f15.js","368","static/chunks/368-fb0c58a608326176.js","309","static/chunks/app/%5Blang%5D/docs/%5B%5B...slug%5D%5D/page-a405d0666d803277.js"],""] 13:["$","$L14",null,{"attribute":"class","defaultTheme":"system","enableSystem":true,"disableTransitionOnChange":true,"children":[["$","nav",null,{"className":"w-full border-b h-16 sticky top-0 z-50 bg-background/95 backdrop-blur-sm","children":["$","div",null,{"className":"sm:container mx-auto w-[95vw] h-full flex items-center justify-between","children":[["$","div",null,{"className":"flex items-center gap-4","children":[["$","div",null,{"className":"md:hidden","children":["$","$L15",null,{"children":[["$","$L16",null,{"asChild":true,"children":["$","button",null,{"className":"items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground h-9 w-9 flex","ref":"$undefined","children":["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-align-left","children":[["$","line","1fp77t",{"x1":"21","x2":"3","y1":"6","y2":"6"}],["$","line","v6grx8",{"x1":"15","x2":"3","y1":"12","y2":"12"}],["$","line","1awlsn",{"x1":"17","x2":"3","y1":"18","y2":"18"}],"$undefined"]}]}]}],["$","$L17",null,{"className":"flex flex-col gap-4 px-0","side":"left","children":[["$","$L18",null,{"className":"sr-only","children":"Menu"}],["$","$L19",null,{"children":["$","$L1a",null,{"className":"px-5","asChild":true,"children":["$","$L1b",null,{"href":"/","className":"flex items-center gap-2.5","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":1.5,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-cpu w-6 h-6 text-muted-foreground","children":[["$","rect","14l7u7",{"width":"16","height":"16","x":"4","y":"4","rx":"2"}],["$","rect","5aljv4",{"width":"6","height":"6","x":"9","y":"9","rx":"1"}],["$","path","13l42r",{"d":"M15 2v2"}],["$","path","15mkzm",{"d":"M15 20v2"}],["$","path","1gxd5l",{"d":"M2 15h2"}],["$","path","1bbxkp",{"d":"M2 9h2"}],["$","path","19e6y8",{"d":"M20 15h2"}],["$","path","19tzq7",{"d":"M20 9h2"}],["$","path","165o2o",{"d":"M9 2v2"}],["$","path","i2bqo8",{"d":"M9 20v2"}],"$undefined"]}],["$","h2",null,{"className":"text-md font-bold font-code","children":"USM Docs"}]]}]}]}],["$","div",null,{"className":"flex flex-col gap-4 overflow-y-auto","children":[["$","div",null,{"className":"flex flex-col gap-2.5 mt-3 mx-2 px-5","children":[["$","$L1a","documentation/docs/getting-started/introduction",{"asChild":true,"children":["$","$L1b","documentation/docs/getting-started/introduction",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/docs/getting-started/introduction","absolute":true,"children":"Documentation"}]}],["$","$L1a","guides/docs/guides/first-allocation-policy",{"asChild":true,"children":["$","$L1b","guides/docs/guides/first-allocation-policy",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/docs/guides/first-allocation-policy","absolute":"$undefined","children":"Guides"}]}],["$","$L1a","contact/contact",{"asChild":true,"children":["$","$L1b","contact/contact",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/contact","absolute":"$undefined","children":"Contact"}]}],["$","$L1a","contributors/contributors",{"asChild":true,"children":["$","$L1b","contributors/contributors",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/contributors","absolute":"$undefined","children":"Contributors"}]}],["$","$L1a","blog/blog",{"asChild":true,"children":["$","$L1b","blog/blog",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/blog","absolute":"$undefined","children":"Blog"}]}]]}],["$","div",null,{"className":"mx-2 px-5","children":["$","$L6",null,{"isSheet":true}]}],["$","div",null,{"className":"p-6 pb-4 flex gap-2.5","children":["$","$L1c",null,{"href":"https://github.com/sponsors/todo-repo","className":"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3","children":["$L1d","Sponsor"]}]}]]}]]}]]}]}],"$L1e","$L1f"]}],"$L20"]}]}],"$L21","$L22"]}] 23:I[55854,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"default"] 24:I[53047,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"default"] 25:I[53990,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","531","static/chunks/531-c61cd8adb4f12f15.js","515","static/chunks/515-158a157ad3fe69ad.js","841","static/chunks/841-fbf5ef0791d48d49.js","812","static/chunks/app/%5Blang%5D/docs/layout-4ad3aa5dc32b2744.js"],"ModeToggle"] 26:I[18032,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","48","static/chunks/app/%5Blang%5D/error-f455d4961d40cd2c.js"],"default"] 27:I[33774,["239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","226","static/chunks/app/%5Blang%5D/not-found-bf7b0c977c712ed0.js"],"default"] 1d:["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-heart h-4 w-4 mr-2 text-red-600 fill-current","children":[["$","path","c3ymky",{"d":"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}],"$undefined"]}] 1e:["$","$L1b",null,{"href":"/","className":"flex items-center gap-2.5","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":1.5,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-cpu w-6 h-6 text-muted-foreground","children":[["$","rect","14l7u7",{"width":"16","height":"16","x":"4","y":"4","rx":"2"}],["$","rect","5aljv4",{"width":"6","height":"6","x":"9","y":"9","rx":"1"}],["$","path","13l42r",{"d":"M15 2v2"}],["$","path","15mkzm",{"d":"M15 20v2"}],["$","path","1gxd5l",{"d":"M2 15h2"}],["$","path","1bbxkp",{"d":"M2 9h2"}],["$","path","19e6y8",{"d":"M20 15h2"}],["$","path","19tzq7",{"d":"M20 9h2"}],["$","path","165o2o",{"d":"M9 2v2"}],["$","path","i2bqo8",{"d":"M9 20v2"}],"$undefined"]}],["$","h2",null,{"className":"text-md font-bold font-code","children":"USM Docs"}]]}] 1f:["$","div",null,{"className":"hidden md:flex items-center gap-5 text-sm font-medium text-muted-foreground","children":[["$","$L1b","documentation/docs/getting-started/introduction",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/docs/getting-started/introduction","absolute":true,"children":"Documentation"}],["$","$L1b","guides/docs/guides/first-allocation-policy",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/docs/guides/first-allocation-policy","absolute":"$undefined","children":"Guides"}],["$","$L1b","contact/contact",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/contact","absolute":"$undefined","children":"Contact"}],["$","$L1b","contributors/contributors",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/contributors","absolute":"$undefined","children":"Contributors"}],["$","$L1b","blog/blog",{"className":"flex items-center gap-1 hover:text-primary transition-colors","activeClassName":"text-primary dark:font-medium font-semibold","href":"/blog","absolute":"$undefined","children":"Blog"}]]}] 20:["$","div",null,{"className":"flex items-center gap-3","children":[["$","$L23",null,{"dict":"$4:props:children:props:children:props:dict"}],["$","div",null,{"className":"flex items-center","children":[["$","$L24",null,{}],["$","$L1c",null,{"href":"https://github.com/todo-repo/usm","target":"_blank","className":"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground h-9 w-9","children":["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-github h-[1.1rem] w-[1.1rem]","children":[["$","path","tonef",{"d":"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"}],["$","path","9comsn",{"d":"M9 18c-4.51 2-5-2-7-2"}],"$undefined"]}]}],["$","$L25",null,{"dict":"$4:props:children:props:children:props:dict"}]]}]]}] 21:["$","main",null,{"className":"sm:container mx-auto h-auto scroll-smooth","children":["$","$L2",null,{"parallelRouterKey":"children","error":"$26","errorStyles":[],"errorScripts":[],"template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","$L27",null,{}],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}] 22:["$","footer",null,{"className":"border-t w-full h-16","children":["$","div",null,{"className":"container flex items-center sm:justify-between justify-center sm:gap-0 gap-4 h-full text-muted-foreground text-sm flex-wrap sm:py-0 py-3 max-sm:px-4","children":[["$","div",null,{"className":"flex items-center gap-3","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-cpu sm:block hidden w-5 h-5 text-muted-foreground","children":[["$","rect","14l7u7",{"width":"16","height":"16","x":"4","y":"4","rx":"2"}],["$","rect","5aljv4",{"width":"6","height":"6","x":"9","y":"9","rx":"1"}],["$","path","13l42r",{"d":"M15 2v2"}],["$","path","15mkzm",{"d":"M15 20v2"}],["$","path","1gxd5l",{"d":"M2 15h2"}],["$","path","1bbxkp",{"d":"M2 9h2"}],["$","path","19e6y8",{"d":"M20 15h2"}],["$","path","19tzq7",{"d":"M20 9h2"}],["$","path","165o2o",{"d":"M9 2v2"}],["$","path","i2bqo8",{"d":"M9 20v2"}],"$undefined"]}],["$","p",null,{"className":"text-center","children":["Built by"," ",["$","$L1c",null,{"className":"px-1 underline underline-offset-2","href":"/contact","target":"_blank","children":"Researchers"}],". ","The source code is available on"," ",["$","$L1c",null,{"className":"px-1 underline underline-offset-2","href":"https://github.com/HTester4/flusm.git","target":"_blank","children":"GitHub"}],"."]}]]}],["$","div",null,{"className":"gap-4 items-center hidden md:flex","children":["$","$L1c",null,{"href":"https://github.com/sponsors/todo-repo","className":"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-9 rounded-md px-3","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-heart h-4 w-4 mr-2 text-red-600 fill-current","children":[["$","path","c3ymky",{"d":"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"}],"$undefined"]}],"Sponsor"]}]}]]}]}] d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] 9:null 28:I[21771,["316","static/chunks/ad2866b8-635304a38afc0b68.js","239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","869","static/chunks/869-f328dfc4a7854a42.js","217","static/chunks/217-b882ca4bd6228d18.js","531","static/chunks/531-c61cd8adb4f12f15.js","368","static/chunks/368-fb0c58a608326176.js","309","static/chunks/app/%5Blang%5D/docs/%5B%5B...slug%5D%5D/page-a405d0666d803277.js"],"default"] 7:["$","div",null,{"className":"flex items-start gap-10","children":[["$","div",null,{"className":"flex-[5] pt-10","children":["$","div",null,{"className":"prose prose-zinc dark:prose-invert prose-code:font-normal prose-code:font-code dark:prose-code:bg-stone-900/25 prose-code:bg-stone-50 prose-pre:bg-background prose-headings:scroll-m-20 w-[85vw] sm:w-full sm:mx-auto prose-code:text-sm prose-code:leading-6 dark:prose-code:text-white prose-code:text-stone-800 prose-code:p-[0.085rem] prose-code:rounded-md prose-code:border pt-2 !min-w-full prose-img:rounded-md prose-img:border prose-code:before:content-none prose-code:after:content-none prose-code:px-1.5 prose-code:overflow-x-auto !max-w-[500px] prose-img:my-3 prose-h2:my-4 prose-h2:mt-8","children":[["$","h1",null,{"className":"text-3xl !-mt-1.5","children":"Your First Allocation Policy"}],["$","p",null,{"className":"-mt-4 text-muted-foreground text-[16.5px]","children":"A step-by-step guide to writing, registering, and running a basic \"first-fit\" memory allocation policy with USM."}],["$","div",null,{"children":[["$","p",null,{"children":["This guide will walk you through the complete lifecycle of a USM policy. We will analyze the basic \"first-fit\" allocator provided in the examples (",["$","code",null,{"children":"policiesSet1.c"}],"), understand how it works, and learn how to compile and run it with a test application."]}],"\n",["$","h3",null,{"id":"step-1-the-anatomy-of-a-policy","children":[["$","$L1c",null,{"href":"#step-1-the-anatomy-of-a-policy","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"Step 1: The Anatomy of a Policy"]}],"\n",["$","p",null,{"children":["At its heart, a USM allocation policy is a C source file that defines three key things: a page management structure, the policy logic, and a registration mechanism. Let's look at ",["$","code",null,{"children":"policiesSet1.c"}],"."]}],"\n",["$","h4",null,{"id":"page-management","children":[["$","$L1c",null,{"href":"#page-management","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"Page Management"]}],"\n",["$","p",null,{"children":"The policy needs a way to track which pages are free and which are in use. This is typically done with linked lists."}],"\n",["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"// A custom struct to wrap USM's page and add list pointers.\r\nstruct optEludeList {\r\n struct page * usmPage;\r\n struct list_head iulist; // For the policy's global free/used lists\r\n struct list_head proclist; // List of processes using this page\r\n};\r\n\r\n// Global lists to track page status.\r\nextern struct list_head freeList;\r\nextern struct list_head usedList;\r\n\r\n// Locks for the lists.\r\nextern pthread_mutex_t policiesSet1Ulock;\r\nextern pthread_mutex_t policiesSet1Flock;\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-c","children":["$","code",null,{"className":"language-c code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"// A custom struct to wrap USM's page and add list pointers."}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"optEludeList"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"page"}]," ","$L29"," usmPage","$L2a","\r\n"]}],"$L2b","$L2c","$L2d","$L2e","$L2f","$L30","$L31","$L32","$L33","$L34","$L35"]}]}]}]]}],"\n","$L36","\n","$L37","\n","$L38","\n","$L39","\n","$L3a","\n","$L3b","\n","$L3c","\n","$L3d","\n","$L3e","\n","$L3f","\n","$L40","\n","$L41","\n","$L42"]}],"$L43","$L44"]}]}],"$L45"]}] 70:I[81356,["316","static/chunks/ad2866b8-635304a38afc0b68.js","239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","869","static/chunks/869-f328dfc4a7854a42.js","217","static/chunks/217-b882ca4bd6228d18.js","531","static/chunks/531-c61cd8adb4f12f15.js","368","static/chunks/368-fb0c58a608326176.js","309","static/chunks/app/%5Blang%5D/docs/%5B%5B...slug%5D%5D/page-a405d0666d803277.js"],"Image"] 77:I[80622,[],"IconMark"] 29:["$","span",null,{"className":"token operator","children":"*"}] 2a:["$","span",null,{"className":"token punctuation","children":";"}] 2b:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," iulist",["$","span",null,{"className":"token punctuation","children":";"}]," ",["$","span",null,{"className":"token comment","children":"// For the policy's global free/used lists"}],"\r\n"]}] 2c:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," proclist",["$","span",null,{"className":"token punctuation","children":";"}]," ",["$","span",null,{"className":"token comment","children":"// List of processes using this page"}],"\r\n"]}] 2d:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token punctuation","children":"}"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 2e:["$","span",null,{"className":"code-line","children":"\r\n"}] 2f:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"// Global lists to track page status."}],"\r\n"]}] 30:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"extern"}]," ",["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," freeList",["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 31:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"extern"}]," ",["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," usedList",["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 32:["$","span",null,{"className":"code-line","children":"\r\n"}] 33:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"// Locks for the lists."}],"\r\n"]}] 34:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"extern"}]," ",["$","span",null,{"className":"token class-name","children":"pthread_mutex_t"}]," policiesSet1Ulock",["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 35:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"extern"}]," ",["$","span",null,{"className":"token class-name","children":"pthread_mutex_t"}]," policiesSet1Flock",["$","span",null,{"className":"token punctuation","children":";"}],"\n"]}] 36:["$","h4",null,{"id":"the-policy-interface-usm_alloc_policy_ops","children":[["$","$L1c",null,{"href":"#the-policy-interface-usm_alloc_policy_ops","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"The Policy Interface (",["$","code",null,{"children":"usm_alloc_policy_ops"}],")"]}] 37:["$","p",null,{"children":["You expose your logic to USM by populating a ",["$","code",null,{"children":"usm_alloc_policy_ops"}]," struct. This acts as the interface between the USM framework and your code."]}] 38:["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"struct usm_alloc_policy_ops alloc_policy_one = {\r\n .usm_alloc = basic_alloc_uniq, // Your main allocation function\r\n .usm_pindex_free = pindex_free, // Your page free function\r\n .usm_free = basic_free // A general free function (optional)\r\n};\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-c","children":["$","code",null,{"className":"language-c code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"usm_alloc_policy_ops"}]," alloc_policy_one ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token punctuation","children":"."}],"usm_alloc ",["$","span",null,{"className":"token operator","children":"="}]," basic_alloc_uniq",["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token comment","children":"// Your main allocation function"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token punctuation","children":"."}],"usm_pindex_free ",["$","span",null,{"className":"token operator","children":"="}]," pindex_free",["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token comment","children":"// Your page free function"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token punctuation","children":"."}],"usm_free ",["$","span",null,{"className":"token operator","children":"="}]," basic_free ",["$","span",null,{"className":"token comment","children":"// A general free function (optional)"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token punctuation","children":"}"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n"]}]]}]}]}]]}] 39:["$","h3",null,{"id":"step-2-implementing-the-policy-logic","children":[["$","$L1c",null,{"href":"#step-2-implementing-the-policy-logic","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"Step 2: Implementing the Policy Logic"]}] 3a:["$","p",null,{"children":["The ",["$","code",null,{"children":"usm_alloc"}]," function is where your core logic resides. It's called every time a managed application triggers a page fault. Here is a commented version of ",["$","code",null,{"children":"basic_alloc_uniq"}],":"]}] 46:T5a8,static inline int basic_alloc_uniq(struct usm_event *event) { int res = 0; // Lock to protect the shared free list from other worker threads. pthread_mutex_lock(&policiesSet1Flock); if (unlikely(list_empty(&freeList))) { pthread_mutex_unlock(&policiesSet1Flock); return 1; // Signal failure (Out of Memory) } // Get the first available page from our free list (First-Fit). struct optEludeList *freeListNode = list_first_entry(&freeList, struct optEludeList, iulist); // "Reserve" the page by removing it from the free list. list_del(&(freeListNode->iulist)); pthread_mutex_unlock(&policiesSet1Flock); // This is the decision: tell USM the physical address of our chosen page. event->paddr = freeListNode->usmPage->physicalAddress; // Submit the decision to the kernel module to perform the mapping. if (usmSubmitAllocEvent(event)) { // If submission fails, we must roll back our change. pthread_mutex_lock(&policiesSet1Flock); list_add(&(freeListNode->iulist), &freeList); pthread_mutex_unlock(&policiesSet1Flock); return 1; // Signal failure } // On success, update USM's metadata and move the page to our used list. usmLinkPage(freeListNode->usmPage, event); pthread_mutex_lock(&policiesSet1Ulock); list_add_tail(&(freeListNode->iulist), &usedList); pthread_mutex_unlock(&policiesSet1Ulock); return 0; // Signal success } 3b:["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"$46"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-c","children":["$","code",null,{"className":"language-c code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"static"}]," ",["$","span",null,{"className":"token keyword","children":"inline"}]," ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token function","children":"basic_alloc_uniq"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"usm_event"}]," ",["$","span",null,{"className":"token operator","children":"*"}],"event",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," res ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token number","children":"0"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// Lock to protect the shared free list from other worker threads."}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"pthread_mutex_lock"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"policiesSet1Flock",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":"\r\n"}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"if"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token function","children":"unlikely"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token function","children":"list_empty"}],"$L47","$L48","freeList","$L49","$L4a","$L4b"," ","$L4c","\r\n"]}],"$L4d","$L4e","$L4f","$L50","$L51","$L52","$L53","$L54","$L55","$L56","$L57","$L58","$L59","$L5a","$L5b","$L5c","$L5d","$L5e","$L5f","$L60","$L61","$L62","$L63","$L64","$L65","$L66","$L67","$L68","$L69","$L6a","$L6b","$L6c"]}]}]}]]}] 3c:["$","h3",null,{"id":"step-3-registering-the-policy","children":[["$","$L1c",null,{"href":"#step-3-registering-the-policy","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"Step 3: Registering the Policy"]}] 3d:["$","p",null,{"children":["The ",["$","code",null,{"children":"InstanceUSM"}]," needs to know about your policy at startup. You do this in a ",["$","code",null,{"children":"_setup"}]," function."]}] 3e:["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"int policiesSet1_setup(unsigned int pagesNumber) {\r\n // ... code to initialize the freeList ...\r\n\r\n // Register our policy with USM, giving it a name and setting it as the default.\r\n if (usm_register_alloc_policy(&alloc_policy_one, \"policyOne\", true))\r\n return 1;\r\n\r\n // ... register other policies ...\r\n\r\n return 0;\r\n}\r\n\r\n// Point the global dev_usm_ops to our setup function.\r\n// This is the main entry point for the InstanceUSM.\r\nstruct usm_ops dev_usm_ops = {\r\n .usm_setup = policiesSet1_setup,\r\n // .usm_free = ...\r\n};\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-c","children":["$","code",null,{"className":"language-c code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token function","children":"policiesSet1_setup"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token keyword","children":"unsigned"}]," ",["$","span",null,{"className":"token keyword","children":"int"}]," pagesNumber",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// ... code to initialize the freeList ..."}],"\r\n"]}],["$","span",null,{"className":"code-line","children":"\r\n"}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// Register our policy with USM, giving it a name and setting it as the default."}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"if"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token function","children":"usm_register_alloc_policy"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"alloc_policy_one",["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token string","children":"\"policyOne\""}],["$","span",null,{"className":"token punctuation","children":","}]," true",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token number","children":"1"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":"\r\n"}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// ... register other policies ..."}],"\r\n"]}],["$","span",null,{"className":"code-line","children":"\r\n"}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token number","children":"0"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token punctuation","children":"}"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":"\r\n"}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"// Point the global dev_usm_ops to our setup function."}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"// This is the main entry point for the InstanceUSM."}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"usm_ops"}]," dev_usm_ops ",["$","span",null,{"className":"token operator","children":"="}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}],"$L6d","$L6e","$L6f"]}]}]}]]}] 3f:["$","h3",null,{"id":"step-4-configuration-and-launch","children":[["$","$L1c",null,{"href":"#step-4-configuration-and-launch","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"Step 4: Configuration and Launch"]}] 40:["$","p",null,{"children":"With the policy coded, the final steps are configuration and execution."}] 41:["$","ol",null,{"children":["\n",["$","li",null,{"children":["\n",["$","p",null,{"children":[["$","strong",null,{"children":"Configure Policy Assignment:"}]," Edit the configuration file to assign your policy to a specific application."]}],"\n",["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"memory 32768 \r\nworkers 2\r\n\r\n# Assign any process named 'stressapptest' to use 'policyOne'\r\nprocess stressapptest policyOne\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-ini","children":["$","code",null,{"className":"language-ini code-highlight","children":[["$","span",null,{"className":"code-line","children":"memory 32768 \r\n"}],["$","span",null,{"className":"code-line","children":"workers 2\r\n"}],["$","span",null,{"className":"code-line","children":"\r\n"}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"# Assign any process named 'stressapptest' to use 'policyOne'"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":"process stressapptest policyOne\n"}]]}]}]}]]}],"\n"]}],"\n",["$","li",null,{"children":["\n",["$","p",null,{"children":[["$","strong",null,{"children":"Compile:"}]," Navigate to the ",["$","code",null,{"children":"APIv"}]," directory and run ",["$","code",null,{"children":"make"}],". The ",["$","code",null,{"children":"usmTagger"}]," is built in the parent ",["$","code",null,{"children":"Userspace"}]," directory."]}],"\n",["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"# In the root of the 'flusm' repository\r\ncd Userspace/\r\nmake\r\ncd APIv/\r\nmake\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-bash","children":["$","code",null,{"className":"language-bash code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"# In the root of the 'flusm' repository"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token builtin class-name","children":"cd"}]," Userspace/\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token function","children":"make"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token builtin class-name","children":"cd"}]," APIv/\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token function","children":"make"}],"\n"]}]]}]}]}]]}],"\n"]}],"\n",["$","li",null,{"children":["\n",["$","p",null,{"children":["$","strong",null,{"children":"Launch the System:"}]}],"\n",["$","div",null,{"className":"border rounded-md px-5 pb-0.5 mt-5 mb-7 text-sm tracking-wide dark:bg-orange-950 bg-orange-100 border-orange-200 dark:border-orange-900","children":[["$","p",null,{"className":"font-bold -mb-2.5","children":["Note",":"]}]," ",["$","p",null,{"children":["Ensure your custom kernel module is loaded (",["$","code",null,{"children":"sudo insmod Module/usm_lkmRM.ko"}],") before running the userspace components."]}]]}],"\n",["$","p",null,{"children":[["$","$L70",null,{"src":"/images/FirstAllocationPolicy/Env.png","alt":"Environment","width":800,"height":350,"quality":40}],"\r\n",["$","em",null,{"children":"Verification of the USM environment"}]]}],"\n",["$","p",null,{"children":["Open three separate terminals from the repository root (",["$","code",null,{"children":"flusm/"}],"):"]}],"\n",["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"# Terminal 1: Start the Manager\r\nsudo Userspace/APIv/usmWaker\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-bash","children":["$","code",null,{"className":"language-bash code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"# Terminal 1: Start the Manager"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":["$L71"," Userspace/APIv/usmWaker\n"]}]]}]}]}]]}],"\n","$L72","\n","$L73","\n","$L74","\n","$L75","\n","$L76","\n"]}],"\n"]}] 42:["$","p",null,{"children":["As ",["$","code",null,{"children":"stressapptest"}]," runs and allocates memory, the ",["$","code",null,{"children":"InstanceUSM"}]," will receive page fault events and execute your ",["$","code",null,{"children":"basic_alloc_uniq"}]," function to serve them. Congratulations, you've just replaced a core part of the Linux Memory Manager!"]}] 43:["$","div",null,{"className":"mt-8 pt-6 border-t","children":["$","$L1c",null,{"href":"https://github.com/lado-saha/usm-docs/tree/main/contents/docs/en/guides/first-allocation-policy/index.mdx","target":"_blank","rel":"noopener noreferrer","className":"text-sm text-muted-foreground hover:text-primary transition-colors flex items-center gap-2","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-pencil w-4 h-4","children":[["$","path","1a8usu",{"d":"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"}],["$","path","1mk7zo",{"d":"m15 5 4 4"}],"$undefined"]}],"Edit this page on GitHub"]}]}] 44:["$","div",null,{"className":"grid grid-cols-2 flex-grow sm:py-10 py-7 gap-3","children":[["$","div",null,{"children":["$","$L1b",null,{"className":"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2 no-underline w-full flex flex-col pl-3 !py-8 !items-start","href":"/docs/getting-started/test","children":[["$","span",null,{"className":"flex items-center text-muted-foreground text-xs","children":[["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-left w-[1rem] h-[1rem] mr-1","children":[["$","path","1wnfg3",{"d":"m15 18-6-6 6-6"}],"$undefined"]}],"Previous"]}],["$","span",null,{"className":"mt-1 ml-1","children":"Tests"}]]}]}],["$","div",null,{"children":["$","$L1b",null,{"className":"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 border border-input bg-background hover:bg-accent hover:text-accent-foreground h-10 px-4 py-2 no-underline w-full flex flex-col pr-3 !py-8 !items-end","href":"/docs/guides/first-eviction-policy","children":[["$","span",null,{"className":"flex items-center text-muted-foreground text-xs","children":["Next",["$","svg",null,{"ref":"$undefined","xmlns":"http://www.w3.org/2000/svg","width":24,"height":24,"viewBox":"0 0 24 24","fill":"none","stroke":"currentColor","strokeWidth":2,"strokeLinecap":"round","strokeLinejoin":"round","className":"lucide lucide-chevron-right w-[1rem] h-[1rem] ml-1","children":[["$","path","mthhwq",{"d":"m9 18 6-6-6-6"}],"$undefined"]}]]}],["$","span",null,{"className":"mt-1 mr-1","children":"Your First Eviction Policy"}]]}]}]]}] b:{"metadata":[["$","title","0",{"children":"Your First Allocation Policy"}],["$","meta","1",{"name":"description","content":"A step-by-step guide to writing, registering, and running a basic \"first-fit\" memory allocation policy with USM."}],["$","meta","2",{"property":"og:title","content":"USM: High Velocity Linux Memory Manager Development"}],["$","meta","3",{"property":"og:description","content":"Craft custom, high-performance memory policies in userspace without touching the kernel. USM is a framework for the rapid development of memory management policies in Linux."}],["$","meta","4",{"property":"og:site_name","content":"USM Docs"}],["$","meta","5",{"property":"og:locale","content":"en"}],["$","meta","6",{"property":"og:image:type","content":"image/jpeg"}],["$","meta","7",{"property":"og:image:width","content":"1200"}],["$","meta","8",{"property":"og:image:height","content":"630"}],["$","meta","9",{"property":"og:image","content":"http://localhost:3000/opengraph-image.jpg?1f4cd24de62e2382"}],["$","meta","10",{"property":"og:type","content":"website"}],["$","meta","11",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","12",{"name":"twitter:title","content":"USM: High Velocity Linux Memory Manager Development"}],["$","meta","13",{"name":"twitter:description","content":"Craft custom, high-performance memory policies in userspace without touching the kernel. USM is a framework for the rapid development of memory management policies in Linux."}],["$","meta","14",{"name":"twitter:image:type","content":"image/jpeg"}],["$","meta","15",{"name":"twitter:image:width","content":"1200"}],["$","meta","16",{"name":"twitter:image:height","content":"630"}],["$","meta","17",{"name":"twitter:image","content":"http://localhost:3000/opengraph-image.jpg?1f4cd24de62e2382"}],["$","link","18",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"48x48"}],["$","$L77","19",{}]],"error":null,"digest":"$undefined"} 10:"$b:metadata" 47:["$","span",null,{"className":"token punctuation","children":"("}] 48:["$","span",null,{"className":"token operator","children":"&"}] 49:["$","span",null,{"className":"token punctuation","children":")"}] 4a:["$","span",null,{"className":"token punctuation","children":")"}] 4b:["$","span",null,{"className":"token punctuation","children":")"}] 4c:["$","span",null,{"className":"token punctuation","children":"{"}] 4d:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"pthread_mutex_unlock"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"policiesSet1Flock",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 4e:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token number","children":"1"}],["$","span",null,{"className":"token punctuation","children":";"}]," ",["$","span",null,{"className":"token comment","children":"// Signal failure (Out of Memory)"}],"\r\n"]}] 4f:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token punctuation","children":"}"}],"\r\n"]}] 50:["$","span",null,{"className":"code-line","children":"\r\n"}] 51:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// Get the first available page from our free list (First-Fit)."}],"\r\n"]}] 52:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"optEludeList"}]," ",["$","span",null,{"className":"token operator","children":"*"}],"freeListNode ",["$","span",null,{"className":"token operator","children":"="}],"\r\n"]}] 53:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"list_first_entry"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"freeList",["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"optEludeList"}],["$","span",null,{"className":"token punctuation","children":","}]," iulist",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 54:["$","span",null,{"className":"code-line","children":"\r\n"}] 55:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// \"Reserve\" the page by removing it from the free list."}],"\r\n"]}] 56:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"list_del"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],["$","span",null,{"className":"token punctuation","children":"("}],"freeListNode",["$","span",null,{"className":"token operator","children":"->"}],"iulist",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 57:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"pthread_mutex_unlock"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"policiesSet1Flock",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 58:["$","span",null,{"className":"code-line","children":"\r\n"}] 59:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// This is the decision: tell USM the physical address of our chosen page."}],"\r\n"]}] 5a:["$","span",null,{"className":"code-line","children":[" event",["$","span",null,{"className":"token operator","children":"->"}],"paddr ",["$","span",null,{"className":"token operator","children":"="}]," freeListNode",["$","span",null,{"className":"token operator","children":"->"}],"usmPage",["$","span",null,{"className":"token operator","children":"->"}],"physicalAddress",["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 5b:["$","span",null,{"className":"code-line","children":"\r\n"}] 5c:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// Submit the decision to the kernel module to perform the mapping."}],"\r\n"]}] 5d:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"if"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token function","children":"usmSubmitAllocEvent"}],["$","span",null,{"className":"token punctuation","children":"("}],"event",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}] 5e:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// If submission fails, we must roll back our change."}],"\r\n"]}] 5f:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"pthread_mutex_lock"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"policiesSet1Flock",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 60:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"list_add"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],["$","span",null,{"className":"token punctuation","children":"("}],"freeListNode",["$","span",null,{"className":"token operator","children":"->"}],"iulist",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token operator","children":"&"}],"freeList",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 61:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"pthread_mutex_unlock"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"policiesSet1Flock",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 62:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token number","children":"1"}],["$","span",null,{"className":"token punctuation","children":";"}]," ",["$","span",null,{"className":"token comment","children":"// Signal failure"}],"\r\n"]}] 63:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token punctuation","children":"}"}],"\r\n"]}] 64:["$","span",null,{"className":"code-line","children":"\r\n"}] 65:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// On success, update USM's metadata and move the page to our used list."}],"\r\n"]}] 66:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"usmLinkPage"}],["$","span",null,{"className":"token punctuation","children":"("}],"freeListNode",["$","span",null,{"className":"token operator","children":"->"}],"usmPage",["$","span",null,{"className":"token punctuation","children":","}]," event",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 67:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"pthread_mutex_lock"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"policiesSet1Ulock",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 68:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"list_add_tail"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],["$","span",null,{"className":"token punctuation","children":"("}],"freeListNode",["$","span",null,{"className":"token operator","children":"->"}],"iulist",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token operator","children":"&"}],"usedList",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 69:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token function","children":"pthread_mutex_unlock"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"&"}],"policiesSet1Ulock",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}] 6a:["$","span",null,{"className":"code-line","children":"\r\n"}] 6b:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"return"}]," ",["$","span",null,{"className":"token number","children":"0"}],["$","span",null,{"className":"token punctuation","children":";"}]," ",["$","span",null,{"className":"token comment","children":"// Signal success"}],"\r\n"]}] 6c:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token punctuation","children":"}"}],"\n"]}] 6d:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token punctuation","children":"."}],"usm_setup ",["$","span",null,{"className":"token operator","children":"="}]," policiesSet1_setup",["$","span",null,{"className":"token punctuation","children":","}],"\r\n"]}] 6e:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token comment","children":"// .usm_free = ..."}],"\r\n"]}] 6f:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token punctuation","children":"}"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n"]}] 71:["$","span",null,{"className":"token function","children":"sudo"}] 72:["$","p",null,{"children":[["$","$L70",null,{"src":"/images/FirstAllocationPolicy/Term1.png","alt":"Terminal 1","width":800,"height":350,"quality":40}],"\r\n",["$","em",null,{"children":"Loading of usmWaker component"}]]}] 73:["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"# Terminal 2: Start the InstanceUSM with your config file\r\nsudo Userspace/APIv/project-2 Userspace/APIv/examples/project-2/cfg/alloc_policy_assignment_strategy.cfg\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-bash","children":["$","code",null,{"className":"language-bash code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"# Terminal 2: Start the InstanceUSM with your config file"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token function","children":"sudo"}]," Userspace/APIv/project-2 Userspace/APIv/examples/project-2/cfg/alloc_policy_assignment_strategy.cfg\n"]}]]}]}]}]]}] 74:["$","p",null,{"children":[["$","$L70",null,{"src":"/images/FirstAllocationPolicy/Term2.png","alt":"Terminal 2","width":800,"height":350,"quality":40}],"\r\n",["$","em",null,{"children":"Running the project configuration"}]]}] 75:["$","div",null,{"className":"my-5 relative group","children":[["$","div",null,{"className":"absolute top-3 right-2.5 z-10 opacity-0 group-hover:opacity-100 transition-opacity duration-200","children":["$","$L28",null,{"content":"# Terminal 3: Launch the target application with LD_PRELOAD\r\nsudo LD_PRELOAD=./Userspace/usmTagger.so stressapptest --common-option\n"}]}],["$","div",null,{"className":"relative","children":["$","pre",null,{"className":"language-bash","children":["$","code",null,{"className":"language-bash code-highlight","children":[["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token comment","children":"# Terminal 3: Launch the target application with LD_PRELOAD"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token function","children":"sudo"}]," ",["$","span",null,{"className":"token assign-left variable","children":"LD_PRELOAD"}],["$","span",null,{"className":"token operator","children":"="}],"./Userspace/usmTagger.so stressapptest --common-option\n"]}]]}]}]}]]}] 76:["$","p",null,{"children":[["$","$L70",null,{"src":"/images/FirstAllocationPolicy/Term3.png","alt":"Terminal 3","width":800,"height":350,"quality":40}],"\r\n",["$","em",null,{"children":"Execution of the target application"}]]}] 78:I[31615,["316","static/chunks/ad2866b8-635304a38afc0b68.js","239","static/chunks/239-b0aaac5106d996a5.js","619","static/chunks/619-f072ac750404f9da.js","41","static/chunks/41-ad140fb6f3297f70.js","836","static/chunks/836-049faba5b3fbd25b.js","869","static/chunks/869-f328dfc4a7854a42.js","217","static/chunks/217-b882ca4bd6228d18.js","531","static/chunks/531-c61cd8adb4f12f15.js","368","static/chunks/368-fb0c58a608326176.js","309","static/chunks/app/%5Blang%5D/docs/%5B%5B...slug%5D%5D/page-a405d0666d803277.js"],"default"] 45:["$","div",null,{"className":"lg:flex hidden toc flex-[1] min-w-[200px] py-9 sticky top-16 h-[96.95vh]","children":["$","div",null,{"className":"flex flex-col gap-3 w-full pl-2","children":[["$","h3",null,{"className":"font-semibold text-sm","children":"On this page"}],["$","$L5",null,{"className":"pb-2 pt-0.5 overflow-y-auto","children":["$","$L78",null,{"data":[{"level":3,"text":"Step 1: The Anatomy of a Policy","href":"#step-1-the-anatomy-of-a-policy"},{"level":4,"text":"Page Management","href":"#page-management"},{"level":4,"text":"The Policy Interface (`usm_alloc_policy_ops`)","href":"#the-policy-interface-usmallocpolicyops"},{"level":3,"text":"Step 2: Implementing the Policy Logic","href":"#step-2-implementing-the-policy-logic"},{"level":3,"text":"Step 3: Registering the Policy","href":"#step-3-registering-the-policy"},{"level":3,"text":"Step 4: Configuration and Launch","href":"#step-4-configuration-and-launch"}]}]}]]}]}]