Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Разобраться в программировании i386/486 на системном уровне.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Student Pupkin
А то книгу Таненбаума дальше 2-ой главы читать не получается smile.gif.
Просто хочется немного въехать в архитектуру, особенно в часть управления памятью, переключения задач. В целях понимания Minix-а smile.gif.
Мне бы какое-нибудь подобие симулятора, что-то типа Emu8086, под Windows.
И еще про компилятор спросить хотел - кроме GCC или ACK можно что-нибудь еще использовать для компиляции ядра (если конечно дойду до такой стадии smile3046.gif )? Borland или Watcom?
sigmaN
А чем дебажат разработчики Minix-а? Может и последовать их примеру?

Цитата
Просто хочется немного въехать в архитектуру, особенно в часть управления памятью, переключения задач
ага, помню Линус рассказывает в одной из своих лекций, с каким трудом он въезжал в эту архитектуру и особенно в часть управления памятью и переключения задач в защищенном режиме )
Ага, а потом добавил что-то вроде(вольный перевод): "Я не знаю кто разрабатывал эту архитектуру, но могу сказать, что большую часть времени ребята находились под действием какого-то сильного наркотика."
dch
ватком хороший компилятор
XVR
Если с английским проблем нет - то читайте первоисточник 'Intel® 64 and IA-32 Architectures
Software Developer’s Manual' (на сайте Intel, 3 тома в 5ти pdf'ах)
Student Pupkin
Цитата(sigmaN @ May 24 2010, 02:52) *
А чем дебажат разработчики Minix-а? Может и последовать их примеру?

Методом "натурных" экскрементов экспериментов. Ну еще виртуальную машину заюзать предлагают - Bochs, Qemu и т.д.
Встречный вопрос - как дебажат разработчики Linux-а?
Цитата(XVR @ May 24 2010, 11:31) *
Если с английским проблем нет - то читайте первоисточник 'Intel® 64 and IA-32 Architectures
Software Developer’s Manual' (на сайте Intel, 3 тома в 5ти pdf'ах)

Ой. smile.gif А я надеялся обойтись переводами на 386 и 486. Ну попробую smile.gif . Но мне бы еще какой-нибудь инструмент для закрепления знаний на практике.

P.S. Вот интересно, у Bochs в доке написано, что есть "Bochs internal debugger".
cioma
Был раньше здоровый черный том по архитектуре 8086, 286, 386. Причем описание было весьма подробным, включая схемы. Может кто помнит название и автора?
demiurg_spb
Я помнится читал это - для начала неплохо, но весьма кратко.
cioma
А, ну конечно, совсем забыл: книги Михаила Гука - must have! smile.gif
Genadi Zawidowski
Г.В. Орловский
Введение в архитектуру микропроцессора 80386
Сеанс-Пресс LTD.
Санкт-Петербург 1992

Одна из частей - сводная таблица команд процессора (это лучше смотреть в оригинале).
ПОНЯТНО объяснена архитектура управления памятью.
В приложении - ассемблерный код, который можно заставить (мне удалось) работать. Там заготовка, переводящая процессора в protected mode и оставляющая машину работать в V86. MMU не инициализируется.
ВОбщем-то, все опечатки (их немного, до десятка) не мешают пониманию.
Если Вы в Питере - могу подарить эту книгу.

Поискал - нашёл немного напоминающее по стилю http://programmer.newmail.ru/programs/protect/PROTECT.HTM

Погуглите насчёт UNREAL MODE - интересный трюк, разберитесь как он делается - будет понятнее, как работает x86.

А дебажил - "двоичным методом". Самое безопасное - это ставить контрольные точки переходом "сам на себя". И смотреть - машина зависла или перезагрузилась (из-за двойного исключения). Я так свой загрузчик отлаживал.
Лучше иметь "подопытную машину" - с NETBOOT через сеть - всё идёт быстрее.

К сожалению не нашёл тех исходников - прикладываю то, чем всё кончилось...
Student Pupkin
Цитата(Genadi Zawidowski @ May 25 2010, 01:12) *
Если Вы в Питере - могу подарить эту книгу.

Нет. я не в Питере. Но все равно спасибо огромное! smile.gif
Нашел книгу вот такую - В.Л.Григорьев "Микропроцессор i486". Вроде неплохая. Написано суховато - именно так, как я люблю. smile.gif
Цитата(Genadi Zawidowski @ May 25 2010, 01:12) *
А дебажил - "двоичным методом". Самое безопасное - это ставить контрольные точки переходом "сам на себя". И смотреть - машина зависла или перезагрузилась (из-за двойного исключения). Я так свой загрузчик отлаживал.
Лучше иметь "подопытную машину" - с NETBOOT через сеть - всё идёт быстрее.

Все таки попробую разобраться, что там в Bochs-е за дебаггер такой встроенный. Второй подопытной машины дома нет, на работе меня за изучение x86 и Миникса - maniac.gif
Еще момент, который пока не прояснил (гуглю, работаю на этим smile.gif) - по поводу компилятора. Например Watcom или Visual C - можно с помощью них компилировать ядро, точнее, пока для меня вещи простые, загрузчик и т.п.? Может вопрос глупый, фиг его знает smile.gif. Я как понимаю, главным образом линкер ответсвенен за то, что получаем на выходе - испольняемый exe-шник операционной системы или непосредственно двоичный файл. Watcom, Borland и Visual C все это тоже умеют? (спрашиваю только про эти компиляторы - просто у меня windows, с gcc/make не знаком, mingw скачал, но пока не трогаю...боюсь smile.gif)
Genadi Zawidowski
За Watcom не скажу, но я 32-х битную часть в разное время компилировал Borland C 5.2, потом Visual C.
16-ти битный код - сперва Borland, а потом 16-ти битный кусок уменьшился до пары сотен байт (когда я перестал грузить в нём файлы) и он оказался ассемблерным.
В проект, что я выложил, как инструмент входит линкер (что-то мне не удалось сделать стандартным, не помню).

Кроме отладки через netboot я ещё делал загрузочные образы CD и с них тестировал... флоппи-диски уже начали вымирать.

Да, найдите ассемблер от Microsoft - ml.exe. Он входит, например, в DDK. небольшая часть кода, запускающая ядро (и некоторые компоненты C run-time library), написаны на ассемблере.

Не хотел, но все-таки напишу...
Найдите отладочную плату с каким-нибудь ARM... и начните с нуля на нём.
Когда я повторял путь многих людей, делавших то же самое (загрузчики, переход в protected mode, ядро), кроме просто изучения "а как устроенно ядро" предполагал использовать этот опыт для встроенных систем там, где не хватало мощности других микропроцессоров, где требовалась 32-х битная машина. Опыт остался, как побочный эффект - легче с драйверописанием для NT/XP, а во востраиваемых системах Intel386 так и не оказался.
XVR
Может взять для изучения что нибудь попроще - eCos например. В нем есть все - и загрузчик, и тулчейн для сборки всего и вся (в том числе и под Windows), и возможность грузить собранный образ ОС из grub (boot менеджер от Linux, должен вполне ужится и с Windows).
Поотлаживаться можно в VMWare, там тоже есть что то отладочное. Еще можно поотлаживаться в QEmu (он вроде есть под Windows, и к нему точно можно присоединить gdb - для отладки)
Student Pupkin
Цитата(Genadi Zawidowski @ May 25 2010, 08:29) *
Не хотел, но все-таки напишу...
Найдите отладочную плату с каким-нибудь ARM... и начните с нуля на нём.

Плата у меня есть - c AT91SAM9260 (наверное поторопился покупать - зелен еще smile.gif)
Рассуждал так:
1) Пытался въехать в Линукс. Практически все книги на русском описывают его работу на архитектуре x86 (одна книга попалась, где еще про PowerPC объяснялось). Кроме того понял, что сначала нужно все-таки общую теорию по осям почитать (а заодно по алгоритмам, и вообще программировать учиться smile.gif).
2) Взялся читать Таненбаума - еще раз убедился, что неплохо бы знать i386 или i486 (выше не надо).
3) Решил, что поучу i386/i486. В целом должно быть полезно (вдруг осуществится мечта моего детства - стану злым хакером smile.gif ). Потом буду разбираться в том, как устроен Миникс. Потом попробую все это перенести на ARM - как на нем должно работать (архитектуру ARM7/9 я немного знаю, кроме части MMU-MPU smile.gif но это я тоже потом наверстаю) ..... Ай-яй. вот ляпнул то! smile.gif Когда говорил, "что попробую все это перенести на ARM" - имел ввиду не порт Миникса на ARM (хотя поучаствовал бы с удовольствием), а сами принципы работы ядра.

Да, самообучаюсь я с уклоном в embedding. Но пока фактически никакого уклона делать не надо - мне просто нужно учиться программированию, основным алгоритмам, теории работы операционных систем. В связи с этим хочется осилить Таненбаума и его Миникс (не за выходные есесно - сам Таненбаум в книге говорит, что это миниму семестр-два).
Кроме того мне интересен Миникс как микроядерная ось. Даже нашел Миникс на ARM - почти в зачаточном состоянии, почти голое ядро. К сожалению на minix3.ru затачиванием Миникса поб embedded (о чем с самого начала они говорили) - и не пахнет. Хотя нет, немного попахивает smile.gif.
Еще услышал о разработках на основе микроядре L4 - например вот, какие-то японцы начинали minix-L4 (сейчас забросили).
Опять таки, большинство таких проектов начинаются под x86.

Вот. smile.gif

Если я где-то не прав (о полезности знаний про x86 или способе самообучения) - обязательно поправьте smile.gif.

Цитата(XVR @ May 25 2010, 10:03) *
Может взять для изучения что нибудь попроще - eCos например.

Возможно. Мне сложно определиться smile.gif. К тому же у меня недостаточно знаний, чтобы просто покопаться в коде какой-нибудь оси и понять, как она работает. Плюс Миникса в том, что к нему прилагается здоровенная книга, где, по идее, должны быть разжеваны все моменты. Хотя исходники TNKernel я все же распечатал на днях smile.gif.
Короче окончательно пока не знаю, за что лучше ухватиться.
Genadi Zawidowski
Ещё посмотрите на reactos...
И парочка ископаемых в аттачменте
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.