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","api-reference","policy-ops"],"i":false,"f":[[["",{"children":[["lang","en","d"],{"children":["docs",{"children":[["slug","api-reference/policy-ops","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","api-reference/policy-ops","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[80622,[],"IconMark"]
29: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"]
b:{"metadata":[["$","title","0",{"children":"Policy Interfaces (_ops)"}],["$","meta","1",{"name":"description","content":"A detailed technical reference for the usm_alloc_policy_ops and usm_swap_policy_ops structures that form the core of any USM policy."}],["$","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"}],["$","$L28","19",{}]],"error":null,"digest":"$undefined"}
10:"$b:metadata"
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":"Policy Interfaces (_ops)"}],["$","p",null,{"className":"-mt-4 text-muted-foreground text-[16.5px]","children":"A detailed technical reference for the usm_alloc_policy_ops and usm_swap_policy_ops structures that form the core of any USM policy."}],["$","div",null,{"children":[["$","p",null,{"children":["The ",["$","code",null,{"children":"_ops"}]," structures are the heart of the USM programming interface. They are collections of function pointers that you implement in your policy file. The USM framework then calls your functions through these pointers at the appropriate times."]}],"\n",["$","h3",null,{"id":"allocation-policies-usm_alloc_policy_ops","children":[["$","$L1c",null,{"href":"#allocation-policies-usm_alloc_policy_ops","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"Allocation Policies (",["$","code",null,{"children":"usm_alloc_policy_ops"}],")"]}],"\n",["$","p",null,{"children":["This structure, defined in ",["$","code",null,{"children":"APIv/include/policies/alloc/alloc.h"}],", defines the interface for all allocation-related policies."]}],"\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":["$","$L29",null,{"content":"struct usm_alloc_policy_ops {\r\n int (*usm_init) (unsigned int pagesNumber);\r\n int (*usm_alloc) (struct usm_event *event);\r\n int (*usm_free) (struct usm_event *event);\r\n int (*usm_accessed) (struct usm_event *event);\r\n int (*usm_virt_address_space_change) (struct usm_event *event);\r\n int (*usm_permissions_change) (struct usm_event *event);\r\n int (*usm_task_state_change) (struct usm_event *event);\r\n int (*usm_new_process) (struct usm_event *event);\r\n int (*usm_new_task) (struct usm_event *event);\r\n int (*get_pages) (struct list_head *placeHolder, int nr);\r\n void (*put_pages) (struct list_head *pages);\r\n void (*get_used_pages)(struct list_head *placeHolder , int nr);\r\n void (*put_used_pages)(struct list_head *page);\r\n int (*usm_policy_free)() ;\r\n int (*usm_oom)();\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"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_init",["$","span",null,{"className":"token punctuation","children":")"}]," ","$L2a","$L2b"," ","$L2c"," pagesNumber","$L2d","$L2e","\r\n"]}],"$L2f","$L30","$L31","$L32","$L33","$L34","$L35","$L36","$L37","$L38","$L39","$L3a","$L3b","$L3c","$L3d"]}]}]}]]}],"\n","$L3e","\n","$L3f","\n","$L40","\n","$L41","\n","$L42","\n","$L43"]}],"$L44","$L45"]}]}],"$L46"]}]
2a:["$","span",null,{"className":"token punctuation","children":"("}]
2b:["$","span",null,{"className":"token keyword","children":"unsigned"}]
2c:["$","span",null,{"className":"token keyword","children":"int"}]
2d:["$","span",null,{"className":"token punctuation","children":")"}]
2e:["$","span",null,{"className":"token punctuation","children":";"}]
2f:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_alloc",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
30:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_free",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
31:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_accessed",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
32:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_virt_address_space_change",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
33:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_permissions_change",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
34:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_task_state_change",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
35:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_new_process",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
36:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_new_task",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
37:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"get_pages",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," ",["$","span",null,{"className":"token operator","children":"*"}],"placeHolder",["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token keyword","children":"int"}]," nr",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}]
38:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"void"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"put_pages",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," ",["$","span",null,{"className":"token operator","children":"*"}],"pages",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}]
39:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"void"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"get_used_pages",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," ",["$","span",null,{"className":"token operator","children":"*"}],"placeHolder ",["$","span",null,{"className":"token punctuation","children":","}]," ",["$","span",null,{"className":"token keyword","children":"int"}]," nr",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}]
3a:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"void"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"put_used_pages",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token keyword","children":"struct"}]," ",["$","span",null,{"className":"token class-name","children":"list_head"}]," ",["$","span",null,{"className":"token operator","children":"*"}],"page",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}]
3b:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_policy_free",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}]
3c:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_oom",["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token punctuation","children":")"}],["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}]
3d:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token punctuation","children":"}"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n"]}]
3e:["$","div",null,{"className":"scrollable-table","children":["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Function Pointer"}],["$","th",null,{"children":"Signature"}],["$","th",null,{"children":"Description"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_init"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(unsigned int pagesNumber)"}]}],["$","td",null,{"children":"An optional initialization function for your policy. Called once when the policy is first registered."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_alloc"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory)"}]," The core allocation function. Called on a page fault. Your implementation must select a free physical page, set ",["$","code",null,{"children":"event->paddr"}]," to its physical address, and call ",["$","code",null,{"children":"usmSubmitAllocEvent(event)"}],". Returns ",["$","code",null,{"children":"0"}]," on success, non-zero on failure."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_free"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":["An alternative page free function that is triggered by a ",["$","code",null,{"children":"vaddr"}]," instead of a ",["$","code",null,{"children":"paddr"}],". It is less efficient than ",["$","code",null,{"children":"usm_pindex_free"}]," as it may require searching your list of used pages to find the correct one."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_accessed"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory)"}]," The primary, high-performance page free function. Called when the kernel frees a page (e.g., on process exit), reporting its ",["$","code",null,{"children":"paddr"}]," via ",["$","code",null,{"children":"/proc/usmPgs"}],". Your implementation should use this to find the corresponding ",["$","code",null,{"children":"struct page"}]," and return it to your free list."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_virt_address_space_change"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":["Intended to be called when a VMA (Virtual Memory Area) of a managed process changes (e.g., via ",["$","code",null,{"children":"mremap"}],"). Not fully implemented in the current version."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_permissions_change"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":["Intended to be called when memory permissions change (e.g., via ",["$","code",null,{"children":"mprotect"}],"). Not fully implemented."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_task_state_change"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Intended to be called when a process`s state changes (e.g., sleeping, running), which could influence policy decisions. Not fully implemented."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_new_process"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Intended to be called when a new process is assigned to this policy. Used in complex policies to track metadata when a new PID is attached to the policy."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_new_task"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"An Optional hook triggered when a new task (thread) is created within a managed process. Can be used to initialize task-level memory tracking or adapt heuristics for multithreaded workloads."}]]}],"$L47","$L48","$L49","$L4a","$L4b","$L4c"]}]]}]}]
3f:["$","h3",null,{"id":"swapping--eviction-policies-usm_swap_policy_ops","children":[["$","$L1c",null,{"href":"#swapping--eviction-policies-usm_swap_policy_ops","aria-hidden":"true","tabIndex":"-1","children":["$","span",null,{"className":"icon icon-link"}],"target":"_blank","rel":"noopener noreferrer"}],"Swapping & Eviction Policies (",["$","code",null,{"children":"usm_swap_policy_ops"}],")"]}]
40:["$","p",null,{"children":["This structure, defined in ",["$","code",null,{"children":"APIv/include/policies/evict/swap.h"}],", defines the interface for handling page swaps and proactive eviction."]}]
41:["$","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":["$","$L29",null,{"content":"struct usm_swap_policy_ops {\r\n char *usm_swap_policy_name;\r\n int (*usm_policy_init) ();\r\n int (*usm_swap) (struct usm_event *event);\r\n void (*cond_swap_out) (struct usm_event *event);\r\n int (*cond_swap_in) (struct usm_event *event);\r\n int (*usm_free) (struct usm_event *event);\r\n int (*usm_new_process) (struct usm_event *event);\r\n int (*usm_new_task)(struct usm_event *event);\r\n int (*usm_virt_address_space_change) (struct usm_event *event);\r\n int (*usm_permissions_change) (struct usm_event *event);\r\n int (*usm_process_state_change) (struct usm_event *event);\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_swap_policy_ops"}]," ",["$","span",null,{"className":"token punctuation","children":"{"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"char"}]," ",["$","span",null,{"className":"token operator","children":"*"}],"usm_swap_policy_name",["$","span",null,{"className":"token punctuation","children":";"}],"\r\n"]}],["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_policy_init",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","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"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_swap",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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":"void"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"cond_swap_out",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"cond_swap_in",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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":[" ","$L4d"," ","$L4e","$L4f","usm_free","$L50"," ","$L51","$L52"," ","$L53"," ","$L54","event","$L55","$L56","\r\n"]}],"$L57","$L58","$L59","$L5a","$L5b","$L5c"]}]}]}]]}]
42:["$","div",null,{"className":"scrollable-table","children":["$","table",null,{"children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Function Pointer"}],["$","th",null,{"children":"Signature"}],["$","th",null,{"children":"Description"}]]}]}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_policy_init"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(void)"}]}],["$","td",null,{"children":"An optional initialization function for your swap policy. For instance, this is where you would open your swap file or initialize your swap device nodes."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_swap"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory for Swap)"}]," The swap-in function. Called on a page fault for a page that has been swapped out. The ",["$","code",null,{"children":"event->offst"}]," field contains the swap entry information. Your implementation must find the data on the swap device, get a new physical page, read the data into it, and submit the new mapping."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"cond_swap_out"}]}],["$","td",null,{"children":["$","code",null,{"children":"void (*)(struct usm_event *event)"}]}],["$","td",null,{"children":["A proactive eviction hook. This function is called by the USM framework after certain events (like a successful allocation). You can use this hook to check for memory pressure (e.g., ",["$","code",null,{"children":"usedMemory > threshold"}],") and trigger a swap-out of victim pages."]}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"cond_swap_in"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Allows the policy to proactively restore pages before faults occur (e.g., based on access patterns, hints, or task state). Can also be used to cancel or delay swap-out decisions when memory pressure subsides."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_free"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Called to free resources associated with swapping when a process exits. This could involve cleaning up entries in your swap metadata tables or freeing swap file space."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_new_process"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Optional hook called when a new process is attached to the swap policy. Used to initialize per-process swap metadata, assign preferred swap devices, or establish swap quotas and eviction priorities."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_new_task"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"An optional hook for receiving application-specific hints that could guide eviction decisions (e.g., a hint to \"never swap this memory region\")."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_virt_address_space_change"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Optional notification of a virtual address space change (e.g., mremap). Enables the policy to update swap metadata associated with VMAs, invalidate swap entries, or adapt eviction logic to changed layouts."}]]}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_permissions_change"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Optional hook called when VMA access permissions change. Can be used to protect pages from eviction (e.g., executable or critical regions) or to deprioritize others. Not fully exploited in current USM versions."}]]}],"$L5d"]}]]}]}]
43:["$","div",null,{"className":"border rounded-md px-5 pb-0.5 mt-5 mb-7 text-sm tracking-wide","children":[["$","p",null,{"className":"font-bold -mb-2.5","children":["Note",":"]}]," ",["$","p",null,{"children":["The USM framework also exposes a global function pointer, ",["$","code",null,{"children":"usm_evict_fallback"}],", which can be set by your swap policy. This function serves as a synchronous, emergency eviction path that your allocation policy can call directly when it runs out of memory."]}]]}]
44:["$","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/api-reference/policy-ops/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"]}]}]
45:["$","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/tools/visualizer","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":"USM Visualizer"}]]}]}],["$","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/api-reference/data-structures","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":"Data Structures"}]]}]}]]}]
47:["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"get_pages"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct list_head *placeHolder, int nr)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory)"}]," The policy selects the pages from its free pool and returns them as a list. Used by the swap module for page restoration or prefetching."]}]]}]
48:["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"put_pages"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct list_head *pages)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory)"}]," Returns a list of free pages back to the policy. Used when an allocation, restoration, or prefetching attempt fails, or when pages are evicted and become reusable."]}]]}]
49:["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"get_used_page"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct list_head *placeHolder , int nr)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory)"}]," THe policy requests the used paged according to the eviction heuristics (e.g least recently used) and are returned reordered as needed vy the swap module."]}]]}]
4a:["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"put_used_page"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct list_head *page)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory)"}]," Returns a list of previously allocated pages back to the used-page pool. Called on eviction failure, concurrent page faults, swap cache hits, or successful page restorations."]}]]}]
4b:["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_policy_free"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(void)"}]}],["$","td",null,{"children":[["$","strong",null,{"children":"(Mandatory)"}]," Frees all internal structures of the policy. Called when the associated ",["$","code",null,{"children":"InstanceUSM"}]," shuts down. May optionally preserve metadata in USM-provided memory for planned restarts of the same instance."]}]]}]
4c:["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_oom"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(void)"}]}],["$","td",null,{"children":"Intended to be applied the decision to the OOMs of the policy. Very costly and limited optimizations given its “ultimate” nature."}]]}]
4d:["$","span",null,{"className":"token keyword","children":"int"}]
4e:["$","span",null,{"className":"token punctuation","children":"("}]
4f:["$","span",null,{"className":"token operator","children":"*"}]
50:["$","span",null,{"className":"token punctuation","children":")"}]
51:["$","span",null,{"className":"token punctuation","children":"("}]
52:["$","span",null,{"className":"token keyword","children":"struct"}]
53:["$","span",null,{"className":"token class-name","children":"usm_event"}]
54:["$","span",null,{"className":"token operator","children":"*"}]
55:["$","span",null,{"className":"token punctuation","children":")"}]
56:["$","span",null,{"className":"token punctuation","children":";"}]
57:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_new_process",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
58:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_new_task",["$","span",null,{"className":"token punctuation","children":")"}],["$","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"]}]
59:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_virt_address_space_change",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
5a:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_permissions_change",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
5b:["$","span",null,{"className":"code-line","children":[" ",["$","span",null,{"className":"token keyword","children":"int"}]," ",["$","span",null,{"className":"token punctuation","children":"("}],["$","span",null,{"className":"token operator","children":"*"}],"usm_process_state_change",["$","span",null,{"className":"token punctuation","children":")"}]," ",["$","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"]}]
5c:["$","span",null,{"className":"code-line","children":[["$","span",null,{"className":"token punctuation","children":"}"}],["$","span",null,{"className":"token punctuation","children":";"}],"\n"]}]
5d:["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"usm_process_state_change"}]}],["$","td",null,{"children":["$","code",null,{"children":"int (*)(struct usm_event *event)"}]}],["$","td",null,{"children":"Optional hook notified on process state transitions (running, sleeping, blocked, etc.). Enables state-aware swapping strategies, such as aggressive eviction for sleeping processes or swap-in prioritization for waking ones."}]]}]
5e: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"]
46:["$","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":["$","$L5e",null,{"data":[{"level":3,"text":"Allocation Policies (`usm_alloc_policy_ops`)","href":"#allocation-policies-usmallocpolicyops"},{"level":3,"text":"Swapping & Eviction Policies (`usm_swap_policy_ops`)","href":"#swapping--eviction-policies-usmswappolicyops"}]}]}]]}]}]