User Tag List

Показано с 1 по 10 из 15

Тема: OVERLAYS! оверлеи линковщики своп

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #2

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я в 1996г создавал программу управления программатором ПЗУ. Имея 256К ОЗУ на ZX, приходилось работать с двумя буферами образа ПЗУ по 64Кб каждый, применяя страничную адресацию.

    Буфера были размещены по границам страниц. Были подпрограммы чтения и записи байта в буфер по 16-битному адресу внутри буфера. Работали они очень медленно, ведь для чтения или записи каждого байта приходилось вычислять адрес, переключать страницы, а потом переключать их назад. В результате скорость работы программатора определялась не скоростью работы микросхем ПЗУ или самого программатора, а скоростью доступа в буфер. Одним словом, тормозно было.

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

    Тем не менее, благодаря тому, что я не вылизывал эти частные моменты, программа "Omniprog" управления программатором была создана в рекордно короткие сроки и имела множество полезных функций и красивый интерфейс пользователя. А тормоза - дело относительное. Несмотря на неэффективный доступ к памяти, Omniprog работал быстрее, чем другие доступные на то время программаторы, в том числе те, которые работали на PC.

    Если бы я все это дело разрабатывал сейчас - то сразу реализовал бы блочный доступ к основным буферам, т.е. извлекал оттуда или помещал туда сразу блоки, а не отдельные байты. Думаю, в этом случае основные тормоза были бы побеждены.

    Но блочный доступ реализовать сложнее, чем побайтный. Например, для пересылки блока произвольной длины с произвольного виртуального адреса нужно учитывать ситуации, когда этот блок переходит через границу страницы. Также блочный доступ сложнее использовать в подпрограммах высокого уровня. Например, функция поиска строки в буфере тривиально реализуется в случае побайтного доступа. А в случае блочного - нужно разбить весь процесс на отдельные блоки и как-то отрабатывать переходы через их границы.
    Последний раз редактировалось Barmaley_m; 27.05.2014 в 16:36.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •