{"id":500211,"date":"2026-10-25T19:52:32","date_gmt":"2026-10-25T16:52:32","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=500211"},"modified":"2026-10-25T19:52:32","modified_gmt":"2026-10-25T16:52:32","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=500211","title":{"rendered":"CactOS 2.0.0: \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 x86_32"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h3>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h3>\n<p>CactOS \u2014 \u0445\u043e\u0431\u0431\u0438-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f i686. \u042f\u0434\u0440\u043e \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0435: \u043d\u0438\u0437\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430 C \u0438 NASM, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Rust \u2014 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 (<code>cact_mm<\/code>), \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a MLFQ (<code>sched<\/code>), \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (<code>cact_sync<\/code>), \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a (<code>cact_net<\/code> \u043d\u0430 smoltcp), TLS 1.3 (<code>rustls<\/code> \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u043f\u0442\u043e\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c <code>cact_crypto<\/code>) \u0438 \u044f\u0434\u0440\u043e VFS (<code>cact_vfs<\/code>).<\/p>\n<p>\u0412\u043e\u043a\u0440\u0443\u0433 \u044f\u0434\u0440\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 userspace: \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f libc (<code>CactLibc<\/code>), \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0448\u0435\u043b\u043b <code>cactsole<\/code> \u0441 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430\u043c\u0438 \u0438 job control, \u0441\u0443\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 <code>cgoct<\/code> \u0432 \u0440\u043e\u043b\u0438 PID 1, \u043e\u043a\u043e\u043b\u043e 84 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442, \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 <code>cactpkg<\/code>. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432 2.0.0 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 modeset: \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 3.0.0.<\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u044f\u0434\u0440\u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e. \u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 ABI \u0438\u0437 15 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 ioctl-\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0432 <code>ioctl_abi.h<\/code>. \u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0438\u0437 \u044f\u0434\u0440\u0430 \u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 <code>.cctk<\/code>, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u0435 ELF \u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 userspace-\u0434\u0435\u043c\u043e\u043d\u044b: <code>logd<\/code>, <code>devd<\/code>, <code>netd<\/code>, <code>powerd<\/code>, <code>resolved<\/code>, <code>seatd<\/code>, <code>audiod<\/code>. \u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f: \u0447\u0438\u043d\u0438\u0442\u044c userspace, \u0430 \u043d\u0435 \u0440\u0430\u0441\u0442\u0438\u0442\u044c \u044f\u0434\u0440\u043e.<\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e 1.0.0: \u0442\u043e\u0433\u0434\u0430 \u0431\u044b\u043b\u043e 95 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0412 2.0.0 \u0438\u0445 15 \u2014 \u043d\u0435 \u0440\u0435\u0433\u0440\u0435\u0441\u0441, \u0430 \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0434\u0432\u0438\u0433 ABI. \u0412\u0441\u0451, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u0441\u043a\u043e\u043b\u043b\u043e\u043c, \u0442\u0435\u043f\u0435\u0440\u044c ioctl \u043d\u0430 VFS-\u0443\u0437\u043b\u0435: <code>open()<\/code> \u0443\u0437\u043b\u0430 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430.<\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 2.0.0 \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 x86_32<\/h3>\n<p>2.0.0 \u2014 \u043d\u0435 \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u0438 \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043b\u0433\u0430, \u0447\u0442\u043e\u0431\u044b 3.0.0 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043b\u0438\u0441\u0442\u0430 \u0443\u0436\u0435 \u043d\u0430 64 \u0431\u0438\u0442\u0430\u0445. \u041f\u043b\u0430\u043d \u0431\u044b\u043b \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u044b, \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u041e\u0421: \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043e \u0442\u0435\u0433\u0430, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435. \u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u044f \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0451\u0441 \u0432 3.0.0. \u041f\u043e\u0441\u043b\u0435 \u0442\u0435\u0433\u0430 <code>v2.0.0<\/code> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 x86_32 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0430\u0440\u0445\u0438\u0432 \u2014 \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 64-\u0431\u0438\u0442\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 32 \u0431\u0438\u0442 \u2014 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u042f\u0434\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 PAE \u0438 \u043c\u043e\u0436\u0435\u0442 \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0430 \u043d\u0438\u0436\u0435 PCI-\u0434\u044b\u0440\u044b. \u0412 QEMU \u0441 <code>-M q35<\/code> \u043f\u0440\u0438 4 \u0413\u0438\u0411 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0434\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 2 \u0413\u0438\u0411, \u0441 <code>-M pc<\/code> \u2014 \u043e\u043a\u043e\u043b\u043e 3 \u0413\u0438\u0411, \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u2014 \u043e\u043a\u043e\u043b\u043e 2,05 \u0413\u0438\u0411. \u042d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u044f\u0434\u0440\u0430: PMM \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435 \u043a\u0430\u0434\u0440\u044b \u043d\u0438\u0436\u0435 \u0434\u044b\u0440\u044b, \u0430 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 4 \u0413\u0438\u0411, \u043a\u0443\u0434\u0430 32-\u0431\u0438\u0442\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0435 \u0434\u043e\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u044d\u0442\u0430\u043f\u043e\u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 RAM\/MMIO \u0441\u0442\u0430\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0439 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438\u0437 \u043a\u0430\u0440\u0442\u044b Multiboot2 (<code>pmm::ram_end()<\/code>), \u0430 \u043d\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0438 \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\/\u044f\u0434\u0440\u043e. \u0420\u0430\u043d\u044c\u0448\u0435 \u043e\u0434\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043b\u043a\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 MMIO \u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 VA \u2014 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u044b\u0440\u043e\u0439 \u044d\u0442\u043e \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043e\u0442\u043d\u0438\u043c\u0430\u043b\u043e \u043f\u043e\u043b\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430. \u042d\u0442\u043e \u0436\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 64 \u0431\u0438\u0442\u0430 \u2014 \u043d\u0435 \u043f\u0440\u043e \u00ab\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438\u00bb, \u0430 \u043f\u0440\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0446\u0435\u043b\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 32 \u0431\u0438\u0442\u0430\u0445 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<h3>\u0426\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c: \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e \u0442\u0435\u0433\u0430<\/h3>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a ELF, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 PTE \u0432 \u043e\u0431\u0449\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u044f\u0434\u0440\u0430. <code>vmm_map()<\/code> \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u043b \u043b\u044e\u0431\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432\u044b\u0448\u0435 <code>PCI_HOLE_START<\/code> \u043a\u0430\u043a MMIO \u0438 \u043f\u0438\u0441\u0430\u043b PTE \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u044f\u0434\u0440\u0430, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044f <code>PAGE_USER | PAGE_RW<\/code>. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e ELF, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442 <code>PT_LOAD<\/code> \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u044f\u0434\u0440\u043e\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u2014 \u0438 writable-\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043b\u043e\u0436\u0438\u043b\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 APIC, ACPI-\u043e\u043a\u043d\u0430 \u0438 PCIe ECAM \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.<\/p>\n<p>\u042f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b \u044d\u0442\u043e \u0432 \u0434\u0432\u0430 \u0441\u043b\u043e\u044f: \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u0432\u0435\u0440\u0433\u0430\u0435\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u043d\u0435 <code>[USER_SPACE_START, USER_STACK_TOP]<\/code>, \u0430 <code>vmm_map()<\/code> \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e \u0441\u043d\u0438\u043c\u0430\u0435\u0442 <code>PAGE_USER<\/code> \u0434\u043b\u044f kernel-half, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u044d\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2014 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 ELF-\u043b\u043e\u0430\u0434\u0435\u0440\u0435.<\/p>\n<p>\u0422\u0430\u043c \u0436\u0435 \u044f \u0437\u0430\u043a\u0440\u044b\u043b <code>MAP_FIXED<\/code> \u0431\u0435\u0437 \u043d\u0438\u0436\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 mmap-\u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432, \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 LBA \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u043c \u043a\u044d\u0448\u0435 \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0440\u043e\u0441\u0442\u0430 brk \u0432 <code>USER_BRK_MAX_GROWTH<\/code> \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f: brk \u0440\u0430\u0441\u0442\u0451\u0442 \u0431\u0435\u0437 demand paging, \u0438 \u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u0441 mmap \u043d\u0435\u043b\u044c\u0437\u044f.<\/p>\n<h3>\u041f\u043e\u0434\u043f\u0438\u0441\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439: \u0441 HMAC \u043d\u0430 ECDSA<\/h3>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 <code>.cctk<\/code>-\u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c HMAC-SHA256 \u043a\u043b\u044e\u0447\u043e\u043c, \u0437\u0430\u0448\u0438\u0442\u044b\u043c \u0432 \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437: \u0438\u0437\u0432\u043b\u0451\u043a \u2014 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u0412 2.0.0 \u044f \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043d\u0430 \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u044c ECDSA P-256: \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0449\u0438\u0439 \u0445\u043e\u0441\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c, \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c (verify-only ABI <code>cact_sig_verify_p256_raw<\/code>).<\/p>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u0430: ELF, \u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0433\u0438\u044f <code>CMOD<\/code>, \u0437\u0430\u0442\u0435\u043c 4 \u0431\u0430\u0439\u0442\u0430 vermagic \u0438 64-\u0431\u0430\u0439\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u044c <code>r||s<\/code>, \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f ELF \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 <code>mod_tag_verify()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 PCI, USB \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f ABI-\u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a vermagic \u2014 FNV-1a \u043f\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u044f\u0434\u0440\u0430; \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0447\u0443\u0436\u0438\u043c vermagic \u043e\u0442\u0432\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u043a: \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0438 \u043e\u0431\u0430 \u0440\u0430\u0437\u0430 \u00ab\u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438\u00bb virtio-gpu, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 <code>.cctk<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0434\u0438\u043d \u2014 <code>drivers.list<\/code>, \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440, \u0438 <code>build.py<\/code> \u0447\u0438\u0442\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e. \u0412 \u043e\u0431\u0440\u0430\u0437\u0435 2.0.0 \u2014 10 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 <code>.cctk<\/code>.<\/p>\n<h3>VFS \u043d\u0430 Rust<\/h3>\n<p>\u0421\u0430\u043c\u0430\u044f \u043e\u0431\u044a\u0451\u043c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 2.0.0 \u2014 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 VFS \u043d\u0430 Rust. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u0434\u043d\u044f\u0442\u044c VFS \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f Linux, \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0432 UNIX-\u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044e. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445: <code>super_block<\/code>, <code>inode<\/code>, <code>dentry<\/code> \u0441 dcache, <code>vfsmount<\/code> \u0441 \u0434\u0435\u0440\u0435\u0432\u043e\u043c \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 <code>file<\/code>. \u041f\u043e \u0448\u0430\u0433\u0430\u043c: dentry\/dcache, inode\/superblock, \u043f\u043e\u043b\u043d\u044b\u0439 <code>stat<\/code>\/<code>statx<\/code>\/<code>statfs<\/code> \u0441 <code>d_type<\/code>, \u043a\u044d\u0448 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0443\u0440\u043e\u0432\u043d\u044f inode (<code>address_space<\/code>), \u043e\u0431\u0449\u0438\u0439 \u0434\u043b\u044f <code>read<\/code>\/<code>write<\/code> \u0438 <code>mmap<\/code>, \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 cross-directory <code>rename<\/code>.<\/p>\n<p>\u041f\u0430\u0439\u043f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0432 Rust: \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 <code>schedule()<\/code>, <code>-EAGAIN<\/code> \u0434\u043b\u044f \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430, <code>SIGPIPE<\/code> \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044e. \u041f\u043e\u043f\u0443\u0442\u043d\u043e \u044f \u0432\u044b\u043b\u043e\u0432\u0438\u043b \u0441\u0442\u0430\u0440\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0443\u0447\u0451\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0439 \u2014 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439\/\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u0434\u043e \u043d\u0443\u043b\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>EOF<\/code> \u0438 <code>EPIPE<\/code> \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438, \u0430 <code>pipe_t<\/code> \u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 \u0442\u0435\u043a\u043b\u0438. \u0422\u0435\u043f\u0435\u0440\u044c <code>open<\/code>\/<code>close<\/code> \u0432\u043b\u0430\u0434\u0435\u044e\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u0430 refcount \u0443\u0437\u043b\u0430 \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0439.<\/p>\n<h3>cactsole: \u0448\u0435\u043b\u043b, \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b \u0438 job control<\/h3>\n<p><code>cactsole<\/code> \u2014 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0448\u0435\u043b\u043b \u0432 userspace. Job control \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e POSIX-\u043c\u043e\u0434\u0435\u043b\u0438. \u041b\u043e\u0433 \u0441\u0435\u0441\u0441\u0438\u0438: <\/p>\n<pre><code class=\"markdown\">cact:\/$ sleep 30^Z[1]+ Stopped  sleep 30cact:\/$ jobs[1] stopped  sleep 30cact:\/$ bg 1cact:\/$ jobs[1] running  sleep 30cact:\/$ fg 1^Ccact:\/$ jobscact:\/$<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<p><code>Ctrl+Z<\/code> \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443, <code>jobs<\/code> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, <code>bg 1<\/code>\/<code>fg 1<\/code> \u043c\u0435\u043d\u044f\u044e\u0442 \u0435\u0433\u043e, <code>Ctrl+C<\/code> \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 <code>jobs<\/code> \u2014 \u043f\u0443\u0441\u0442. \u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442:<\/p>\n<pre><code class=\"markdown\">cact:\/$ ls \/usr\/lib\/modules | grep -F .cctk | wc -l      10<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0422\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 10 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 <code>.cctk<\/code> \u0432 \u043e\u0431\u0440\u0430\u0437\u0435.<\/p>\n<h3>\u0421\u0435\u0442\u044c \u0438 TLS<\/h3>\n<p>\u0412\u0435\u0441\u044c L3+ \u2014 \u043d\u0430 Rust. Ethernet-\u0434\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u043e\u0440, ARP, IPv4, ICMP, TCP\/UDP-\u0441\u043e\u043a\u0435\u0442\u044b \u0438 DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 smoltcp, TLS 1.3 \u2014 \u043d\u0430 vendored rustls \u0441 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0438\u0437 <code>cact_crypto<\/code>. DHCP-\u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 \u044f\u0434\u0440\u0435 \u043d\u0435\u0442: IPv4-\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0440\u0435\u0448\u0430\u0435\u0442 userspace \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0435\u0451 \u0432 \u044f\u0434\u0440\u043e \u0447\u0435\u0440\u0435\u0437 <code>\/dev\/net<\/code>. DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u043c\u043e\u043d. \u041b\u043e\u0433:<\/p>\n<pre><code class=\"markdown\">cact:\/$ dhcpd &amp;[1] 34dhcpd: link up, mac=52:54:00:12:34:56dhcpd: discover #1 (xid=a0809ff2)dhcpd: offer ip=10.0.2.15 server=10.0.2.2dhcpd: request #1dhcpd: lease ip=10.0.2.15 mask=255.255.255.0 gw=10.0.2.2 dns=10.0.2.3 server=10.0.2.2 lease=86400s t1=43200s t2=75600scact:\/$ resolved &amp;[2] 35resolved: startingresolved: listening on \/run\/resolved.sock<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 DORA-\u0446\u0438\u043a\u043b, lease \u0441 T1\/T2, \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u0441\u043e\u043a\u0435\u0442 \u0432 <code>\/run<\/code>. ICMP \u043d\u0430 smoltcp:<\/p>\n<pre><code class=\"markdown\">cact:\/$ ping -c 3 8.8.8.8PING 8.8.8.8 (8.8.8.8): 56 data bytes64 bytes from 8.8.8.8: icmp_seq=1 time=102.735 ms64 bytes from 8.8.8.8: icmp_seq=2 time=181.496 ms64 bytes from 8.8.8.8: icmp_seq=3 time=78.162 ms--- 8.8.8.8 ping statistics ---3 packets transmitted, 3 received, 0% packet loss<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>RTT \u0432 QEMU user-net (SLIRP) \u2014 \u0434\u0435\u0441\u044f\u0442\u043a\u0438-\u0441\u043e\u0442\u043d\u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u044d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>HTTPS:<\/p>\n<pre><code>cact:\/$ wget https:\/\/google.com -O \/tmp\/x &amp;&amp; cat \/tmp\/xwget: 301 redirect -&gt; https:\/\/www.google.com\/\/tmp\/x             86.8 KiBwget: HTTP 200, 88932 bytes -&gt; \/tmp\/x&lt;!doctype html&gt;&lt;html itemscope=\"\" itemtype=\"http:\/\/schema.org\/WebPage\" lang=\"ru\"&gt;...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>301-\u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d, TLS-\u0441\u0435\u0441\u0441\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c, \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d \u043f\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 CA-\u0431\u0430\u043d\u0434\u043b\u0443, \u0441\u043a\u0430\u0447\u0430\u043d\u043e 86.8 KiB \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e HTML. \u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0438 \u0440\u0430\u0434\u0438\u0443\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f TLS \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e: TLS \u0436\u0438\u0432\u0451\u0442 \u0432 libc, \u043a\u043b\u044e\u0447\u0438 \u2014 \u0432 userspace, \u0432 \u044f\u0434\u0440\u043e \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442.<\/p>\n<h3>SMP \u0438 \u044d\u043d\u0435\u0440\u0433\u043e\u0433\u043evernor<\/h3>\n<p>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u044b\u0439 SMP. Bring-up \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u044f\u0434\u0440\u0430, \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 energy-\u0433\u0443\u0431\u0435\u0440\u043d\u0430\u0442\u043e\u0440: \u043c\u0430\u0441\u0442\u0435\u0440-\u044f\u0434\u0440\u043e (<code>cpu0<\/code>) \u0448\u043b\u0451\u0442 \u043f\u043e IPI \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>HALT<\/code> \u0438 <code>WAKEUP<\/code>, \u0443\u0440\u043e\u0432\u0435\u043d\u044c MLFQ \u0437\u0430\u0434\u0430\u0451\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u043b\u0443\u0431\u0438\u043d\u0443 C-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0412\u0441\u0435 \u044f\u0434\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 worker-\u043a\u043e\u0434, \u043e\u0442\u043b\u0438\u0447\u0430\u044f\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u043e\u0439. <code>cpu0<\/code> \u2014 \u043d\u0435 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440, \u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0441 \u043e\u0434\u043d\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c: \u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043b\u0443\u0431\u0436\u0435 C1.<\/p>\n<p>\u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u044d\u0442\u0430\u043f\u043e\u0432 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b CPUID-\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044e (leaf <code>0xB<\/code>\/<code>0x1F<\/code>): package id, core id, siblings \u0432 <code>\/proc\/cpuinfo<\/code>, sibling-aware \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438. \u0423\u0431\u0440\u0430\u043b kill switch, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u043b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u0438\u043d\u0433 \u044f\u0434\u0440\u0430.<\/p>\n<p><code>\/proc\/cpuinfo<\/code> \u0432 QEMU:<\/p>\n<pre><code>processor       : 0apicid          : 0physical id     : 0siblings        : 4core id         : 0cpu cores       : 4model name      : 11th Gen Intel(R) Core(TM) i5-11400F @ 2.60GHzrole            : mastercstate          : C1online          : yesidle            : yes...processor       : 2...role            : workercstate          : C0online          : yesidle            : no<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u0438\u0434\u043d\u043e governor \u0432 \u0440\u0430\u0431\u043e\u0442\u0435: \u044f\u0434\u0440\u0430 0\u20131 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u044e\u0442 \u0432 C1, \u044f\u0434\u0440\u0430 2\u20133 \u0437\u0430\u043d\u044f\u0442\u044b \u0432 C0. <code>cpu0<\/code> \u2014 master, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 worker. \u0427\u0430\u0441\u0442\u043e\u0442\u0430 1555 MHz \u2014 \u0442\u043e, \u0447\u0442\u043e \u043e\u0442\u0434\u0430\u0451\u0442 QEMU; \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u043e\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f, \u0430 \u0444\u043b\u0430\u0433 <code>hypervisor<\/code> \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 CPU-\u0444\u043b\u0430\u0433\u043e\u0432 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<h3>S3: \u043f\u043e\u0447\u0435\u043c\u0443 suspend \u0432\u044b\u0440\u0435\u0437\u0430\u043d \u0432 2.0.0<\/h3>\n<p>\u042d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u043e\u0449\u0443\u0442\u0438\u043c\u0430\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0440\u0435\u043b\u0438\u0437\u0430. Suspend \u043d\u0435 \u043e\u0442\u043b\u043e\u0436\u0435\u043d \u2014 \u0432\u044b\u0440\u0435\u0437\u0430\u043d. \u041f\u0440\u0438\u0447\u0438\u043d\u0430: resume \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u0435\u043d.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043d\u0430\u0448\u0451\u043b \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0432\u0435\u0449\u044c: \u043f\u0443\u0442\u044c resume \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0443 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f\u0434\u0440\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u0441\u043b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0440\u043e\u0441\u0430. <code>pr_notice()<\/code> \u043f\u0435\u0447\u0430\u0442\u0430\u043b \u0447\u0435\u0440\u0435\u0437 FB-\u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0430 <code>fb_flush()<\/code> \u0434\u0435\u043b\u0430\u043b \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 <code>memcpy<\/code> (\u0441\u043e\u0442\u043d\u0438 \u0441\u0442\u0440\u043e\u043a, \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u044b) \u0432 MMIO-\u0440\u0435\u0433\u0438\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d \u2014 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u043b\u0438. \u041e\u0434\u0438\u043d\u043e\u0447\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u044b\u043b \u043d\u0435 <code>#PF<\/code>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e bulk-\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043d\u0435\u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u041d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u00ab\u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043c\u0438\u0433\u0430\u0435\u0442, \u044d\u043a\u0440\u0430\u043d \u043d\u0435 \u0437\u0430\u0433\u043e\u0440\u0430\u0435\u0442\u0441\u044f, \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f\u00bb.<\/p>\n<p>\u042f \u043f\u043e\u0447\u0438\u043d\u0438\u043b \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 serial-only \u043d\u0430 \u0432\u0440\u0435\u043c\u044f resume. \u041d\u043e \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0433\u043e\u043d\u043a\u0430 re-wake AP (<code>smp_resume_rewake<\/code>) \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0436\u0430\u044e\u0449\u0438\u0439\u0441\u044f <code>#PF<\/code> \u0432 userspace \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u043d\u0438\u044f. \u041b\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u043b\u0435\u043f\u0443\u044e \u043d\u0430 \u0436\u0438\u0432\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 WIP \u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u043d\u0430 \u0432\u0435\u0442\u043a\u0435 <code>s3-wip<\/code>, \u0430 \u0438\u0437 2.0.0 suspend \u0443\u0431\u0440\u0430\u043b. <code>poweroff<\/code>, <code>reboot<\/code> \u0438 <code>halt<\/code> \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c. \u0412\u0435\u0440\u043d\u0443\u0442\u044c S3 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 3.0.0 \u2014 \u0441 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c re-modeset \u0434\u0438\u0441\u043f\u043b\u0435\u044f \u0438 \u0431\u0435\u0437 \u0433\u043e\u043d\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u043d\u0438\u0438.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f<\/h3>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u2014 verification is a QEMU boot. \u041a \u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0434\u0432\u0435 \u0432\u0435\u0449\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u2014 \u0445\u043e\u0441\u0442\u043e\u0432\u044b\u0435 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b: \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 cargo-test-\u043a\u0440\u0435\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 <code>#[path]<\/code> \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u044f\u0434\u0440\u0430 (\u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 PMM, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 MLFQ, \u044d\u043d\u0435\u0440\u0433\u043e\u043c\u043e\u0434\u0435\u043b\u044c, \u0445\u0435\u043b\u043f\u0435\u0440\u044b VFS, CPUID-\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435) \u2014 58 \u0442\u0435\u0441\u0442\u043e\u0432, \u0434\u0440\u0435\u0439\u0444 \u043e\u0442 \u043a\u043e\u043f\u0438\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u2014 \u0435\u0434\u0438\u043d\u0430\u044f headless-\u0446\u0435\u043b\u044c: <code>ninja -C build-meson check<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 <code>cact_check.sh<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 ISO \u0431\u0435\u0437 \u0434\u0438\u0441\u043f\u043b\u0435\u044f, \u0447\u0438\u0442\u0430\u0435\u0442 COM1, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u044f\u0434\u0440\u0430 (csprng, energy, timer, placement, self-test \u043f\u043e\u0434\u043f\u0438\u0441\u0438 sigmagic) \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0435 vermagic, \u0438 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043f\u0440\u0438 \u043b\u044e\u0431\u043e\u043c \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438. \u0411\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u0430 \u2014 CI-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e.<\/p>\n<h3>QEMU \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f \u2014 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0436\u0435\u043b\u0435\u0437\u043e<\/h3>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u043e\u043c \u0431\u044b\u043b Q <strong>\u0413\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 EDID.<\/strong> Intel i915 (UHD Graphics) \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a out-of-tree \u043c\u043e\u0434\u0443\u043b\u044c, EDID \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 GMBUS\/DDC. \u0411\u044b\u043b\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438: \u043d\u0430 i3-8100 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u043e\u0441\u044c \u043a\u0430\u043a \u00ab1920&#215;44\u00bb \u0432\u043c\u0435\u0441\u0442\u043e 1920&#215;1080. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0438\u0441\u043a\u0430\u043b \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u043f\u0430\u0440\u0441\u0435\u0440\u0435 EDID, \u043d\u043e \u00ab44\u00bb \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c hsync-width, \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u043d\u0435 \u043e\u0442\u0442\u0443\u0434\u0430. \u041a\u043e\u0440\u0435\u043d\u044c \u0431\u044b\u043b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c: \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u043b\u0435\u0436\u0430\u043b \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 <code>i915.cctk<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e Intel-GPU \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u0435\u0433\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0430. \u0420\u043e\u0432\u043d\u043e \u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430, \u0440\u0430\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <code>drivers.list<\/code>. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u044b\u043b\u0430 \u043d\u0435 \u0432 \u044f\u0434\u0440\u0435, \u0430 \u0432 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>\u041d\u0430 \u0436\u0435\u043b\u0435\u0437\u0435 <code>poweroff<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442; \u0432 QEMU \u2014 \u043d\u0435\u0442. S3 \u0432\u044b\u0440\u0435\u0437\u0430\u043d \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<h3>\u0427\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u00ab\u0430\u0440\u0445\u0438\u0432\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430\u00bb<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u0435\u0433\u0430 <code>v2.0.0<\/code> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 x86_32 \u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0412\u0441\u0451, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043e \u043a\u0430\u043a \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0432 3.0.0: \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 S3, order-N\/\u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440, WC-\u043c\u0430\u043f\u043f\u0438\u043d\u0433\u0438, firmware-\u043b\u043e\u0430\u0434\u0435\u0440 \u0441 workqueue, workqueue\/tasklet\/threaded IRQ, DMA-buf \u0438 dma-fence, \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 DRM property\/blob, ACPI OpRegion \u0438 VBT, GMBUS\/DDC \u0438 \u043f\u0430\u0440\u0441\u0435\u0440 EDID, \u0440\u0435\u043d\u0434\u0435\u0440-\u0434\u0432\u0438\u0436\u043e\u043a i915, \u0444\u0430\u0439\u043b\u044b \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0435 4 \u0413\u0438\u0411, IPv6 \u0438 \u0441\u043d\u044f\u0442\u0438\u0435 3-\u0433\u0438\u0433\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043b\u043a\u0430 PMM. \u0427\u0430\u0441\u0442\u044c \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u2014 \u043f\u0440\u044f\u043c\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 32 \u0431\u0438\u0442, \u0447\u0430\u0441\u0442\u044c \u2014 \u0434\u043e\u043b\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0435\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0435.<\/p>\n<p>3.0.0 \u043d\u0430 64 \u0431\u0438\u0442\u0430\u0445 \u2014 \u043d\u0435 \u00ab\u0442\u0430 \u0436\u0435 \u041e\u0421, \u043d\u043e \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e\u00bb. PAE \u0438 highmem \u0434\u043b\u044f 4 \u0413\u0438\u0411 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. 64 \u0431\u0438\u0442\u0430 \u043d\u0443\u0436\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u043f\u043e\u0442\u043e\u043b\u043a\u0430: \u0432\u043e\u043a\u0440\u0443\u0433 \u044f\u0434\u0440\u0430 \u0431\u0435\u0437 PAE, \u0432\u043e\u043a\u0440\u0443\u0433 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u0432, \u043d\u0430\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u0440\u043e\u043a\u0430 \u043b\u0435\u0442. 32-\u0431\u0438\u0442\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u0433\u043e\u043c; \u0434\u0430\u043b\u044c\u0448\u0435 \u2014 3.0.0, 64 \u0431\u0438\u0442\u0430 \u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c suspend, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0443 \u0432 \u043a\u0438\u0440\u043f\u0438\u0447.<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1099176\/\">https:\/\/habr.com\/ru\/articles\/1099176\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435CactOS \u2014 \u0445\u043e\u0431\u0431\u0438-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f i686. \u042f\u0434\u0440\u043e \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0435: \u043d\u0438\u0437\u043a\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430 C \u0438 NASM, \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d\u044b \u043d\u0430 Rust \u2014 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 (cact_mm), \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a MLFQ (sched), \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 (cact_sync), \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a (cact_net \u043d\u0430 smoltcp), TLS 1.3 (rustls \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u043f\u0442\u043e\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c cact_crypto) \u0438 \u044f\u0434\u0440\u043e VFS (cact_vfs).\u0412\u043e\u043a\u0440\u0443\u0433 \u044f\u0434\u0440\u0430 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 userspace: \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f libc (CactLibc), \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0448\u0435\u043b\u043b cactsole \u0441 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430\u043c\u0438 \u0438 job control, \u0441\u0443\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440 cgoct \u0432 \u0440\u043e\u043b\u0438 PID 1, \u043e\u043a\u043e\u043b\u043e 84 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442, \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 cactpkg. \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0432 2.0.0 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 modeset: \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u2014 \u0437\u0430\u0434\u0430\u0447\u0430 3.0.0.\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u2014 \u044f\u0434\u0440\u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e. \u0424\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 ABI \u0438\u0437 15 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 ioctl-\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b \u0432 ioctl_abi.h. \u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0438\u0437 \u044f\u0434\u0440\u0430 \u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 .cctk, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c\u044b\u0435 ELF \u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043d\u0430 \u043b\u0435\u0442\u0443. \u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u2014 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 userspace-\u0434\u0435\u043c\u043e\u043d\u044b: logd, devd, netd, powerd, resolved, seatd, audiod. \u041e\u0442\u0441\u044e\u0434\u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f: \u0447\u0438\u043d\u0438\u0442\u044c userspace, \u0430 \u043d\u0435 \u0440\u0430\u0441\u0442\u0438\u0442\u044c \u044f\u0434\u0440\u043e.\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0447\u0438\u0442\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u0440\u043e 1.0.0: \u0442\u043e\u0433\u0434\u0430 \u0431\u044b\u043b\u043e 95 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0412 2.0.0 \u0438\u0445 15 \u2014 \u043d\u0435 \u0440\u0435\u0433\u0440\u0435\u0441\u0441, \u0430 \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0434\u0432\u0438\u0433 ABI. \u0412\u0441\u0451, \u0447\u0442\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0441\u0438\u0441\u043a\u043e\u043b\u043b\u043e\u043c, \u0442\u0435\u043f\u0435\u0440\u044c ioctl \u043d\u0430 VFS-\u0443\u0437\u043b\u0435: open() \u0443\u0437\u043b\u0430 \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430.\u041f\u043e\u0447\u0435\u043c\u0443 2.0.0 \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 x86_322.0.0 \u2014 \u043d\u0435 \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437, \u0438 \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u043b\u0433\u0430, \u0447\u0442\u043e\u0431\u044b 3.0.0 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0447\u0430\u0442\u044c \u0441 \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043b\u0438\u0441\u0442\u0430 \u0443\u0436\u0435 \u043d\u0430 64 \u0431\u0438\u0442\u0430\u0445. \u041f\u043b\u0430\u043d \u0431\u044b\u043b \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u044b, \u043a\u0430\u043a \u0432 \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u041e\u0421: \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043e \u0442\u0435\u0433\u0430, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435. \u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u044f \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0451\u0441 \u0432 3.0.0. \u041f\u043e\u0441\u043b\u0435 \u0442\u0435\u0433\u0430 v2.0.0 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 x86_32 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0430\u0440\u0445\u0438\u0432 \u2014 \u0434\u0430\u043b\u044c\u0448\u0435 \u0442\u043e\u043b\u044c\u043a\u043e 64-\u0431\u0438\u0442\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 32 \u0431\u0438\u0442 \u2014 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u042f\u0434\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 PAE \u0438 \u043c\u043e\u0436\u0435\u0442 \u0430\u0434\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0430 \u043d\u0438\u0436\u0435 PCI-\u0434\u044b\u0440\u044b. \u0412 QEMU \u0441 -M q35 \u043f\u0440\u0438 4 \u0413\u0438\u0411 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u0438\u0434\u0438\u0442 \u043e\u043a\u043e\u043b\u043e 2 \u0413\u0438\u0411, \u0441 -M pc \u2014 \u043e\u043a\u043e\u043b\u043e 3 \u0413\u0438\u0411, \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 \u2014 \u043e\u043a\u043e\u043b\u043e 2,05 \u0413\u0438\u0411. \u042d\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u044f\u0434\u0440\u0430: PMM \u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435 \u043a\u0430\u0434\u0440\u044b \u043d\u0438\u0436\u0435 \u0434\u044b\u0440\u044b, \u0430 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0448\u0435 4 \u0413\u0438\u0411, \u043a\u0443\u0434\u0430 32-\u0431\u0438\u0442\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0435 \u0434\u043e\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f.\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u044d\u0442\u0430\u043f\u043e\u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 RAM\/MMIO \u0441\u0442\u0430\u043b\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u043e\u0439 \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0438\u0437 \u043a\u0430\u0440\u0442\u044b Multiboot2 (pmm::ram_end()), \u0430 \u043d\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0438 \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\/\u044f\u0434\u0440\u043e. \u0420\u0430\u043d\u044c\u0448\u0435 \u043e\u0434\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0431\u044b\u043b\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043b\u043a\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 MMIO \u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 VA \u2014 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u044b\u0440\u043e\u0439 \u044d\u0442\u043e \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043e\u0442\u043d\u0438\u043c\u0430\u043b\u043e \u043f\u043e\u043b\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430. \u042d\u0442\u043e \u0436\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u043f\u043e\u0447\u0435\u043c\u0443 64 \u0431\u0438\u0442\u0430 \u2014 \u043d\u0435 \u043f\u0440\u043e \u00ab\u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438\u00bb, \u0430 \u043f\u0440\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442 \u0446\u0435\u043b\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0437\u0430\u0434\u0430\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 32 \u0431\u0438\u0442\u0430\u0445 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.\u0426\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c: \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e \u0442\u0435\u0433\u0430\u0421\u0430\u043c\u044b\u0439 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a ELF, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 PTE \u0432 \u043e\u0431\u0449\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u044f\u0434\u0440\u0430. vmm_map() \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u043b \u043b\u044e\u0431\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432\u044b\u0448\u0435 PCI_HOLE_START \u043a\u0430\u043a MMIO \u0438 \u043f\u0438\u0441\u0430\u043b PTE \u043f\u0440\u044f\u043c\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u044f\u0434\u0440\u0430, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044f PAGE_USER | PAGE_RW. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e ELF, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442 PT_LOAD \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u044f\u0434\u0440\u043e\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u2014 \u0438 writable-\u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043b\u043e\u0436\u0438\u043b\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 APIC, ACPI-\u043e\u043a\u043d\u0430 \u0438 PCIe ECAM \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 \u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.\u042f \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b \u044d\u0442\u043e \u0432 \u0434\u0432\u0430 \u0441\u043b\u043e\u044f: \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u0432\u0435\u0440\u0433\u0430\u0435\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0432\u043d\u0435 [USER_SPACE_START, USER_STACK_TOP], \u0430 vmm_map() \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e \u0441\u043d\u0438\u043c\u0430\u0435\u0442 PAGE_USER \u0434\u043b\u044f kernel-half, \u0447\u0442\u043e\u0431\u044b \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u044c \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u044d\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u2014 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 ELF-\u043b\u043e\u0430\u0434\u0435\u0440\u0435.\u0422\u0430\u043c \u0436\u0435 \u044f \u0437\u0430\u043a\u0440\u044b\u043b MAP_FIXED \u0431\u0435\u0437 \u043d\u0438\u0436\u043d\u0435\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 mmap-\u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432, \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 LBA \u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u043c \u043a\u044d\u0448\u0435 \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043b \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0440\u043e\u0441\u0442\u0430 brk \u0432 USER_BRK_MAX_GROWTH \u0441 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f: brk \u0440\u0430\u0441\u0442\u0451\u0442 \u0431\u0435\u0437 demand paging, \u0438 \u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043a\u043d\u043e \u0441 mmap \u043d\u0435\u043b\u044c\u0437\u044f.\u041f\u043e\u0434\u043f\u0438\u0441\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439: \u0441 HMAC \u043d\u0430 ECDSA\u0420\u0430\u043d\u044c\u0448\u0435 .cctk-\u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c HMAC-SHA256 \u043a\u043b\u044e\u0447\u043e\u043c, \u0437\u0430\u0448\u0438\u0442\u044b\u043c \u0432 \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u043e\u0431\u0440\u0430\u0437: \u0438\u0437\u0432\u043b\u0451\u043a \u2014 \u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0439 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u0412 2.0.0 \u044f \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043d\u0430 \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u0438\u0441\u044c ECDSA P-256: \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0449\u0438\u0439 \u0445\u043e\u0441\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c, \u044f\u0434\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c (verify-only ABI cact_sig_verify_p256_raw).\u0424\u043e\u0440\u043c\u0430\u0442 \u0442\u0440\u0435\u0439\u043b\u0435\u0440\u0430: ELF, \u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0433\u0438\u044f CMOD, \u0437\u0430\u0442\u0435\u043c 4 \u0431\u0430\u0439\u0442\u0430 vermagic \u0438 64-\u0431\u0430\u0439\u0442\u043d\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u044c r||s, \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0430\u044f ELF \u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 mod_tag_verify(), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0438 PCI, USB \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f ABI-\u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a vermagic \u2014 FNV-1a \u043f\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u044f\u0434\u0440\u0430; \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0447\u0443\u0436\u0438\u043c vermagic \u043e\u0442\u0432\u0435\u0440\u0433\u0430\u0435\u0442\u0441\u044f.\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u043a: \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0438 \u043e\u0431\u0430 \u0440\u0430\u0437\u0430 \u00ab\u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438\u00bb virtio-gpu, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 .cctk. \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0434\u0438\u043d \u2014 drivers.list, \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440, \u0438 build.py \u0447\u0438\u0442\u0430\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e. \u0412 \u043e\u0431\u0440\u0430\u0437\u0435 2.0.0 \u2014 10 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 .cctk.VFS \u043d\u0430 Rust\u0421\u0430\u043c\u0430\u044f \u043e\u0431\u044a\u0451\u043c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 2.0.0 \u2014 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 VFS \u043d\u0430 Rust. \u0426\u0435\u043b\u044c \u2014 \u043f\u043e\u0434\u043d\u044f\u0442\u044c VFS \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f Linux, \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u0432 UNIX-\u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044e. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445: super_block, inode, dentry \u0441 dcache, vfsmount \u0441 \u0434\u0435\u0440\u0435\u0432\u043e\u043c \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 file. \u041f\u043e \u0448\u0430\u0433\u0430\u043c: dentry\/dcache, inode\/superblock, \u043f\u043e\u043b\u043d\u044b\u0439 stat\/statx\/statfs \u0441 d_type, \u043a\u044d\u0448 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0443\u0440\u043e\u0432\u043d\u044f inode (address_space), \u043e\u0431\u0449\u0438\u0439 \u0434\u043b\u044f read\/write \u0438 mmap, \u0436\u0451\u0441\u0442\u043a\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u0438 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 cross-directory rename.\u041f\u0430\u0439\u043f \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b \u0432 Rust: \u043a\u043e\u043b\u044c\u0446\u0435\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 schedule(), -EAGAIN \u0434\u043b\u044f \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430, SIGPIPE \u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044e. \u041f\u043e\u043f\u0443\u0442\u043d\u043e \u044f \u0432\u044b\u043b\u043e\u0432\u0438\u043b \u0441\u0442\u0430\u0440\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443 \u0443\u0447\u0451\u0442\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0439 \u2014 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439\/\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u0434\u043e \u043d\u0443\u043b\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 EOF \u0438 EPIPE \u043d\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438, \u0430 pipe_t \u0438 \u043e\u0431\u0451\u0440\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 \u0442\u0435\u043a\u043b\u0438. \u0422\u0435\u043f\u0435\u0440\u044c open\/close \u0432\u043b\u0430\u0434\u0435\u044e\u0442 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430\u043c\u0438, \u0430 refcount \u0443\u0437\u043b\u0430 \u2014 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0439.cactsole: \u0448\u0435\u043b\u043b, \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b \u0438 job controlcactsole \u2014 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0448\u0435\u043b\u043b \u0432 userspace. Job control \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e POSIX-\u043c\u043e\u0434\u0435\u043b\u0438. \u041b\u043e\u0433 \u0441\u0435\u0441\u0441\u0438\u0438: cact:\/$ sleep 30^Z[1]+ Stopped  sleep 30cact:\/$ jobs[1] stopped  sleep 30cact:\/$ bg 1cact:\/$ jobs[1] running  sleep 30cact:\/$ fg 1^Ccact:\/$ jobscact:\/$Ctrl+Z \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443, jobs \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, bg 1\/fg 1 \u043c\u0435\u043d\u044f\u044e\u0442 \u0435\u0433\u043e, Ctrl+C \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442, \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 jobs \u2014 \u043f\u0443\u0441\u0442. \u041a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b \u0442\u043e\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442:cact:\/$ ls \/usr\/lib\/modules | grep -F .cctk | wc -l      10\u0422\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u2014 10 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 .cctk \u0432 \u043e\u0431\u0440\u0430\u0437\u0435.\u0421\u0435\u0442\u044c \u0438 TLS\u0412\u0435\u0441\u044c L3+ \u2014 \u043d\u0430 Rust. Ethernet-\u0434\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u043e\u0440, ARP, IPv4, ICMP, TCP\/UDP-\u0441\u043e\u043a\u0435\u0442\u044b \u0438 DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 smoltcp, TLS 1.3 \u2014 \u043d\u0430 vendored rustls \u0441 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0438\u0437 cact_crypto. DHCP-\u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 \u044f\u0434\u0440\u0435 \u043d\u0435\u0442: IPv4-\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0440\u0435\u0448\u0430\u0435\u0442 userspace \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0435\u0451 \u0432 \u044f\u0434\u0440\u043e \u0447\u0435\u0440\u0435\u0437 \/dev\/net. DNS-\u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u043c\u043e\u043d. \u041b\u043e\u0433:cact:\/$ dhcpd &amp;[1] 34dhcpd: link up, mac=52:54:00:12:34:56dhcpd: discover #1 (xid=a0809ff2)dhcpd: offer ip=10.0.2.15 server=10.0.2.2dhcpd: request #1dhcpd: lease ip=10.0.2.15 mask=255.255.255.0 gw=10.0.2.2 dns=10.0.2.3 server=10.0.2.2 lease=86400s t1=43200s t2=75600scact:\/$ resolved &amp;[2] 35resolved: startingresolved: listening on \/run\/resolved.sock\u041f\u043e\u043b\u043d\u044b\u0439 DORA-\u0446\u0438\u043a\u043b, lease \u0441 T1\/T2, \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u0441\u043b\u0443\u0448\u0430\u0435\u0442 \u0441\u043e\u043a\u0435\u0442 \u0432 \/run. ICMP \u043d\u0430 smoltcp:cact:\/$ ping -c 3 8.8.8.8PING 8.8.8.8 (8.8.8.8): 56 data bytes64 bytes from 8.8.8.8: icmp_seq=1 time=102.735 ms64 bytes from 8.8.8.8: icmp_seq=2 time=181.496 ms64 bytes from 8.8.8.8: icmp_seq=3 time=78.162 ms&#8212; 8.8.8.8 ping statistics &#8212;3 packets transmitted, 3 received, 0% packet lossRTT \u0432 QEMU user-net (SLIRP) \u2014 \u0434\u0435\u0441\u044f\u0442\u043a\u0438-\u0441\u043e\u0442\u043d\u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u044d\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e \u0434\u043b\u044f \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438.HTTPS:cact:\/$ wget https:\/\/google.com -O \/tmp\/x &amp;&amp; cat \/tmp\/xwget: 301 redirect -&gt; https:\/\/www.google.com\/\/tmp\/x             86.8 KiBwget: HTTP 200, 88932 bytes -&gt; \/tmp\/x&lt;!doctype html&gt;&lt;html itemscope=&#187;&#187; itemtype=&#187;http:\/\/schema.org\/WebPage&#187; lang=&#187;ru&#187;&gt;&#8230;301-\u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d, TLS-\u0441\u0435\u0441\u0441\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430\u0441\u044c, \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d \u043f\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 CA-\u0431\u0430\u043d\u0434\u043b\u0443, \u0441\u043a\u0430\u0447\u0430\u043d\u043e 86.8 KiB \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e HTML. \u0410\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0438 \u0440\u0430\u0434\u0438\u0443\u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f TLS \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u043e\u0437\u043d\u0430\u0442\u0435\u043b\u044c\u043d\u043e: TLS \u0436\u0438\u0432\u0451\u0442 \u0432 libc, \u043a\u043b\u044e\u0447\u0438 \u2014 \u0432 userspace, \u0432 \u044f\u0434\u0440\u043e \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442.SMP \u0438 \u044d\u043d\u0435\u0440\u0433\u043e\u0433\u043evernor\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u043d\u0435 \u0432\u0430\u043d\u0438\u043b\u044c\u043d\u044b\u0439 SMP. Bring-up \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442 \u044f\u0434\u0440\u0430, \u0434\u0430\u043b\u044c\u0448\u0435 \u0438\u043c\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 energy-\u0433\u0443\u0431\u0435\u0440\u043d\u0430\u0442\u043e\u0440: \u043c\u0430\u0441\u0442\u0435\u0440-\u044f\u0434\u0440\u043e (cpu0) \u0448\u043b\u0451\u0442 \u043f\u043e IPI \u043a\u043e\u043c\u0430\u043d\u0434\u044b HALT \u0438 WAKEUP, \u0443\u0440\u043e\u0432\u0435\u043d\u044c MLFQ \u0437\u0430\u0434\u0430\u0451\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u043b\u0443\u0431\u0438\u043d\u0443 C-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0412\u0441\u0435 \u044f\u0434\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 worker-\u043a\u043e\u0434, \u043e\u0442\u043b\u0438\u0447\u0430\u044f\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u043e\u0439. cpu0 \u2014 \u043d\u0435 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440, \u0430 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u0440\u043a\u0435\u0440 \u0441 \u043e\u0434\u043d\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c: \u0435\u043c\u0443 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u043e \u0443\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043b\u0443\u0431\u0436\u0435 C1.\u041d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u044d\u0442\u0430\u043f\u043e\u0432 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b CPUID-\u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044e (leaf 0xB\/0x1F): package id, core id, siblings \u0432 \/proc\/cpuinfo, sibling-aware \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438. \u0423\u0431\u0440\u0430\u043b kill switch, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u043d\u044c\u0448\u0435 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u043b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0444\u0444\u043b\u0430\u0439\u043d\u0438\u043d\u0433 \u044f\u0434\u0440\u0430.\/proc\/cpuinfo \u0432 QEMU:processor       : 0apicid          : 0physical id     : 0siblings        : 4core id         : 0cpu cores       : 4model name      : 11th Gen Intel(R) Core(TM) i5-11400F @ 2.60GHzrole            : mastercstate          : C1online          : yesidle            : yes&#8230;processor       : 2&#8230;role            : workercstate          : C0online          : yesidle            : no\u0412\u0438\u0434\u043d\u043e governor \u0432 \u0440\u0430\u0431\u043e\u0442\u0435: \u044f\u0434\u0440\u0430 0\u20131 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u044e\u0442 \u0432 C1, \u044f\u0434\u0440\u0430 2\u20133 \u0437\u0430\u043d\u044f\u0442\u044b \u0432 C0. cpu0 \u2014 master, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 worker. \u0427\u0430\u0441\u0442\u043e\u0442\u0430 1555 MHz \u2014 \u0442\u043e, \u0447\u0442\u043e \u043e\u0442\u0434\u0430\u0451\u0442 QEMU; \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u043e\u043d\u0430 \u0434\u0440\u0443\u0433\u0430\u044f, \u0430 \u0444\u043b\u0430\u0433 hypervisor \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 CPU-\u0444\u043b\u0430\u0433\u043e\u0432 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438.S3: \u043f\u043e\u0447\u0435\u043c\u0443 suspend \u0432\u044b\u0440\u0435\u0437\u0430\u043d \u0432 2.0.0\u042d\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u043e\u0449\u0443\u0442\u0438\u043c\u0430\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0440\u0435\u043b\u0438\u0437\u0430. Suspend \u043d\u0435 \u043e\u0442\u043b\u043e\u0436\u0435\u043d \u2014 \u0432\u044b\u0440\u0435\u0437\u0430\u043d. \u041f\u0440\u0438\u0447\u0438\u043d\u0430: resume \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u0435\u043d.\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043d\u0430\u0448\u0451\u043b \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0432\u0435\u0449\u044c: \u043f\u0443\u0442\u044c resume \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0443 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f\u0434\u0440\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e \u0434\u0438\u0441\u043f\u043b\u0435\u0439 \u043f\u043e\u0441\u043b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0431\u0440\u043e\u0441\u0430. pr_notice() \u043f\u0435\u0447\u0430\u0442\u0430\u043b \u0447\u0435\u0440\u0435\u0437 FB-\u043a\u043e\u043d\u0441\u043e\u043b\u044c, \u0430 fb_flush() \u0434\u0435\u043b\u0430\u043b \u043f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 memcpy (\u0441\u043e\u0442\u043d\u0438 \u0441\u0442\u0440\u043e\u043a, \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442\u044b) \u0432 MMIO-\u0440\u0435\u0433\u0438\u043e\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d \u2014 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435 \u0434\u043e\u0445\u043e\u0434\u0438\u043b\u0438. \u041e\u0434\u0438\u043d\u043e\u0447\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u044b\u043b \u043d\u0435 #PF, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e bulk-\u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043d\u0435\u043f\u043e\u0434\u043d\u044f\u0442\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u041d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u00ab\u043a\u043d\u043e\u043f\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043c\u0438\u0433\u0430\u0435\u0442, \u044d\u043a\u0440\u0430\u043d \u043d\u0435 \u0437\u0430\u0433\u043e\u0440\u0430\u0435\u0442\u0441\u044f, \u043c\u0430\u0448\u0438\u043d\u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f\u00bb.\u042f \u043f\u043e\u0447\u0438\u043d\u0438\u043b \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0432 serial-only \u043d\u0430 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-500211","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500211","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=500211"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/500211\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=500211"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=500211"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=500211"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}