Pointers
Two PAIs exist as part of the kernel load module. These are located at labels _pgPageablePAI and _pgResidentPAI.
PAI Physical Arena Information Structure.
┌────────────┬────┬────────┬────┬────────────────────────────────────────┐│Field Name │Off │Length │Type│Description │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pai_pprt │+0 │4 │D │pointer to page range table │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pai_nranges │+4 │4 │D │number of ranges in range table │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pai_1M │+8 │c │S │1M boundary structure │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_frame │+8 │4 │D │last frame before boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_ppf │+c │4 │D │last pf before boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_ppr │+10 │4 │D │page range containing boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pai_16M │+14 │c │S │16M boundary structure │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_frame │+14 │4 │D │last frame before boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_ppf │+18 │4 │D │last pf before boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_ppr │+1c │4 │D │page range containing boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pai_end │+20 │c │S │end of memory boundary structure │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_frame │+20 │4 │D │last frame before boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_ppf │+24 │4 │D │last pf before boundary │ ├────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pb_ppr │+28 │4 │D │page range containing boundary │ └────────────┴────┴────────┴────┴────────────────────────────────────────┘
pagerange_s Page Range Table Entry.
┌─────────────────┬────┬────────┬────┬────────────────────────────────────────┐ │Field Name │Off │Length │Type│Description │ ├─────────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pri_lastframe │+0 │4 │D │last valid page in range │ ├─────────────────┼────┼────────┼────┼────────────────────────────────────────┤ │pri_firstframe │+4 │4 │D │first valid page in range │ └─────────────────┴────┴────────┴────┴────────────────────────────────────────┘