неділю, 18 грудня 2011 р.

lua

Поміж скриптових мов, що плодяться останнім часом як кролики, крім всіх відомих монстрів типу Perl, Python, PHP, існує одна маленька, майже крихітна, при тому зручна та потужна мова -- Lua. Звичайно, вона не призначена замінити, скажімо, Python. Її призначення скромніше. Це може бути написання скриптів для задання поведінки об'єктів програми, наприклад юнітів у іграх. Або конфігурування програми. Можливість задавати конфігурацію не просто числовими параметрами та стрічками, але й за допомогою повноцінної мови програмування - дуже потужна. Поки повіримо на слово, приклади будуть далі :-)
Трішки історії та реклами:
  • Офіційний сайт: http://www.lua.org.
  • Неофіційний сайт із документацією: http://lua-users.org/wiki/.
  • Існування мови розпочалося в 1993, створена командою розробників з католицького університету Ріо-де-Жанейро, Роберто Єрусалимським (Roberto Ierusalimschy), Вольдемаром Целесом (Waldemar Celes) і Луісом Енріке (Luiz Henrique). 
  • "Стандартний" інтерпретатор реалізовано на C, хоча існують реалізації як іншими мовами, так і просто альтернативні, великий список тут: http://lua-users.org/wiki/LuaImplementations.  
  • Ліцензія, починаючи з версії 5.0 - MIT License. В загальних рисах, вона дозволяє робити з кодом майже все що завгодно, поки при його використанні вказується копірайт, а автори не несуть жодної відповідальності. Неофіційний переклад ліцензії українською тут.  
  • Актуальна зараз версія - 5.2, але так як вийшла вона всього кілька днів тому, все нижче стосується версії 5.1.
  • Назва Lua португальською мовою означає Місяць. 
Переваги мови перерахуємо, слідуючи за її авторами:
  • Луа активно використовується в багатьох програмах, починаючи від Adobe's Photoshop Lightroom, та ігор і закінчуючи вбудованими системами. На англомовній вікіпедії для таких ігор навіть створено окрему категорію: "Category:Lua-scripted video games".
  • Луа швидка, одна із найшвидших скриптових мов!
  • Луа портабельна, легко переноситься практично на будь-яку платформу. 
  • Луа "ембедабельна" (embeddable) і може легко бути включена в програму, написану на C, C++, та на багатьох інших мовах (Java, C#, Smalltalk, Fortran, Ada, Erlang, Perl, Ruby). 
  • Луа дуже потужна! Але при тому - крихітна, інтерпретатор із всіма стандартними бібліотеками займає всього кількасот кілобайт.
  • Включає доволі хороший очи́щувач па́м’яті  (garbage collector).
  • Про ліцензію вже згадувалося :-) -- дуже відкрита.
Давно хотів щось про неї написати, так як активно використовую в своїх обчислювальних програмах. А нещодавно і потреба виникла. Постів заплановано декілька - загальний огляд мови, деякі особливості використання, типові ідіоми та трюки, binding (прив'язку) до C/C++ та імпорт сутностей, оголошених в C/C++ програмі (функцій, змінних, класів) у Lua, як стандартним API, так і за допомогою сторонніх засобів (Diluculum, swig). Як воно вийде - побачимо :-)

Що ж це за мова така?

четвер, 15 грудня 2011 р.

Новини з Вести, кінець 2011

Я достатньо байдужий до невеликих, безатмосферних, фактично мертвих тіл, таких як астероїди. (Хоча, звичайно, і вони не повністю мертві, але характерні часові масштаби -- сотні мільйонів років якось не надихають). Тому особливо ретельно за дослідженням Вести не слідкую. Однак, коротко розповісти, що ж ми довідалися про неї за півроку активних досліджень варто.

Почнемо із загальних фізичних параметрів. Для порівняння заглядатимемо в список того, що було відомо до "Dawn": http://indrekis2.blogspot.com/2011/06/blog-post.html.
  • Супутників не виявлено. Тобто, навряд чи вона має супутники з діаметром, більшим за 10 метрів.
  • Маса 2.591 × 1020 кг, так як похибка не уточнюється, то вважатимемо -- з точністю до останнього знаку. Раніше найбільш точним припущенням було (2.67 ± 0.02)×1020. Близько, в інтервал не потрапляє, але відрізняється менше ніж на 3%. Так що оцінкам астрономів іноді можна вірити :-) Не зважаючи на всі труднощі по вимірюванню далеких небесних тіл, результати надзвичайно точні.
  • Середній розмір 524 км, проти оцінки 530 раніше. Різниця -- порядку процента!
  • 3.440 г/см³ проти 3.42 г/см³. Півпроцентна різниця.
  • Як для небесного тіла, яке мільярди років "старіє" під впливом космічного випромінювання, Веста на диво кольорова. Хоча оком, на жаль, цього помітити не вдалося б... Вся надія на синтетичні кольори :-) Велика різниця в кольорі між південними та екваторіальними областями. 
  • Мала термальна інерція, як у пилюки (на відміну від каміння).
 (Взято із записок Емілі з EPSC-DPS, від 3 жовтня 2011, де було представлено попередні результати).

середу, 5 жовтня 2011 р.

Не динозаврами єдиними...

На жаль, для більшості людей уявлення про еволюцію живого виглядає якось так: "Жили динозаври, потім їх всіх повбивало метеоритом, на їх місці завелися мавпи, а потім інопланетяни привезли людей, але влада приховує". Формулювання придумано не мною, не можу знайти оригінальної цитати, хоча авторство, ймовірно, Кирила Еськова. І це не говорячи про тих, що взагалі "не вірить в еволюцію", чи то буквально трактуючи ті чи інші релігійні тексти, чи то вдаряючись в "креаціонізм". Багатьом, підозрюю, просто бракує інформації, а в вульгарному переказі (див. вище) звучить справді дико. 

Проте, не будемо про сумне. Посилання на матеріали з приводу, що таке палеонтологія, теорія еволюції, що в їх рамках відомо, як обґрунтовується і т. д. -- внизу. Тут же хотів би поговорити про інше. Динозаври, хоча й величні, грізні, розрекламовані, (на загал - пафосні :), але період їх володарювання -- лише одна епоха в історії Землі. Безперечно цікава, але, як на мене, далеко не найцікавіша. Так само як і їх вимирання -- не найбільше і не найсерйозніше.

Перед ними було багато інших цікавих епох та важливих етапів розвитку живого:

суботу, 27 серпня 2011 р.

Уроки захищеного режиму x86. Весь цикл разом

Закінчивши викладати уроки, вирішив зібрати для зручності всіх їх в один пост.

Історію моєї роботи з ними можна почитати тут, дублювати немає сенсу.

Базою для них послужили уроки захищеного режиму Алексея Фрунзе. Офіційна сторінка тих уроків, http://welcome.to/pmode, на жаль більше не доступна, але див. також сюди: http://members.tripod.com/protected_mode/alexfru/pmtuts.html.

Написано сумбурно, безтолково, однак просто так викинути було шкода. Крім вже згаданої сумбурності та безтолковості, до недоліків належать: багатослівність, місцями спроби охопити все-все-все, ніякий переклад термінів (*). Набір інструментів трішки роздутий, хоча в педагогічних цілях це цілком може бути плюсом. Організація текстів програм мені зараз теж не дуже подобається, але переробляти лінь. Може, як буде попит - в наступній версії.

Можуть бути помилки :-) (Впевнений що вони є)

Крім того це все ж уроки (максимум - лабораторні роботи), тому систематичного викладу роботи захищеного режиму немає. Правда, є багато довідкової інформації. 

Отож, поїхали.

пʼятницю, 26 серпня 2011 р.

Уроки захищеного режиму x86. Урок 17 з 17

Сімнадцятий і останній урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5. "Уроки захищеного режиму x86. Урок 5".
  6. "Уроки захищеного режиму x86. Урок 6". 
  7. "Уроки захищеного режиму x86. Урок 7".  
  8. "Уроки захищеного режиму x86. Урок 8".
  9. "Уроки захищеного режиму x86. Урок 9".
  10. "Уроки захищеного режиму x86. Урок 10".
  11. "Уроки захищеного режиму x86. Урок 11".
  12. "Уроки захищеного режиму x86. Уроки 13-16".
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 17
Базується на уроці 7, використовує апаратну багатозадачність. Показано як користуватися шлюзами виклику. Задача на рівні привілей 3 викликає процедуру з рівня 0. Саме так, за допомогою шлюзів виклику, операційна надає доступ задачам користувацького рівня до своїх сервісів.

Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.

Архів з файлами уроку: pm_17.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.
Із захищеним режимом (поки? :) все. Закінчилася часточка цієї епопеї тривалістю в 15 років. 


Цікавих тем багато, один тільки 64-бітний режим чого вартий, але ні часу ні особливої зацікавленості поки немає...



Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

четвер, 25 серпня 2011 р.

Уроки захищеного режиму x86. Уроки 13-16

Уроки захищеного режиму з 13 по 16.

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5. "Уроки захищеного режиму x86. Урок 5".
  6. "Уроки захищеного режиму x86. Урок 6". 
  7. "Уроки захищеного режиму x86. Урок 7".  
  8. "Уроки захищеного режиму x86. Урок 8".
  9. "Уроки захищеного режиму x86. Урок 9".
  10.  "Уроки захищеного режиму x86. Урок 10".
  11.  "Уроки захищеного режиму x86. Урок 11".
  12.  "Уроки захищеного режиму x86. Урок 12".
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Уроки номер 13, 14, 15, 16

Всі ці уроки є вступом у використання режиму віртуального 8086 (v8086). На жаль, вони поки без теоретичного опису, лише код із коментарями. Матеріал там відносно простий, однак доволі плутаний. Коли працював над цими уроками, руки не дійшли, а зараз немає ні зацікавленості, ні часу. Однак, якщо буде попит, щось можна придумати :-)
13:
Багатозадачність, як і в попередньому уроці. Одна з двох задач переходить в режим v8086 -- для неї в TSS встановлено відповідний прапорець у EFLAGS.

14:
Додано код, що насправді реалізує роботу в режимі v8086. Підтримуються програмні переривання для задач v86.
15:
Майже повноцінний v86-монітор. IRQ перенаправляються до задачі v86. Завдяки цьому задачі доступні всі функції DOS, прямо як у вікні MS-DOS "віндовса" :-) Про роботу монітора свідчить зірочка, що мерехтітиме в правому верхньому кутку екрану. Запущено command.com (чи що там у вас було в COMSPEC і можна спробувати виконати команди типу dir, чи навіть запустити програми реального режиму.


16:
Крім описаного в попередньому уроці додано підтримку покрокового зневадження (Int 1). Тепер з-під цього монітору працюватимуть і Turbo Debugger і вбудовані зневаджувачі середовищ Turbo Pascal чи Turbo C.

Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.

Архіви з файлами уроків: pm_13.zip, pm_14.zip, pm_15.zip, pm_16.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в ці файли, про що я старатимуся повідомляти.

На сьогодні все. Сімнадцятий, останній, урок показуватиме, як можна користуватися шлюзами виклику.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

понеділок, 22 серпня 2011 р.

Уроки захищеного режиму x86. Урок 12

Дванадцятий урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5. "Уроки захищеного режиму x86. Урок 5".
  6. "Уроки захищеного режиму x86. Урок 6". 
  7. "Уроки захищеного режиму x86. Урок 7".  
  8. "Уроки захищеного режиму x86. Урок 8".
  9. "Уроки захищеного режиму x86. Урок 9".
  10.  "Уроки захищеного режиму x86. Урок 10".
  11.   "Уроки захищеного режиму x86. Урок 11".
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 12

До програми з уроку 11 додано по LDT для кожної задачі рівня привілей 3. Селектори сегментів даних та коду задач тепер знаходяться в їх LDT.

Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.

Архів з файлами уроку: pm_12.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступних чотири уроки, 13, 14, 15, 16, стосуватимуться режиму v8086. Їх буде викладено разом. На жаль, вони поки без теоретичного опису, лише код із коментарями. Матеріал там відносно простий, однак доволі плутаний. Коли працював над цими уроками, руки не дійшли, а зараз немає ні зацікавленості, ні часу. Однак, якщо буде попит, щось можна придумати :-)

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

Уроки захищеного режиму x86. Урок 11

Одинадцятий урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5. "Уроки захищеного режиму x86. Урок 5".
  6. "Уроки захищеного режиму x86. Урок 6". 
  7. "Уроки захищеного режиму x86. Урок 7".  
  8. "Уроки захищеного режиму x86. Урок 8".
  9. "Уроки захищеного режиму x86. Урок 9".
  10.  "Уроки захищеного режиму x86. Урок 10".
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 11

Майже та сама програма, що і в уроці 7. Основна відмінність --- задачі task1() і task2() тепер 32-бітні і працюють на рівні привілей 3, правда за IOPL=3.

Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.

Архів з файлами уроку: pm_11.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. В наступному уроці кожній задачі додамо свою LDT.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

суботу, 20 серпня 2011 р.

Не такі часті питання з приводу Lustre

Такий собі Not so Frequently Asked Questions :-) 
Теми, які замалі для окремого поста, але все ж цікаві.
Оновлюватиметься в процесі появи нових питань-відповідей.

пʼятницю, 19 серпня 2011 р.

Зміна NID серверів Lustre

Іноді Network IDentifier (NID) MGS/MDS/OSS може змінюватися. Наприклад при перенесенні на нову апаратуру, встановленні нової мережевої карти, чи просто присвоєнню нової IP-адреси.

Описано цей процес тут: "14.5 Changing a Server NID" (Lustre 2.0 Operations Manual), хоча деяких деталей там не вказано.

Покажемо його на прикладі зміни NID MGS нашої іграшкової Lustre.

четвер, 18 серпня 2011 р.

Квоти в Lustre

Аналогічно до попередніх постів:
цей пост не претендує на вичерпність, є спрощеним варіантом HOWTO, та швидше стосується невеликих систем, які при потребі можна відносно безболісно вимкнути як ціле на якийсь час.

Отож, квоти. Річ, яка допомагає адміністраторам не допускати несправедливості, а користувачам контролювати свої пориви :-)

середу, 17 серпня 2011 р.

Перевірка ФС Lustre на цілісність.

Говорячи про цілісність файлової система (ФС) Lustre, слід розділяти дві її складові -- цілісність базових файлових системи (backing file systems), які зберігають всі дані Lustre, та власне логічну цілісність файлової системи, доступної користувачам. Базова ФС є варіантом ext3/ext4, і для ї перевірки використовується спеціальний варіант e2fsck. Перевірка цілісності ФС Lustre як цілого здійснюється спеціалізованою програмою, lfsck.

В нормі потреб для додаткових перевірок базових файлових систем немає. Вона залишається цілісною, завдяки використанню журналювання. Єдиний виняток, коли перевірка e2fsck необхідна -- ситуації, в яких журналювання безпомічне, такі як апаратні збої, помилки вводу-виводу, тощо. Взагалі, згідно документації ("27.1 Recovering from Errors or Corruption on a Backing File System", Lustre 2.0 Operations Manual), Lustre здатна справитися з більшістю неузгодженостей, що можуть виникнути, і потреба користуватися e2fsck/lfsck виникає рідко.

Однак іноді потреба (чи бажання :) виконати перевірку таки є. Як це зробити для невеликих Lustre-систем описано нижче. Чому саме невеликих? Їх простіше вимкнути як ціле, перевірити і запустити знову. З великими системами зробити так важче. Так ось, проблема мінімізації недоступності Lustre чи окремих її частин під час перевірок тут не має особливо високого пріоритету.

неділю, 14 серпня 2011 р.

Іграшкова Lustre.

В попередньому пості описувалося, як розгорталася повноцінна Lustre-система. Однак іноді хочеться поекспериментувати не так монументально. Можливість для цього існує :-)
Lustre чудово працює на loopback-пристроях.

Опишемо як можна створити таку іграшкову (кишенькову)  "люстру". Додатково корисно подивитися "10.1 Configuring a Simple Lustre File System" (Lustre 2.0 Operations Manual) та "Configuring Lustre - Examples" (Lustre 1.8 Operations Manual). (Інструкції до 1.8 хоча і трохи застаріли для 2.0, однак часто більш зрозумілі чи детальні).

Будемо створювати Люстру із своїм MDS,  MDS, та двома OSS.

пʼятницю, 12 серпня 2011 р.

Інсталяція Lustre 2.0

 На прикладі нашого кластера опишу в деталях процес підготовки Lustre до роботи. Короткий огляд "люстри" в попередньому пості. Перш ніж читати далі, варто із ним ознайомитися, інакше вам будуть незрозумілі більшість термінів та причини чому щось робиться саме так а не по іншому. (Тим же, хто досвідчені у роботі з Lustre, навряд чи згодиться що той пост, що цей :)

По структурі текст ближчий до How-to, аж ніяк не є вичерпним описом всіх варіантів. Ну і, навіть в аналогічній конфігурації, ваші результати можуть відрізнятися :-)

За відгуки, виявлені помилки та пропозиції по тексту буду вдячним.

четвер, 11 серпня 2011 р.

Огляд Lustre, кластерної файлової системи

Нещодавно на нашому кластері виникла необхідність оновити систему збереження, Lustre. Щоб спростити собі такі задачі на майбутнє, вирішив написати кілька нотаток, які стосуватимуться різних аспектів роботи з "Люстрою".

Спершу, в ролі огляду, що ж таке Lustre -- моя стаття та презентація з семінару, присвяченому кластеробудуванню в Західній Україні. Зауважу, що відбувся він доволі давно - майже рік тому. З того часу багато що змінилося. Оракл, якому належала Lustre після придбання Sun, повідомив про припинення її розробки. Однак, зразу виникло кілька фірм, що розробляють та підтримують цю, безперечно, перспективну розподілену файлову систему. Серед них слід виділити Whamcloud, куди пішли ключові розробники - Eric Barton і Andreas Dilger, щоб продовжити роботу над Lustre.

Текст нижче стосується, в основному, Lustre 1.8. Надалі описуватиметься Lustre 2.0, яка дуже схожа у всіх аспектах, однак має і суттєві відмінності.

За відгуки, виявлені помилки та пропозиції по тексту буду вдячним :-)

Презентація доступна тут
Система збереження даних Lustre

Система збереження даних Lustre 

суботу, 6 серпня 2011 р.

Уроки захищеного режиму x86. Урок 10

Десятий урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5. "Уроки захищеного режиму x86. Урок 5".
  6. "Уроки захищеного режиму x86. Урок 6". 
  7. "Уроки захищеного режиму x86. Урок 7".  
  8. "Уроки захищеного режиму x86. Урок 8".
  9. "Уроки захищеного режиму x86. Урок 9".
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 10

Цього разу -- адресація до 4Гб оперативної пам'яті з реального режиму, використовуючи недокументовані особливості процесорів. Описано недокументований "нереальний" режим.

Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.

Архів з файлами уроку: pm_10.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок показуватиме, як організувати багатозадачність із задачами не тільки нульового але й третього рівня привілей.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

На орбіті Вести

Прибули! Помилок в Азімова трохи є, але немає на те ради :-) Та й цінимо ми його не тільки за точність вгадування параметрів небесних тіл.

Що ж побачили, прибувши? Для початку -- типове безатмосферне тіло. Кратери, ущелини, реголіт. Не всі світи такі захоплюючі та різноманітні, як наша Земля. Але свій шарм у Вести є.

понеділок, 25 липня 2011 р.

Уроки захищеного режиму x86. Урок 9

Дев'ятий урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5. "Уроки захищеного режиму x86. Урок 5".
  6. "Уроки захищеного режиму x86. Урок 6". 
  7. "Уроки захищеного режиму x86. Урок 7".  
  8. "Уроки захищеного режиму x86. Урок 8". 
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 9
Багатозадачність з примусовим витісненням. Основна відмінність від сьомого уроку --- не використовується апаратне переключення задач за допомогою TSS. Збереження контексту здійснюється програмно, за допомогою стеку. Цей спосіб вважається швидшим і більш універсальним, та використовується всіма сучасними промисловими операційними системами.
Нових елементів захищеного режиму не розглядається
Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.
 
Архів з файлами уроку: pm_09.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений сторінковій організації пам'яті.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

пʼятницю, 22 липня 2011 р.

Уроки захищеного режиму x86. Урок 8

Восьмий урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5.  "Уроки захищеного режиму x86. Урок 5".
  6.  "Уроки захищеного режиму x86. Урок 6". 
  7.  "Уроки захищеного режиму x86. Урок 7". 
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 8
Демонстрація роботи трансляції сторінок. У графічному режимі на екран виводиться 16 кольорових смужок, послідовно: 
  • Трансляція сторінок заборонена, послідовність кольорів -- чорний, блакитний, ..., жовтий, білий.
  • Трансляцію ввімкнено, трансляція тотожна, послідовність кольорів та ж -- чорний, блакитний, ..., жовтий, білий.
  • Трансляцію ввімкнено, сторінки перетасовано, послідовність кольорів протилежна -- білий, жовтий, ..., блакитний, чорний.
Використано режим 0x13 VGA, в якому кожному пікселю відповідає рівно один байт. В ньому роздільна здатність 320x200, тому відеопам'ять, яка виводиться на екран, займає 64000 байти, майже 64Кб. Заповнивши різні сторінки байтами, що задають різні кольори ми фактично і безпосередньо візуалізуємо їх  :-)
А візуалізувавши, показуємо, як зміниться зображення, якщо ввімкнути трансляцію, яка  лінійним тотожно ставить у відповідність фізичні (не зміниться) та коли лінійні адреси сторінок відеопам'яті розташовано у зворотному порядку (так як контролер відеоадаптера читає за фізичними адресами, порядок кольорів смужок теж стане зворотнім).

Описано (болдом виділено теми, що безпосередньо стосуються захищеного режиму):
  • Принципи сторінкової організації пам'яті.
  • Її реалізація, директорії та каталоги сторінок. Робота із записами в них. TLB, CR3.
  • Засоби процесора для заміщення сторінок, виключення Page Fault.
  • Розширення механізму сторінкової організації. Регістр CR4, великі сторінки (PSE), доступ до пам'яті за межами 4Гб - 1 (PAE), доступ до пам'яті за межами 4Гб - 2 (PSE-36).  
  • Відеорежим 0x13 VGA-сумісних  адаптерів.
Сторінкова організація в 64-бітному режимі поки не розглядалася. Якщо буде цікаво - пишіть ;-) 

Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.
 
Архів з файлами уроку: pm_08.zip.


Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений багатозадачності без використання апаратного переключення задач та TSS.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

понеділок, 11 липня 2011 р.

Уроки захищеного режиму x86. Урок 7

Сьомий урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5.  "Уроки захищеного режиму x86. Урок 5".
  6.  "Уроки захищеного режиму x86. Урок 6".
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 7
Продовження теми багатозадачності. Три задачі рівня привілей 0: main(), task1(), task2(). Переключення здійснює планувальник, який викликається з обробника переривань таймера, IRQ0. Багатозадачність із примусовим виштовхуванням (preemptive multitasking) у всій красі.

Нових елементів захищеного режиму не розглядається, на конкретному прикладі в деталях описано процес переключення задачі.
Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.
 
Архів з файлами уроку: pm_07.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений сторінковій організації пам'яті.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

середу, 6 липня 2011 р.

Уроки захищеного режиму x86. Урок 6

Шостий урок захищеного режиму. 

Попередні : 
  1. "Уроки захищеного режиму x86. Урок 0 та 1". 
  2. "Уроки захищеного режиму x86. Урок 2". 
  3. "Уроки захищеного режиму x86. Урок 3". 
  4. "Уроки захищеного режиму x86. Урок 4".
  5.  "Уроки захищеного режиму x86. Урок 5".
Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 6
Майже те ж, що і в уроці 5. Додано переключення задач. main() переключається на tast(), виконуючи дальній перехід на TSS. Потім task() чекає на клавішу ESC і отримавши її, переключається назад, на main(). Обидві задачі на рівні привілей 0, тому карта дозволу вводу-виводу в TSS не потрібна. Також непотрібними є стеки для міжрівневих переходів --- SS0:ESP0, SS1:ESP1, SS2:ESP2.

Описано:
  • Призначення та формат TSS,
  • Процес апаратного переключення задач,
  • Коротко про нюанси -- ланцюжки задач, шлюзи задач, задачі як обробники переривань, тощо.
Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.

 
Архів з файлами уроку: pm_06.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений багатозадачності з примусовим виштовхуванням задач.
 
Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

вівторок, 28 червня 2011 р.

Есе про контролер клавіатури Intel 8042

Фрагмент 5-го уроку захищеного режиму, вартий уваги сам по собі. Інформація місцями не до кінця перевірена, написано несистематично -- тема широка, з захищеним режимом пов'язана слабо :-), але може комусь згодиться.

пʼятницю, 24 червня 2011 р.

Наближаючись до Вести

"Down" повільно (140 м/с станом на 17 червня) наближається до Вести. Цей маленький але гордий світ :-) потроху показує все нові свої подробиці. Пост присвячений власне процесу наближення і буде поповнюватися аж до виходу на орбіту.

понеділок, 20 червня 2011 р.

Космічний апарат Dawn

"Dawn", "Світанок" -- автоматичний (безпілотний) космічний апарат для дослідження астероїдів. Найближча його ціль, до якої залишилося ще зоооовсім трішки -- Веста. Основне завдання -- вивчення відбитки ранніх періодів існування Сонячної системи, що мали б зберегтися на астероїдах.

суботу, 18 червня 2011 р.

Перші результати Dawn з Вести. Остання фото -- 25 км на піксель!

Стаття про сам Dawn теж готова, але так як щойно з'явилися ще новини, вона трішки зачекає. А ми перейдемо до перших його результатів :-)

Веста

Скоро ми матимемо нагоду познайомити зблизька ще з одним крихітним світом, який самотньо подорожує десь між орбітами Марса та Юпітера. Хай це прозвучить надміру пафосно для все-пізнавшої та у-всьому-розчарованої нашої території (це я про територію від Варшави і  мінімум до Байкала), але кожен такий візит -- справжнє чудо. Нагода побачити вперше те, чого ніхто раніше не бачив. Тим більше із сучасною традицією НАСА викладати "сирі" фото майже зразу.  

Звичайно, навряд чи нові враження зможуть зрівнятися із першим поглядом під густу атмосферу Титану. Однак навіть Феба виявився несподіванкою, хоча до "приходу" перших кадрів здавалося - "Ну що я, космічних каменюк не бачив?". А комета Хартлі-2 -- взагалі суцільний сюрприз, (навіть якщо не знаєте англійської, див. фото тут, тут і тут).

Отож Веста. Одне з найбільших тіл поясу астероїдів. До неї повільно (іонні двигуни все ж :) наближається робот, посланець Землі, Dawn, "Світанок". Перш ніж струмочок нових даних переросте у бурхливу річку, підсумуємо що ми знаємо про Весту зараз, до того як його відвідали космічні апарати.

понеділок, 13 червня 2011 р.

IRQ та PIC

Фрагмент 5-го уроку захищеного режиму, вартий уваги сам по собі. Інформація місцями не до кінця перевірена, багато що опущено, так як не має відношення до типової архітектури x86, але може комусь згодиться :-)

вівторок, 7 червня 2011 р.

Уроки захищеного режиму x86. Урок 5

П'ятий урок захищеного режиму. 

Попередні : 

Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 5
Та ж GDT що і й раніше. Майже та сама IDT, що і в 4-му уроці, лише додано два обробника: IRQ0, таймер та IRQ1, клавіатура. Перепрограмовуємо PIC щоб призначити правильні обробники захищеного режиму для IRQ. Програма завершує свою роботу після натиснення ESC. З клавіатурою працює напряму, через контролер.

Описано:
  • Огляд - що таке IRQ (Interrupt ReQuest) і як з ними боротися.
  • Програмування PIC (Programmable Interrupt Controller).
  • Робота з клавіатурою: контролер клавіатури, скан-коди, трішки про роль BIOS.
  • З приводу контролера клавіатури - керування лінією A20 та кілька слів про програмні затримки при вводі-виводі. 
Нових елементів захищеного режиму не вводилося, хіба практично показано як можна обробляти IRQ. Реалізація поки тільки змішана, C-asm. Якщо буде зацікавленість, можна написати і чисто асемблерну.
 
Архів з файлами уроку: pm_05.zip.
Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений типам виключних ситуацій та переривань, і їх обробці. 
 
Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

четвер, 2 червня 2011 р.

Уроки захищеного режиму x86. Урок 4

Четвертий урок захищеного режиму. 

Попередні : 

Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 4
Та ж GDT, що і раніше. В IDT -- обробники всіх виключних ситуацій. Реалізовано їх як обгортки, що викликають один і той самий обробник. Обробник виходить з захищеного режиму, виводить тип виключення та його адресу  і закінчує програму. Виділений стек не створюється, тому stack fault (та можливо деякі інші) коректно ним не оброблятимуться. 

Описано:
  • Що таке переривання та виключення (exceptions).
  • Обробники переривань захищеного та реального режиму.
  • Шлюзи пасток, переривань та задач.
  • Спосіб виклик обробника в залежності від причини переривання.
  • Типи виключень -- збої (faults), пастки (traps) та "аварії" (aborts).
  • Дано перелік виключень, що можуть генеруватися процесором.
  • Формат коду помилки для тих виключень, що його генерують. Окремо описано код помилки для Page Fault.

Є як змішана C-asm так і чисто асемблерна реалізації.
Архів з файлами уроку: pm_04.zip. (Updated - 1.)
Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений типам виключних ситуацій та переривань, і їх обробці.
Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

понеділок, 30 травня 2011 р.

Уроки захищеного режиму x86. Урок 3

Третій урок захищеного режиму. 

Попередні : 

Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій. 
Урок номер 3
Та ж GDT що i в другому уроцi. Створюємо IDT (Interrupts Descriptor Table – таблиця дескрипторiв переривань), яка мiстить обробник програмного переривання Int 20h та виключної ситуацiї – дiлення на нуль (Int 0). Перший з них просто виводить повідомлення, другий -- закінчує роботу програми. Продемонстровано їх роботу. Звернiть увагу що обробники є 16-бiтними (типу 286). Зроблено це для простоти.

Описано (болдом виділено те, що безпосередньо відноситься до захищеного режиму):
  • Типи системних дескрипторів.
  • Шлюзи виклику.
  • Шлюзи задач.
  • Шлюзи переривань та IDT.
  • Одним реченням - експорт функції C для використання з асемблерного коду для NASM.

 Є як змішана C-asm так і чисто асемблерна реалізації.
Архів з файлами уроку: pm_03.zip.
Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений типам виключних ситуацій та переривань, і їх обробці. 
Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

неділю, 29 травня 2011 р.

Уроки захищеного режиму x86. Урок 2

Другий урок захищеного режиму. 

Базою для цих матеріалів служать уроки уроки захищеного режиму Алексея Фрунзе
Ліцензія на код -- GPL2+, ліцензія на тексти -- GFDL.
Довідкова інформація взята з відкритих джерел на просторах Інтернету, зокрема з офіційних мануалів Intel.
Традиційне і очевидне -- жодних гарантій.

Урок номер 2

Створюємо GDT. Поміщаємо туди три дескриптори сегментів, які співпадають з відповідними сегментами реального режиму -- сегмент коду, сегмент даних та сегмент стеку. Будуються вони наступним чином: база - CS/DS/SS*10h, ліміт - 0xFFFFh, грануляція - байтова. Крім того, створюємо сегмент що відповідає буферу відеопам'яті -- база 0xB8000h. Всі сегменти - 16-бітні. Створивши таку GDT, переходимо в захищений режим, виводимо на екран повідомлення, "Hello from PMode!", виходимо з нього та завершуємо програму. Так як сервіси BIOS чи DOS нам недоступні, вивід на екран здійснюємо звертаючись безпосередньо до відеопам'яті. 

Описано (болдом виділено те, що безпосередньо відноситься до захищеного режиму):
  1. Формат селектора сегменту. 
  2. Формат дескрипторів, в коді програми - спосіб їх формування.
  3. Типи дескрипторів.
  4. Обчислення лінійної адреси.
  5. Тіньові частини сегментних регістрів.
  6.  Відеопам'ять текстового режиму. Вивід на екран без використання сервісів BIOS чи операційної системи (дуже коротко).
  7. Керування вирівнюванням структур в Open Watcom.
 Є як змішана C-asm так і чисто асемблерна реалізації.
Архів з файлами уроку: pm_02.zip.

Незначні зміни, доповнення та виправлення будуть вноситися прямо в цей файл, про що я старатимуся повідомляти.

На сьогодні все. Наступний урок буде присвячений IDT, введенню в обробку переривань і суміжним питанням.

Дякую за увагу

Якщо є запитання, виправлення, пропозиції - пишіть! Багато часу цьому приділяти, на жаль, не можу, але якщо з того буде комусь користь - спробуємо щось придумати.

суботу, 28 травня 2011 р.

Дози радіації

Трапилася дуже мила (а по сумісництву -- ще й інформативна) картинка про дози опромінення, "радіації", які можна отримати в різних обставинах (картинка велика, тому під катом):

пʼятницю, 27 травня 2011 р.

Приклади використання асемблера разом з OpenWatcom

Що таке Open Watcom

Open Watcom -- "Open source" версія славного компілятора Watcom. В 90-х йому фактично не було рівний, особливо під платформи DOS та Windows. Багато програм, зокрема канонічних ігор тих (і всіх взагалі) часів, таких як Doom, Hexen, Descent чи Duke Nukem 3D компілювалися саме ним, а заставка DOS/4GW пам'ятна багатьом дотепер. Історія його розпочалася в 80-х роках минулого століття на ниві FORTRAN, компілятор C вийшов у 1984. При тому, ходять чутки що історія цього сімейства компіляторів розпочалася ще в 1965, хоча яка саме природа приємственності між розробками 60-х та 80-х, мені невідомо. В кінці минулого тисячоліття компанія-розробник, SyBase, прийшла до висновку що ринок компіляторів під DOS фактично вимирає, а тягатися з Microsoft під Windows нереально. Тому на початку 2000-х, в кілька етапів, код компілятора було відкрито. (Лише той, що належав SyBase, тому Windows SDK, MFC, тести компілятора, підтримка QNX і т.д. не були відкриті.) Тепер він підтримується та розробляється спів-товариством добровільних розробників. 

Що я про нього думаю
Про сучасний стан фахово говорити мені складно, тому далі виключно моє IMHO. 
Оптимізатор коду С, най-най в 90х, зараз помітно поступається сучасним компіляторам. Підтримка C++ доволі слабенька, хоча певна тенденція прямувати до повної підтримки стандарту C++98 є. Перші версії OpenWatcom використовували STLport, однак потім від неї відмовилися на користь власної Open Watcom STL (OWSTL). Вона все ще неповна і працювати з нею людині, яка звикла до повноцінної (не обов'язково най-най-сучаснішої з найідеальнішою відповідністю стандарту) важко, пробував. Щоправда, спроби використати STLport все ще мають шанс на успіх. З іншого боку, багато важливих платформ, які підтримує OpenWatcom -- 16-бітні, і навряд чи є реальний шанс подружити з ними STLport. Тому потреба у власній реалізації STL велика. (Буду вдячний за вказівку на більш точну інформацію про розвиток STL для OpenWatcom, бажано з посиланнями, тому що не маю впевненості чи я не перебрехав усе).

Ходять крім того по Інтернету чутки що розробники не особливо чуйні, навіть якщо приходити до них із своїми "патчами". Особливо бояться чіпати кодогенератор. Наскільки вони обґрунтовані не знаю.

Вище говориться про недоліки. Але, при тому, це один з найкращих доступних інструментів для розробки під 16-бітні операційні системи, зокрема 16-бітного коду (djgpp, порт мого улюбленого gcc під DOS генерує 32-бітний код та покладається на сервіс DPMI, якщо немає системного -- власний CWSDPMI). При цьому OpenWatcom -- не тільки компілятор/лінкер/асемблер/дизасемблер, що і так було б немало, але й IDE, засоби збірки програм, зневадження, та інші інструменти. 

Взагалі, в ролі host-платформи він може використовувати (тобто -- працює на):  DOS, OS/2, Linux, Windows 16/32-бітний (на 64-бітному він працюватиме як 32-бітна аплікація), RDOS; target-платформи (для яких може генерувати код): всі перераховані + Nowell NetWare (інформація взята з інсталятора OW-1.9). Мови програмування -- FORTRAN, C/C++.

Використання асемблера разом з OpenWatcom

В уроках захищеного режиму Open Watcom використовується якраз завдяки тому, що підтримує генерацю 16-бітного коду. Главу про його взаємодію із зовнішніми функціями, зокрема написаними на асемблері, я вирішив винести в окремий пост. Інформація, подана тут/там -- лише ввідна. (Вона далеко не вичерпна - компілятор має надзвичайно розвинуті засоби для такої взаємодії. І це абсолютно природно, враховуючи зоопарк угод про виклики в тих OS, які він підтримує.)

Ці засоби менш гнучкі  та більш прямолінійні ніж аналогічні в gcc, але зате простіші у вивченні та використанні. (Ех, треба буде колись і про Inline Assembler в gcc написати...)

середу, 25 травня 2011 р.

Засоби зневадження в bochs

Вирішив окремо винести частину нульового уроку захищеного режиму, присвячену засобам зневадження (відлагодження) bochs - так-званому internal debugger.

Нагадаю, bochs -- емулятор x86-сумісних процесорів та деякої типової апаратури "IBM-PC-сумісних" машин. Підтримує процесори від 386 і далі. Реалізовано підтримку x86-64, MMX, SSE аж до SSE4.2, AES, тощо. Детальніше див. документацію та приклад конфігурування bochsrc-sample.txt. З апаратури підтримуються доволі просунутий BIOS, VGA адаптер та VESA режими аж до 2560x1600x32bpp, гнучкі та жорсткі диски, CD-ROM, клавіатуру-мишку-звукову-мережеву-карти, паралельні та послідовні порти, частково USB, тощо. Частина пристроїв виключно віртуальна, в ролі інших можна використовувати фізичні пристрої host-машини.

Не всі пристрої присутні на кожній з host-архітектур, на яких bochs працює.

Скачати цю всю радість можна тут: http://sourceforge.net/projects/bochs/files/bochs/2.4.6/. Представлено Win32, Win64, Linux 32/64 бінарні дистрибутиви та джерельні тексти.

Особисто я був вражений внутрішнім "дебагером", тому вирішив главу про нього винести в окремий пост.

Нічого такого, чого немає в документації, цей пост не містить, і може краще читати безпосередньо її. Також bochs підтримує взаємодію з GDB, ця можливість тут не розглядається.

вівторок, 24 травня 2011 р.

Уроки захищеного режиму x86. Урок 0 та 1

Історія

Колись давно-давно, ще в 1995, був у мене крутий комп Пошук-1. Разом із всіма розширеннями - CGA-монітор, 640Кб пам'яті, 5" дискові, процесором типу i8088 та підтримкою команди POP CS. І було навколо мене багато брутальних програмерів, які переконали мене що Асемблер це круто. А також продали книгу Пітера Абеля "Ассемблер и программирование для IBM PC" видання кінця 80-х -- початку 90-х (*). І за одне і за друге я їм вдячний, але це окрема тема. Вже тоді ми знали що є 286-ті, і це круто, знали що є 486 і це неміряно круто. Сам факт "сидіння" за 486-м був приводом для заздрощів. Минув рік, з'явився комп'ютерний клас з десятка 486-х а мені на добу дали переклад офіційного мануала Intel до чи то 386-го чи то 486-го процесора. Розібратися в на порядки складнішій, в порівнянні з реальним, системі захищеного режиму за цей час звичайно не вдалося. Але бажання розібратися залишилося, прямо за Фрейдом з його витісненими бажанням, на все життя. :-)

Через багато років, у 2006-му, коли документація та спеціалізовані книги вже були легкодоступні і значення прапорців дескрипторів не треба було більше шукати по безграмотних методичках, написаних викладачами для галочки, довелося мені трішки вчити асемблеру. В процесі я писав свою "методичку", яка так і залишилася незавершеною. Нещодавно натрапив на ті тексти. Сумбурно, безтолково, місцями безграмотно, однак достатньо незле щоб шкода було просто так викинути. Вирішив поділитися :-) Перед тим трішки почистив, виправив знайдені помилки та URL що змінилися. Для початку --- додаток, присвячений захищеному режиму 386+.

Базою для цього додаткового розділу послужили уроки захищеного режиму Алексея Фрунзе. Офіційна сторінка тих уроків, http://welcome.to/pmode, на жаль більше не доступна, але див. також сюди: http://members.tripod.com/protected_mode/alexfru/pmtuts.html.

Крім вже згаданої сумбурності та безтолковості, до недоліків належать: багатослівність, місцями спроби охопити все-все-все, ніякий переклад термінів (**). Набір інструментів трішки роздутий, хоча в педагогічних цілях це цілком може бути плюсом. Організація текстів програм мені зараз теж не дуже подобається, але переробляти лінь. Може, як буде попит - в наступній версії.

Можуть бути помилки :-) (Впевнений що вони є)

Крім того це все ж уроки (максимум - лабораторні роботи), тому систематичного викладу роботи захищеного режиму немає. Правда, є багато довідкової інформації.

Отож, поїхали.