Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

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

Полигон-2 »   Технический флейм »   Окончание производства 286-х
RSS

Окончание производства 286-х

<<Назад  Вперед>> Страницы: 1 2 3 4 * 5
Печать
 
madmaks
Full Member


Откуда: Россия, Ярославская обл., г. Углич
Всего сообщений: 204
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
23 сен. 2008
borisfox написал:
[q]
В защищённом режиме с 16-разрядными указательными регистрами возни с программированием значительно больше
[/q]
Нет-нет, это неправда. Если у вас в устройстве несколько независимых портов, которые надо уметь одновременно обрабатывать, то даже только аппаратные средства процессора по восстановлению/сохранению контекста обработчика наждого порта делают вашу жизнь лучше и веселее, а уж все остальное тем более.

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


0leg написал:
[q]
Собственно, borisfox уже ответил...
[/q]
Просто интересно, а зачем вам понадобилась именно страничная память? Чем-то наверно не устроили остальные варианты?


borisfox написал:
[q]
Скорее всего, бит режима будет игнорирован.
[/q]
Да, это возможно.
borisfox
Advanced Member


Откуда: Хабаровск
Всего сообщений: 946
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 июля 2008
madmaks написал:
[q]
borisfox написал:
[q]
В защищённом режиме с 16-разрядными указательными регистрами возни с программированием значительно больше
[/q]
Нет-нет, это неправда. Если у вас в устройстве несколько независимых портов, которые надо уметь одновременно обрабатывать, то даже только аппаратные средства процессора по восстановлению/сохранению контекста обработчика наждого порта делают вашу жизнь лучше и веселее, а уж все остальное тем более.
[/q]
Для этого совершенно не требуются механизмы защиты памяти (и не всегда нужно переключение задач), т.к. во встроенных системах ОС, как правильно, всегда однопользовательская, с одной большой, если нужно - многопоточной, задачей, реализующей функции устройства. Обработка событий производится в основном в контексте прерываний.
Сама с собой встроенная ОС и различные задачи/потоки, исполняющиеся внутри неё, конфликтовать не должны, это задача разработчика - отладить встроенное ПО. Пользователь ничего к нему добавить/убавить не может, и тем самым стабильность правильно спроектированной системы не нарушит.

Более того, во многих современных ОС (например, в unix семейства BSD) не используются средства переключения задач, специально для этого разработанные в IA32 (TSS). Контекст сохраняется и восстанавливается обычным сохранением необходимых регистров.
Году в 96 я переписывался с одним из разработчиков BSD/OS (Paul Borman) как раз по этому поводу - как же так, такой замечательный механизм, и не используется - и ответ был обескураживающим: "We are curious why you believe that using a separate TSS per process or thread would make context switching faster. On first glance we would think it would actually make it quite a bit slower."
В линухе, насколько помню, аналогичный подход. В солярисе не смотрел, незачем было. Как в windows - не знаю. :-)
[q]
Но никто никогда не мог предсказать с 286 процессором когда и как он выполнит нужную вам команду, откликнется на событие и т.д.,
[/q]
Всмысле?... Как задано, так и выполнит... Откликнется в соответствии со спецификацией... Какая тут может быть неопределённость?
[q]
т.е. ему нужны аппаратные обвесы (таймеры, буфера и т.д., даже иногда вспомогательные контроллеры), хотябы только чтобы соблюсти временные параметры для аппаратуры - поддержать обработку в реальном времени.
[/q]
Так ведь ни один процессор в вакууме не работает, любому нужны схемы тактирования и сопряжения с внешними устройствами - другое дело, что у некоторых они уже встроенные на кристалле, некоторым нужны внешние...
[q]
0leg написал:
[q]
Собственно, borisfox уже ответил...
[/q]
Просто интересно, а зачем вам понадобилась именно страничная память? Чем-то наверно не устроили остальные варианты?
[/q]
Со страничной организацией виртуальная память реализуется более эффективно, чем без неё.
Никто не говорит, что нельзя работать без страничной памяти. Можно (особенно если вообще отказаться от подкачки). Но с ней проще и удобнее.
То, что её нет в 286 - один из его недостатков. Особенно при уровне быстродействия оперативной памяти тех времён. В PDP-11, к слову, страничная адресация была (в моделях с MMU)...

По-моему спор зашёл в глубокий офтопик. :-)
madmaks
Full Member


Откуда: Россия, Ярославская обл., г. Углич
Всего сообщений: 204
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
23 сен. 2008
borisfox написал:
[q]
Для этого совершенно не требуются механизмы защиты памяти
[/q]
ну, вам виднее.


borisfox написал:
[q]
одним из разработчиков BSD/OS (Paul Borman) ... using a separate TSS per process or thread
[/q]
Парень, видать, путает процессы и нити.


borisfox написал:
[q]
Можно (особенно если вообще отказаться от подкачки). Но с ней проще и удобнее.
[/q]
Ни разу не встречал контроллеров с подкачкой.


borisfox написал:
[q]
По-моему спор зашёл в глубокий офтопик. :-)
[/q]
Отчего -же? Человек желал знать выпускаются ли 286, а если нет, то кто виноват и что делать.
borisfox
Advanced Member


Откуда: Хабаровск
Всего сообщений: 946
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
30 июля 2008
madmaks написал:
[q]
borisfox написал:
[q]
одним из разработчиков BSD/OS (Paul Borman) ... using a separate TSS per process or thread
[/q]
Парень, видать, путает процессы и нити.
[/q]
Нити в ядре ОС могут быть реализованы как мини-задачи. Например, LWP в Солярисе... У них свой контекст, стек, и т.п.
[q]
borisfox написал:
[q]
По-моему спор зашёл в глубокий офтопик. :-)
[/q]
Отчего -же? Человек желал знать выпускаются ли 286, а если нет, то кто виноват и что делать.
[/q]
Объективная реальность виновата - он просто устарел...
ua1osm
Гость

Ссылка

Сейчас на форуме
madmaks
Full Member


Откуда: Россия, Ярославская обл., г. Углич
Всего сообщений: 204
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
23 сен. 2008
madmaks написал:
[q]
borisfox написал:
[q]
одним из разработчиков BSD/OS (Paul Borman) ... using a separate TSS per process or thread
[/q]
Парень, видать, путает процессы и нити.
[/q]
Ну, я тут разразился общеобразовательной статьей про многозадачность, из которой понятно почему "парень путает их".

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

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

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

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

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

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

Есть потоки, которые представляют из себя цельные самообеспеченные объекты, все их связи с внешним миром полностью определены и ограничены. Если несколько таких потоков одновременно выполняется в одной системе (например, текстовый редактор, эксплорер и т.п.), то необходимо их полностью изолировать друг от друга, т.е. они имеют разный программный контекст. Потоки выполнения с таким контекстом называют "процессами".

Часто "процессы" обильно появлялись в многозадачных системах переходя из однозадачных систем, где они были отдельными монопольными задачами. Однако в многопроцессорных системах появлялись и свои родные (native) "процессы", т.е. возникали ситуации, когда одна логическая задача реализовывалась в виде нескольких "процессов", в этом случае родственные процессы нуждались в некоторой коммуникации, и такая коммуникация у них появилась и была названа "IPC".

"IPC процессов" также поддерживает сеть, т.е. при желании программиста "IPC", позволяет скрывать машину, на которой выполняется каждый процесс.

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

Оказалось, что для достижения нужного эффекта программист должен сам явно разбивать поток выполнения на несколько независимых, имеющих возможнось выполняться одновременно. Здесь контекст потока разбит на части, главная часть контекста одна, общая, а потоков ее использующих много. Каждый из этих потоков имеет и небольшой персональный контекст. Потоки выполнения с таким двойным контекстом называют "нитями".

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

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

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

Стало невозможно написать эффективную программу не обращая внимание на присутствующие в системе процессоры, память и т.д. При всем этом "нить с IPC" не стала "процессом", т.к. "нить с IPC" это "нить", которая использует некоторые общие ресурсы особым образом.

Некоторая проблема заключается в том, что старые процессоры аппаратно не поддерживают "нити", нет в них такой концепции.

Например, "нити" нуждаются в "сериализации" доступа (в выполнении строго последовательного доступа) к некоторым общим ресурсам. Для этого процессор должен обеспечивать аппаратную поддержку такого управления, иначе "нити" просто не смогут выполняться, они будут вызывать для своего выполнения "процессы" и станут бесполезными, как станет бесполезной многопроцессность, для реализации которой надо нажимать на reset и менять дискетку с программой.

Важно видеть, что если вам нужна нить, задача которой скрыть свой контекст, то такая "нить" станет "процессом", т.е. они заметно отличаются "типами контекста".

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

см. далее "Апаратная поддержка семафоров уровня задачи (нитей) на 286/386".
[/q]
madmaks
Full Member


Откуда: Россия, Ярославская обл., г. Углич
Всего сообщений: 204
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
23 сен. 2008
Собственно, про нити в 286/386.

Аппаратная поддержка семафоров уровня задачи (нитей) на 286/386
[q]
Команда "xchg регистр, память" начиная с 286 блокирует шину и исполняется на любом уровне привилегий, может быть использована для сериализации доступа к ресурсу с помощью семафора

  mov   al, 1
  xchg  al, byte ptr sem
  or    al, al
  jz    locked_and_ready_to_use
busy:
        ...
unlock:
  mov   byte ptr sem, 0


если мы в al получили 0, значит
- семафор был свободен
- семафор стал помечен нами как занятый с помощью атомарной операции

если мы в al получили не 0, значит
- семафор был занят
- состояние семафора осталось "занятый" корректно из-за атомарной операции

Достоинства
- xchg не зависит от IOPL
Проблемы
- в этом примере под семафор отводится не бит, а байт, что плохо


***
Для работы с семафорами-битами, начиная c 386

  lock
  bts  dword ptr sem_base, sem_num
  jnc  locked_and_ready_to_use
busy:
        ...
unlock:
  btr  dword ptr sem_base, sem_num


если мы в cf получили 0, значит
- семафор был свободен
- семафор стал помечен нами как занятый с помощью атомартной операции

если мы в cf получили не 0, значит
- семафор был занят
- состояние семафора осталось "занятый" корректно из-за атомартной операции

Достоинства
- в этом примере под семафор отводится бит, что хорошо
Проблемы
- использование lock зависит от IOPL, но между общими ресурсами приложения и портами ввода-вывода системы лежит логическая пропасть

Проблемы обоих примеров говорят о том, что что аппаратура 286/386 не создавалась для того, чтобы поддерживать нити

     26                                          tlock286 sem00
1    27
1    28 00000000  B0 01                          mov   al, 1
1    29 00000002  86 05 00000000e                xchg  al, byte ptr sem00
1    30 00000008  0A C0                          or    al, al
1    31                                          ;jz    locked_and_ready_to_use
1    32
     33
     34                                          tlock386 sem00, 1
1    35
1    36 0000000A  F0>                            lock
1    37 0000000B  0F BA 2D 00000000e  +          bts  dword ptr sem00, 1
     38           01
1    39                                          ;jnc  locked_and_ready_to_use
1    40
[/q]
ua1osm
Гость

Ссылка

Сейчас на форуме
Teodor
Гость
Старый опытный камикадзе

Откуда: Николаев, Украина
Всего сообщений: 4022
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
16 янв. 2006
ua1osm, второй кварц, IMHO, для асинхронного тактования сопроцессора.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
А никто не ковырял OS/2 версий 1.x ? Там полностью используются возможности i286 и даже можно запускать одну DOS задачу. Городская легенда утверждает, что когда в Intel увидели извращенческий код IBM в OS/2, то заплакали и сделали VM86 режим в i386.
<<Назад  Вперед>> Страницы: 1 2 3 4 * 5
Печать
Полигон-2 »   Технический флейм »   Окончание производства 286-х
RSS

1 посетитель просмотрел эту тему за последние 15 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS