Есть шанс, что если вы просто декодируете кодировки %XX URI, вы получите символы в кодировке UTF-8. В zsh
:
autoload zmv
LC_ALL=C zmv '(**/)(*%*)' '$1${2//(#b)%(??)/${(#):-0x$match}}'
Если, как отметил Gilles, этот символ подстановки � предназначен для байта 0xc3 (который в iso8859-1 является буквой, что объясняет, почему он не был URI-кодирован, в отличие от 0x9c, который в iso8859-1 недопустим), то приведенная выше команда изменит имя вашего файла на Übersicht. html
Название main()
было выбрано просто для знакомства и эстетических соображений; его не вызывала среда выполнения C, как в случае с main()
из пользовательской программы. Есть даже комментарий, который говорит об этом вinit/main.c
:
void main(void) /* This really IS void, no error here. */
Функция main()
вызывается изboot/head.s
:
after_page_tables:
pushl $0 # These are the parameters to main :-)
pushl $0
pushl $0
pushl $L6 # return address for main, if it decides to.
pushl $_main
jmp setup_paging
L6:
jmp L6 # main should never return here, but
# just in case, we know what happens
Обратите внимание, что адрес main
помещается в стек, а setup_paging
вызывается с jmp
, а не с call
, что означает, что ret
в конце будет продолжаться с начала main()
.
Ядро Linux, особенно в дни 0.11, загружалось напрямую аппаратным BIOS.
Обычно BIOS просматривает загрузочный сектор (дискеты )или главную загрузочную запись жесткого диска и загружает этот сектор. На жестком диске MBR затем загружает загрузочный сектор «основного раздела».
В этом загруженном загрузочном секторе достаточно информации, чтобы знать, как загрузить ядро в память, а затем запустить его.
Со старыми старыми дисками версии 0.11 это было эффективное решение для загрузки с дискеты, с ядром на одном диске и корнем на другом диске, так что система загрузки была очень простой.
Когда Linux работал с жесткими дисками, процесс загрузки был очень простым. Это было настолько просто, что стало возможным создавать такие инструменты, как «loadlin», которая была простой программой для DOS, которая загружала ядро Linux и загружалась в него, эмулируя загрузчик BIOS. Таким образом можно создать меню config.sys DOS для загрузки DOS или Linux; ранняя форма двойной загрузки.
Но в основе своей ядро Linux загружается с «голого железа» и берет на себя управление машиной.
Функция main
— это особенность языка C. Как именно он преобразуется в компьютерную инструкцию для ЦП, чтобы «начать здесь», в основном является деталью реализации компилятора. На «голом железе» часто можно просто положиться на то, что аппаратное обеспечение начнет выполнение с определенного адреса памяти при первой загрузке. Ранние версии Linux зависели от a. простой загрузчик x86; сегодня эту роль обычно выполняет Grub. Это поведение, в свою очередь, зависит от соглашений прошивки BIOS. Но на самом деле на каждом уровне у вас есть часть компьютерной архитектуры с соглашением о том, как запускать программу.