Microsoft ááẠC ááŸáá·áº C++ ááŸá ááŸáááŒá®ážáá¬ážáá¯ááºáá»á¬ážááœáẠáá¯á¶ááŒá¯á¶áá±ážááŒá¿áá¬áá»á¬ážááᯠááááºááá¯á·áááºá¡ááœáẠáááºááœááºá CHERIoT (Capability Hardware Extension to RISC-V for Internet of Things) ááá±á¬áá»ááºááŸáá·áº áááºá ááºáá±á¬ ááá¯ážáááºááŸá¯áá»á¬ážááᯠááŸá¬ááœá±ááœá±á·ááŸááá²á·áááºá CHERioT ááẠáááºážááá¯á·ááᯠááŒááºáááºáá¯ááºáá±á¬ááºáááºáááá¯á¡ááºáá² áááºááŸá C/C++ áá¯ááºáá±á·á áºáá»á¬ážááᯠáá¬ááœááºááá¯ááºá á±ááá·áº ááŒá±ááŸááºážáá»ááºáá áºáᯠáá±ážáá¬ážáááºá áááá¯áááºáá¬ááŸáá¶á·ááá¯ážáá±ážáá±á¬ á¡áá°ážááá¯ážáá»á²á·áááá¯áááºáá¬ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž (ISA) ááá¯á¡áá¯á¶ážááŒá¯áᬠáá¬á·ááºáá²á¡ááá·áºá á±á¬áá·áºááŒáá·áºáá±ážááŸááºáá¬ááºáááºáá±á¬ááºááœáá·áºá pointers áá»á¬ážááŸáá·áºá¡áá° á¡áá¯ááºáááŸááºáááºááŸá¯ááá¯á á áºáá±ážááŒááºážááŸáá·áº áá¯ááºáá¯á¶ážáá»á¬ážááᯠáá®ážááŒá¬ážááœá²áá¬ážááŒááºážááá¯áá±áá»á¬á á±ááá·áº ááœááºážáá¶áá¬ážáá±á¬ compiler ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá¡á¬ážááŒáá·áº á¡áá¬á¡ááœááºááá¯áá¯ááºáá±á¬ááºáááºá
C language á á¡ááá·áºáááá·áºááá±á¬ááá¬áááẠmemory ááŸáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá«ááœáẠá¡ááŸá¬ážá¡ááœááºážáá»á¬ážááŒá áºáá¬ááŒá®áž ááŒá¬ážáá¶áá»á¬ážááŒáá·áºáá»áŸá¶ááŒááºážá ááœááºáá±ááŒá®ááŒá áºáá±á¬ memory ááá¯á·áááºáá±á¬ááºááœáá·áºá pointer dereferences ááá¯á·ááá¯áẠdouble frees áá»á¬ážáá²á·ááá¯á·áá±á¬ ááŒá¿áá¬áá»á¬ážááá¯ááŒá áºá á±ááá·áºá¡áá»ááºááᯠáá»ááºáá¯á¶ážááŒáá·áº áááºáá®ážáá¬ážáá«áááºá . áááºážáá»ááºáá±á¬ááŒá±á¬ááºážáá²ááŸá¯ááŒááºáááºáá¯á¶ážáááºááŒááºážáá°áá«áááŸáá·áº áá±ááºáá®ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážáááºážáááºážáá»á¬ážááŸáá·áº áááºááŒáááºááŸá¯ááœá²ááŒááºážá áááºááŒá¬ááŸá¯áááááá¬áá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááá·áº Google ááŸáá·áº Microsoft áá²á·ááá¯á·áá±á¬ áá±á¬áºááá¯áá±ážááŸááºážááŒá®ážáá»á¬ážáááºáá»áŸáẠMemory ááŒáá·áºáá¯ááºáá±á¬ááºááá·áºá¡áá« á¡ááŸá¬ážá¡ááœááºážáá»á¬ážáááŸáááŒááºážááᯠá¡á¬ááá¶ááá¯ááºáááºááá¯ááºááŒá±á¬ááºáž (á¥ááá¬á Microsoft ááŸá á¡á¬ážáááºážáá»ááºáá»á¬ážá 70% ááá·áºá ááŸáá·áº Google ááẠááá¯á¶ááŒá¯á¶áá±á¬ ááŸááºáá¬áẠááá¯ááºááœááºááŸá¯ ááŒá±á¬áá·áº ááŒá áºáááº)á
áááºááá¯áá®ááŒáá·áº áá¯á¶ááŒá¯á¶áá±á¬áá¯ááºáá±á¬ááºááŸá¯ááᯠá¡á¬ááá¶ááá·áº áááá¯ááááºáá¬áá¬á áá¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº ááŒá¿áá¬ááᯠááŒá±ááŸááºážááá¯ááºáááºá ááá¯á·ááá¯áẠá¡ááá¯á á áºáá±ážááŸá¯áá»á¬ážááŸáá·áºá¡áá° á¥ááá¬á¡á¬ážááŒáá·áºá á¥ááá¬á MiraclePtr (raw_ptr) áá²á·ááá¯á·áá±á¬ áá¬áááºááœáŸááºááŒáá»ááºáá»á¬ážá¡á á¬áž MiraclePtr (raw_ptr) ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº ááœááºááŒá±á¬ááºááŒá®áž ááŸááºáá¬ááºá§áááá¬áá»á¬ážááᯠáááºáá±á¬ááºááŒááºážá¡ááœáẠáá±á¬ááºáááºá á áºáá±ážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±ážááá¯ááºáá«áááºá ááá¯á·áá±á¬áº ááá¯áááºážáááºážáá»á¬ážááẠáá¯ááºá¡áá áºá¡ááœáẠááá¯ááá·áºáá»á±á¬áºááŒá®áž ááŸáááŒá®ážáá¬áž C/C++ ááá±á¬áá»ááºáá»á¬ážááᯠááŒááºáááºáá¯ááºáá±á¬ááºááŒááºážááẠááŒá¿áá¬ááŒá áºááŒá®áž á¡áá°ážáááŒáá·áº áááºážááá¯á·ááᯠááŒáŸá¯ááºááœááºážáá¬ážáá±á¬ á áá áºáá»á¬ážááŸáá·áº Internet of Things á ááºáá á¹á ááºážáá»á¬ážáá²á·ááá¯á·áá±á¬ á¡áááºážá¡ááŒá áº-ááá·áºáááºáá¬ážáá±á¬ áááºáááºážáá»ááºáá»á¬ážááœáẠáá¯ááºáá±á¬ááºááẠáá®ááá¯ááºážááœá²áá¬ážáá»áŸáẠá¡ááœááºááŒá¿áá¬ááŸááááºá
CHERIoT áá¬á·ááºáá²á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠRISC-V áááá¯áá¬áááºáá¬áá±á«áºááœáẠá¡ááŒá±áá¶á ááá¯ááºáááá¯ááœááºáááá¯áá¬á¡ááŒá Ạáá®ááá¯ááºážáá¯ááºáá¬ážááŒá®ážá áá¬ááœááºáá¬ážáá±á¬ CHERI (Capability Hardware Extension to RISC-V) áááá¯áááºáá¬áááá¯áá¬áááá¯áá¬ááᯠ"á áœááºážáááº" á¡áá±á«áºá¡ááŒá±áá¶á ááááºážáá»á¯ááºáá¬ážáá±á¬ ááŸááºáá¬ááºáááºáá±á¬ááºááœáá·áºáá¯á¶á á¶ááᯠáá¶á·ááá¯ážáá±ážááá·áº (áá áºáá¯á á®ááá¯ááºážááẠá á¬áááºááŒááºážááŸáá·áºáá±ážááŒááºáž áááºááá¯áá®ááá¯á· áááºáááºááŸá¯ááᯠááœáá·áºááŒá¯áá¬ážáááºá) CHERioT ááœáẠáá¶á·ááá¯ážáá±ážáá¬ážááá·áº ááœáŸááºááŒá¬ážáá»ááºá¡á á¯á¶áááá¯áᬠ(ISA) ááᯠá¡ááŒá±áá¶á á¡áá¬ááá¹áá¯áá áºáá¯áá»ááºážá á®á¡ááá·áºááœáẠáááºááá¯áá®ááŒáá·áºáá¯ááºáá±á¬ááºááŒááºážááá±ážáááºážááŸá¯ááᯠá¡á¬ááá¶áá±ážááá·áº áá±á¬á·ááºáá²áá±á¬áºáááºáá áºáá¯á¡á¬áž áááºáá±á¬ááºáá¬ážááŒá®ážá ááœááºáá±áá±á¬ááŸááºáá¬ááºááá¯á· áááºáá±á¬ááºááŒááºážá០á¡áá¬á¡ááœááºáá±ážáᬠáá±á«á·áá«ážáá±á¬ ááŸááºáá¬ááºá¡áá¯á¶ážááŒá¯ááœáá·áº áá®ážááŒá¬ážááœá²áá¯ááºááŒááºážá áá áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá±ážáá«áááºá . áááºááŸááºáá¬ážáá±á¬ áá±á¬á·ááºáá²ááºáá¬ááœááºáá±ážáá±á¬áºáááºááᯠC/C++ áá¬áá¬á áá¬ážáá±á¬áºáááºááœáẠááá¯ááºááá¯ááºáá±á¬ááºááŒááºáááºáá¬ážááŒá®ážá ááŸáááŒá®ážáá¬ážá¡ááºááºáá®áá±ážááŸááºážáá»á¬ážááᯠáá¬ááœááºááẠ(ISA CHERIoT áá¶á·ááá¯ážáá±ážááá·áº á ááºáá á¹á ááºážáá»á¬ážááœáẠááŒááºáááºá á¯á ááºážááŒááºážááŸáá·áº áá¯ááºáá±á¬ááºááŒááºážá¡ááœááºáᬠááá¯á¡ááºáááº)á
á¡ááá¯ááŒá¯áá¬ážáá±á¬ ááŒá±ááŸááºážáá»ááºááẠááá·áºá¡á¬áž ááŸááºáá¬ááºá áááºááááááºáá»á¬ážááᯠáá»á±á¬áºááœááºááœá¬ážá á±ááẠá¡áá¬ááá¹áá¯áá áºáá¯á¡á¬áž á¡ááŸá¬ážá¡ááœááºážáá»á¬ážááᯠááááºááá¯á·ááẠááœáá·áºááŒá¯áááºá ááœáŸááºááŸááºá¡á á¬ážááá¯ážááŒááºážááᯠááœáá·áºáááŒá¯áá« (ááœáŸááºááŒáá»ááºá¡á¬ážáá¯á¶ážááᯠáááºááŸáááœáŸááºááŒáá»ááºáá»á¬ážá០áá¯ááºáá±ážááááº)á ááŸáá·áº ááœááºááŒá±á¬ááºááŒá®ážáá±á¬áẠáááºááá¯áá®áááºáá±á¬ááºááœáá·áºááᯠá á±á¬áá·áºááŒáá·áºáá±ážááẠ(ááŸá¬ážááœááºážáá±ááá·áº áááºááá·áºááŸááºáá¬ááºááá¯á·áááᯠáááºáá±á¬ááºááœáá·áºááᯠááŸá¬ážááœááºážáá±áá«áááºá ááœáŸááºááŒááŒááºáž ááá¯á·ááá¯áẠááœááºáá±áá±á¬ á¡áá¬ááá¹áá¯ááᯠáááºááœáŸááºážáá±á¬ ááœáŸááºááŒáá»ááºááẠááŒáœááºážáá»ááºáá áºáá¯á¡á¬áž áá áºáá»ááŒááºáž ááááºáá»á¬áž)á á¥ááá¬á¡á¬ážááŒáá·áºá CHERioT ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááẠááá·áºá¡á¬áž áá¯ááºá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážáááá¯á¡ááºáá² á¡ááá¯á¡áá»á±á¬ááºáááºááááááºá á áºáá±ážááŒááºážá ááŸááºáá¬ááºáá áºáááºáá¬ááŒá±áá¬áá¶ááŒááºážááŸáá·áº áá¯ááºá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážáááá¯á¡ááºáá² ááá¯á¶ááŒááºááá±á¬áá±áá¬áá»á¬ážááᯠááá¯ááºááœááºááá·áº á¡á áááºá¡ááá¯ááºážáá»á¬ážááœáẠááœáŸááºááŸááºááá¯ááºáá¬ááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá¯ááºá á±áá«áááºá
ááá±á¬áá»ááºááœáẠááá¯ážáá»á²á· CHERIoT ááœáŸááºááŒá¬ážáá»ááºá¡á á¯á¶áááá¯áá¬á áááºááŸááºáá»ááºáá áºáá¯á CHERIoT ISA á¡ááœáẠáá¶á·ááá¯ážááŸá¯ááŒáá·áº 32-bit RISC-V CPU á áááºááœáŸááºážá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŸáá·áº ááŒá¯ááŒááºáá¬ážáá±á¬ LLVM áááááá¬á¡á á¯á¶ááá¯á· áá«áááºáááºá Verilog ááŸá CPU ááŸá±á·ááŒá±ážáá¯á¶á ᶠáá¯á¶ááŒááºážáá»á¬ážááŸáá·áº áá¬á·ááºáá²ááááºááá¯á·ááŒááºážáá±á¬áºááŒáá»ááºáá»á¬ážááᯠApache 2.0 ááá¯ááºá ááºá¡á±á¬ááºááœáẠááŒáá·áºáá±áá¬ážáááºá lowRISC ááá±á¬áá»ááºá០Ibex core ááᯠCPU á¡ááœáẠá¡ááŒá±áá¶á¡ááŒá Ạá¡áá¯á¶ážááŒá¯áá²á·áááºá CHERIoT ISA áá¯ááºáá±á¬áºáááºááᯠSail áá¬áá¬á áá¬ážááŒáá·áº áááºááŸááºáá¬ážááŒá®áž BSD ááá¯ááºá ááºá¡á±á¬ááºááœáẠááá¯ááºá ááºááá¬ážáááºá
ááá¯á·á¡ááŒááºá 256 MB RAM ááŸááá±á¬ ááŒáŸá¯ááºááœááºážáá¬ážáá±á¬ á áá áºáá»á¬ážááœááºááẠá¡ááá·áºáá»á¬ážááᯠáá®ážááŒá¬ážááœá²áá¯ááºááá¯ááºá áœááºáž áá±ážááá·áº á¡áá»áááºááŸáá·áºáááŒá±ážáá® áááºáááºá áá ẠCHERIoT RTOS á ááŸá±á·ááŒá±ážáá¯á¶á á¶ááᯠá¡ááá¯ááŒá¯áá¬ážáááºá CHERioT RTOS áá¯ááºááᯠC++ ááŒáá·áº áá±ážáá¬ážáá¬ážááŒá®áž MIT ááá¯ááºá ááºá¡á±á¬ááºááœáẠááŒáá·áºáá±áá¬ážáááºá OS á á¡ááŒá±áá¶á¡á áááºá¡ááá¯ááºážáá»á¬ážááŒá áºááá·áº bootloaderá scheduler ááŸáá·áº memory distribution system ááá¯á·ááᯠcompartments áá¯á¶á á¶ááŒáá·áº áá®ááá¯ááºážáá¯ááºáá¬ážáááºá
CHERIoT RTOS ááŸá ááœááºáááºáá
áºáá¯ááẠáá»áŸáá±áá¬ážáá±á¬ á
á¬ááŒáá·áºááá¯ááºááŸáá·áº áááºáá°ááá·áº ááá¹áá¬áá¯á¶ážááá¯ááºáᬠááááºážááŸááºáá»á¬áž á áá®ážááŒá¬ážáá±á«ááºážá
ááºáá¬ážáá±á¬ áá¯ááºáá
áºáá¯ááŒá
áºááŒá®ážá ááá¯á·áá±á¬áº áá±á¬ááºááá¯ááºážááŸáá·áº ááá°áá²á áááºážááẠáááºážá á¡ááŒá±á¡áá± (áááŒá±á¬ááºážáá²ááá¯ááºáá±á¬) ááᯠááŒá±á¬ááºážáá²ááá¯ááºááŒá®áž áá®ážááŒá¬áž áá¯á¶ááŒá¯á¶áá±áž á¡ááŒá±á¡áá±ááœáẠáá¯ááºáá±á¬ááºááá¯ááºáááºá ááŒááºáááŸáá¯ááºááẠá¡ááá·áºáá
áºáá¯ááŸá áá¯ááºááá¯á· ááááºážáá»á¯ááºááŸá¯ááŸáá·áº á¡áá¬ááá¹áá¯áá»á¬ážááᯠáááºáá±á¬ááºá¡áá¯á¶ážááŒá¯ááŒááºážááŸááœá²á á¡ááŒá¬ážá¡áááºážáá
áºáá¯ááá¯á· ááœáŸááºááŒáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááœáŸááºááŒáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº ááááºážáá»á¯ááºááŸá¯á¡á¬áž á¡ááá·áºáá
áºáá¯á¡ááœááºážá០áá¯ááºááá¯á· ááœáŸá²ááŒá±á¬ááºážááá¯ááºáááºááá¯ááºáá±á á¡ááœááºáá
áºáá¯ááŸá áá¯ááºááŸáá·áº ááá¹áá¬áá¯á¶ážááá¯ááºáᬠá¡áá¬ááá¹áá¯áá»á¬ážá¡ááœáẠááá¬ááááŸáá·áº áá»áŸáá¯á·ááŸááºáá¬ážááŸá¯ááᯠá¡á¬ááá¶áá«áááºá
source: opennet.ru