Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translate 3rd post into Russian #1039

Draft
wants to merge 121 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
e6ec921
preabule
MrZloHex Jun 26, 2021
649009d
Introduction
MrZloHex Jun 26, 2021
c20ca02
Introduction
MrZloHex Jun 26, 2021
e49aff1
Disactivation
MrZloHex Jun 26, 2021
689978c
Disablaing std
MrZloHex Jun 26, 2021
36b9727
no_std
MrZloHex Jun 27, 2021
2497eb4
panic_handler
MrZloHex Jun 27, 2021
f2eb77b
eh_personality
MrZloHex Jun 27, 2021
ed10667
unwiding
MrZloHex Jun 29, 2021
5cabbbe
start
MrZloHex Jun 29, 2021
3b2e9a3
entry point
MrZloHex Jun 29, 2021
10f2e54
summary
MrZloHex Jun 29, 2021
402ba40
what's next
MrZloHex Jun 29, 2021
2df9bbf
Details
MrZloHex Jun 29, 2021
fb9d01b
fix:
MrZloHex Jun 30, 2021
564431a
config
MrZloHex Jun 30, 2021
4754dd6
next post fix
MrZloHex Jun 30, 2021
7b7b320
tabs into spaces
MrZloHex Jun 30, 2021
b45694b
fix: correct link to 02 post
MrZloHex Jun 30, 2021
21c5df1
fix: bad gateway
MrZloHex Jun 30, 2021
93f6023
fix: typo error
MrZloHex Jun 30, 2021
d1a6b56
TRANSITION TO SECOND POST
MrZloHex Jul 3, 2021
573abff
HEADER
MrZloHex Jul 3, 2021
6eec17d
PREAMBULE
MrZloHex Jul 3, 2021
0670bb2
BOOT SEQUENCE
MrZloHex Jul 3, 2021
528d742
BOOT BIOS
MrZloHex Jul 3, 2021
8bd6fa0
MULTIBOOT
MrZloHex Jul 3, 2021
1c975a0
UEFI
MrZloHex Jul 3, 2021
308387f
MINIMAL KERNEL
MrZloHex Jul 5, 2021
bdadfaf
NIGHTLY INSTALL
MrZloHex Jul 5, 2021
cb6513d
SPECIFICATION JSON
MrZloHex Jul 5, 2021
1a1b857
BUILD
MrZloHex Jul 13, 2021
aae05c6
INTRISICS
MrZloHex Jul 13, 2021
8452ad9
DEFAULT TARGET
MrZloHex Jul 13, 2021
c635172
PRINTING TO SCREEN
MrZloHex Jul 13, 2021
d8f440c
BOOTIMAGE
MrZloHex Jul 13, 2021
3ede20c
FIRST BOOT
MrZloHex Jul 13, 2021
692a7bd
FINISH
MrZloHex Jul 13, 2021
532947b
RED ZONE
MrZloHex Jul 13, 2021
ee25265
SIMD
MrZloHex Jul 13, 2021
0996d05
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
6c5dff3
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
c9176b8
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
1ae1995
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
505b607
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
30aca43
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
4c93e8d
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
3d00970
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
468bd66
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
505b826
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
2967254
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
94b895c
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
b7c66af
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
c0b917d
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
0850ee5
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
1a9e10e
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
5293172
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
f5906aa
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
d8d92dd
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
8ec3d6b
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
359cad8
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
0b99ef6
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
f5e2cfb
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
f0aab1c
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
7d0a064
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
5edf474
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
ad02986
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
43e9b93
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
fcdfb40
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
b9dcde2
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
c9e3e85
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
2b26af2
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
30aef2b
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
4f37287
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
502dd1d
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
3400037
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
784bffe
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
3064897
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
891049c
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
e43616b
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
f87a267
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
09a9563
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 15, 2021
0dfb78a
FIX: CONTROVERSIAL MOMENTS
MrZloHex Jul 15, 2021
f439aee
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 17, 2021
393fe2c
Update blog/content/edition-2/posts/01-freestanding-rust-binary/index…
MrZloHex Jul 17, 2021
deb32e6
Update blog/content/edition-2/posts/02-minimal-rust-kernel/disable-re…
MrZloHex Jul 17, 2021
b9a34c5
Update blog/content/edition-2/posts/02-minimal-rust-kernel/disable-si…
MrZloHex Jul 17, 2021
4bb7714
Update blog/content/edition-2/posts/02-minimal-rust-kernel/disable-si…
MrZloHex Jul 17, 2021
af0e820
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
010572f
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
d59959b
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
e871e0e
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
fb17c6c
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
7f54a84
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
855252a
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
09f26c7
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
00d339e
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
c9b7176
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
6cec57c
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
51b0efb
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
429a54b
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
e60c636
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
5f549b3
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
dda7322
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
338fedf
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
5a6a95b
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
4cd049a
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
d61cf08
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
a3d0db9
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
91deaa7
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
cb6cc33
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
61cf331
Update blog/content/edition-2/posts/02-minimal-rust-kernel/index.ru.md
MrZloHex Jul 17, 2021
eb9e14b
LANGUAGE ITEM
MrZloHex Jul 17, 2021
ec8e8d4
ALL OTHER MOMENTS
MrZloHex Jul 17, 2021
c0cb80b
standarD
MrZloHex Jul 17, 2021
7ca9707
ADDITIONAL SETUP FILES
MrZloHex Jul 17, 2021
81b775a
Update blog/content/_index.ru.md
MrZloHex Jul 19, 2021
e4b599e
WRONG LINKS
MrZloHex Jul 19, 2021
34b8467
Merge branch 'russian' of github.com:MrZloHex/blog_os into russian
MrZloHex Jul 19, 2021
73a71d5
INTRO
MrZloHex Jul 25, 2021
966075a
TEXT BUFFER VGA
MrZloHex Jul 25, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions blog/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ languages = [
{ code = "zh-TW" }, # Chinese (traditional)
{ code = "ja" }, # Japanese
{ code = "fa" }, # Persian
{ code = "ru" }, # Russian
]

ignored_content = ["*/README.md"]
Expand Down Expand Up @@ -97,3 +98,17 @@ translated_content = "محتوای ترجمه شده:"
translated_content_notice = "این یک ترجمه از جامعه کاربران برای پست <strong><a href=\"_original.permalink_\">_original.title_</a></strong> است. ممکن است ناقص، منسوخ شده یا دارای خطا باشد. لطفا هر گونه مشکل را در <a href=\"https://github.com/phil-opp/blog_os/issues/908\">این ایشو</a> گزارش دهید!"
translated_by = "ترجمه توسط"
word_separator = "و"


[translations.ru]
lang_name = "Russian"
toc = "Содержание"
all_posts = "« Все посты"
comments = "Комментарии"
comments_notice = "Пожалуйста, оставляйте комментарии на английском по возможности."
readmore = "читать&nbsp;дальше&nbsp;»"
not_translated = "(Этот пост еще не переведен.)"
translated_content = "Переведенное содержание:"
translated_content_notice = "Это перевод сообщества поста <strong><a href=\"_original.permalink_\">_original.title_</a></strong>. Он может быть неполным, устаревшим или содержать ошибки. Пожалуйста, сообщайте о любых проблемах!"
translated_by = "Перевод сделан"
word_separator = "и"
13 changes: 13 additions & 0 deletions blog/content/_index.ru.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
+++
template = "edition-2/index.html"
+++

<h1 style="visibility: hidden; height: 0px; margin: 0px; padding: 0px;">Собственная операционная система на Rust</h1>

<div class="front-page-introduction">

Этот блог посвящен написанию маленькой операционной системы на [языке программирования Rust](https://www.rust-lang.org/). Каждый пост &mdash; это маленькое руководство, включающее в себя весь необходимый код, &mdash; вы сможете следовать ему, если пожелаете. Исходный код также доступен в соотвестующем [репозитории на Github](https://github.com/phil-opp/blog_os).

Последний пост: <!-- latest-post -->

</div>
2 changes: 1 addition & 1 deletion blog/content/edition-2/extra/building-on-android/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ I finally managed to get `blog_os` building on my Android phone using [termux](h

### Install Termux and Nightly Rust

First, install [termux](https://termux.com/) from the [Google Play Store](https://play.google.com/store/apps/details?id=com.termux) or from [F-Droid](https://f-droid.org/packages/com.termux/). After installing, open it and perform the following steps:
First, install [termux](https://termux.com/) from the [Google Play Store](https://play.google.com/store/apps/details?id=com.termux) or from F-Droid. After installing, open it and perform the following steps:

- Install fish shell, set as default shell, and launch it:
```
Expand Down
522 changes: 522 additions & 0 deletions blog/content/edition-2/posts/01-freestanding-rust-binary/index.ru.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
+++
title = "Отключение красной зоны"
weight = 1
path = "ru/red-zone"
template = "edition-2/extra.html"
+++

[Красная зона][red zone] &mdash; это оптимизация [System V ABI], которая позволяет функциям временно использовать 128 байт ниже своего стекового кадра без корректировки указателя стека:

[red zone]: https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64#the-red-zone
[System V ABI]: https://wiki.osdev.org/System_V_ABI

<!-- more -->

![stack frame with red zone](red-zone.svg)

На рисунке показан стековый фрейм функции с `n` локальных переменных. При входе в функцию указатель стека корректируется, чтобы освободить место в стеке для адреса возврата и локальных переменных.

Красная зона определяется как 128 байт ниже скорректированного указателя стека. Функция может использовать эту зону для временных данных, которые не нужны при всех вызовах функции. Таким образом, в некоторых случаях (например, в небольших листовых функциях) можно обойтись без двух инструкций для корректировки указателя стека.

Однако такая оптимизация приводит к огромным проблемам при работе с исключениями или аппаратными прерываниями. Предположим, что во время использования функцией красной зоны происходит исключение:

![red zone overwritten by exception handler](red-zone-overwrite.svg)

Процессор и обработчик исключений перезаписывают данные в красной зоне. Но эти данные все еще нужны прерванной функции. Поэтому функция не будет работать правильно, когда мы вернемся из обработчика исключений. Это может привести к странным ошибкам, на отладку которых [уйдут недели][take weeks to debug].

[take weeks to debug]: https://forum.osdev.org/viewtopic.php?t=21720

Чтобы избежать подобных ошибок при реализации обработки исключений в будущем, мы отключим красную зону с самого начала. Это достигается путем добавления строки `"disable-redzone": true` в наш целевой конфигурационный файл.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
+++
title = "Отключение SIMD"
weight = 2
path = "ru/disable-simd"
template = "edition-2/extra.html"
+++

Инструкции [Single Instruction Multiple Data (SIMD)] способны выполнять операцию (например, сложение) одновременно над несколькими словами данных, что может значительно ускорить работу программ. Архитектура `x86_64` поддерживает различные стандарты SIMD:

[Single Instruction Multiple Data (SIMD)]: https://en.wikipedia.org/wiki/SIMD

<!-- more -->

- [MMX]: Набор инструкций _Multi Media Extension_ был представлен в 1997 году и определяет восемь 64-битных регистров, называемых `mm0` - `mm7`. Эти регистры являются псевдонимами регистров [x87 блока с плавающей запятой][x87 floating point unit].
- [SSE]: Набор инструкций _Streaming SIMD Extensions_ был представлен в 1999 году. Вместо повторного использования регистров с плавающей запятой он добавляет совершенно новый набор регистров. Шестнадцать новых регистров называются `xmm0` - `xmm15` и имеют размер 128 бит каждый.
- [AVX]: _Advanced Vector Extensions_ - это расширения, которые еще больше увеличивают размер мультимедийных регистров. Новые регистры называются `ymm0` - `ymm15` и имеют размер 256 бит каждый. Они расширяют регистры `xmm`, поэтому, например, `xmm0` - это нижняя половина `ymm0`.

[MMX]: https://en.wikipedia.org/wiki/MMX_(instruction_set)
[x87 floating point unit]: https://en.wikipedia.org/wiki/X87
[SSE]: https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions
[AVX]: https://en.wikipedia.org/wiki/Advanced_Vector_Extensions

Используя такие стандарты SIMD, программы часто могут значительно ускориться. Хорошие компиляторы способны автоматически преобразовывать обычные циклы в такой SIMD-код с помощью процесса, называемого [автовекторизацией][auto-vectorization].

[auto-vectorization]: https://en.wikipedia.org/wiki/Automatic_vectorization

Однако большие регистры SIMD приводят к проблемам в ядрах ОС. Причина в том, что ядро должно создавать резервные копии всех регистров, которые оно использует, в память при каждом аппаратном прерывании, потому что они должны иметь свои первоначальные значения, когда прерванная программа продолжает работу. Поэтому, если ядро использует SIMD-регистры, ему приходится резервировать гораздо больше данных (512-1600 байт), что заметно снижает производительность. Чтобы избежать этого снижения производительности, мы хотим отключить функции `sse` и `mmx` (функция `avx` отключена по умолчанию).

Мы можем сделать это через поле `features` в нашей целевой спецификации. Чтобы отключить функции `mmx` и `sse`, мы добавим их с минусом:

```json
"features": "-mmx,-sse"
```

## Числа с плавающей точкой
К сожалению для нас, архитектура `x86_64` использует регистры SSE для операций с числами с плавающей точкой. Таким образом, каждое использование чисел с плавающей точкой с отключенным SSE вызовёт ошибку в LLVM. Проблема в том, что библиотека `core` уже использует числа с плавающей точкой (например, в ней реализованы трейты для `f32` и `f64`), поэтому недостаточно избегать чисел с плавающей точкой в нашем ядре.

К счастью, LLVM поддерживает функцию `soft-float`, эмулирующую все операции с числавами с плавающей точкой через программные функции, основанные на обычных целых числах. Это позволяет использовать плавающие числа в нашем ядре без SSE, просто это будет немного медленнее.

Чтобы включить функцию `soft-float` для нашего ядра, мы добавим ее в строку `features` в спецификации цели с префиксом плюс:

```json
"features": "-mmx,-sse,+soft-float"
```
Loading