рд▓рдВрдмреЗ рдмреНрд░реЗрдХ рдХреЗ рдмрд╛рдж, рд╣рдо рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрд╢рд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рд╢реБрджреНрдз рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдкреВрд░реА рдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ: рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЛрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓рд╛рдПрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
рднрд╛рдЧ 3 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рдЙрдмрд╛рдК рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдРрд╕реЗ рдХрд╛рд░реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдВрд╕ рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдРрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг 3 рдбреА рджреГрд╢реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдпрд╛, рдПрдХ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ,
рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ ред
рдЖрдЗрдП рд╢реБрд░реБрдЖрдд рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╣реИред рдкреАрд╕реА рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░, рдФрд░ рдПрдЖрд░рдПрдо рднреА (рдореИрдВ GPU рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреБрдк рд╣реВрдВ) рдорд▓реНрдЯреА-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИрдВред рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдПрдХрд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛрд░ рдХреЗ рдмрдЬрд╛рдп, рдПрдХрд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдХрдИ рдХреЛрд░ рд╣реЛрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ: рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрдИ рд╕реЙрдХреЗрдЯ (рдкреНрд░реЛрд╕реЗрд╕рд░ рдЪрд┐рдкреНрд╕) рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд┐рдк рдХреЗ рднреАрддрд░ (рдПрдХ рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХреЗ рднреАрддрд░) рдПрдХ рд╕рд╛рде рдХрдИ рднреМрддрд┐рдХ рдХреЛрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рднреМрддрд┐рдХ рдХреЛрд░ рдХреЗ рднреАрддрд░ рдХрдИ рддрд╛рд░реНрдХрд┐рдХ рдХреЛрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╣рд╛рдЗрдкрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ)ред рдпрд╣ рд╕рдм рдпреЛрдЬрдирд╛рдмрджреНрдз рд░реВрдк рд╕реЗ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╕реЙрдХреЗрдЯреНрд╕ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдорджрд░рдмреЛрд░реНрдб рдкрд░ рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИрдВред рдиреАрдЪреЗ рдХреБрдЫ рдФрд░ рдЪрд┐рддреНрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ, рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдПред


рдЗрд╕ рд╕рдм рдХреЗ рдмреАрдЪ, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк
рддрд╛рд░реНрдХрд┐рдХ рдХреЛрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИред рдпрд╣
SMT рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (Simultaneous Multithreading), рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрд┐рд╕реА рдЕрдиреНрдп рд▓реЙрдЬрд┐рдХрд▓ рдереНрд░реЗрдб рд╕реЗ рдЕрдЧрд▓реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛, рдЬрдмрдХрд┐ рдкреНрд░реЛрд╕реЗрд╕рд░ рднрд╛рдЧреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЦреНрдп рдереНрд░реЗрдб рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднреМрддрд┐рдХ рдХреЛрд░ рдореЗрдВ рдХрдИ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВ (рдХреИрд╢, рдкрд╛рдЗрдкрд▓рд╛рдЗрди, ALU, FPU, ...), рдХрдИ рднрд╛рдЧ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЕрдиреБрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреИрд╢ рдпрд╛ рдореЗрдореЛрд░реА рд╕реЗ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рджреВрд╕рд░реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░реЗрдВ рдЙрд╕реА рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреВрд╕рд░реЗ рдереНрд░реЗрдб рд╕реЗ рдирд┐рд░реНрджреЗрд╢? рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЪрд┐рддреНрд░
рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдпрд╛ рдЗрдВрдЯреЗрд▓, рдПрдПрдордбреА, рдПрдЖрд░рдПрдо рдХреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╛ рд╡рд┐рд╡рд░рдг рдХреЗрд╡рд▓ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ (рдФрд░ рд╕рднреА рдХрд░реНрдиреЗрд▓ рдХреЛ рд╕рдорд╛рди рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛)ред рд╕реАрдкреАрдпреВрдЖрдИрдбреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реА рдмрд╛рд░ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХред
рд╣рдо рдХреБрдЫ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдБ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ:
рдПрд╕рдПрдордкреА (рд╕рд┐рдореЗрдЯреНрд░рд┐рдХ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ) - рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рдордорд┐рдд рдЙрдкрдпреЛрдЧ рдХрд╛ рдорддрд▓рдм рд╣реИ; рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рд░реИрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд╕рдорд╛рди рд╣реИрдВ рдФрд░ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рдПрдПрдордкреА (рдЕрд╕рдордорд┐рдд рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ), рдкрд┐рдЫрд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХреЛрд░ рджреВрд╕рд░реЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реАрдкреАрдпреВ рдФрд░ рдЬреАрдкреАрдпреВ рдХреЗ рд╕рдВрдпреБрдХреНрдд рдХрд╛рд░реНрдп рдХреЛ рдПрдПрдордкреА рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
NUMA (рдиреЙрди-рдпреВрдирд┐рдлрд╝реЙрд░реНрдо рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕) - рдореЗрдореЛрд░реА рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрд╕рдорд╛рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд╣реБрдБрдЪред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд╕рднреА рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдореЛрд░реА рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмрд╛рдХреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ред
рдЖрдзреБрдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдпреЗ рд╕рднреА рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╣реИрдВред
рд╣рдо рдПрд╕рдПрдордкреА рдХреЛ рдЗрд╕рдХреЗ рд╢реБрджреНрдзрддрдо рд░реВрдк рдореЗрдВ рдорд╛рдиреЗрдВрдЧреЗред рдЬрдм рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕реНрд╡рдпрдВ рдПрдХ рдордирдорд╛рдиреА рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ
рдмреВрдЯ рд╕реНрдЯреНрд░реИрдк рдкреНрд░реЛрд╕реЗрд╕рд░ (рдмреАрдПрд╕рдкреА) рдХрд╣рддрд╛ рд╣реИ, рдмрд╛рдХреА рд╕рднреА
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ (рдПрдкреА) рдмрди рдЬрд╛рддреЗ рд╣реИрдВред рдмреАрдПрд╕рдкреА BIOS рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИ рдФрд░ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдЙрдирдХрд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдПрдХ рдмреАрдПрд╕рдкреА рдХреЛрд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдХрд╛рдлреА рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ: рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрд┐рддрдиреЗ рдХреЛрд░ рд╣реИрдВ, рдлрд┐рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХреЛ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдФрд░ рд╕рднреА рдХреЛрд░ рдХреЛ рдПрдХ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВ рдХрд╛рд░реНрдп, рдЖрдо рдЕрдЪреНрдЫреЗ рдХреЗ рд▓рд┐рдПред
рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХреИрд╕реЗ рдХрд░реЗрдВ?рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрджреНрднреБрдд рдПрд╕реАрдкреАрдЖрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реАрдкреАрдпреВрдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ?рдЗрд╕рдХреЗ рд▓рд┐рдП, APIC рдбрд┐рд╡рд╛рдЗрд╕, рдпрд╛ LAPIC, рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд╣реИ, рдХреЗ рдкрд╛рд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП PID), рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдореЗрдВ рд╡реНрдпрд╡рдзрд╛рди рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдПрдХ рдХреЛрд░ рджреВрд╕рд░реЗ рдХреЛрд░ рд╕реЗ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?рдпрд╣ рдПрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдПрдХ рдмрд╛рдзрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рдХреЛ IPI (рдЗрдВрдЯрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдВрдЯрд░рдкреНрдЯ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрд░ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ LAPIC рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реИред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреИрд╕реЗ рд░реЛрдХреЗрдВ?рдЗрд╕ рдХрд░реНрдиреЗрд▓ рдкрд░ HLT рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдЕрдм рдереЛрдбрд╝рд╛ рдФрд░ред
рдПрд╕реАрдкреАрдЖрдИ (
рдПрдкреАрдЖрдИрд╕реА рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛) рдЙрдиреНрдирдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдкрд╛рд╡рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдорд╛рдирдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрдВрдкреНрдпреВрдЯрд░, рдЗрд╕рдХреЗ рд╡рд┐рд╕реНрддреГрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рд╢рдХреНрддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдкреЙрд╡рд░ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдбрд┐рд╡рд╛рдЗрд╕ (ACPI рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░, PCI (
рд▓реЗрдЦ рджреЗрдЦреЗрдВ ) рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдХрдИ ACPI рдЯреЗрдмрд▓ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреА рд░реИрдо рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдПрд╕реАрдкреАрдЖрдИ рдЯреЗрдмрд▓ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рднреМрддрд┐рдХ рдЖрдпрд╛рдореЛрдВ рдФрд░ рдлреЙрд░реНрдо рдлреИрдХреНрдЯрд░ рдкрд░ рднреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдирд╕реЗ рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЯреИрдмрд▓реЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ...)ред рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЯреЗрдмрд▓ рд╣реИрдВ, рдФрд░ рдЙрдирдХрд╛ рдкреВрд░рд╛ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ , рд▓реЗрдХрд┐рди рд╣рдо рдХреЗрд╡рд▓ рдЖрд░рдПрд╕рдбреАрдЯреА рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдПрдордПрдбреАрдкреА рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реВрдЪрдХ рдЖрд░рдПрд╕рдбреАрдкреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдЬреЛ рдХрд┐ BIOS рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╣реАрдВ рднреА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп ACPI рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдЖрд░реЗрдЦ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдПрдордПрдбреАрдЯреА рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рд░рд┐рдХреЙрд░реНрдб рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдЗрд╕ рдХрд░реНрдиреЗрд▓ рдХреА LAPIC рдкрд╣рдЪрд╛рди рд╣реЛрддреА рд╣реИ (8 рдмрд┐рдЯ рд▓рдВрдмрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ 256 рдХреЛрд░ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ) рдФрд░ рдмрд┐рдЯ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ (рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИ)ред
рдЕрдм
LAPIC рд▓реЛрдХрд▓ APIC рд╣реИ, рдФрд░
APIC (
ACPI рд╕реЗ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛) рдПрдбрд╡рд╛рдВрд╕реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдЗрдВрдЯрд░рдкреНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░ рд╣реИ, рдЬреЛ рдкреБрд░рд╛рдиреЗ PIC (рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рдЗрдВрдЯрд░рдкреНрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░) рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╣реИред PIC рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рддреБрд░рдВрдд рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ LAPIC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд░рддрд╛ рд╣реИред рд╕реНрдерд╛рдиреАрдп APIC рдХреЗрд╡рд▓ APIC рдХрд╛ рд╣реА рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИ - IO APIC рднреА рд╣реИ - рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдЕрд╡рд░реЛрдз рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдмреАрдЪ рд╡реНрдпрд╡рдзрд╛рди рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдХреБрд▓ рддрд╕реНрд╡реАрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдЬрдЯрд┐рд▓ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ:
PIC - рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдмрд╛рдзрд╛ рдирд┐рдпрдВрддреНрд░рдХ - рд░рд╣рддрд╛ рд╣реИ рдФрд░ рджреВрд░ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЕрднреА рднреА рдорджрд░рдмреЛрд░реНрдб рдкрд░ рдЪрд┐рдкрд╕реЗрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдорд▓реНрдЯреА-рдХреЛрд░ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЙрдиреНрд╣реЛрдВрдиреЗ
IO APIC рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬреЛ рдЕрдм рдХрд░реНрдиреЗрд▓ рдХреЗ рдмреАрдЪ PIC рдФрд░ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рд╡реНрдпрд╡рдзрд╛рди рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ LAPIC IPI рдФрд░ IO APIC рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗ рд╕реБрд╕рдЬреНрдЬрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ LAPIC рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЗрд╕рдХреА рдЯреЛрдкреЛрд▓реЙрдЬреА рдПрдиреНрдХреЛрдбреЗрдб рд╣реИред рдмреАрдПрд╕рдкреА рдХреЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ 0 рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ LAPIC рд╣реЛрддрд╛ рд╣реИред
LAPIC рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (рдЬреИрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде) рдХреЛ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рдХреЗ рд░рдЬрд┐рд╕реНрдЯрд░ 0xFEE00000 рдкрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдкрддрд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ MSR (рдореЙрдбрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ - рдЗрди рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ rdmsr / wrmsr рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдХреЛрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрддрд╛ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкрддреЗ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХрд╛ рдЕрдкрдирд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд LAPIC рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдЙрдкрдХрд░рдг рдореЗрдВ рдХрдИ рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ -
ICR (рдЗрдВрдЯрд░рдкреНрдЯ рдХрдВрдЯреНрд░реЛрд▓ рд░рдЬрд┐рд╕реНрдЯрд░) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ IPI рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди рдЖрдИрдкреАрдЖрдИ рдЗрд╕ рдХреЛрд░ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рджреВрд╕рд░реЗ рдХреЛрд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛: INIT IPI, рдлрд┐рд░ STARTUP IPI, рдФрд░ рдПрдХ рдФрд░ STARTUP IPIред рджреВрд╕рд░рд╛ STARTUP IPI (рдпрд╛ SIPI) рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗред рд░рджреНрдж рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдкрд╣рд▓рд╛ SIPI рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рджреВрд╕рд░реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ - рдРрд╕реЗ рдирд┐рдпрдоред рдкреНрд░рддреНрдпреЗрдХ IPI рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╕ рдЕрдкрдиреЗ LAPIC рдХреЗ ICR рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрдиреЗ рд╣реЛрдВрдЧреЗред рдЗрди рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ LAPIC рдХрд╛ рдмрд╛рдЗрдЯ рдЬрд┐рд╕рдореЗрдВ IPI рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП IPI рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред SIPI рдХреЗ рд▓рд┐рдП, 2 рдФрд░ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореЗрдореЛрд░реА рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдкреА рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдкрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдкрд╣рд▓реЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ (рд╣рд╛рдВ, INIT-SIPI-SIPI рдХреЗ рдмрд╛рдж рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рд┐рдпрд▓ рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдкрд░ рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рд╣рд╛рдВ, рд╣рдо рдХрдЪреНрдЪреЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЖрдк
рдЗрдВрдЯреЗрд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рдореИрдиреБрдЕрд▓ рдореЗрдВ LAPIC рдФрд░ IO APIC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдпрд╣ рдХреБрдЫ рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
рд▓реЙрдХ ,
рдПрдлрдкреАрдпреВ рдФрд░
рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЦреБрдж (рдкреЗрд▓реЛрдб)ред
рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рд╣рдореЗрдВ рдЕрднреА рднреА рдЪрд╛рд╣рд┐рдП рд╡рд╣ рд╣реИ рд╕рднреА рдХреЛрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рд▓реЙрдХ рдХреЛрдб рд▓рд┐рдЦреЗрдВ, рдЬреЛ рдХрд┐ рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдореГрддрд┐ рдХреА рдЙрдореНрдореАрдж рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдПрдХрддрд╛ рдХреАред рд▓реЙрдХ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВ? рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк: рдПрдХ рд╕рд░рд▓ рдЬрдмрдХрд┐ (1) рд▓рд┐рдЦреЗрдВ рдЬреЛ рдПрдХ рдкреИрд░ рдХреА рдЕрдВрдЧреБрд▓реА рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рддреБрд░рдВрдд рдЙрд╕ рдкрддреЗ рдкрд░ рдПрдХ рдЗрдХрд╛рдИ рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЕрдиреНрдп рдХрд░реНрдиреЗрд▓ рдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рди рд╣реЛред рдФрд░ рдорд╣рд▓ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рд╢реВрдиреНрдп рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдм
рдПрдлрдкреАрдпреВ (рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдпреВрдирд┐рдЯ) рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЧрдгрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдЯрд╛рдЗрдк рдлрд╝реНрд▓реЛрдЯ рдХреЗ рд╡реЗрд░рд┐рдПрдмрд▓ рдФрд░ рдбрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рднреА рдЖрдзреБрдирд┐рдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдУрдПрд╕ рдХрд░реНрдиреЗрд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ - рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рд╕рд┐рд░реНрдл рдХреБрдЫ рдирд┐рд░реНрджреЗрд╢ред рд╣рдореЗрдВ рдлреНрд▓реЛрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдЕрдиреНрдпрдерд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рд╣рдо
рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ? рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ
рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рдЕрдЪреНрдЫреЗ рд▓реЗрдЦ рд╣реИрдВ ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЪрд▓реЛ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
! рдорд╣рддреНрд╡рдкреВрд░реНрдг!: рд▓реЗрдЦ рдХреЗ рддреАрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ рд╕рднреА 6 рдЪрд░рдгреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ "рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ"рдЪрд░рдг 1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдЧрдгрд┐рддреАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдлрд╝рд╛рдЗрд▓ рдХреЛ
рд╕рд╛рдорд╛рдиреНрдп / s_floor.c рд╣рдЯрд╛рдПрдВ ред
рд╣рдореЗрдВ рднрдЧреНрди рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рд╣рдореЗрдВ рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рднрдЧреНрди рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЧреНрд░рд╛рдлрд┐рдХ рдореЛрдб рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
1. рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рдордиреЗ рдХреБрдЫ рдШреЛрд╖рдгрд╛рдПрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдФрд░ рдЙрд╕ рдЫрд╡рд┐ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗ:
рдореИрдВ
nt vbe_screen_w = 800, vbe_screen_h = 600; int VBE_SetMode( ulong mode ); int VBE_Setup(int w, int h); extern ulong vbe_lfb_addr; extern ulong vbe_selected_mode; extern ulong vbe_bytes;
2. рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдмрджрд▓реЗрдВ:
void main() { clear_screen(); printf("\n>>> Hello World!\n");
3. рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:
void DrawFractal(void);
рдЪрд░рдг 2. рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп fdlibm рдЬреЛрдбрд╝реЗрдВред
рдЕрдм рдЖрдк рдПрдХ рдкреВрд░реНрдг рдЧрдгрд┐рддреАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ sqrt, tan рдФрд░ pow рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ Ray Tracing рдПрд▓реНрдЧреЛрд░рд┐рдердо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
1. рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА
fdlibm рдмрдирд╛рдПрдВ
ред2. рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣рдо
рдпрд╣рд╛рдБ рд╕реЗ fdlibm рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ
рд╣реИрдВ ред рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
3. рдЕрдм рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ (рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЖрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдореЗрдХрдлрд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди, рдореВрд▓ рдореЗрдВ рдореВрд▓ рдЭрдВрдбреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп
fdlibm.a рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдЧрд╛
ред рдирдП рдореЗрдХрдлрд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:
CC = gcc CFLAGS = -Wall -fno-builtin -nostdinc -nostdlib -ggdb3 LD = ld OBJFILES = \ e_acos.o e_acosh.o e_asin.o e_atan2.o e_atanh.o e_cosh.o e_exp.o \ e_fmod.o e_gamma.o e_gamma_r.o e_hypot.o e_j0.o e_j1.o e_jn.o \ e_lgamma.o e_lgamma_r.o e_log.o e_log10.o e_pow.o e_remainder.o \ e_rem_pio2.o e_scalb.o e_sinh.o e_sqrt.o \ k_cos.o k_rem_pio2.o k_sin.o k_tan.o \ s_asinh.o s_atan.o s_cbrt.o s_ceil.o s_copysign.o s_cos.o s_erf.o s_expm1.o \ s_fabs.o s_finite.o s_floor.o s_frexp.o s_ilogb.o s_isnan.o s_ldexp.o s_lib_version.o \ s_log1p.o s_logb.o s_matherr.o s_modf.o s_nextafter.o s_rint.o s_scalbn.o s_signgam.o \ s_significand.o s_sin.o s_tan.o s_tanh.o \ w_acos.o w_acosh.o w_asin.o w_atan2.o w_atanh.o w_cosh.o w_exp.o w_fmod.o w_gamma.o \ w_gamma_r.o w_hypot.o w_j0.o w_j1.o w_jn.o w_lgamma.o w_lgamma_r.o w_log.o \ w_log10.o w_pow.o w_remainder.o w_scalb.o w_sinh.o w_sqrt.o k_standard.o all: fdlibm.a rebuild: clean all .so: as -o $@ $< .co: $(CC) -Ix86emu тАУI../include $(CFLAGS) -o $@ -c $< .cpp.o: $(CC) -Ix86emu -I. -Iustl тАУI../include $(CFLAGS) -o $@ -c $< fdlibm.a: $(OBJFILES) ar -rv fdlibm.a $(OBJFILES) ranlib fdlibm.a clean: rm -f $(OBJFILES) fdlibm.a
4. рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
k_standard.c рдореЗрдВ рдмрджрд▓рд╛рд╡
рдХрд░реЗрдВрдЧреЗ ред рд╣рдореЗрдВ рдПрдХ рдЧрд▓рдд рдлрдВрдХреНрд╢рди рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдлрдВрдХреНрд╢рди рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдмрд┐рдирд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
#ifndef _USE_WRITE #include <stdio.h> /* fputs(), stderr */ #define WRITE2(u,v) fputs(u, stderr) #else /* !defined(_USE_WRITE) */
рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐:
void fputs(void *u, int stderr) { } int errno = 0; #ifndef _USE_WRITE #define WRITE2(u,v) fputs(u, 0) #else
рдЪрд░рдг 3. рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдФрд░ рд╣реЗрдбрд░ рдЬреЛрдбрд╝реЗрдВ
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рдЙрди рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдПрдВрдЧреАред
1. рдЗрд╕ рдмрд╛рд░ C ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рднреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП, рдХрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рд╢рд╛рдорд┐рд▓ / рд╕реНрдЯреНрд░рд┐рдВрдЧ .h рдлрд╝рд╛рдЗрд▓ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдЖрдкрдХреЛ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдБ рд╢реВрдиреНрдп * рдХреЛ char * рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдкрдВрдХреНрддрд┐ рдорд┐рд▓реА: 42, 53,54,79,80ред рд╣рд░ рдЬрдЧрд╣ рдПрдХ рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╣реА рд░реЗрдЦрд╛ 42 рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
p = (char *) addr;
2. рдЖрдкрдХреЛ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрдирдореЗрдВ рдХрдИ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ, рдХрдИ рдкреНрд░рдХрд╛рд░, рдХрдИ рд╕реНрдерд┐рд░рд╛рдВрдХ, рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ fdlibm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо
рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝рддреЗ
рд╣реИрдВ / type.h (рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрдВрддрд┐рдо #endif рд╕реЗ рдкрд╣рд▓реЗ):
typedef unsigned long long u64; #define FLT_MAX 1E+37 #define DBL_MAX 1E+37 #define LDBL_MAX 1E+37 # ifndef INFINITY # define INFINITY (__builtin_inff()) # endif #define NUM 3 #define NAN 2 #define INF 1 #define M_PI 3.14159265358979323846 #define __PI 3.14159265358979323846 #define __SQRT_HALF 0.70710678118654752440 #define __PI_OVER_TWO 1.57079632679489661923132 typedef const union { long l[2]; double d; } udouble; typedef const union { long l; float f; } ufloat; extern double BIGX; extern double SMALLX;
3. рдлрд╝рд╛рдЗрд▓ рдХреЛ
рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ / рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде
рдЧрд╝рд▓рддреА рдХрд░реЗрдВ:
#ifndef _ERRNO_H #define _ERRNO_H extern int errno; #define EDOM -6 #define ERANGE -8 #endif
4. рдЕрдм, рдЖрдкрдХреЛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░, рдПрд╕рдПрдордкреА, рдПрд╕реАрдкреАрдЖрдИ, рдПрд▓рдПрдкреАрдЖрдИрд╕реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрд╕реЗрд╕рд░ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╢рд╛рдорд┐рд▓ / рд╣рд╛рд░реНрдбрд╡реЗрдпрд░.h рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд╛рд░ рд╣рдордиреЗ рдЬреАрдердм рдкрд░ рддреИрдпрд╛рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдкреЛрд╕реНрдЯ рдХреАрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреЛрдб рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдмрдбрд╝реА (~ 500 рд▓рд╛рдЗрдиреЗрдВ) рдирд┐рдХрд▓рд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рд▓рд┐рдЦрдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рд░реВрд╕реА рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рд▓реИрд╕ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреАрдердм рдкрд░ рдХреЛрдб рдХреЛ рд▓реЗрдЦ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╣реА, рд╣рдо рдлрд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ:
рдПрдХред ACPI рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреБрдХреНрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБред рдпрд╣ рдХреЛрдб рдЖрдзрд┐рдХрд╛рд░рд┐рдХ ACPI рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдХреЛрдб рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрд╛рд▓рд┐рдХрд╛рдУрдВ (RSDP, RSDT, MADT) рдХреА рдХреЗрд╡рд▓ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рд╣реИрдВред
рдЦред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдЧреЗ рдХрдИ рдЗрдирд▓рд╛рдЗрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдШреЛрд╖рдгрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ gcc рдореЗрдВ рдХреЛрдбрд╛рдВрддрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдХреЗ рдХрд╛рд░рдг рднрд╛рд░реА рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрд┐рдЬрд╛рдЗрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: __asm__ __volatile__ ("<рдирд┐рд░реНрджреЗрд╢>": <рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░>: <рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░>); рдирд╛рдо рд╕реЗ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдлреНрд░реАрдмреАрдПрд╕рдбреА, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдмрд┐рдЯрд╡рд┐рд╕рд░ рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдордЭреЗрдВрдЧреЗ: rdtsc, __rdmsr, __rdmsrl, __wrmsr, __wrmsrl, __rep_nop рдФрд░ __cpuid_count, __get -cr0, __set_cr0ред
рд╕реАред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ SmpSpinlock_LOCK рдФрд░ SmpSpinlock_UNLOCK рдХрд╣рд╛ рд╣реИред рджреЛрдиреЛрдВ рдХрд╛рд░реНрдп
orangetide.com/src/bitvisor-1.3/include/core/spinlock.h рд╕реЗ рд▓рд┐рдП
рдЧрдП рд╣реИрдВ рдФрд░ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рднреА рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╡реЗ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рд╕рд╛рдзрд╛рд░рдг рддрд╛рд▓реЗ рд╣реИрдВред рдЙрдирдХреЗ рдХрд╛рдо рдХрд╛ рд╕рд╛рд░ рд╕рд░рд▓ рд╣реИ: рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдорд╛рди 0 рдпрд╛ 1. рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ 0 рд╣реИ, рддреЛ рд▓реЙрдХ рдЦреБрд▓рд╛ рд╣реИ, рдФрд░ рдпрджрд┐ 1, рддреЛ рдпрд╣ рдмрдВрдж рд╣реИред SmpSpinlock_LOCK рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рд╛рд░ рд▓реЙрдХ рдХреЗ рдмрд╛рдЗрдЯ рдореЗрдВ рдорд╛рди 0 рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рдмрд╛рдЗрдЯ рдХреЛ 1 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реИред рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "рдкреЙрдЬрд╝" рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдЪрдХреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдЪрдХреНрд░ рдХреЗ рджреМрд░рд╛рди рдЗрд╕рдХреА рдмрд┐рдЬрд▓реА рдХреА рдЦрдкрдд рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрдврд╝рдиреЗ рдФрд░ рдПрдХ рд╕рд╛рде рдореВрд▓реНрдп 1 рдХреЛ рдореЗрдореЛрд░реА рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, "xchg" рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореЗрдореЛрд░реА рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдмреАрдЪ рдкрд░рдорд╛рдгреБ рд╡рд┐рдирд┐рдордп рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдПрдЯреЛрдорд┐рд╕рд┐рдЯреА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реА рдЕрдкрдирд╛ рдмрдЪрд╛рд╡ рдХрд░реЗрдЧрд╛ред
рдШред рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ред h рдХреЛрдб рдЖрдЧреЗ LAPIC рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЯреЗрд▓ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдИред рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдПрдХ рдФрд░ __enable_fpu рдХреЛрдбрд╛рдВрддрд░рдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдкрд░ FPU рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рджреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╣реИ: "fnclex" рдФрд░ "fninit", рдЬреЛ рдХрд░реНрдиреЗрд▓ рдкрд░ FPU рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред
рдЪрд░рдг 4. рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред
рдЕрдм, рдЖрдк smp.c рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдВрдЧреЗред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рд╣реИ рдЬреЛ рдирдП рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдХрд░реНрдиреЗрд▓ рдкрд░ рдЪрд▓реЗрдЧрд╛ред
Smp.c рдХреЛрдб
рднреА github рдкрд░ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ; рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХрдИ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛, рднрд╛рдЧ рдХреЛ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдерд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдорд▓реНрдЯреА-рдХреЛрд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рддреНрдпреЗрдХ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдУрдПрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рдерд╛ рддрд╛рдХрд┐ рдЖрдк рдПрд╕рдПрдордкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рд╕рд╛рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдп рдХрд░ рд╕рдХреЗрдВред Smp.c рдХреЛрдб рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:
1. рдкреНрд░рддреНрдпреЗрдХ AP рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбред рд╕рднреА рдЖрд░рдВрдн рдХреА рд╢реБрд░реБрдЖрдд SmpPrepare рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИред рдХреБрдЫ рдЙрдкрдЦрдВрдбреЛрдВ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЯрд╛рдЗрдорд░ рдпрд╛ рд╕реАрдПрдордУрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рджреЗрд░реА рдХреЛ рдХрд░рдирд╛ рд╕рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рджреЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреАрдПрд╕рд╕реА рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп (рдкреНрд░реЛрд╕реЗрд╕рд░ рдШрдбрд╝реА рдЪрдХреНрд░реЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рдж рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред SmpPrepare рдХреЗ рднреАрддрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрджрдо рдЙрдард╛рдП рдЧрдП рд╣реИрдВ:
- рдПрдХред CPU рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ LAPIC рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред
- рдЦред MSR рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдзрд╛рд░ LAPIC рдкрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
- рд╕реАред 64-рдмрд┐рдЯ ICR рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рджреЛ рднрд╛рдЧреЛрдВ рдХреА рдУрд░ рд╕рдВрдХреЗрдд рдорд┐рд▓рддрд╛ рд╣реИред рдпреЗ рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдХреЗрдд рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдИрдкреАрдЖрдИ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдШред рдлрд┐рд░ RSDP рдкрддрд╛ рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ TSDT рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред RSDT рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ MADT рдкрд░ рдкрддрд╛ рд╣реИред рдкреВрд░реЗ рдПрдордПрдбреАрдЯреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрдХреИрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдПрдкреАрдЖрдИрд╕реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдПрдХ LAPIC ID рдФрд░ рдПрдХ рдХрд░реНрдиреЗрд▓ рд╕рдХреНрд╖рдо рдзреНрд╡рдЬ рд╣реЛрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рд╕рднреА рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓реА рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ LAPIC рдЖрдИрдбреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╣реИрдВред
- рдИред рдЕрдЧрд▓рд╛ рдЪрд░рдг рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдкрд╕реАрдиреЗ рдХреЗ рдвреЗрд░ рдкрд░ рдореЗрдореЛрд░реА рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕реНрдЯреИрдХ 64Kb рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рднреМрддрд┐рдХ рдореЗрдореЛрд░реА рдХреЗ 5 рд╡реЗрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
- рдЪред рдлрд┐рд░, рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдХреЛ рднреМрддрд┐рдХ рдкрддреЗ 0x6000 рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдкреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдЬреАред рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреА рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, INIT-SIPI-SIPI рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ ICR рдХреЛ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рд▓рд┐рдЦрдХрд░ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдХреЛрдб (http://fxr.watson.org/fxr/source/i386/i386/mp_machdep.c) рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЧрдИ LAPIC рдЖрдИрдбреА рдФрд░ рд╡реЗрдХреНрдЯрд░ 6, рдкрддрд╛ 0x6000 рдХреЗ рдкрддреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЬреЛ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдЪред рддрдм рдмреАрдПрд╕рдкреА рдХреЛ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдЪрд╛рд▓реВ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╡рд╣ рдЙрд╕ рд╕рдордп рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХреЛрд░ рдкрд░ рдЪрд╛рд▓реВ рдХрд╛рдЙрдВрдЯрд░ рдЙрдирдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ AP рдХреЛрд░ рдЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ 1 рд╕реЗ рдмрдврд╝рд╛рддрд╛ рд╣реИред
- рдореИрдВред рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЕрдкрдирд╛ рдХрд╛рдо рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
2. рдкреНрд░рддреНрдпреЗрдХ рдПрдкреА рдкрд░ рдХреЛрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред Smp.c рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рддреБрд░рдВрдд рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕ рдХреЛрдбрд╛рдВрддрд░рдХ рдХреЛрдб рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдХреЛрдб рдХреЛрдб рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ:
- рдПрдХред рдзреНрд╡рдЬ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдХрдИ рдЭрдВрдбреЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛, рдФрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд░рдЬрд┐рд╕реНрдЯрд░ рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ред
- рдЦред рдкреЗрдЬрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ cr0 рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдореЛрдб рдХрд╛ рд╕рдорд╛рд╡реЗрд╢ред
- рд╕реАред 32-рдмрд┐рдЯ рдХреЛрдб рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рд╕рдВрдХреНрд░рдордгред
- рдШред рд▓реЛрдбрд┐рдВрдЧ GDTR рдФрд░ рд╕рднреА рдЦрдВрдбреЛрдВ рдХреЛ 32-рдмрд┐рдЯ (рдХреЛрдб рдФрд░ рдбреЗрдЯрд╛) рдХреЗ рд░реВрдк рдореЗрдВред
- рдИред MSR рд╕реЗ рдЖрдзрд╛рд░ LAPIC рдкрддреЗ рдХреЛ рдкрдврд╝рдирд╛ред
- рдЪред рдЗрд╕рдХреА рдЖрдИрдбреА (рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LAPIC рд░рдЬрд┐рд╕реНрдЯрд░ рдкрдврд╝рдирд╛ред
- рдЬреАред рд╡рд░реНрддрдорд╛рди рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд░ рдХреЗ рд▓рд┐рдП, рдореЗрдореЛрд░реА рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЖрд░рдХреНрд╖рд┐рдд рд╣реИред
- рдПрдЪред C (SmpApMain) рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ред
SmpApMain рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрд╕реЗрд╕рд░ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕реВрдЪрдХрд╛рдВрдХ рдЗрд╕рдХреА рд╕рдВрдЦреНрдпрд╛ 0 рд╕реЗ рдПрди рддрдХ рд╣реИ - рдЬрд╣рд╛рдВ рдПрди -1 рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХреЛрд░ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдлрд┐рд░, рдЪрд▓ рд░рд╣реЗ рдХреЛрд░ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрд▓реЛрдб рд▓реЙрдиреНрдЪ рдзреНрд╡рдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдзреНрд╡рдЬ рдХреЛ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, ap_cpu_worker рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЬреЛ рдкреЗрд▓реЛрдб (рд░реЗ-рдЯреНрд░реИрд╕) рдХрд░рддрд╛ рд╣реИред
рдЪрд░рдг 5. рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬреЛрдбрд╝рдирд╛ред
рд╕рдмрд╕реЗ рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рдкреАрдЫреЗ рд╣реИред рдЕрдм рдЖрдкрдХреЛ рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд▓реЛрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрд╡рдпрдВ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП,
рдЗрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рд░реЗ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рддреИрдпрд╛рд░ рдХреЛрдб рдХреЛ рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред рдЖрдзрд╛рд░ рдХреЗ
рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдВ рд╕реЗ рдХреЛрдб рд▓реЗрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рдореЗрдореЛрд░реА рдФрд░ рдПрд╕рдЯреАрдПрд▓ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдЖрд╡рдВрдЯрди рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛, рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдмрджрд▓рдирд╛ред рдлрд┐рд░, рдЖрдкрдХреЛ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рдЫрд╡рд┐ рдХреНрд╖реЗрддреНрд░ рд░реЗрдЦрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХреЗред рдЕрдВрддрд┐рдо, рдЖрдкрдХреЛ ap_cpu_worker рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдХреБрдЫ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
1. рдПрдХ
ray.cpp рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред
рдкрд░рд┐рдгрд╛рдореА рдХреЛрдб рдХреЛ рдЗрд╕рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред
2. рдЗрд╕рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рдмрджрд▓реЗрдВ:
#include <cstdlib> #include <cstdio> #include <cmath> #include <fstream> #include <vector> #include <iostream> #include <cassert>
рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐:
extern "C" { #include "types.h" #include "printf.h" #include "string.h" #include "hardware.h" double tan(double x); double sqrt(double x); double pow (double x, double y); extern int vbe_screen_w; extern int vbe_screen_h; extern ulong vbe_lfb_addr; extern ulong vbe_bytes; extern u32 cpu_count; extern ulong SmpStartedCpus; void SmpReleaseAllAps(); } namespace std { template <class T> const T& max (const T& a, const T& b) { return (a<b)?b:a; // or: return comp(a,b)?b:a; for version (2) } template <class T> const T& min (const T& a, const T& b) { return !(b<a)?a:b; // or: return !comp(b,a)?a:b; for version (2) } }
3. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдПрдБ:
friend std::ostream & operator << (std::ostream &os, const Vec3<T> &v) { os << "[" << vx << " " << vy << " " << vz << "]"; return os; }
рдФрд░ рдпреЗ:
4. рдмрджрд▓реЗрдВ:
const std::vector<Sphere<T> *> &spheres, const int &depth)
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
const Sphere<T> **spheres, unsigned spheres_size, const int &depth)
5. рд╕рдВрдкреВрд░реНрдг
рд░реЗ.рдХреИрдк рдлрд╝рд╛рдЗрд▓ рдореЗрдВ
, spheres_size ( рдХреБрд▓ рдореЗрдВ 3 рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
) рдХреЗ рд╕рд╛рде
spheres.size (
) рдмрджрд▓реЗрдВред
6. рдЗрд╕рдХреЗ рд╕рд╛рде рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓реЗрдВ:
void render(const Sphere<T> **spheres, unsigned spheres_size, unsigned y_start, unsigned y_end) { Vec3<T> pixel; T invWidth = 1 / T(vbe_screen_w), invHeight = 1 / T(vbe_screen_h); T fov = 30, aspectratio = vbe_screen_w / T(vbe_screen_h); T angle = tan(M_PI * 0.5 * fov / T(180));
7. рддрджрдиреБрд╕рд╛рд░, рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдПрдХ рдЕрдиреНрдп spheres_size рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рджреЛ рд╢реЗрд╖ рдХреЙрд▓ рдХреЛ рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдареАрдХ рдХрд░реЗрдВ:
Vec3<T> reflection = trace(phit + nhit * bias, refldir, spheres, depth + 1);
рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ:
Vec3<T> reflection = trace(phit + nhit * bias, refldir, spheres, spheres_size, depth + 1) ;
рдФрд░ рдпрд╣:
refraction = trace(phit - nhit * bias, refrdir, spheres, depth + 1) ;
рдкрд░:
refraction = trace(phit - nhit * bias, refrdir, spheres, spheres_size, depth + 1) ;
8. рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдореБрдЦреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп,
ray_main рдФрд░
ap_cpu_worker рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛрдбрд╝реЗрдВ:
#define RAY_SHAPES_COUNT 6 Sphere<float> *ray_spheres[RAY_SHAPES_COUNT]; extern "C" void ap_cpu_worker( int index ) { __enable_fpu(); render<float>((const Sphere<float> **)ray_spheres, 6, vbe_screen_h/cpu_count * index, vbe_screen_h/cpu_count * index + vbe_screen_h/cpu_count); forever(); } extern "C" int ray_main() { Sphere<float> sp1 (Vec3<float>(0, -10004, -20), 10000, Vec3<float>(0.2), 0, 0.0); Sphere<float> sp2 (Vec3<float>(0, 0, -20), 4, Vec3<float>(1.00, 0.32, 0.36), 1, 0.0); Sphere<float> sp3 (Vec3<float>(5, -1, -15), 2, Vec3<float>(0.90, 0.76, 0.46), 1, 0.0); Sphere<float> sp4 (Vec3<float>(5, 0, -25), 3, Vec3<float>(0.65, 0.77, 0.97), 1, 0.0); Sphere<float> sp5 (Vec3<float>(-5.5, 0, -15), 3, Vec3<float>(0.90, 0.90, 0.90), 1, 0.0); Sphere<float> sp6 (Vec3<float>(0, 20, -30), 3, Vec3<float>(0), 0, 0, Vec3<float>(3)); ray_spheres[0] = &sp1; ray_spheres[1] = &sp2; ray_spheres[2] = &sp3; ray_spheres[3] = &sp4; ray_spheres[4] = &sp5; ray_spheres[5] = &sp6; SmpReleaseAllAps(); ap_cpu_worker(0); forever (); return 0; }
рдЪрд░рдг 6. рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдФрд░ рд▓реЙрдиреНрдЪред
рдпрд╣ рдХреЗрд╡рд▓ рдореЗрдХрдлрд╛рдЗрд▓ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ рддрд╛рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдВрдХрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:
1. рдЕрджреНрдпрддрди OBJFILES:
OBJFILES = \ loader.o \ common/printf.o \ common/screen.o \ common/bios.o \ common/vbe.o \ common/qdivrem.o \ common/udivdi3.o \ common/umoddi3.o \ common/divdi3.o \ common/moddi3.o \ common/setjmp.o \ common/string.o \ x86emu/x86emu.o \ x86emu/x86emu_util.o \ smp.o \ ray.o \ kernel.o
2. C ++ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖реНрдп рдЬреЛрдбрд╝реЗрдВ:
.cpp.o: $(CC) -Ix86emu -I. -Iustl -Iinclude $(CFLAGS) -o $@ -c $<
3. рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдирдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХрд░ рдХреА рдХреЙрд▓ рд▓рд╛рдЗрди рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛:
$(LD) -T linker.ld -o $@ $^ fdlibm/fdlibm.a
4. рдЕрдм рдЖрдкрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
cd fdlibm make rebuild
5. рдЕрдм рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
make rebuild sudo make image
6. рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, 4-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрд▓рд╛рдПрдВ:
sudo qemu-system-i386 -hda hdd.img тАУsmp 4
рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕реБрдВрджрд░рддрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЦ рдХреЗ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ, dd рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк hdd.img рдЫрд╡рд┐ рдХреЛ USB рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдкрд░ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдЬреЛ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рднреА рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдЙрди рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦреЛрд▓рддрд╛ рд╣реИ рдЬреЛ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдЧрдгрдирд╛ рд╕реЗ рддреЗрдЬ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдХреА рддрд░рд╣, рдХреЛрдИ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдХрд╛рд░реНрдпрдХреНрд░рдо рднреА рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рд╡реЗ рдмрд╕ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕ рдЧрддрд┐ рд╕реЗ рд╕рдм рдХреБрдЫ рдЦреАрдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдкрдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рд╕рдЪ рд╣реИ рдЕрдЧрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдирдВрдЧреЗ рдзрд╛рддреБ рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ Intel i5 рдЗрд╕ рдЪрд┐рддреНрд░ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 800 рдорд┐рд▓реАрд╕реЗрдХреЗрдВрдб рдЦрд░реНрдЪ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдХреЗ рд▓рд┐рдВрдХ:
"
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ: рднрд╛рдЧ 5. рдУрдПрд╕ рд╕реЗ BIOS рддрдХ рдкрд╣реБрдВрдЪрдирд╛"
рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ: рднрд╛рдЧ 6. FAT рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди "