|
Что такое native?
|
|||
---|---|---|---|
#18+
Сразу, я в pure C и asm полный ноль. Листал, но не изучал, Столярова по asm, что-то по C, писал простейшие учебные программы. Хочу узнать, правильно ли я понял native. Пример программы компилирую в calculate linux: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Получаю "0". hexedit ./hello Смотрю 16 ричный код приложения. Это native для моей сборки linux Gentoo 7.3 верно? Вижу формат elf внутри файла. Там разные коды. Вопрос. Вот этот код -- он же не имеет никакого отношения к машинным кодам? то есть. В компьютере память в банках, допустим 2 банки по 256 мб. Я не пишу в программе hello, что хочу работать именно с 1 банкой. Я прошу ОС выделить мне оперативную память под переменную i. Допустим я заведу переменную str размером 1 гига байт. ОС не моргнув глазом залезет в файл подкачки. Причина в том, что у меня нет через коды доступа к оперативной памяти на физическом уровне. Есть доступ к ОС, которая через драйвер выделяет мне память. Верно? Вывод осуществляется видеокартой. Но я не посылаю команды видеокарте, я посылаю команды какому то api (драйвер) в ОС, чтобы она вывела переменную i, верно? Причина в том, что этот native по сути запущен в ОС как в виртуальной машине. И это верно для всех ОС (windows). или я совсем не прав? зы код обсуждать со мной бессмысленно, вопрос интересен только теоретически, я движки для игр не пишу, мне доступ к оборудованию напрямую не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 06:48 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
авторВот этот код -- он же не имеет никакого отношения к машинным кодам? частично имеет. внутри elf есть и машинные коды и информация, нужная для того чтобы ОС могла эти машинные коды правильно запустить. Когда ты выделяешь память на куче, ты дергаешь системный вызов(обычно не напрямую). Этот системный вызов приводит к работе ОС, которая знает про swap, про страницы памяти, про то, какие страницы памяти в какое адресное пространство твоего процесса отображены, и может сделать правильную работу для того, чтобы в адресном пространстве твоего процесса появились нужные страницы памяти. Тоесть, если говорить именно про память, то нужно ознакомится с страничным механизмом, к маш кодам это имеет мало отношения. авторПричина в том, что этот native по сути запущен в ОС как в виртуальной машине. Конечно, такое полемическое упрощение можно использовать :) Но машинные коды, которые исполняются в твоем процессе - исполняются напрямую процессором. И максимум вмешательства ОС в это - это прерывание исполнение твоего кода когда нужно дать процессорное время другому или когда твои машинные коды обратились к адресному пространству с неназначенной страницей памяти. Ну или еще по каким то причинам, по которым ОС решит прервать тебя :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 07:00 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsxВижу формат elf внутри файла. Там разные коды. Вопрос. Вот этот код -- он же не имеет никакого отношения к машинным кодам? Значит тебе нужно почитать следующую книжку Столярова про низкоуровневое программирование в Linux. Там все неясности быстро устраняются. ELF, такой же ОС-специфичный формат, как и PE под Windows. ОС просто загружает в память программу по своим правилам и секция .text должна быть байт-в-байт одинаковой на обеих платформах, если компилировалась, скажем, gcc под обеими платформами под одну архитектуру с одинаковыми флагами и не вызывала ОС-специфичных сущностей. Остальное содержимое файла уже зависит от целевой ОС, но суть, примерно одинаковая. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 07:18 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsx, native значит скомпилированный код под конкретный проц и под конкретную ОС. Т.е. код собранный в виндовсе не заработает в линуксе, а код для линукса на x86 проце не заработает на ARM проце и т.д. Хотя исходный код на С скомпилируется и заработает во всех перечисленных случаях, но native код будет свой для каждого случая. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 07:32 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
alex_k частично понятно. Например: *** i = 0; i = i + 1; *** То есть как я понимаю, когда идёт операция присваивания i -- эти машинные коды перехватывает ОС и сама присваивает значения. А вот когда идёт суммирование одного значения к другому ОС ничего не перехватывает и те же машинные коды напрямую передаются на процессор. Именно эти перехваты называются защищённым режимом? При этом любое обращение не к процессору (оперативная память, жесткий диск, usb порт и так далее) записывается в машинных кодах, но так или иначе всегда перехватывается ОС. Верно? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 07:34 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsxalex_k частично понятно. Например: *** i = 0; i = i + 1; *** То есть как я понимаю, когда идёт операция присваивания i -- эти машинные коды перехватывает ОС и сама присваивает значения. А вот когда идёт суммирование одного значения к другому ОС ничего не перехватывает и те же машинные коды напрямую передаются на процессор. Именно эти перехваты называются защищённым режимом? При этом любое обращение не к процессору (оперативная память, жесткий диск, usb порт и так далее) записывается в машинных кодах, но так или иначе всегда перехватывается ОС. Верно? Неверно. Присвоение происходит без участия ОС. ОС ничего не перехватывает, код сам вызывает API ОС там где это надо. Читай книги. По линуксу не подскажу, по виндовсу читай Рихтера ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 07:48 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
авторОС ничего не перехватывает, код сам вызывает API ОС там где это надо. Вот теперь всё понятно. --- Допустим человек знает C и asm. Он может управлять своей программой для nix или windows как в примере ниже? Человек пишет, что "для задач высокочастотного трейдинга требуется очень высокая производительность; так как более холодная банка памяти работает быстрее, а памяти для его участка кода надо мало он сам решает на какой банке памяти будут храниться его переменные". Даже не рассматривая быстроту работы можно ли поверить, что кто то идёт в обход ОС и записывает данные в память напрямую в микросхемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 09:11 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsxавторОС ничего не перехватывает, код сам вызывает API ОС там где это надо. Вот теперь всё понятно. --- Допустим человек знает C и asm. Он может управлять своей программой для nix или windows как в примере ниже? Человек пишет, что "для задач высокочастотного трейдинга требуется очень высокая производительность; так как более холодная банка памяти работает быстрее, а памяти для его участка кода надо мало он сам решает на какой банке памяти будут храниться его переменные". ИМХО бред какой-то написан. Программно не выбрать "банку памяти". azsxДаже не рассматривая быстроту работы можно ли поверить, что кто то идёт в обход ОС и записывает данные в память напрямую в микросхемы? Ты не поверишь: запись в память идет "в обход ОС", т.е. сразу в память. Контроль есть, но им занимается процессор, при необходимости сигналит ОС о проблемах. Если интересно - читай про организацию виртуальной памяти , а лучше книги по устройству ОС, там это описано. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 09:26 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
Спасибо. Ответы на вопросы я получил. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 09:38 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
Dima TЕсли интересно - читай про организацию виртуальной памяти а лучше книги по устройству ОС, там это описано. Судя по всему ему бы сначала надо книжки по устройству компьютера почитать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 13:31 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
Dima Tnative значит скомпилированный код под конкретный проц и под конкретную ОС. Вот так правильнее будет. От ОСи зависит только формат контейнера для машинного кода и предоставляемое API. Нынче Windows научилась исполнять код из ELF64 и даже предоставляет ему POSIX API, но это не делает данный экзешник менее нативным. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 13:37 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
Dima Tazsx, native значит скомпилированный код под конкретный проц и под конкретную ОСNative - код, который может (напрямую) исполняться (конкретным) процессором. Как этот код оказался в памяти и насколько корректные там инструкции - дело десятое. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 13:58 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
Dima TПрограммно не выбрать "банку памяти". Программно выбирают адреса, что как раз и даёт нам банку. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 15:40 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsxЛистал, но не изучал Ну молодец. А как тогда понимать? Короче, что там в elf-формате. Там на самом деле две штуки - одна, это структура данных, а вторая, это собственно код. Вот код, он в нативном формате, что означает - этот код поймёт только определённый процессор. Нативный, вообще, означает что-то вроде национальный, то есть по происхождению из такой-то нации. Ну и код тоже - по происхождению для x86 процов, или для ARM-ов, или ещё для чего. А что бы понять, где структуры, где код, и каким местом его происхождение на что-то влияет - нужно книжки читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 15:44 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
alex55555Dima TПрограммно не выбрать "банку памяти". Программно выбирают адреса, что как раз и даёт нам банку. Ты тоже почитай про организацию виртуальной памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 15:45 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
авторему бы сначала надо книжки Я не понимал этого момента из-за книг. В книгах чаще всего разбираются самые простые моменты, типа работа с регистрами, под правильные (идеальные) процессоры и правильную ОС (dos). Также примеры там все сплошь учебные, числодробительные. Поэтому в книгах native -- это целиком машинный код. А в реальной жизни люди говорят о реальных программах. Они написаны на нескольких языках, работают с памятью и диском как минимум, а по идее ещё и с внешними программами, например, БД. Именно они и пишут, что реальная программа на C -- это работа с api OS чуть менее, чем полностью. Из этого следуют холиварные выводы -- но это не флудилка. зы если всё понял не так -- поправьте, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 15:47 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsxавторему бы сначала надо книжки Я не понимал этого момента из-за книг. В книгах чаще всего разбираются самые простые моменты, типа работа с регистрами, под правильные (идеальные) процессоры и правильную ОС (dos). Также примеры там все сплошь учебные, числодробительные. Поэтому в книгах native -- это целиком машинный код. А в реальной жизни люди говорят о реальных программах. Они написаны на нескольких языках, работают с памятью и диском как минимум, а по идее ещё и с внешними программами, например, БД. Именно они и пишут, что реальная программа на C -- это работа с api OS чуть менее, чем полностью. Из этого следуют холиварные выводы -- но это не флудилка. зы если всё понял не так -- поправьте, пожалуйста. Все зависит от того что делает твоя программа: если там сплошной ввод-вывод, то в основном вызовы API ОС. Только не понимаю что в этом плохого? ОС для того и нужна чтобы ввод-вывод упростить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 15:57 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
Dima T я не обсуждаю хорошо это или плохо. Я пишу, что я это узнал (сообразил) только в этом топике :) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 16:05 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
Dima TТы тоже почитай про организацию виртуальной памяти Читал, а ты читал про способы доступа к памяти? Похоже нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 16:10 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
alex55555, Извини, но ты не совсем прав. Программно, изнутри современных "больших" ОС типа Линукс и Виндоус, выбрать банку памяти нельзя. Даже если ты программно укажешь "я хочу такой-то адрес в памяти", ОС может запросто дать тебе этот адрес, но в какой конкретно железной банке памяти оно будет - решит сама ОС. Даже если ты запросишь больше памяти чем есть физически на компьютере и начнешь обращаться к адресам в противоположных концах запрошенного сегмента. ОС будет пересортировывать страницы памяти так как это будет удобно ей, и может даже получиться так что два обращения подряд к разным адресам логической памяти будут на самом деле к одному и тому-же адресу физической. Просто ОС впихнет работу со свопом между этими обращениями. Если ты хочешь самостоятельно управлять памятью на уровне железа - тебе придется нырнуть глубже и написать свой собственный менеджер памяти, что по существу требует написание собственной ОС. Можно конечно взять какую-нибудь другую ОС с более примитивным (или более управляемым) менеджером памяти, но соответственно и сложность написания прикладной программы подрастет. azsx, Не знаю насчет Столярова, которого тебе уже советовали (я его не читал), но лучшей книгой которая ответит на все твои вопросы я назову "Операционные Системы" Таненбаума. Оригинал всегда есть на Амазоне, и переводы на Озоне. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 17:27 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsxесли всё понял не так -- поправьте, пожалуйста. Вообще-то ты практически всё понял не так. Когда "они и пишут, что реальная программа на C -- это работа с api OS чуть менее, чем полностью", то они (иногда) всё же в курсе, что "работа с API OS" это всего лишь вызовы подпрограмм, входящих в состав библиотек, поставляемых с ОС, и представляющих собой машинный код, лежащий по определённому адресу памяти, а собственно "вызов" - это тоже определённая нативная машинная команда (обычно CALL). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 17:51 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
azsx, Кромольную вещь скажу... Если Вас так тянет на низы - копните МК. Можно на сях, можно на азме - разница только в скорости выхлопа. Есть МК где нет осей, от слова совсем. И на азме библиотек так-же нет. Вы и только Вы пишите, то что будет потом работать. По принципу - не работает = сам дурак. Рекомендую. Начать можно с Atmel (условно - бывший фаворит). Если тема захватит - то гребите в сторону STMicroelectronics. Правда там уже азм диковинка (не нужен от слова почти совсем). Ось - если сами притащите будет ось (там в основном юзаются RTOSы). Память вся ваша, кристалл весь ваш, все выводы - ваши. А частоты уже наступают на пятки процам. рекомендую...так сказать (круглый) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.12.2018, 20:49 |
|
Что такое native?
|
|||
---|---|---|---|
#18+
White OwlПрограммно, изнутри современных "больших" ОС типа Линукс и Виндоус, выбрать банку памяти нельзя. Согласен. White OwlЕсли ты хочешь самостоятельно управлять памятью на уровне железа - тебе придется нырнуть глубже И с этим согласен. А в целом же имеем возможность доступа куда хотим, но с приседаниями. При этом "нырять глубже" на самом деле очень просто - менее 512 байт на первичный загрузчик. И далее - твори что хочешь, выбирай банки, пиши вирусы в ядро винды и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.12.2018, 19:59 |
|
|
start [/forum/topic.php?fid=57&msg=39753224&tid=2017691]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 257ms |
total: | 381ms |
0 / 0 |