|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
|
04 Jul 2012 03:25 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Г-н Андрей Плеханов ( Andrey Plekhanov) тянуть кота за хвост не стал,
и весьма оперативно исходники своей ОС выложил!
Кому интересно - прямая ссылка.
_________________ iLavr
|
06 Jul 2012 09:10 |
|
|
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
занятно. и всего-то две с половиной тысячи строк кода. ну с таким раскладом и спектрум можно многозадачным объявить.
|
06 Jul 2012 16:10 |
|
|
andyp
Junior
Joined: 26 Nov 2008 13:54 Posts: 6 Location: Москва-Кассиопея
|
Увидел обсуждение моей конструкции на этом форуме.
Попробую прояснить некоторые вопросы.
Конечно, если сравнивать с многозадачностью на РС, то она очень ограничена. На прерывании сидят не только обработчик клавиатуры,
но и некоторые задачи - таймеры и будильники.
На самом деле была задумка добавить возможность создавать
переменное число фоновых задач, каждая из которых имела бы свой
управляющий блок и стек и запускались бы в момент, когда процессор
ждет следующее событие. Это было необходимо, например, для решения систем дифференциальных уравнений одновременно с взаимодействием с пользователем.
По поводу времени обработки прерывания. Процент этого времени достаточно мал, поскольку я уменьшил частоту прерываний с 400 раз в секунду до 10, потому, что отпала необходимость обновлять 9 разрядный индикатор АОН в реальном времени. Поэтому тормозов нет абсолютно.
|
07 Jul 2012 03:53 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Эту конструкцию здесь на форуме упоминал сам автор в топике " Маленький комп".
Но в 2008 году меня здесь не было, а все остальные вполне могли этот симпатичный
комп видеть.
_________________ iLavr
|
07 Jul 2012 05:03 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
А реализация многозадачности должна быть маленькой. Очень маленькой и очень быстрой. Потому как все эти игры с многозадачностью очень влияют на производительность системы в общем.
Когда-то давным-давно, когда я знакомился с ассемблером на примере x86, я впихивал многозадачность и в меньшее число строк. В реальном режиме, имеется в виду. Да, конечно, при этом в качестве задачи нельзя было запустить, допустим, досовский "процесс". Задачи должны были быть написаны с соблюдением определённых правил, специфичных для моей реализации многозадачности (например, задачам нельзя было менять сегментные регистры и нельзя было трогать таймер). Да и вообще всё было весьма ограничено -- ни тебе примитивов синхронизации, ни IPC интерфейсов. Да и диспетчер задач был туп до невозможности: он просто передавал управление от одной задачи к другой по кругу, не парясь насчёт, допустим, того, что время между задачами можно делить не поровну, а по-справедливости. Но и тем не менее, когда я написал задачу, которая в бесконечном цикле гоняла змейку по экрану, я легко смог запустить сразу десять таких бесконечных циклов и видеть на экране десять ползающих змеек. Это ли не многозадачность? Причём не какая-нибудь там "кооперативная", а самая что ни на есть "вытесняющая" многозадачность.
|
07 Jul 2012 06:18 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А у меня впечатление, что ни та, ни та...
Для корпоративной - задачи твои должны бы отдавать управление сами,
а для вытесняющей, так у тебя, как мне кажется, приоритет всех задач одинаков.
Впрочем, я для этого и попросил у автора исходники, чтобы в этом поразбираться
на простеньком примере...
В рамках этого форума мы неоднократно заявляли желание осуществить много-
процессорную многозадачную конструкцию, но воз и ныне там...
А этот простой компьютер работает - вот и поучусь на его примере.
_________________ iLavr
|
07 Jul 2012 06:29 |
|
|
MC68k
Retired
Joined: 25 Jul 2011 00:14 Posts: 1331 Location: WWW
|
вот и автор подтянулся можно задавть странные вопросы?
2 bar понятно, что "диспетчер" должен быть маленький и быстрый
|
07 Jul 2012 07:00 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
С исходниками пока ознакомился весьма бегло, возник вот какой вопрос:
А на каком С Вы делали их сборку, и на какой платформе?
_________________ iLavr
|
07 Jul 2012 07:44 |
|
|
andyp
Junior
Joined: 26 Nov 2008 13:54 Posts: 6 Location: Москва-Кассиопея
|
Она на самом деле маленькая.
Заключается в том, что прикладная задача ставит в очередь выполнения другие задачи, например, играть музыку, таймеры, устанавливает будильники и продолжает заниматься своим делом.
А потом получает сообщения от этих задач и производит соответствующие действия.
|
07 Jul 2012 07:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
| | | | Lavr wrote: Эту конструкцию здесь на форуме упоминал сам автор в топике " Маленький комп". Но в 2008 году меня здесь не было, а все остальные вполне могли этот симпатичный комп видеть. | | | | |
Точно! А я совсем забыл - склероз
|
07 Jul 2012 20:00 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А у тебя твоих x86-исходников не осталось? Тоже было бы интересно посмотреть...
_________________ iLavr
|
08 Jul 2012 03:37 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
Нет, увы. Те мои первые опыты программирования почили в бозе сыплющихся жёстких дисков и моих кривых рук.
Но я подумаю. Если найду линуксовый дебуггер DOS'а, может напишу снова. Просто ради развлечения. =)
|
12 Jul 2012 05:18 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну тогда, с учетом имеющегося опыта, может быть сделаешь это с отражением в форуме?
Просто интересно - сейчас ты наверняка напишешь не так как давно...
Или, если хочешь, - изложи общую концепцию компактно... ПисАть-то мы все научились...
Может кто ещё в проект подключится.
_________________ iLavr
|
12 Jul 2012 08:52 |
|
|
bar
Senior
Joined: 07 Aug 2006 10:18 Posts: 185
|
Да там излагать-то, собственно, нечего. Там надо просто писать код. Заводим глобальную переменную: Ну и, что-то типа: Думаю так. В упор не помню, надо ли там делать cli/sti, или это уже сделано за нас. И не совсем я уверен, в синтаксисе -- давно не сталкивался с x86 в intel-синтаксисе. Создание нового процесса: | | | | Code: void new_task(void (*func)()) { int i; struct task *new = malloc(sizeof(*new)); struct { /* AFAIR, pusha кладёт регистры в таком порядке: */ int di, si, sp, bp, bx, cx, dx, ax; /* для iret нужен сегментный адрес: */ int ip, cs, flags; /* и в хвосте, адрес возврата, чтоб задача могла бы завершиться выполнив команду ret */ void (*ret)(); } *stk_frame; new->sp = stk_frame = &new->stack[1024 - sizeof(*stk_frame)]; memset(stk_frame, 0, sizeof(*stk_frame)); stk_frame->ip = func; stk_frame->cs = get_CS(); stk_frame->sp = &new->stack[1024-2]; /* по-моему, pusha бы положило именно * такое значение */ stk_frame->ret = finish_task; new->sp = &new->stack[1024]; /* осталось вставить новую структуру в список: */ cli(); new->next = current_task->next; new->prev = current_task; current_task->next->prev = new; current_task->prev->next = new; sti() } | | | | |
Ещё интересная функция -- finish_task, указатель на которую используется выше. Мой сегодняшний опыт подсказывает мне, что освобождать память занимаемую задачей надо из контекста другой задачи. Может быть из контекста диспетчера задач (в нашей ситуации обработчика прерываний таймера). Но не стоит делать этого из самой задачи. Но я всё же поступлю наперекор опыту, поскольку иначе придётся привязывать к каждой задаче состояние, коих должно быть как минимум два: TASK_ALIVE и TASK_DEAD. По идее мой "неправильный" подход должен сработать, я просто не очень уверен насчёт флага прерываний: сбрасывается ли он по IRET или нет. По-моему, iret восстанавливает из стека все флаги, в том числе и тот, что ответственнен за прерывания. Нну да, наверное. Смотря зачем буду писать. Можно же вообще взять, что-нибудь типа libpth и портировать в DOS. Ну или не в DOS, а в качестве замены ему. =)
Но я не планирую заниматься подобным.
|
12 Jul 2012 13:39 |
|
|
Who is online |
Users browsing this forum: No registered users and 1 guest |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|