{"id":481112,"date":"2026-05-26T13:46:21","date_gmt":"2026-05-26T13:46:21","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=481112"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=481112","title":{"rendered":"CactOS"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>CactOS: \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043d\u0430 C \u0438 Rust \u0441 \u043d\u0443\u043b\u044f. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0437\u0430 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/h2>\n<p><strong>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440:<\/strong> \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043d\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u041e\u0421 \u0438 \u043d\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b. \u042d\u0442\u043e \u0441\u0440\u0435\u0437 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u043f\u0443\u0442\u044c \u043e\u0442 \u0432\u0435\u0447\u043d\u044b\u0445 Page Faults \u0438 Segmentation Faults (\u0432 ring 3) \u0434\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 95 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438, \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c, COW \u0438 MLFQ-\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c. \u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u043f\u043e\u0434 GPLv3.<\/p>\n<hr\/>\n<h3>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h3>\n<p>CactOS \u2014 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b <strong>i686<\/strong> (32-\u0431\u0438\u0442\u043d\u044b\u0439 x86, protected mode). \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u043a\u0430\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430 5-6 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0437\u0430 <strong>\u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/strong> \u2014 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c BIOS \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 POST \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.<\/p>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0446\u0438\u0444\u0440\u044b:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>95<\/strong> \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432<\/p>\n<\/li>\n<li>\n<p><strong>73<\/strong> \u2014 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u2014 95 (\u0442\u0430\u043a \u0436\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f)<\/p>\n<\/li>\n<li>\n<p><strong>2 \u044f\u0437\u044b\u043a\u0430:<\/strong> C + Assembly (\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u0434, \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b) + Rust (\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, TCP\/IP-\u0441\u0442\u0435\u043a)<\/p>\n<\/li>\n<li>\n<p><strong>4 \u0443\u0440\u043e\u0432\u043d\u044f<\/strong> MLFQ-\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p><strong>32<\/strong> \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f VFS<\/p>\n<\/li>\n<li>\n<p><strong>~40 \u041a\u0438\u0411<\/strong> in-tree \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ext4 (\u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c)<\/p>\n<\/li>\n<li>\n<p><strong>~32 \u041a\u0438\u0411<\/strong> xHCI-\u0441\u0442\u0435\u043a (USB 3.x)<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ce\/1d8\/f1f\/6ce1d8f1fb07ffe94f0c141062ea2804.png\" alt=\"Cact Kernel 1.0.0\" title=\"Cact Kernel 1.0.0\" width=\"1024\" height=\"828\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/6ce\/1d8\/f1f\/6ce1d8f1fb07ffe94f0c141062ea2804.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ce\/1d8\/f1f\/6ce1d8f1fb07ffe94f0c141062ea2804.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Cact Kernel 1.0.0<\/figcaption><\/div>\n<\/figure>\n<hr\/>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043f\u043e\u0447\u0435\u043c\u0443 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442<\/h3>\n<p>\u042f\u0434\u0440\u043e \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u0432 \u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 (ring 0). \u041e\u0434\u043d\u0430\u043a\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 Rust-\u043a\u0440\u0435\u0439\u0442\u044b \u0441 \u0436\u0451\u0441\u0442\u043a\u0438\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 FFI:<\/p>\n<ul>\n<li>\n<p><strong>cact_mm<\/strong> \u2014 PMM, VMM, \u043a\u0443\u0447\u0430, slab-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440, mmap, COW, swap, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c<\/p>\n<\/li>\n<li>\n<p><strong>sched<\/strong> \u2014 MLFQ-\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043d\u0430, \u0442\u0430\u0439\u043c\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p><strong>sync<\/strong> \u2014 \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0438, IRQ-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0438, \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b, \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u044b<\/p>\n<\/li>\n<li>\n<p><strong>cact_net<\/strong> \u2014 TCP\/UDP\/DHCP\/DNS \u043d\u0430 \u0431\u0430\u0437\u0435 smoltcp<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430(\u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u043e\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0443\u044e): \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0447\u0443\u0436\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c, \u043a\u0440\u043e\u043c\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0433\u043e\u043d\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<hr\/>\n<h3>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430: \u0442\u0440\u0438 \u0444\u0430\u0437\u044b \u0437\u0430 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b<\/h3>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0442\u0440\u0438 \u0444\u0430\u0437\u044b, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<h4>\u0424\u0430\u0437\u0430 A \u2014 init() (\u043e\u0434\u0438\u043d \u0441\u0442\u0435\u043a, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b)<\/h4>\n<ol>\n<li>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong>Multiboot2<\/strong> \u2014 \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0435\u0433 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430, \u043c\u043e\u0434\u0443\u043b\u0438 GRUB<\/p>\n<\/li>\n<li>\n<p><strong>cctkfs staging<\/strong> \u2014 <code>pci_modblob_load()<\/code> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 GRUB-\u043c\u043e\u0434\u0443\u043b\u044c cctkfs \u0438\u0437 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 <code>.bss<\/code> \u044f\u0434\u0440\u0430 <strong>\u0434\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0439\u0434\u0436\u0438\u043d\u0433\u0430<\/strong>. \u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e: \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043c\u043e\u0434\u0443\u043b\u044f, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 GRUB, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430; \u0435\u0441\u043b\u0438 \u0442\u0435\u0433 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e \u2014 halt<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 <code>0x36D76289<\/code><\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u043e\u0432 <code>kernel_setup_hardware()<\/code> (\u0444\u0430\u0437\u0430 B)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 <code>kernel_bootstrap_main<\/code> \u2014 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a<\/p>\n<\/li>\n<li>\n<p><code>sti<\/code> \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f idle-\u0437\u0430\u0434\u0430\u0447\u0435\u0439 (HLT-\u0446\u0438\u043a\u043b), \u0442\u0430\u0439\u043c\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<\/ol>\n<h4>\u0424\u0430\u0437\u0430 B \u2014 kernel_setup_hardware() (\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0430\u0436\u0435\u043d)<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">#<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">GDT \u2192 PMM \u2192 VMM \u2192 kmalloc \u2192 \u043f\u0435\u0439\u0434\u0436\u0438\u043d\u0433<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u0430\u0437\u0430 \u0432\u0441\u0435\u0433\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">Slab-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 + page fault handler<\/p>\n<\/td>\n<td>\n<p align=\"left\">COW, demand zero, swap-\u043c\u0430\u0440\u043a\u0435\u0440\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">PIC + IDT + COM1 serial<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0430\u0441\u0442\u044c kprint\/klog \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0445\u043e\u0441\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0424\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440 + MTRR write-combining<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 shadow buffer \u0441 batched blit<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">5<\/p>\n<\/td>\n<td>\n<p align=\"left\">PS\/2 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 \u043c\u044b\u0448\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 0xFF \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 0x64<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">6<\/p>\n<\/td>\n<td>\n<p align=\"left\">PIT 100 \u0413\u0446<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0430\u0439\u043c\u0435\u0440 <strong>\u0434\u043e<\/strong> \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PCI (\u043d\u0443\u0436\u0435\u043d GDD \u0434\u043b\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">7<\/p>\n<\/td>\n<td>\n<p align=\"left\">blkdev_init \u2192 PCI scan \u2192 usb_init (xHCI)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e PCI, \u0447\u0442\u043e\u0431\u044b AHCI\/NVMe \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">8<\/p>\n<\/td>\n<td>\n<p align=\"left\">Page cache + swap<\/p>\n<\/td>\n<td>\n<p align=\"left\">Swap-\u0440\u0430\u0437\u0434\u0435\u043b \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d, \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435 \u0444\u0430\u0442\u0430\u043b\u044c\u043d\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">9<\/p>\n<\/td>\n<td>\n<p align=\"left\">vfs_init + net_init<\/p>\n<\/td>\n<td>\n<p align=\"left\">knetd-\u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u0435, net_poll \/ stack_poll<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">10<\/p>\n<\/td>\n<td>\n<p align=\"left\">task_init + init_scheduler<\/p>\n<\/td>\n<td>\n<p align=\"left\">MLFQ \u043d\u0430 Rust<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0424\u0430\u0437\u0430 C \u2014 kernel_bootstrap_main (\u043f\u0435\u0440\u0432\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430)<\/h4>\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 <strong>\u043d\u0435\u043b\u044c\u0437\u044f<\/strong> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u044b\u0440\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435:<\/p>\n<ol>\n<li>\n<p><code>pci_driver_probe_deferred_all()<\/code> \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 PCI-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0433\u043e\u043b\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/li>\n<li>\n<p><code>mntfs_init<\/code> \u2014 \u043f\u0430\u0440\u0441\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442 ext4 \u043d\u0430 NVMe\/AHCI. \u041c\u043e\u0436\u0435\u0442 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u0435 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 IRQ \u043e\u0442 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e: \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0451 \u0435\u0449\u0451 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b (<code>cli<\/code>), \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a IRQ \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 <code>sema_up<\/code> \u2014 \u043c\u0451\u0440\u0442\u0432\u0430\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 <code>mntfs_init<\/code> \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u044f\u0434\u0440\u0430 <code>kernel_bootstrap_main<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 <code>sti<\/code> \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><code>create_elf_task(\"bin\/init\")<\/code> \u2014 \u043f\u0435\u0440\u0432\u044b\u0439 userspace-\u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 binfs (ext4 <code>\/bin<\/code> + cctkfs-\u043e\u0432\u0435\u0440\u043b\u0435\u0439)<\/p>\n<\/li>\n<\/ol>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \/ \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0435:<\/p>\n<p>text<\/p>\n<pre><code class=\"rust\">Cact Kernel 1.0.0--------------------------[VER] commit=&lt;Hash Commit&gt;  built=&lt;Built data&gt;Kernel is ready. Launching init...<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<hr\/>\n<h3>\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438: \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c<\/h3>\n<p>PMM \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u0442 \u0432\u0441\u0435 4 \u0413\u0438\u0411 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0434 PCI-\u0434\u044b\u0440\u043e\u0439 \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u044b. \u0424\u0440\u0435\u0439\u043c\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 32 \u041c\u0438\u0411 (BIOS, \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446) \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u0437\u0430\u043d\u044f\u0442\u044b\u0435 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0438\u043c\u0432\u043e\u043b<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u043c\u044b\u0441\u043b<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MEM_START<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0x00100000<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>PCI_HOLE_START<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0xE0000000<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u043d\u0435 \u043e\u0442\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 PMM (MMIO\/PCI)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>TOTAL_PAGES<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">~917 504<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e 4K-\u0444\u0440\u0435\u0439\u043c\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>BITMAP_SIZE<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">~112 \u041a\u0438\u0411<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>RESERVED_END<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">0x02000000 (32 \u041c\u0438\u0411)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0438\u0436\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0438 \u044f\u0434\u0440\u0443, \u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e (\u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e):<\/strong><\/p>\n<p>text<\/p>\n<pre><code class=\"rust\">0xC0000000  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u0422\u043e\u043b\u044c\u043a\u043e \u044f\u0434\u0440\u043e (ring 0)0xBF000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u0414\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430            \u2502   user stack \u2193    \u25020xBEFFF000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  sigreturn trampoline (int 0x80)0xB0000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u041f\u043e\u0442\u043e\u043b\u043e\u043a SHM0xA0000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u0411\u0430\u0437\u0430 SHM0x80000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u041f\u043e\u0442\u043e\u043b\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043a\u0443\u0447\u04380x40000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  mmap + brk (\u0434\u043e 256 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432)0x08048000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0431\u0430\u0437\u0430 ELF PT_LOAD0x00000000  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  NULL\/guard<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0424\u043b\u0430\u0433\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446:<\/strong> <code>PAGE_PRESENT<\/code>, <code>PAGE_RW<\/code>, <code>PAGE_USER<\/code>, <code>PAGE_COW<\/code> (0x200), <code>PAGE_DEMAND<\/code> (0x400 \u2014 demand-filled \/ zero-on-first-touch), <code>PAGE_ZERO<\/code> (0x800 \u2014 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u044f\u043c\u0438 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e), <code>PAGE_SWAPPED<\/code> (0x008 \u043f\u0440\u0438 PRESENT=0 \u2014 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0432 swap), <code>PDE_PRIVATE<\/code> (0x200 \u0432 PDE \u2014 \u00ab\u044d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441\u0432\u043e\u044f \u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u00bb, \u0442\u0435\u0433 \u0434\u043b\u044f fork\/COW).<\/p>\n<hr\/>\n<h3>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: 4-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f MLFQ<\/h3>\n<p>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Rust. 4 \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0423\u0440\u043e\u0432\u0435\u043d\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u0432\u0430\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">Real-time<\/p>\n<\/td>\n<td>\n<p align=\"left\">5 \u0442\u0438\u043a\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">Interactive<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 \u0442\u0438\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0426\u0435\u043b\u044c \u0434\u043b\u044f boost (latency-sensitive)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">2<\/p>\n<\/td>\n<td>\n<p align=\"left\">Normal<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 \u0442\u0438\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">Background<\/p>\n<\/td>\n<td>\n<p align=\"left\">4 \u0442\u0438\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">CPU-bound batch<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041f\u0440\u0430\u0432\u0438\u043b\u0430:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Anti-starvation boost<\/strong> \u043a\u0430\u0436\u0434\u044b\u0435 50 \u0442\u0438\u043a\u043e\u0432: \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 Normal \u0438 \u043d\u0438\u0436\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a Interactive<\/p>\n<\/li>\n<li>\n<p><strong>Voluntary block bonus:<\/strong> \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u043a\u0432\u0430\u043d\u0442\u0430, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0438<\/p>\n<\/li>\n<li>\n<p><strong>Sleep queue + alarms \/ setitimer<\/strong> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435<\/p>\n<\/li>\n<li>\n<p><strong>SCHEDULE_IN_PROGRESS<\/strong> \u2014 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447: <code>TASK_READY<\/code>, <code>TASK_RUNNING<\/code>, <code>TASK_SLEEPING<\/code>, <code>TASK_ZOMBIE<\/code>, <code>TASK_WAITING<\/code>.<\/p>\n<hr\/>\n<h3>\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a: smoltcp + C-\u043e\u0431\u0432\u044f\u0437\u043a\u0430<\/h3>\n<p>\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u0433\u0438\u0431\u0440\u0438\u0434 C \u0438 Rust. \u041b\u0435\u0433\u0430\u0441\u0438-\u043f\u0443\u0442\u044c \u043d\u0430 C \u0432\u043b\u0430\u0434\u0435\u0435\u0442 Ethernet-\u0434\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, ARP, \u0447\u0430\u0441\u0442\u044f\u043c\u0438 IPv4\/ICMP \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438 skb. TCP\/UDP-\u0441\u043e\u043a\u0435\u0442\u044b \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 <strong>smoltcp<\/strong> \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 <code>cact_net<\/code>.<\/p>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/strong><\/p>\n<ul>\n<li>\n<p><code>stack_poll()<\/code> \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430<\/p>\n<\/li>\n<li>\n<p><strong>DHCPv4<\/strong> \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 runtime IPv4 + IP DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/p>\n<\/li>\n<li>\n<p><code>SYS_DNS_RESOLVE<\/code> \u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 A-\u0437\u0430\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 UDP\/53<\/p>\n<\/li>\n<li>\n<p><code>SYS_PING_ECHO<\/code> \u2014 ICMP echo request<\/p>\n<\/li>\n<li>\n<p><strong>knetd<\/strong> \u2014 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u044f\u0434\u0440\u0430: \u0441\u043f\u0438\u0442 \u043d\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u0435, \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u043f\u043e RX \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044e NIC, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>net_poll \u2192 stack_poll()<\/code><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/strong> \u043d\u0435\u0442 IPv6, \u043d\u0435\u0442 TLS \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430, NIC \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 virtio-net \u0432 QEMU, \u0444\u043b\u0430\u0433\u0438 send\/recv \u043c\u043e\u0433\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 libc, DNS-\u0440\u0435\u0437\u043e\u043b\u044c\u0432\u0435\u0440 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e A-\u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 TCP-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (C-\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \/ VFS-\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435; ingress TCP \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f smoltcp):<\/p>\n<p>text<\/p>\n<pre><code class=\"rust\">CLOSED \u2192 LISTEN \u2192 SYN_SENT \u2192 SYN_RECEIVED       \u2192 ESTABLISHED       \u2192 FIN_WAIT_1 \u2192 FIN_WAIT_2 \u2192 TIME_WAIT       \u2192 CLOSE_WAIT \u2192 LAST_ACK \u2192 CLOSED<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<hr\/>\n<h3>\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h3>\n<h4>\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b (in-tree)<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041e\u0431\u043b\u0430\u0441\u0442\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u043b\u043e\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">AHCI, NVMe, blkdev, page cache<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">USB<\/p>\n<\/td>\n<td>\n<p align=\"left\">xHCI, HID, hub<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0432\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\">PS\/2 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 \u043c\u044b\u0448\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0438\u0434\u0435\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">Linear FB 32 bpp, \u0448\u0440\u0438\u0444\u0442 8\u00d78 \u0441 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u00d72, MTRR WC + shadow<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">PCI<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432, GDD, \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a ET_REL-\u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0435\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">virtio-net (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 QEMU)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412\u043d\u0435\u0448\u043d\u0438\u0435 PCI-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>Marvell Yukon<\/strong>) \u0436\u0438\u0432\u0443\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 <code>*-for-Cact<\/code> \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445, \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a <code>.cctk<\/code>-\u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 <code>cctkfs.img<\/code>.<\/p>\n<h4>\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0424\u0421<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0442\u0430\u0442\u0443\u0441<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">ext4<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043a\u0442\u0438\u0432\u043d\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f in-tree \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c, inode-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (~40 \u041a\u0438\u0411)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">VFS<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043a\u0442\u0438\u0432\u043d\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u043e 32 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, symlink-\u043f\u0443\u043b \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 ELOOP, \u0431\u0438\u0442\u044b rwx<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">devfs, procfs, mntfs, etcfs, tmpfs<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043a\u0442\u0438\u0432\u043d\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">binfs, sbinfs, libfs, varfs<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043a\u0442\u0438\u0432\u043d\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">cctkfs-\u043e\u0432\u0435\u0440\u043b\u0435\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 ext4<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">pipes<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0410\u043a\u0442\u0438\u0432\u043d\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>pipe()<\/code> \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">btrfs, exFAT, ramfs<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u0433\u043b\u0443\u0448\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">Placeholder-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr\/>\n<h3>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b: 95 \u0438 counting<\/h3>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u2014 <code>Cact\/kernel\/core\/syscalls\/syscalls.h<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 <code>syscall.h<\/code> \u0432 CactLib. \u041c\u043d\u043e\u0433\u0438\u0435 syscall&#8217;\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 <code>struct syscall_frame*<\/code> (\u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432) \u0432 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435.<\/p>\n<p><strong>\u0413\u0440\u0443\u043f\u043f\u044b:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b:<\/strong> fork, exec, exit, waitpid, sleep, getpid\/getppid<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0438\u0433\u043d\u0430\u043b\u044b:<\/strong> kill, signal, sigaction, sigprocmask, sigreturn, sigpending, sigsuspend, alarm, setitimer<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u043c\u044f\u0442\u044c:<\/strong> brk, mmap, munmap, mprotect, shmget\/shmat\/shmdt\/shmctl<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0435\u0442\u044c:<\/strong> socket, bind, connect, listen, accept, send\/recv, sendto\/recvfrom + PING_ECHO, NETCFG_SET, DNS_RESOLVE<\/p>\n<\/li>\n<li>\n<p><strong>\u0424\u0430\u0439\u043b\u044b:<\/strong> open\/read\/write\/close, stat\/fstat, getdents, rename, mkdir, rmdir, symlink, readlink, link\/unlink<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u0430:<\/strong> mount, umount, reboot, uname, module_load\/module_unload<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>Kernel panic \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/h3>\n<p><strong>Ring 0<\/strong> \u2014 \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u0430\u043c\u043f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, <code>cli; hlt<\/code>:<\/p>\n<p>text<\/p>\n<pre><code class=\"rust\">=== KERNEL PANIC ===Exception: 14 (#PF)   Error code: 0x00000003EIP: 0xC010A3F2   CS: 0x00000008EAX: 0x00000000   EBX: 0xDEADBEEF   ECX: 0x00000001   EDX: 0x00000000ESP: 0xC01FF9E0   EBP: 0xC01FFA10System halted.<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>Ring 3<\/strong> \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f CPU \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 Unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438-\u043d\u0430\u0440\u0443\u0448\u0438\u0442\u0435\u043b\u044f:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0438\u0433\u043d\u0430\u043b<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">#DE (vector 0)<\/p>\n<\/td>\n<td>\n<p align=\"left\">SIGFPE<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u043e\u043b\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">#MF (vector 16)<\/p>\n<\/td>\n<td>\n<p align=\"left\">SIGFPE<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0448\u0438\u0431\u043a\u0430 x87 FPU<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">#GP (vector 13)<\/p>\n<\/td>\n<td>\n<p align=\"left\">SIGSEGV<\/p>\n<\/td>\n<td>\n<p align=\"left\">General protection fault<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">SIGKILL<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr\/>\n<h3>\u041f\u043b\u0430\u043d\u044b: v2.0.0 \u0438 v3.0.0<\/h3>\n<h4>v2.0.0 \u2014 \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u041c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0430\u0446\u0438\u044f<\/h4>\n<ul>\n<li>\n<p>\u0423\u0445\u043e\u0434 \u043e\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 &#171;\u0436\u0435\u043b\u0435\u0437\u043e\u043c&#187;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430 \u043a \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0443<\/p>\n<\/li>\n<li>\n<p>\u041e\u043a\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043c\u044b\u0448\u0438<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<h4>v3.0.0 \u2014 \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c <\/h4>\n<ul>\n<li>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 (\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a, VFS, \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a, \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b) \u2014 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c TCP\/IP-\u0441\u0442\u0435\u043a\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432: \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/QwaYer\/CactKernel-x86_32\" rel=\"noopener noreferrer nofollow\"><strong>\u0420\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u044f\u0434\u0440\u0430 \u0432 GIt<\/strong><\/a><strong> <\/strong><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/QwaYer\/CactOS-x86_32\" rel=\"noopener noreferrer nofollow\"><strong>\u0414\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 \u041e\u0421 \u0432 Git<\/strong><\/a> <\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f:<\/strong> GNU General Public License v3.0<\/p>\n<\/li>\n<\/ul>\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\/1039670\/\">https:\/\/habr.com\/ru\/articles\/1039670\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>CactOS: \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u043d\u0430 C \u0438 Rust \u0441 \u043d\u0443\u043b\u044f. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0437\u0430 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440: \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043d\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u041e\u0421 \u0438 \u043d\u0435 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b. \u042d\u0442\u043e \u0441\u0440\u0435\u0437 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u044f\u0434\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u043f\u0443\u0442\u044c \u043e\u0442 \u0432\u0435\u0447\u043d\u044b\u0445 Page Faults \u0438 Segmentation Faults (\u0432 ring 3) \u0434\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441 95 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438, \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c, COW \u0438 MLFQ-\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c. \u0412\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u043f\u043e\u0434 GPLv3.\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435CactOS \u2014 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0435 \u044f\u0434\u0440\u043e \u0434\u043b\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b i686 (32-\u0431\u0438\u0442\u043d\u044b\u0439 x86, protected mode). \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u043b \u043a\u0430\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430 5-6 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0437\u0430 \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u2014 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c BIOS \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 POST \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0446\u0438\u0444\u0440\u044b:95 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u043273 \u2014 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u2014 95 (\u0442\u0430\u043a \u0436\u0435 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f)2 \u044f\u0437\u044b\u043a\u0430: C + Assembly (\u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u0434, \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b) + Rust (\u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f, TCP\/IP-\u0441\u0442\u0435\u043a)4 \u0443\u0440\u043e\u0432\u043d\u044f MLFQ-\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043032 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f VFS~40 \u041a\u0438\u0411 in-tree \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ext4 (\u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c)~32 \u041a\u0438\u0411 xHCI-\u0441\u0442\u0435\u043a (USB 3.x)Cact Kernel 1.0.0\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: \u043f\u043e\u0447\u0435\u043c\u0443 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0439 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u042f\u0434\u0440\u043e \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u0432 \u0442\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 (ring 0). \u041e\u0434\u043d\u0430\u043a\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 Rust-\u043a\u0440\u0435\u0439\u0442\u044b \u0441 \u0436\u0451\u0441\u0442\u043a\u0438\u043c\u0438 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 FFI:cact_mm \u2014 PMM, VMM, \u043a\u0443\u0447\u0430, slab-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440, mmap, COW, swap, \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044csched \u2014 MLFQ-\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a, \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043d\u0430, \u0442\u0430\u0439\u043c\u0435\u0440\u044bsync \u2014 \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0438, IRQ-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u043f\u0438\u043d\u043b\u043e\u043a\u0438, \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b, \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u044bcact_net \u2014 TCP\/UDP\/DHCP\/DNS \u043d\u0430 \u0431\u0430\u0437\u0435 smoltcp\u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430(\u0445\u043e\u0442\u044f \u0438 \u043d\u0435 \u043e\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0443\u044e): \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0440\u0435\u0439\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0447\u0443\u0436\u0438\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c, \u043a\u0440\u043e\u043c\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e API. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0433\u043e\u043d\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430: \u0442\u0440\u0438 \u0444\u0430\u0437\u044b \u0437\u0430 4 \u0441\u0435\u043a\u0443\u043d\u0434\u044b\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0440\u0430\u0437\u0431\u0438\u0442 \u043d\u0430 \u0442\u0440\u0438 \u0444\u0430\u0437\u044b, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u0437\u0430\u0434\u0430\u0447.\u0424\u0430\u0437\u0430 A \u2014 init() (\u043e\u0434\u0438\u043d \u0441\u0442\u0435\u043a, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b)\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b Multiboot2 \u2014 \u043a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0435\u0433 \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430, \u043c\u043e\u0434\u0443\u043b\u0438 GRUBcctkfs staging \u2014 pci_modblob_load() \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 GRUB-\u043c\u043e\u0434\u0443\u043b\u044c cctkfs \u0438\u0437 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 .bss \u044f\u0434\u0440\u0430 \u0434\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0439\u0434\u0436\u0438\u043d\u0433\u0430. \u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e: \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u043c\u043e\u0434\u0443\u043b\u044f, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 GRUB, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430; \u0435\u0441\u043b\u0438 \u0442\u0435\u0433 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e \u2014 halt\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 0x36D76289\u0412\u044b\u0437\u043e\u0432 kernel_setup_hardware() (\u0444\u0430\u0437\u0430 B)\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 kernel_bootstrap_main \u2014 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043asti \u2014 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f idle-\u0437\u0430\u0434\u0430\u0447\u0435\u0439 (HLT-\u0446\u0438\u043a\u043b), \u0442\u0430\u0439\u043c\u0435\u0440 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u0435\u0424\u0430\u0437\u0430 B \u2014 kernel_setup_hardware() (\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u0430\u0436\u0435\u043d)#\u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c1GDT \u2192 PMM \u2192 VMM \u2192 kmalloc \u2192 \u043f\u0435\u0439\u0434\u0436\u0438\u043d\u0433\u0411\u0430\u0437\u0430 \u0432\u0441\u0435\u0433\u043e2Slab-\u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 + page fault handlerCOW, demand zero, swap-\u043c\u0430\u0440\u043a\u0435\u0440\u044b3PIC + IDT + COM1 serial\u0427\u0430\u0441\u0442\u044c kprint\/klog \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0445\u043e\u0441\u04424\u0424\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440 + MTRR write-combining\u041e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 shadow buffer \u0441 batched blit5PS\/2 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 \u043c\u044b\u0448\u044c\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 0xFF \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 0x646PIT 100 \u0413\u0446\u0422\u0430\u0439\u043c\u0435\u0440 \u0434\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f PCI (\u043d\u0443\u0436\u0435\u043d GDD \u0434\u043b\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432)7blkdev_init \u2192 PCI scan \u2192 usb_init (xHCI)\u0411\u043b\u043e\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e PCI, \u0447\u0442\u043e\u0431\u044b AHCI\/NVMe \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f8Page cache + swapSwap-\u0440\u0430\u0437\u0434\u0435\u043b \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d, \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435 \u0444\u0430\u0442\u0430\u043b\u044c\u043d\u04309vfs_init + net_initknetd-\u043f\u043e\u0442\u043e\u043a \u043d\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u0435, net_poll \/ stack_poll10task_init + init_schedulerMLFQ \u043d\u0430 Rust\u0424\u0430\u0437\u0430 C \u2014 kernel_bootstrap_main (\u043f\u0435\u0440\u0432\u0430\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430)\u042d\u0442\u043e\u0442 \u043f\u043e\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u044b\u0440\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435:pci_driver_probe_deferred_all() \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 PCI-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b, \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0433\u043e\u043b\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438mntfs_init \u2014 \u043f\u0430\u0440\u0441\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u043e\u043d\u0442\u0438\u0440\u0443\u0435\u0442 ext4 \u043d\u0430 NVMe\/AHCI. \u041c\u043e\u0436\u0435\u0442 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u0435 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 IRQ \u043e\u0442 \u0434\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430. \u041d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u0447\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e: \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0451 \u0435\u0449\u0451 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b (cli), \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d, \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a IRQ \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 sema_up \u2014 \u043c\u0451\u0440\u0442\u0432\u0430\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 mntfs_init \u0432\u044b\u043d\u0435\u0441\u0435\u043d \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u044f\u0434\u0440\u0430 kernel_bootstrap_main, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 sti \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430.create_elf_task(&#171;bin\/init&#187;) \u2014 \u043f\u0435\u0440\u0432\u044b\u0439 userspace-\u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 binfs (ext4 \/bin + cctkfs-\u043e\u0432\u0435\u0440\u043b\u0435\u0439)\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \/ \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0435:textCact Kernel 1.0.0&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;[VER] commit=&lt;Hash Commit&gt;  built=&lt;Built data&gt;Kernel is ready. Launching init&#8230;\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438: \u0447\u0442\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043cPMM \u0430\u0434\u0440\u0435\u0441\u0443\u0435\u0442 \u0432\u0441\u0435 4 \u0413\u0438\u0411 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u0434 PCI-\u0434\u044b\u0440\u043e\u0439 \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u044b. \u0424\u0440\u0435\u0439\u043c\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 32 \u041c\u0438\u0411 (BIOS, \u043e\u0431\u0440\u0430\u0437 \u044f\u0434\u0440\u0430, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446) \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a \u0437\u0430\u043d\u044f\u0442\u044b\u0435 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430.\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b:\u0421\u0438\u043c\u0432\u043e\u043b\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0421\u043c\u044b\u0441\u043bMEM_START0x00100000\u041d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u044f\u0434\u0440\u0430PCI_HOLE_START0xE0000000\u041f\u0435\u0440\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u043d\u0435 \u043e\u0442\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 PMM (MMIO\/PCI)TOTAL_PAGES~917 504\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e 4K-\u0444\u0440\u0435\u0439\u043c\u043e\u0432BITMAP_SIZE~112 \u041a\u0438\u0411\u0420\u0430\u0437\u043c\u0435\u0440 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044bRESERVED_END0x02000000 (32 \u041c\u0438\u0411)\u041d\u0438\u0436\u043d\u044f\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u0442\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0438 \u044f\u0434\u0440\u0443, \u043d\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e (\u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e):text0xC0000000  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u0422\u043e\u043b\u044c\u043a\u043e \u044f\u0434\u0440\u043e (ring 0)0xBF000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u0414\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430            \u2502   user stack \u2193    \u25020xBEFFF000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  sigreturn trampoline (int 0x80)0xB0000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u041f\u043e\u0442\u043e\u043b\u043e\u043a SHM0xA0000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u0411\u0430\u0437\u0430 SHM0x80000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u041f\u043e\u0442\u043e\u043b\u043e\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u043a\u0443\u0447\u04380x40000000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  mmap + brk (\u0434\u043e 256 \u0440\u0435\u0433\u0438\u043e\u043d\u043e\u0432)0x08048000  \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524  \u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0431\u0430\u0437\u0430 ELF PT_LOAD0x00000000  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  NULL\/guard\u0424\u043b\u0430\u0433\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446: PAGE_PRESENT, PAGE_RW, PAGE_USER, PAGE_COW (0x200), PAGE_DEMAND (0x400 \u2014 demand-filled \/ zero-on-first-touch), PAGE_ZERO (0x800 \u2014 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0443\u043b\u044f\u043c\u0438 \u043f\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044e), PAGE_SWAPPED (0x008 \u043f\u0440\u0438 PRESENT=0 \u2014 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0432 swap), PDE_PRIVATE (0x200 \u0432 PDE \u2014 \u00ab\u044d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0441\u0432\u043e\u044f \u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u00bb, \u0442\u0435\u0433 \u0434\u043b\u044f fork\/COW).\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a: 4-\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f MLFQ\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Rust. 4 \u0443\u0440\u043e\u0432\u043d\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439:\u0423\u0440\u043e\u0432\u0435\u043d\u044c\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u041a\u0432\u0430\u043d\u0442\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u04350Real-time5 \u0442\u0438\u043a\u043e\u0432\u041d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u04421Interactive1 \u0442\u0438\u043a\u0426\u0435\u043b\u044c \u0434\u043b\u044f boost (latency-sensitive)2Normal2 \u0442\u0438\u043a\u0430\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u04473Background4 \u0442\u0438\u043a\u0430CPU-bound batch\u041f\u0440\u0430\u0432\u0438\u043b\u0430:Anti-starvation boost \u043a\u0430\u0436\u0434\u044b\u0435 50 \u0442\u0438\u043a\u043e\u0432: \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 Normal \u0438 \u043d\u0438\u0436\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a InteractiveVoluntary block bonus: \u0435\u0441\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u043a\u0432\u0430\u043d\u0442\u0430, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0438Sleep queue + alarms \/ setitimer \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435SCHEDULE_IN_PROGRESS \u2014 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0430 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447: TASK_READY, TASK_RUNNING, TASK_SLEEPING, TASK_ZOMBIE, TASK_WAITING.\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a: smoltcp + C-\u043e\u0431\u0432\u044f\u0437\u043a\u0430\u0421\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0442\u0435\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u0433\u0438\u0431\u0440\u0438\u0434 C \u0438 Rust. \u041b\u0435\u0433\u0430\u0441\u0438-\u043f\u0443\u0442\u044c \u043d\u0430 C \u0432\u043b\u0430\u0434\u0435\u0435\u0442 Ethernet-\u0434\u0435\u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, ARP, \u0447\u0430\u0441\u0442\u044f\u043c\u0438 IPv4\/ICMP \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438 skb. TCP\/UDP-\u0441\u043e\u043a\u0435\u0442\u044b \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 smoltcp \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0435\u0439\u0442\u0430 cact_net.\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:stack_poll() \u2014 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430DHCPv4 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 runtime IPv4 + IP DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430SYS_DNS_RESOLVE \u2014 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 A-\u0437\u0430\u043f\u0440\u043e\u0441 \u0447\u0435\u0440\u0435\u0437 UDP\/53SYS_PING_ECHO \u2014 ICMP echo requestknetd \u2014 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u044f\u0434\u0440\u0430: \u0441\u043f\u0438\u0442 \u043d\u0430 \u0441\u0435\u043c\u0430\u0444\u043e\u0440\u0435, \u043f\u0440\u043e\u0441\u044b\u043f\u0430\u0435\u0442\u0441\u044f \u043f\u043e RX \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044e NIC, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 net_poll \u2192 stack_poll()\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f: \u043d\u0435\u0442 IPv6, \u043d\u0435\u0442 TLS \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0434\u0440\u0430, NIC \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u2014 virtio-net \u0432 QEMU, \u0444\u043b\u0430\u0433\u0438 send\/recv \u043c\u043e\u0433\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 libc, DNS-\u0440\u0435\u0437\u043e\u043b\u044c\u0432\u0435\u0440 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e A-\u0437\u0430\u043f\u0438\u0441\u0438.\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 TCP-\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f (C-\u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \/ VFS-\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435; ingress TCP \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f smoltcp):textCLOSED \u2192 LISTEN \u2192 SYN_SENT \u2192 SYN_RECEIVED       \u2192 ESTABLISHED       \u2192 FIN_WAIT_1 \u2192 FIN_WAIT_2 \u2192 TIME_WAIT       \u2192 CLOSE_WAIT \u2192 LAST_ACK \u2192 CLOSED\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u044b (in-tree)\u041e\u0431\u043b\u0430\u0441\u0442\u044c\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\u0411\u043b\u043e\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430AHCI, NVMe, blkdev, page cacheUSBxHCI, HID, hub\u0412\u0432\u043e\u0434PS\/2 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430 \u0438 \u043c\u044b\u0448\u044c\u0412\u0438\u0434\u0435\u043eLinear FB 32 bpp, \u0448\u0440\u0438\u0444\u0442 8\u00d78 \u0441 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u00d72, MTRR WC + shadowPCI\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432, GDD, \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a ET_REL-\u043c\u043e\u0434\u0443\u043b\u0435\u0439\u0421\u0435\u0442\u044cvirtio-net (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 QEMU)\u0412\u043d\u0435\u0448\u043d\u0438\u0435 PCI-\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Marvell Yukon) \u0436\u0438\u0432\u0443\u0442 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 *-for-Cact \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445, \u0441\u043e\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a .cctk-\u043c\u043e\u0434\u0443\u043b\u0438 \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 cctkfs.img.\u0424\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\u0424\u0421\u0421\u0442\u0430\u0442\u0443\u0441\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044fext4\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0430\u044f in-tree \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f: \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c, inode-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 (~40 \u041a\u0438\u0411)VFS\u0410\u043a\u0442\u0438\u0432\u043d\u0430\u0414\u043e 32 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, symlink-\u043f\u0443\u043b \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 ELOOP, \u0431\u0438\u0442\u044b rwxdevfs, procfs, mntfs, etcfs, tmpfs\u0410\u043a\u0442\u0438\u0432\u043d\u044b\u041f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438binfs, sbinfs, libfs, varfs\u0410\u043a\u0442\u0438\u0432\u043d\u044bcctkfs-\u043e\u0432\u0435\u0440\u043b\u0435\u0439 \u043f\u043e\u0432\u0435\u0440\u0445 ext4pipes\u0410\u043a\u0442\u0438\u0432\u043d\u044bpipe() \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432btrfs, exFAT, ramfs\u0417\u0430\u0433\u043b\u0443\u0448\u043a\u0438Placeholder-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b: 95 \u0438 counting\u0410\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u2014 Cact\/kernel\/core\/syscalls\/syscalls.h, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u0441 syscall.h \u0432 CactLib. \u041c\u043d\u043e\u0433\u0438\u0435 syscall&#8217;\u044b \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442 struct syscall_frame* (\u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043d\u0438\u043c\u043e\u043a \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432) \u0432 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435.\u0413\u0440\u0443\u043f\u043f\u044b:\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b: fork, exec, exit, waitpid, sleep, getpid\/getppid\u0421\u0438\u0433\u043d\u0430\u043b\u044b: kill, signal, sigaction, sigprocmask, sigreturn, sigpending, sigsuspend, alarm, setitimer\u041f\u0430\u043c\u044f\u0442\u044c: brk, mmap, munmap, mprotect, shmget\/shmat\/shmdt\/shmctl\u0421\u0435\u0442\u044c: socket, bind, connect, listen, accept, send\/recv, sendto\/recvfrom + PING_ECHO, NETCFG_SET, DNS_RESOLVE\u0424\u0430\u0439\u043b\u044b: open\/read\/write\/close, stat\/fstat, getdents, rename, mkdir, rmdir, symlink, readlink, link\/unlink\u0421\u0438\u0441\u0442\u0435\u043c\u0430: mount, umount, reboot, uname, module_load\/module_unloadKernel panic \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043aRing 0 \u2014 \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u0430\u043c\u043f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, cli; hlt:text=== KERNEL PANIC ===Exception: 14 (#PF)   Error code: 0x00000003EIP: 0xC010A3F2   CS: 0x00000008EAX: 0x00000000   EBX: 0xDEADBEEF   ECX: 0x00000001   EDX: 0x00000000ESP: 0xC01FF9E0   EBP: 0xC01FFA10System halted.Ring 3 \u2014 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f CPU \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 Unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447\u0438-\u043d\u0430\u0440\u0443\u0448\u0438\u0442\u0435\u043b\u044f:\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u0421\u0438\u0433\u043d\u0430\u043b\u0422\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430#DE (vector 0)SIGFPE\u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u043e\u043b\u044c#MF (vector 16)SIGFPE\u041e\u0448\u0438\u0431\u043a\u0430 x87 FPU#GP (vector 13)SIGSEGVGeneral protection fault\u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435SIGKILL\u041d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\u041f\u043b\u0430\u043d\u044b: v2.0.0 \u0438 v3.0.0v2.0.0 \u2014 \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u041c\u043e\u0434\u0435\u0440\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u0423\u0445\u043e\u0434 \u043e\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 &#171;\u0436\u0435\u043b\u0435\u0437\u043e\u043c&#187;\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0431\u0443\u0444\u0435\u0440\u0430 \u043a \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0443\u041e\u043a\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u043c\u044b\u0448\u0438\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432v3.0.0 \u2014 \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f&#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-481112","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481112","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=481112"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/481112\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=481112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=481112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=481112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}