Приступ мазохизма :) - учебное пособие по win32

Тема в разделе "WASM.HEAP", создана пользователем drmad, 22 апр 2007.

  1. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    Долго думал, куда поместить мессагу: в projects? в os.kernel? Решил сюда, т.к. ближе всего по теме.

    Сочиняю учебное пособие. В одной из глав будет кусок, посвященный системной организации "Окошек32". Написал и... не нравится. :dntknw: Ощущение, что слишком многое пропустил и упростил.
    Прошу помощи. Нужна квалифицированная, объективная, конструктивная критика. Попинайте, меня, пожалуйста! :)
    Объем текста около 600 кило, приаттачить к мессаге не смогу. Если есть желание помочь, напишите мне в личку drmad(гав!)dr.com, и я переправлю вам текст.
    Заранее спасибо.
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Мы и так попинать можем, где текста :)
     
  3. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    Текста могу выслать мылом, а вообще здесь: http://www.nf-team.org/drmad/winsys.pdf
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    стр. 2: 16-разрядные версиям
    Win32s - о ней ни слова, хотя Win16 рассматривается достаточно подробно.

    и иногда используются до настоящего момента.
    Речь о 95, 98 и ME. Я бы не сказал, что 9x используется "иногда", особенно специалистами в автоматизации, которые вообще любят 9x больше чем NT. А на десктопах 98 и ME встречаются довольно часто. Кое-где их ещё ставят на новые, но слабые, клоны.

    , а также совместимые с ними разработки фирм AMD, Cyrix и пр.
    Вместо Сирикс, я бы поставил хотя бы VIA :) раз уж в предложении явно упоминаются Пентиумы.

    Теме сегментной адресации, CPL, RPL, DPL, ... нужен хоть 1 рисуночек. Да и вообще с рисунками жидко.

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

    Я бы рекомендовал рассматривать Win16, Win9x и WinNT отдельно друг от друга, а то в перемешку с ними можно запутаться. Так, я в одной теме думал, что речь идёт про 9х, а оказалось (при повторном прочтении) - про Win16.

    "Осилил" примерно половину. Завтра постараюсь дочитать.
     
  5. CodeTao

    CodeTao Евгений

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    177
    Адрес:
    штаты
    Стр. 3 ... то некоторые версии MS Windows могут по мере необходимости переключаться в реальный режим..., но потом все равно возвращаться домой. – из защитного режима уже нельзя переключится в реальный, можно только изменить параметры защитного режима, но тогда это уже будет псевдореальный (встречал название в литературе еще как линейный) режим, да и стоит автоматизаторам рассказывать про Win 3.11, если ее использовать явно не будут(даже на старом оборудовании целесообразно использовать QNX)

    После прочтения остается ощущение что взяты куски из разных книг и накидано в одно место.

    Было бы неплохо разделить описание процессора с описанием виндовс.

    Также очень мало данных по dos-у, а особенно по dos расширителям, которых довольно часто используют в данной области.

    Я не соглашусь с Quantum на счет линии 9x, учитывая что на серьезном производство автоматизация осуществляется контролерами ( от siemens и т. д.) и компьютер используется лишь как интерфейс управления, то все преимущества 9x перед стабильностью nt ничего не стоят. В случае когда компьютер всеже используется для управления, то на нем обычно не стоит win по причине не предсказуемого времени отклика, а dos либо осрв. А посему зачем вообще описание win9x?

    Очень смущает местами очень детальное описание некоторых характеристик win (я наберусь наглости и скажу не полезных/не нужных характеристик) при бедном описании особенностей программирования.

    Совсем нет описания осрв. Я не сноб, но на территории СССР автоматизация на приемлемом уровне преподавалась лишь двух вузах, в одном из них точно, уже два года назад начали преподавание QNX-а. Ссылка – Приазовский Государственный Технический Университет, факультет ИТ, кафедре АТПиП(зав кафедры Симкин А.И.)

    Настоятельно рекомендую добавит материал (и исходники) по работе с COM, LPT в этих О.С.

    Не сочтите мою мессагу строгой, но некачественные доки и методы просто убивали меня в пору студенчества.
     
  6. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    CodeTao
    это только на 286 нельзя, потом можно ;))
    У Зубкова куча экзамплов на этом построено ;)

    Интересная постановка вопроса - 3.1 надо, а 9х нет :))
    При программировании и отладке девайсов для автоматики через порты компьютера 9х однозначно удобнее НТ.
    [offtop]
    кроме того и сейчас для ооочень многих задач можно комфортно использовать, например PII, под win98, попробуй поставить на него ХР :))
    [/offtop]
     
  7. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    Топик перенесли. Может, и к лучшему, больше народа прочитает. :)

    QUANTUM

    стр. 2: 16-разрядные версиям Win32s - о ней ни слова, хотя Win16 рассматривается достаточно подробно.
    Пара предложений есть. Дальше. :)

    и иногда используются до настоящего момента.
    Речь о 95, 98 и ME. Я бы не сказал, что 9x используется "иногда", особенно специалистами в автоматизации, которые вообще любят 9x больше чем NT. А на десктопах 98 и ME встречаются довольно часто. Кое-где их ещё ставят на новые, но слабые, клоны.

    Да. Именно так. Win 9X при том же чел-машинном и системно-прикладном интерфейсе гораздо ближе к железу.

    а также совместимые с ними разработки фирм AMD, Cyrix и пр.
    Вместо Сирикс, я бы поставил хотя бы VIA :) раз уж в предложении явно упоминаются Пентиумы.

    У меня VIA ассоциируется с северными и южными мостами, а не с процами. :) А вот про процы что-то другое смутно брезжит в памяти...

    Теме сегментной адресации, CPL, RPL, DPL, ... нужен хоть 1 рисуночек. Да и вообще с рисунками жидко.
    Угу. Подумаю.

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

    М-м-м... Не совсем догоняю. Имеется в виду, что двумя разными парами сегмент/селектор можно указать в одно место?

    Я бы рекомендовал рассматривать Win16, Win9x и WinNT отдельно друг от друга, а то в перемешку с ними можно запутаться. Так, я в одной теме думал, что речь идёт про 9х, а оказалось (при повторном прочтении) - про Win16.
    Ага. Вот что значит "свежий глаз". :) Я все время боялся, заметно это или нет. Если бы мог, написал бы в 3 колонки.

    "Осилил" примерно половину. Завтра постараюсь дочитать.

    Заранее спасибо.


    CodeTao

    Стр. 3 ... то некоторые версии MS Windows могут по мере необходимости переключаться в реальный режим..., но потом все равно возвращаться домой. – из защитного режима уже нельзя переключится в реальный, можно только изменить параметры защитного режима, но тогда это уже будет псевдореальный
    Угу. Понимаю. что Коряво и мутно получилось. :dntknw: Хотелось одним предложением сказать и что Вин9Х для ДОСовских прог в ВМ86 переключается, а 32-разрядные проги через специальные шлюзы 16-разрядный системный код юзают.

    После прочтения остается ощущение что взяты куски из разных книг и накидано в одно место.
    Почти так. :) В основе: Фроловы, Зубков, Паппас/Марри, чуть-чуть Интеловских мануалов, пара-тройка статей из Тырнета, личные прогулки в компании с ТД32 и ВинАйсом. В Литературе все ссылки обязательно будут. Все это проглочено, переварено, лишнее (или не лишнее?) отрыгнуто, а то что осталось - вот оно. :)

    Было бы неплохо разделить описание процессора с описанием виндовс.
    А они разве выглядят вместе? Хорошо, по другому оформлю заголовки.

    Также очень мало данных по dos-у, а особенно по dos расширителям, которых довольно часто используют в данной области.
    Именно да. Такой кусок есть, и довольно большой. Просто я его не включил в эти фрагменты, потому что к нему у меня меньше недоверия.

    Я не соглашусь с Quantum на счет линии 9x, учитывая что на серьезном производство автоматизация осуществляется контролерами ( от siemens и т. д.) и компьютер используется лишь как интерфейс управления, то все преимущества 9x перед стабильностью nt ничего не стоят. В случае когда компьютер всеже используется для управления, то на нем обычно не стоит win по причине не предсказуемого времени отклика, а dos либо осрв. А посему зачем вообще описание win9x?
    Вообще, все так и одновременно не так. :)
    Если говорить именно о "промышленной" автоматизации, то там все просто: какой контроллер купил - то и имеешь. Купил контроллер от Пеп/Контрон, имеешь проц МС86К и OS-9. Купил дешевый (до 500-700$) контроллер с х86, на нем ДОС. Купил дорогой - на нем Вин ХПЕ. Купил Сименс, имеешь кота в мешке. :) И все это с заточенными под конкретное железо либами и дровами, ваять что-нибудь иное - себе дороже. Часто целевая ОСь скомпонована в сверхкомпактном варианте: микроядро + необходимые дрова, а среда разработки с окошками и дебагерами живет в Виндах.
    А вот в области "лабораторной" автоматизации (например, в АСНИ) железо обычно нестандартное, требования к реальному времени жестче, вообще соотношение сбора данных/управления к обработке другое, да и требования непрерывной работоспособности в течение, например, года, нет. Поэтому вот тут обычно юзают обычные персоналки (изредка, в особых случаях, в "промышленном" исполнении) и софт пишут полностью сами. И вот тут маздай, кстати, наиболее быстрое и дешевое решение. QNX 6.x Neutrino - он только для некоммерческих приложений (для образования и т.п.) бесплатен, а в остальных случаях, увы, будь добр. ТО же самое касается и остальных ОС РВ.

    Очень смущает местами очень детальное описание некоторых характеристик win (я наберусь наглости и скажу не полезных/не нужных характеристик) при бедном описании особенностей программирования.
    Каких именно? А куски прог обязательно будут - в тексте коротенькие, на полстранички, а длинные пойдут в Приложения.

    Совсем нет описания осрв. Я не сноб, но на территории СССР автоматизация на приемлемом уровне преподавалась лишь двух вузах, в одном из них точно, уже два года назад начали преподавание QNX-а. Ссылка – Приазовский Государственный Технический Университет, факультет ИТ, кафедре АТПиП(зав кафедры Симкин А.И.)
    Есть. Просто не в этом разделе. И теория планирования параллельных задач, и механизмы синхронизации, и обзоры QNX, и OS-9/9000, и VxWorks, и немножко про Линух/РТ, и даже про ОС2000. :))) Просто объем ограничен, да и дрова под QNX я почти не умею.:dntknw:
    А насчет преподавания автоматизации - тема эт объемная и сложная, требует хорошего коллектива преподов и немалых финансовых вложений в железо и софт. Даже если специализацию берет под крыло какая-нибудь организация, занимающаяся автоматизацией, от она и делает это с конкретным прицелом на подготовку сотрудников для себя любимой. Например, у нас на факультете есть специализация АСРВ, которая по требованиям курирующей фирмы изучает только технологии Сименс. Все остальное просто скипается за ненадобностью. Подозреваю, что и в других местах все примерно так же. Другая крайность - коллективы преподов, которые застряли в Сов. Союзе. Нам до сих пор присылают из МОрквы методические разработки (с требованием обязательно учесть и заюзать!), в которых упоминаютс СМ-4, RSX, Фортран и т.п. В каком они веке живут и в какой стране? :dntknw:

    Настоятельно рекомендую добавит материал (и исходники) по работе с COM, LPT в этих О.С.
    Да. Будет. Наверное, даже не я буду эти куски писать. А может и я. :) И COM (кроме RS-232 плюс обязательно RS-485/422), и Centronix, и usb, и can, и hart, может быть даже еще КОП/GPIB (ибо клятые буржуи все еще продолжают клепать цифровые осциллографы и спектрометры с приборным интерфейсом). Не все одинаково подробно, в основном, видимо, все-таки последовательные интерфейсы. Ибо куда не плюнь, а на приборы ставят именно их, а не USB или упаси Боже, Езернет. :)

    Кстати, QUANTUM за прошедший год пока не убедил меня, что если два компа связать 0-модемной веревочкой, то они сами снюхаются по скоростям и форматам. :)))

    Не сочтите мою мессагу строгой, но некачественные доки и методы просто убивали меня в пору студенчества.
    Так и надо. Сам мучительно пытаюсь вспомнить, чего же мне в итоге потребовалось то, чего не дали в институте. ПОка получается так: справочные сведения и конкретные умения пригодись на 25-30%, зато до сих пор очень не хватает общих представлений, общей системы знаний, желательно без дырок и разрывов. И некоторых разделов матики. :)


    ALL

    Повъедливей, пожалуйста. Мне до сих пор кажется, что я какую-то принципиальную дурь сказанул. Например, вот я отдельно рассматриваю сегментную и страничную адресацию, тогда как вторая без первой в чистом виде не бывает. Это принципиально?
     
  8. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    1) Картинок селекторов и дескрипторов действительно не хватает.
    /мне вот понравились оные из
    [Intel® 64 and IA-32 Architectures Software Developer’s Manual. Volume 3A - System Programming Guide, Part 1] aka 253668.pdf
    /
    2) Про FS регист, который имеет ненулевую базу. И цепочка SEH, которая раскручивается как не "адрес предыдущего", а как адрес следующего, т.е. последний обработчик - система. Еще про структуры адресуемые этим самым сегментным регистром (TEB'ы там разные и проч).
    3) Было бы неплохо сказать пару или более слов о ntoskrnl.
    4) В ntdll не нашёл syscall, только sysenter (KiFastSystemCall) и int 2Eh (KiIntSystemCall), причём выбор между этими двумя способами вызова ядро определяет динамически /здесь могу сам гнать не разбирался подробно/, т.к. идёт косвенный вызов этих строчек кода (здесь формируется адрес одного из способов - 7FFE0300h - xp sp2 ntdll).
     
  9. CodeTao

    CodeTao Евгений

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    177
    Адрес:
    штаты
    Ага, значит пора мне перечитывать доки, спасибо.
    Камень не в мой огород - по мне 9x с 3.1 в топку. На счет портов, я где-то видел драйвер который открывает доступ к портам в NT. Просто когда винда падает вместо того что бы просто выдать ошибку возникает желание схватится за волосы и побиться головой об стенку:) Возможно я уж слишком предвзято отношусь к стабильности.
     
  10. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Точно. Пардон.

    Я имел в виду, что есть компании, которые на данный момент производят конкурентоспособные x86 процессоры, вроде VIA, а Сирикс то давно уже загнулась...

    Если подобрать значения в таблице дескрипторов сегментов. К примеру, 2 разных сегмента могут указывать на один и тотже базовый адрес: 1000h и 2000h могут оба указывать на 10000000h. Тогда 1000:1 и 2000:1 тоже будут соответствовать одному физическому адресу - 10000001. К слову, при сегментной адресации в реальном режиме (до 286) и на виртуальном V86 (в более поздних процессорах) тоже существовала возможность коллизий.

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

    стр. 17: KERNEL - отвечала за общесистемные операции (файловый ввод-вывод, управление памятью, загрузку и выполнение программ, поддержку сетевых функций и т.п.)
    В кернеле win16 точно были какие-то сетевые функции? Вроде бы, даже в кернеле XP нет ничего сетевого.
     
  11. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    asmfan

    И цепочка SEH, которая раскручивается как не "адрес предыдущего", а как адрес следующего, т.е.

    Да. Это вот как раз конкретный глюк. :) Спасибо.

    Было бы неплохо сказать пару или более слов о ntoskrnl.

    Но не в этом разделе, а там, где появится необходимость. Пока нет, но планируется.

    В ntdll не нашёл syscall, только sysenter (KiFastSystemCall) и int 2Eh (KiIntSystemCall),

    Не проверял, понадеялся на инфу из Тырнета. Но слегка удивлен. Выходит, если проц АМДшный, то только int 2E без альтернативы? Кто-нибудь, кто более в теме, может прояснить?

    CodeTao

    я где-то видел драйвер который открывает доступ к портам в NT.

    На самом деле, таких драйверов просто море. Лично я, когда нужно быстро, пользуюсь tvichw32 - не надо самому ничего писать и задумываться, в какой оси живешь.

    Quantum

    Я имел в виду, что есть компании, которые на данный момент производят конкурентоспособные x86 процессоры, вроде VIA, а Сирикс то давно уже загнулась...

    Да я понял. А кроме ВИА кто-нибудь еще?

    Да я и сам усомнился, что это возможно, но девайс работал,

    Так девайсы или компы? :) Про компы - нет, а про произвольный дивайс запросто могу поверить, потому что такие технологии точно есть, и в конкретный гаджет разработчики могли поставить как раз такую микруху.

    В кернеле win16 точно были какие-то сетевые функции?

    Х/з. Источник: Фроловы "Программирование в Windows 3.0" :))) Впрочем, можно проверить. Дистрибут у меня где-то в чулане валяется, можно раскрутить и посмотреть в кернел дизассемблером. Так и сделаю.

    ALL

    Неужели ничего больше не царапает глаз? "Не верю!" (с) :dntknw:
     
  12. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Пиши скорее и положим на сайт :))).
     
  13. St

    St New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2006
    Сообщения:
    72
    Я не очень понял предолжение на стр. 6, что иммелось ввиду.
     
  14. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    drmad
    На слуху только ВИА, но должны быть и другие.

    Связка комп <-> принтер. Кто из них подстраивался под кого - х.з.

    Ну, на XP я уже проверил - нет ничего.
     
  15. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia
    St

    Я не очень понял предолжение на стр. 6, что иммелось ввиду.

    В самой обычной прикладной проге 3-го кольца загляни в сегментные регистры DS и CS. И сразу поймешь. :)

    Quantum

    Ну, на XP я уже проверил - нет ничего.

    Короче, заглянул. Выяснилось: в Вин16 сетевые функции жили в USER, а не в KERNEL. Спасибо, сам бы не обратил внимание.

    Aquila

    Пиши скорее и положим на сайт :))).

    Нечего пока. :) Но тема не закрыта. Кусков, в которых я не полностью уверен, у меня много. :)
     
  16. Zhelezovsky

    Zhelezovsky Member

    Публикаций:
    0
    Регистрация:
    24 окт 2006
    Сообщения:
    39
    CodeTao
    У нас именно так и сделано. Контроллер Allen-Bradley управляет печью и прессом, а наладчик через компьютер (486, DOS, супервайзерная программа не помню какой американской фирмы) задаёт ему параметры печи (температура, время разогрева) и пресса (усилие прессования, время прессования, уровни остановов и т.д.).