áá¬áá»á®ážáá®ážáá¬ážáááºážááᬠáá°ááááºážááŸááºážáá²á·ááẠLinux kernel developer áá»á¬ážá០ááœá±ážááœá±ážááŸá¯áá»á¬ážá¡ááœááºá ááŒáá·áºáá±áá¬ážáá±á¬ thread execution á
áá
áºá¡á¬áž á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŸáá·áºá¡áá° áá¬áá±ážá¡á
á¯á¶á áá±á«ááºáá±á«áẠ(Distributed Thread Execution) ááẠhosts áá»á¬ážááŒá¬ážááœáẠthreads áá»á¬ážááᯠááŒáá·áºáá»ááºááŒááºážááŸáá·áº ááœáá·áºáááºážááŒááºáá¬á
áœá¬ ááœáŸá±á·ááŒá±á¬ááºážááŒááºážááá¯á·ááŒáá·áº ááœááºáá»á°áá¬áá»á¬ážá
áœá¬ááœáẠá¡ááá®áá±ážááŸááºážáá»á¬ážá áá¯ááºáá±á¬ááºááŸá¯ááᯠá
á¯á
ááºážááœáá·áºááŒá¯áááºá Popcorn ááŒáá·áºá á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠhost áá
áºáá¯ááœááºááœáá·áºááá¯ááºááŒá®áž á¡ááŸá±á¬áá·áºá¡ááŸááºáááŸááá² á¡ááŒá¬áž host ááá¯á· ááœáŸá±á·ááá¯ááºáááºá Multithreaded áááá¯ááááºáá»á¬ážááœááºá áá
áºáá¯áá»ááºážá
á® threads áá»á¬ážááᯠá¡ááŒá¬áž host áá»á¬ážááá¯á· ááœáŸá±á·ááŒá±á¬ááºážááŒááºážááᯠááœáá·áºááŒá¯áá¬ážáááºá
ááá±á¬áá»ááºááŸáá·áºááá° CRIUáá¯ááºáááºážá
ááºá¡ááŒá±á¡áá±á¡á¬áž ááááºážáááºážáááºááŸáá·áº á¡ááŒá¬ážá
áá
áºáá
áºáá¯áá±á«áºááœáẠáá¯ááºáá±á¬ááºááŸá¯ááᯠááŒááºáááºáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº Popcorn ááẠá¡áá¯á¶ážááŒá¯áá°áá¯ááºáá±á¬ááºááŸá¯áááá¯á¡ááºáá² á¡ááºááá®áá±ážááŸááºážáá¯ááºáá±á¬ááºáá±á
ááºá¡ááœááºáž hosts áá»á¬ážááŒá¬ážááœáẠáá»á±á¬ááœá±á·ááŒá®áž ááœááºáááºá
áœá¬ ááœáŸá±á·ááŒá±á¬ááºážááŒááºážááᯠáá¶á·ááá¯ážáá±ážááŒá®ážá áá
áºááŒáá¯ááºáááºáááºážáá¯ááºáá±á¬ááºáá±áá±á¬ á¡ááºá
áºáá»á¬ážá¡á¬ážáá¯á¶ážááœáẠvirtual memory áá®ááœááºááŸá¯ááᯠáá±áá»á¬á
á±áááºá
ááŒá±á¬ááºážáá°ážáá±á«ááºáá±á¬á·ááºáá²á¡á
á¯á¡áá¯á¶ áá¬áá±ážááŒááºáž Linux kernel ááŸáá·áº á
á¬ááŒáá·áºááá¯áẠááŒáá·áºáá±áá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážááœáẠá
á¬ááœá²áá»á¬ážááᯠááœáŸá±á·ááŒá±á¬ááºážááẠPopcorn á
áá
áºáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠáááºáá²á·ááá¯á· á¡áá¯á¶ážááŒá¯ááá¯ááºááŒá±á¬ááºáž á
ááºážáááºááŸá¯áá»á¬ážááŒáá·áº ááá¯ááºááŒáááºá kernel á¡ááá·áºááœááºá ááŒáá·áºáá±áá¬ážáá±á¬ áá»áŸáá±ááŸááºáá¬ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áº virtual memory subsystem ááá¯á· ááá¯ážáá»á²á·ááŸá¯áá»á¬ážááᯠá¡ááá¯ááŒá¯áá¬ážááŒá®ážá ááá°áá®áá±á¬ host áá»á¬ážááŸá áá¯ááºáááºážá
ááºáá»á¬ážááᯠáá°áá®ááŒá®áž áááááºáááºážááŸááá±á¬ virtual address space ááᯠááá°á¡áá¯á¶ážááŒá¯ááá¯ááºáááºááŒá
áºáááºá Virtual Memory á
á¬áá»ááºááŸá¬áá»á¬áž áá±á«ááºážá
ááºááŸá¯ááᯠáááºááŸá¯ááŒá®ážáá±á¬á¡áá«ááœáẠááŸááºáá¬ááºá
á¬áá»ááºááŸá¬áá»á¬ážááᯠáááºáá¶áááŸááá°áá¶ááá¯á· ááŒááºáááºáá°ážáá°áá±ážááá·áº áááá¯ááá¯áá±á¬á áá±áá»á¬áá«áááºá
hosts áá»á¬ážááŒá¬áž á¡ááŒááºá¡ááŸáẠáá¯á¶á·ááŒááºááŸá¯ááẠTCP socket ááŸáááá·áº áá±ážááá¯á·áá±á¬ áááºáá±á·áá»áºáá»á¬ážá¡ááœáẠkernel-level handler ááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¯ááºáááºážá
ááºá¡ááœááºáž á¡ááŸá¬ážááŸá¬á
á
áºáá±ážááŒááºážááŸáá·áº á
ááºážáááºááŒááºážáá»á¬ážááᯠááá¯ážááŸááºážá
á±ááẠTCP/IP ááᯠââá¡áá¯á¶ážááŒá¯áá¬ážááŒá±á¬ááºáž ááŸááºáá¬ážááá«áááºá áá¯á¶ááŒá¯á¶áá±ážááŸáá·áº á
áœááºážáá±á¬ááºááẠááŸá¯áá±á¬áá·áºááŸááŒáá·áºáá»áŸáẠTCP/IP ááẠkernel áááºáá±á¬ááºáá¯á¶áá»á¬ážááŸáá·áº áááºááá¯áá®á
á¬áá»ááºááŸá¬áá»á¬ážááŒá¬ážááŸá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠhosts áá»á¬ážááŒá¬ážááœáẠááœáŸá²ááŒá±á¬ááºážááẠá¡áá±á¬ááºážáá¯á¶ážáááºážáááºážááá¯ááºááŒá±á¬ááºáž developer áá»á¬áž áá¬ážáááºáá«áááºá ááŒáá·áºáá±áá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±ááá·áº host á¡á¬ážáá¯á¶ážááœáẠáá°áá®áá±á¬áá¯á¶ááŒááºááŸá¯á¡ááá·áºááŸáááá«áááºá áááºá á¡ááºáááá¯áá®áááºáá»á¬ážááᯠáááºááŒáááºá
á±ááŒá®ážáá±á¬ááºá ááá¯ááá¯áááá±á¬ááºáá±á¬ áááºáá°ááá¯á·áá±á¬ááºáá±ážáá¯ááºááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
Popcorn ááẠááŒáá·áºáá±áá¬ážáá±á¬á¡ááºááºáá®áá±ážááŸááºážáá»á¬ážáááºáá®ážááŒááºážáááŒá
áºááá¯ááºááŒá±áá»á¬ážááá¯áá±á·áá¬ááẠáá¯áá±ááááá±á¬áá»ááºáá
áºáá¯á¡ááŒá
Ạ2014 áá¯ááŸá
áºááááºážá áá®ááœááºáá²á·ááŒá®ážá ááœá²ááŒá¬ážáá±á¬ node áá»á¬ážááœáẠáá¯ááºáá±á¬ááºááá¯ááºááá·áº threads áá»á¬ážá ááœá²ááŒá¬ážáááºá ááá°áá®áá±á¬ instruction set áááá¯áá¬áá»á¬áž (Xeon/Xeon-Phi, ARM/x86, CPU/GPU/FPGA) ááá¯á·ááᯠá¡ááŒá±áá¶á core áá»á¬ážááᯠáá±á«ááºážá
ááºááá¯ááºáá±á¬ ááœááºáá»á°áá¬á
áá
áºáá»á¬ážá Linux kernel developer áá»á¬ážáᶠá¡ááá¯ááŒá¯áá¬ážáá±á¬ áá¬áá±ážá¡á
á¯á¶ááẠx86 CPU ááŒáá·áº host áá»á¬ážáá±á«áºááœáẠexecution áá»á¬ážááá¯áᬠáá¶á·ááá¯ážáá±ážáááºá ááá¯á·áá±á¬áº ááœá²ááŒá¬ážáá±á¬ CPU Architecture (x86 ááŸáá·áº ARM) ááŒáá·áº á¡ááá®áá±ážááŸááºážáá»á¬ážáá±á«áºááœáẠáá¯ááºáá±á¬ááºááá¯ááºá
á±ááá·áº Popcorn Linux á ááá¯ááá¯áá¯ááºáá±á¬ááºááá¯ááºáá±á¬ áá¬ážááŸááºážáááºáž ááŸááá«áááºá ááœá²ááŒá¬ážáá±á¬áááºáááºážáá»ááºáá»á¬ážááœáẠááŒá±á¬ááºážáá°ážáá±á«ááºáá±á«ááºááá¯á¡áá¯á¶ážááŒá¯áááºá á¡áá°ážáá
áºáá¯á¡áá¯á¶ážááŒá¯ááá«áááºá compiler LLVM ááá¯á¡ááŒá±áá¶áááºá áá°áá®áá±á¬áááá¯áá¬ááá¬ááŸá host áá»á¬ážáá±á«áºááœáẠááŒáá·áºáá±á¡áá¯á¶ážááŒá¯ááá·áºá¡áá« áá®ážááŒá¬áž compiler ááŒáá·áº ááŒááºáááºáááºáá±á¬ááºááẠáááá¯á¡ááºáá«á
ááá¯á·á¡ááŒááºáááºážááá¯ááŸááºáá»ááºáá»ááá¯ááºáááºá ááŒá±áá¬áá»áẠá¡áááºáááºáááºáá°áá±á¬ááá±á¬áá»áẠáááºáá®áá±á¬á· á¡á
á¯á¡áá±ážááŸá á¡ááŒá¬ážááœááºáá»á°áá¬áá»á¬áž (fork(áá²á·ááá¯á·)) ááœáẠááá±ážáá¯ááºáááºážá
ááºáá»á¬ážááᯠá
áááºáááºá¡ááœáẠáááŠážááŸá±á·ááŒá±ážáá¯á¶á
ᶠAPI ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áºá ááá¯á·áá±á¬áº ááœá²áá¬ážáá±á¬áá¯ááºáááºážá
ááºááᯠá¡ááŒá¬ážááœááºáá»á°áá¬ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáááº)á
áá¯ááºááᯠRust ááŒáá·áº áá±ážáá¬ážáá¬ážááŒá®áž ááá¯á¡áá»áááºá¡áá ááá¯ááºáá»á¬ážáá²á·ááá¯á·áá±á¬ á
áá
áºá¡áááºážá¡ááŒá
áºáá»á¬ážááᯠá¡áá¯á¶ážáááŒá¯ááá·áº á¡ááœááºááá¯ážááŸááºážáá±á¬ áá¯ááºáááºážá
ááºáá»á¬ážááá¯áᬠááœá¬ážááœáá·áºááŒá¯áá¬ážáááºá áááºáá®áá±á¬á· áá±á«áºááá¯ááŸá¯ ááŒá¯áá¯ááºáá±á¬á¡áá«á áááºááá¯áá®ááŸáá·áº áá¯ááºáááºážá
ááºááá¯ááºáᬠááœá²á·á
ááºážáá¯á¶áá»á¬ážááᯠáá¬áá¬ááá¯ááºááœááºáá° (áááºáá®áááºááº) áááºáááºáá±áá±á¬ á¡ááŒá¬áž host áᶠáá¯á¶áá°ááœá¬ážáááºá ptrace ááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáááºážá
ááºáá
áºáá¯á ááŸááºáá¬ááºáá±á¬ááºááŒááºáááºááŸá¯ááᯠá¡ááŸááºá
ááºááŒá¯áá¯ááºááŒá®áž áá¯ááºáááºážá
ááºááŸáá·áº ááŸááºáá¯á¶áááºááŸá¯áá»á¬ážá á¡ááŒá±á¡áá±ááŸáá·áºá¡áá° á¡ááŒá¬áž host ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáááºá API ááẠááá·áºá¡á¬áž áá¯ááºáááºážá
ááºá¡ááŒá±á¡áá±á¡á¬áž ááá¯ááºáá
áºáá¯ááá¯á· ááááºážáááºážááŒá®áž áááºážááŸáá
áºááá·áº áááºážááᯠááŒááºáááºááá°áááºáááºáž ááœáá·áºááŒá¯áá¬ážáááºá
source: opennet.ru