Важная информация

User Tag List

Страница 1 из 6 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 52

Тема: MATRIX

  1. #1
    Member Аватар для Zet9
    Регистрация
    05.10.2006
    Адрес
    Харьковская обл.
    Сообщений
    166
    Благодарностей: 59
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию MATRIX

    MATRIX - многозадачная система с моделью вытесняющей многозадачности.



    Назначение системы:

    возможность разработки ПО,независимого от используемого вида дисковых накопителей

    (т.е. другими словами попытка создать такую среду разработки,чтобы "отвязать" вновь разрабатываемое ПО от дискет TR-DOS и от использования ПЗУ TR-DOS).



    Описание системы(версия 1.01 от 29.08.2009).



    В этой системе программа представляет собой исполняемый файл, состоящий в общем случае из трёх частей.

    1-я часть - это заголовок, 2-я часть - основной код, 3-я часть - все остальное (дополнительный код,данные,графика,музыка,тексты и пр). В частных случаях 3-я часть отсутствует и располагается в других файлах.



    Ядро системы предоставляет минимум функций,разделенных на 5 групп (засорение ядра системы дополнительными функциями "на всякий случай, вдруг кому-нибудь понадобится" не имеет смысла и катагорически запрещено).



    Группы функций:



    1-работа с памятью

    2-работа с распределением процессорного временеми

    3-работа с файловой системой (использование дисковых устройств)

    4-работа с графической подсистемой (вывод на экран)

    5-работа с периферийными устройствами



    Для вызова функций используется такой метод.Программа имеет так называемые почтовые ящики -

    для входящих сообщений и для исходящих сообщений.


    Чтобы вызвать функцию программа размещает номер функции в ящике для исходящих сообщений и там же указывается дополнительная информация: адрес памяти с таблицей параметров и тип вызова - с ожиданием или без ожидания.

    В случае вызова с ожиданием, система приостанавливает работу программы до момента окончания выполнения функции.В случае вызова без ожидания,программа продолжает работать, при этом она САМА

    периодически (когда захочет) проверяет почтовый ящик на предмет,а выполнена ли функция.

    Почтовых ящиков 2 пары - одна пара для общения программы с ядром системы и ещё одна пара специально выделена для общения программы с графической подсистемой.

    Во время работы программа периодически просматривает почтовый ящик для входящих сообщений

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

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



    1. О памяти, которую использует программа.



    1-я область памяти - это та память,куда будет загружен основной код.Это определяется самим

    кодером и указывается в заголовке программы специальным битом mem, а именно 0-код в нижней памяти,1-код в странице памяти,начиная с адреса #C000. В первом случае длина кода не должна

    быть слишком большой (например не более 8 кБ, а лучше не более 4-х), чтобы не заставлять

    систему освобождать нижнюю память от других программ,так как в этом случае другие программы должны быть приостановлены.

    После загрузки кода в память система настраивает код на адрес загрузки, при этом используется информация из заголовка программы.

    Во втором случае (код в странице) - длина кода не превышает 16 кБ, но может быть и меньше.

    Система загружает код в страницу без дополнительной настройки.
    >
    Основной код имеет свой заголовок, в котором
    расположены почтовые ящики (4 шт по 8 байт), стэк,место для сохранения контекста программы при переключении (туда сохраняются регистры и номер последней включенной страницы )
    >

    2-я область памяти - это дополнительные куски в нижней памяти - о том будет ли программа их использовать, указано в заголовке отдельным битом lowmem (0- не будет, 1- будет)



    3-я область памяти - это дополнительные страницы в верхней памяти -аналогично,- о том будет ли программа их использовать, указано в заголовке отдельным битом himem(0- не будет, 1- будет)



    Для работы с памятью необходим следующий минимум функций(названия функций условны):



    -Запросить область для использования в нижней памяти или странице:



    getmem (in-кол-во блоков по 256 байт; out - адрес или сообщение об ошибке)

    getpage (in-ничего; out - номер страницы или сообщение об ошибке)



    -Освободить область в нижней области или странице



    freemem (in-адрес; out - ок или сообщение об ошибке)

    freepage (in - номер страницы,ранееполученный этой программой; out - ок или сообщение об ошибке).



    -Отобразить в адресное пространство в адрес #C000 страницу с указанным номером

    onpage (out - ок или ошибка)



    В результате программа может использует все три области (или меньше).



    2. О распределении процессорного времени.



    exit - завершает программу.



    sleep N - приостанавливает программу на N - периодов (длительностью по 1/50 сек).



    wait - функция позволяет приостановить выполнение программы до прихода следующего прерывания.(оставшееся время до прерывания будет использовано системой по своему усмотрению).

    waitmes - функция позволяет приостановить выполнение программы до прихода любого сообщения.


    fork NN - запустить программу с именем по адресу NN (будет создан новый процесс),(out:- PID процесса запускаемой программы или ошибка)



    kill PID - уничтожить процесс с номером PID,ранее созданный этой программой

    onback - включить вызов фоновой задачи для этой программы

    offback - выключить вызов фоновой задачи для этой программы

    Количество времени,в течение которого программе будет предоставлено процессорное время для её работы частично определяется кодером, пожелание об этом указывается в заголовке исполняемого файла в виде приоритетов от 1 до 7, при этом 7 - самый высокий приоритет.

    Оценить время работы программы в единицу времени можно приблизительно,так, если работает несколько программ, то при прочих равных условиях программе с приоритетом 7 процессорное время

    будет предоставляться в 7 раз чаще, чем для программы с приоритетом 1.

    Если в данное время выполняются программы с одинаковым приоритетом - то можно условно считать, что они получают примерно одинаковое количество единиц процессорного времени

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



    3. Работа с файловой системой(использование дисковых устройств).



    open NN,M - открыть файл с именем по адресу NN в памяти.(out: ID - открытого файла или код ошибки)



    opendir NN,M - открыть каталог с именем по адресу NN в памяти.(out: ID - открытого каталога или код ошибки)

    в этих функциях M-это флаг,значением битов которого определяется режим открытия файла (для чтения, для записи,или для создания нового файла или каталога)

    chdir NN - установить текущим каталог с именем по адресу NN

    close ID - закрыть файл или каталог (определяется системой по ID),(out: - ок или ошибка)



    read ID,NN,MM - читать из файла с номером ID последующие MM байт в адрес памяти NN

    bread ID,NN,MM - то же самое, но MM - это количество блоков по 2048 байт



    write ID,NN,MM - записать в файл с номером ID последующие MM байт из адреса памяти NN

    bwrite ID,NN,MM -то же самое, но MM - это количество блоков по 2048 байт



    lseek ID,MMMM - передвинуть указатель внутри файла на позицию MMMM байт

    blseek ID,MMMM - то же самое, но MMMM - это количество блоков по 2048 байт



    readdir ID,NN,MM - читать последующие елементы каталога в буфер по адресу NN, длина буфера MM



    rename ID,NN - переименовать файл или каталог с номером ID - новое имя по адресу NN (out: - ок или ошибка)



    erase ID - удалить файл или пустой каталог с номером ID (out: - ок или ошибка)



    getattr ID,NN - получить атрибуты файла или каталога с номером ID в буфер по адресу NN



    setattr ID,NN - установить новые атрибуты файла или каталога с номером ID из буфера по адресу NN



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

    Соответсвенно рекомендуется читать/записывать байты или блоки данных небольшого размера.
    Последний раз редактировалось Zet9; 29.08.2009 в 05:56. Причина: добавлены функции onback,offback,chdir,waitmes и стэк

  2. Этот пользователь поблагодарил Zet9 за это полезное сообщение:
    Mad Killer/PG (28.08.2009)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Member Аватар для Zet9
    Регистрация
    05.10.2006
    Адрес
    Харьковская обл.
    Сообщений
    166
    Благодарностей: 59
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    4. Работа с графической подсистемой (вывод на экран)



    Программа может создавать и использовать несколько окон для отображения в них текста или спрайтов.



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

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



    Функции.



    newin - создать новое окно (in: NN- адрес заголовка окна(в нём координаты, размеры, цвет)out: ID - нового окна)



    viewin ID- показать на экране окно с номером ID



    minwin ID - убрать с экрана окно с номером ID



    killwin ID - уничтожить окно с номером



    clswin ID - очистить окно с номером ID



    txtwin ID - напечать текст в окне по текущим координатам



    koorwin ID - координаты печати в окне



    printwin ID - напечатать заголовок окна



    sprwin ID - напечатать спрайт в окне по указанным координатам



    attrdwin ID - изменить различные аттрибуты окна (размеры, координаты, цвет окна и заголовка)



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

    Функции:

    getscr - занять основной экран

    getscr2 - занять дополнительный экран

    freescr - освободить

    freescr2 - освободить

    pagescr2 - Отобразить в адресное пространство в адрес #C000 страницу с экраном 2

    pagescr - Отобразить в адресное пространство в адрес #C000 страницу с экраном 1

    onscr,onscr2 - сделать видимым экран 1 или экран 2 (после вызова этой функции переключение экранов будет выполнено

    после прихода прерывания).

    Если с экраном работает какая-нибудь программа, то другой программе будет отказано в захвате экрана при вызове её функции getscr(getscr2)



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

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

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




    5. Работа с периферийными устройствами



    Под периферийными устройствами понимается музыкальные устройства типа муз.процессора,TS,TSFM,GS а также принтер,модем.

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





    6.Заключение.



    Данная система не позволяет выполнение программ,которым единолично требуются все ресурсы компьютера (например "тяжелым" играм с динамической графикой или программам для обслуживания дисков(форматирование, восстановление данных)),но она на

    это и не претендует, так как для таких программ и игр необходима другая система (проект SHMATRIX - система с переключением задач),разработка программ под SHMATRIX почти аналогична разработке под систему TR-DOS, за исключением того, что в программу добавляются драйвера не только дисководов, но и драйвера других дисковых накопителей(hdd,cd/dvd/sd/ram) и сама программа оформляется в виде кодового блокас набором дополнительных файлов,который можно запускать с любых дисковых накопителей.

    ///////////////////////////////////////////



    ОЧЕНЬ интересует мнение КОДЕРОВ с точки зрения удобства разработки программ для системы MATRIX.
    Последний раз редактировалось Zet9; 29.08.2009 в 05:35.

  5. #3
    FishBone Crew Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,586
    Благодарностей: 764
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    что это ? o_O

  6. #4
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Благодарностей: 1071
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Проект как проект.

    Для полноценной многозадачности нужно 2 окна проецирования. Нижняя память имеет обыкновение кончаться, особенно если её выделять по N сегментов подряд (эффект решета).

    Окна должны быть вложенными (про это писал Vitamin).

    Если страницы памяти, с которыми работают приложения, физические, а не виртуальные, то невозможен своп.

    Непонятно, как организованы очереди сообщений. Их составляет сама задача? Она это делает, находясь в своём стеке? или в стеке ядра?

    Где вообще располагаются стеки задач?

  7. #5
    Member Аватар для Zet9
    Регистрация
    05.10.2006
    Адрес
    Харьковская обл.
    Сообщений
    166
    Благодарностей: 59
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Для полноценной многозадачности нужно 2 окна проецирования.
    Согласен,но их нет в железе пользователей (хотя на бумаге схемка для подключения второго окна имеется)

    Цитата Сообщение от alone Посмотреть сообщение
    Окна должны быть вложенными (про это писал Vitamin).
    Вложенными в адресное пространство программы?
    чето не припоминаю, в каком номере журнала
    Цитата Сообщение от alone Посмотреть сообщение
    Если страницы памяти, с которыми работают приложения, физические, а не виртуальные, то невозможен своп.
    Своп вообще НЕ НУЖЕН, иначе будет ТОРМОЗ , так как программа при переключении страниц не будет знать прошло 1000 тактов или 10 000 000 тактов, а она должна это знать!!!(из-за этого всё нереально тормозит сам знаешь где... )

    Каждая программа может создать себе свой собственный файл подкачки любого размера (до 4-х Гигабайт) и сама будет туда скидывать те страницы, которые ей ДЕЙСТВИТЕЛЬНО не нужны(а не те которые системе мешают а программе нужны в 1-ю очередь).Система не знает и не может определить нужность/ненужность страниц для программы (а всякие там счетчики обращений к страницах и алгоритмы планирования, которые должны определять якобы ненужные программе страницы для выкидывания в своп - свою задачу не решают и только тормозят систему и программы, а также расходуют лишнюю память )

    Цитата Сообщение от alone Посмотреть сообщение
    Непонятно, как организованы очереди сообщений. Их составляет сама задача? Она это делает, находясь в своём стеке? или в стеке ядра?

    Где вообще располагаются стеки задач?
    Про стэк добавил в первом сообщении(и ещё про несколько функций).
    Стэк расположен в заголовке основного кода (там вроде около 220 байт не помню точно).

    Очередей сообщений нет!
    (По причине, чтобы не тратить на них память и не усложнять каждую функцию проверкой и выборкой их этих очередей)
    Забыл? Я же тебе по телефону рассказывал!

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

  8. #6
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Благодарностей: 1071
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Zet9 Посмотреть сообщение
    Согласен,но их нет в железе пользователей (хотя на бумаге схемка для подключения второго окна имеется)
    Второе окно есть на АТМ, на одной из прошивок Pentagon 1024SL 2.x, на NGS.

    Цитата Сообщение от Zet9 Посмотреть сообщение
    Цитата:



    Сообщение от alone


    Окна должны быть вложенными (про это писал Vitamin).


    Вложенными в адресное пространство программы?
    чето не припоминаю, в каком номере журнала
    Вложенными друг в друга геометрически. Где писал, не помню.


    Цитата Сообщение от Zet9 Посмотреть сообщение
    Про стэк добавил в первом сообщении(и ещё про несколько функций).
    Стэк расположен в заголовке основного кода (там вроде около 220 байт не помню точно).
    Программа со стеком в странице не может переключать страницы. Она не может даже вызывать функции ядра, которые лазят в другие страницы.

    Цитата Сообщение от Zet9 Посмотреть сообщение
    Очередей сообщений нет!
    (По причине, чтобы не тратить на них память и не усложнять каждую функцию проверкой и выборкой их этих очередей)
    Представь, что задаче пришло сообщение и по нему надо что-то сделать с ресурсом. А ресурс занят. Что она будет делать? Если она будет ждать освобождения ресурса, то пропустит следующие сообщения.

  9. #7
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно посторонний взгляд?

    1. По-моему, вы делаете Uzix, только хуже (к вопросу об очередях, планировщике задач и т.п.).
    2. На имеющихся железках (ZX128 с одним окном диспетчера в 16к) можно сделать приемлимую по скорости многозадачность (не более сотни-двух сотен тактов на переключение контекста) только для прог размером не более 16к (а с учетом того что проге нужно еще и "кучу" для переменных - то и менее 16к).
    3. Ни одно из подключаемых к ZX устройств не располагает скоростью достаточной для организации общесистемного SWAP-а (виртуальной памяти). Даже LDIR на кусках в десятки килобайт будет медленно. Разве что блиттер/DMA решают, но их нет. Т.е. надо расчитывать на то, что на несколько задач, памяти будет хотя бы несколько сот килобайт (с потолка, 1:100) - чтобы на смену контекста работать только диспетчером страниц ОЗУ (если он есть и удовлетворяет размером окна).
    Последний раз редактировалось Error404; 31.08.2009 в 00:01.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  10. #8
    Guru
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,083
    Благодарностей: 924
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    только для прог размером не более 16к (а с учетом того что проге нужно еще и "кучу" для переменных - то и менее 16к).
    ну как бы не совсем. ничто не мешает проге занять 2 или 3 банка. стек для такой задачи пусть будет не в банке, а в нижней памяти. очень просто.

  11. #9
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    2,483
    Благодарностей: 220
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    да простит меня автор темы - но ИМХО - система баян.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...

  12. #10
    Moderator Аватар для Error404
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    3,748
    Благодарностей: 1014
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от psb Посмотреть сообщение
    ну как бы не совсем. ничто не мешает проге занять 2 или 3 банка. стек для такой задачи пусть будет не в банке, а в нижней памяти. очень просто.
    Но тогда только ассемблер. Либо делать собственный компилятор с поддержкой железа и непростой модели памяти приложений, что осилить еще сложнее, чем систему. А стек - да, в нижней памяти для обоих вариантов.
    В варианте когда "только ассемблер" - это под систему будет рождено три с половиной программы, как к примеру в SymbOS (построенной фактически по этому же ТЗ):
    http://zx.pk.ru/showthread.php?t=3196
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

Страница 1 из 6 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. The Matrix
    от transman в разделе Игры
    Ответов: 5
    Последнее: 15.05.2005, 13:08

Ваши права

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