Сообщения центрального процессора

Тема в разделе "WASM.NT.KERNEL", создана пользователем Sidorma, 28 сен 2011.

  1. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    Добрый день!

    Помогите решить следующую задачу.
    Необходимо собрать воедино все сообщения, которые поступают к центральному процессору, а также от него.
    Обработка прерываний - я правильно копаю?
    Очень срочно нужно. Пожалуйста, откликнитесь!

    Спасибо.
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Процессор обрабатывает поток команд. Прерывание - это просто изменения последовательного их исполненя. С этой точки зрения прерывание ничем не отличается от команды jump или call, просто причина вовне, а не в потоке комманд. Поэтому твой вопрос имеет право на существование, но непонятно пока что конкретно ты хочешь?
    Что есть сообщения? Процессор никаких сообщений не получает - это понятие программирования, а не аппаратное. Но да существуют архитектуры с сообщениями, но это не Интел x86.
     
  3. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    Под сообщениями в данном случае понимается поток информации между ЦП и его интерфейсами.
     
  4. DEEP

    DEEP Андрей

    Публикаций:
    0
    Регистрация:
    27 апр 2008
    Сообщения:
    491
    Адрес:
    г. Владимир
    Т.е. обмен данными с периферией типа клавиатуры или дисковых накопителей, насколько понимаю?
    Хорошо, тогда следующий вопрос: какова цель заведения такого буфера, в который всё это будет складироваться?

    Вопрос отнюдь не праздный: вполне вероятно, что исходную задачу возможно решить более простым методом.
     
  5. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    Да, совершенно верно.

    Цель именно в этом. Собрать как можно больше сообщений между ЦП и различными интерфейсами. Сообщения, которые нужно собирать, должны быть непосредственно близки ЦП, т.е. прямые команды и т.п.
     
  6. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    Sidorma
    В таком случае все правильно вы копаете ... копайте дальше. вы молодец!
     
  7. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    shchetinin
    В таком случае не подкинете парочку примеров на Си? ))
    Желательно без всяких вставочек ассемблеровских, ибо не ведаю сие совершенство.
    Спасибо!
     
  8. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    что вы понимаете под интерфейсами? Контроллер флоппи-дисковода - это интерфейс? Драйвер клавиатуры - это интерфейс? Собрать воедино ВСЕ сообщения (=потоки информации между ЦП и интерфейсами) - потенциально все или все имеющиеся в данной конфигурации? Если у нас нет контроллера флоппи? Если у нас нет LPT-порта?

    А также вопрос КУДА их собрать воедино... и какие именно потоки. Кем поставлена задача - преподаватель или вы сами себя озадачиваете. И что вы хотите получить в итоге?

    Между процессором и некоторыми устройствами информация передается через порты. А некоторые устройства имеют регистры, отображаемые на память. Прерывание - вроде бы подходит, но не для всего. Кто-то и не генерирует прерываний. У клавиатуры есть. А от видео? не факт (смотря что за видео-карта) . Встроенный динамик? IRQ нет. Хотя есть порты для управления, из портов можно читать текущее состояние, и задавать новое. IRQ является "сообщением"? скорее всего да (как минимум 1 бит информации передается на ЦП). Но не факт что оно принято немедленно (это запрос на прерывание - если в это время выполняется что-то еще, этот запрос может остаться без ответа). Управляет ли прерывание (самим фактом своего возникновения) чем либо? скорее нет. Управление происходит через порты или память, при обработке прерывания.

    Насколько важным будет наблюдать за изменением видеопамяти? Это безусловно поступающие от ЦП к периферии потоки (и еще какие, гигабиты в секунду во время игр - прикиньте 120 fps на 32-битном цвете, и вашем разрешении экрана), но нужно ли их "собирать"? С какого момента это надо собирать? Что значит "собрать" - проконтролировать успешное выполнение? Зафиксировать в журнале? Вмешаться в процесс передачи и подменить?
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Sidorma
    Тогда вам кроме перехвата прерываний от периферии в миниатюре надо повторить VmWare - перехватывать обращения к портам. Плюс обращения через память к шине PCI. Вроде все.
     
  10. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Задача странная. Откройте даташит на процессор и посмотрите сколько там ног. Порядка 1000. И это всё работает на частотах порядка 1 ГГц. Я лично вижу только один выход берём цифровой запоминающий анализатор линий(осциллограф) и пишем. Оно вам надо?


    Если не брать аппаратное, а только программное. То тут нужно сделать гипервизер или отладчик. Думаю отладчик будет по проще. А да и я бы не стал бы перехватывать всё, а только нужное. Тонкостей много.

    Но вначале сделать перехват прерываний потом портов и портов отображённых в память.
     
  11. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    Sidorma
    Включите трассировку, перехватите это прерывание и смотрите какие команды пойдут в ЦП. Еще неплохо бы поставить хук на READ_PORT_UCHAR... и би хэппии!
     
  12. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    int2eh
    Какое именно прерывание перехватить?
    Как поставить хук на READ_PORT_UCHAR?

    Спасибо!
     
  13. int2eh

    int2eh Alexander Leevy

    Публикаций:
    0
    Регистрация:
    19 авг 2007
    Сообщения:
    106
    Адрес:
    Москва
    Sidorma
    Без знания asm Вам никакие далее советы НЕ ПОНАДОБЯТСЯ!!! Извините, ничего личного!
     
  14. Sidorma

    Sidorma New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2010
    Сообщения:
    35
    Хорошо. У меня есть еще вопрос. Например, если пользователь открывает какое-либо окно, сообщения создания, обновления данного окна и т.п. будут направляться куда? Я подозреваю, что не к процессору, ведь так? К оконной процедуре вроде. Они вообще дойдут до него в каком-либо виде (какие-то биты хотя бы)?
     
  15. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Это уже поток сообщений другого рода - сообщения операционной системы. Через TranslateMessage/DispatchMessage они добираются до оконной процедуры в виде собственно самого сообщения и сопутствующих ему параметров lParam и wParam. Сами сообщения - это некие предопределенные константы.
     
  16. rttgedt

    rttgedt Антон

    Публикаций:
    0
    Регистрация:
    12 окт 2010
    Сообщения:
    85
    Мне показалось, что топикстартер не совсем понимает то о чем спрашивает. Sidorma, начни изучать асм с мануалов Intel. Попробуй написать оконное приложение на асме. Поработай с каким-либо дебаггером.
     
  17. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    На самом деле неправильно. не асмом единым )) Тут надо изучать
    а) устройство и логику работы этой хрени в системном блоке (кстати, странно, что никто не вспомнил про DMA, когда я написал про передаваемые процессором в видеопамять гигабиты в секунду... Не передаются эти гигабиты процессором - устройство их само из памяти качает), и
    б) прочитать мануалы интела, том 3-й, чтобы понимать на чем основаны современные ОС.

    Дальше можно изучать асм, или С++, или плюнуть на все и уйти пить пиво.
     
  18. Painter

    Painter New Member

    Публикаций:
    0
    Регистрация:
    1 окт 2011
    Сообщения:
    46
    Sidorma ты поставь задачу поконкретнее... Тогда и помогут тебе быстрее. Ты хочешь отслеживать действия кого либо за компом? (что и когда запускали и т.п.) Или мот ты вообще решил троянчик написать? Скорее всего тебе надо будет создовать хуки(что немного повлияет на скорость работы).
    Почитай тут - http://www.rsdn.ru/article/baseserv/winhooks.xml
    Ну и примеров создания хуков в инете тьма! Гугл в помощь!