LINUX.ORG.RU

Ответ на: комментарий от X512

Это кривой костыль

Который чем отличается от Yield(), GetMessage(), я не расслышал?

Многозадачность и динамическая загрузка модулей – это совершенно разные независимые механизмы. Учите матчасть.

Давай-ка ты сначала выучишь матчасть win16, а потом я с тобой поговорю про её отличия от динамической загрузки модулей, а?

Хватит уже путать многозадачность и защиту памяти.

Хорошо, давай сыграем в игру по твоим правилам. Итак тебе нужно дать термины на русском для:

1. «многозадачности» в рамках одного адерсного пространства а-ля win16.
2. Аппаратной «многозадачности», реализованной через mpu/mmu.

в контексте «операционных систем».

Я весь внимание.

LamerOk ★★★★★
() автор топика
Последнее исправление: LamerOk (всего исправлений: 2)
Ответ на: комментарий от LamerOk

Который чем отличается от Yield(), GetMessage(), я не расслышал?

Отсутствием планировщика задач и механизма переключения задач.

Давай-ка ты сначала выучишь матчасть win16

Я уже выучил, даже анализатор и дизассемблер модулей NE писал, а с вашей стороны вижу полное непонимание и путаницу в голове.

  1. «многозадачности» в рамках одного адерсного пространства а-ля win16.

Многозадачность без защиты памяти.

  1. Аппаратной «многозадачности», реализованной через mpu/mmu.

Защита памяти.

X512 ★★★★★
()
Ответ на: комментарий от LamerOk

не имеющий никакого отношения к теме.


Да.

Зачем тогда ты пишешь утверждения, не имеющие отношения к теме?

потому что работал на однопроцессорном железе

korvin_ ★★★★★
()
Ответ на: комментарий от LamerOk

Даю вам код элементарной реализации многозадачности чтобы у вас было представление что это вообще такое:

MODULE Tasks;
	TYPE
		Task* = POINTER TO ABSTRACT RECORD
			next: Task;
		END;
	
	VAR
		tasks, lastTask: Task;
	
	PROCEDURE (t: Task) Do-, NEW, ABSTRACT;
	
	PROCEDURE Schedule* (t: Task);
	BEGIN
		IF tasks = NIL THEN tasks := t ELSE lastTask.next := t END;
		lastTask := t;
	END Schedule;
	
	PROCEDURE Take (): Task;
		VAR t: Task;
	BEGIN
		t := tasks;
		tasks := tasks.next;
		IF tasks = NIL THEN lastTask := NIL END;
		RETURN t;
	END Take;
	
	PROCEDURE Wait;
	BEGIN (* wait for interrupts *)
	END Wait;
	
	PROCEDURE Dispatch*;
		VAR t: Task;
	BEGIN
		LOOP
			t := Take();
			IF t = NIL THEN
				Wait
			ELSE
				t.Do
			END;
		END;
	END Dispatch;
	
END Tasks.

В DOS даже такого нет.

X512 ★★★★★
()
Ответ на: комментарий от X512

Отсутствием планировщика задач и механизма переключения задач.

И какое же у нас «переключение задач» в GetMessage()?

Я уже выучил

Прекрасно. Тогда скажи, в чём разница между «многозадачностью» в win16 и DOS Navigator'е?

Многозадачность без защиты памяти.?

Почему я не удивлён?

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от korvin_

В DOS даже такого нет.

И слава богу.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от korvin_

Зачем тогда ты пишешь утверждения, не имеющие отношения к теме?

И действительно,

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

потому что работал на однопроцессорном железе

Какое отношение максимальное количество процессоров в единицу имеет к созданию операционных систем без поддержки многозадачности?

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

И какое же у нас «переключение задач» в GetMessage()?

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

Тогда скажи, в чём разница между «многозадачностью» в win16 и DOS Navigator’е?

DOS Navigator – это не часть DOS, а сторонний компонент. Сама DOS не поддерживает многозадачность. Надо прикручивать синей изолентой сторонний планировщик и переключатель задач. Так как изначально многозадачность в DOS не предусмотрена, не все программы будут нормально работать со сторонними планировщиками.

X512 ★★★★★
()
Ответ на: комментарий от LamerOk

Какое отношение максимальное количество процессоров в единицу имеет к созданию операционных систем без поддержки многозадачности?

Э-м... Я не знаю, как ты их связал. Расскажи.

korvin_ ★★★★★
()
Ответ на: комментарий от LamerOk

Как накладной нос, не слишком красный?

Да вроде норм, пойдёт, но жонглирование цитатами у тебя пока плохо выходит.

korvin_ ★★★★★
()
Последнее исправление: korvin_ (всего исправлений: 1)
Ответ на: комментарий от korvin_

Я не знаю, как ты их связал.

«Целесообразностью». Посмотри это новое слово в словаре.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

Какая буква в слове «hardware» тебе не понятна?

Какая буква тебе в «Открой Таненбаума» непонятна? Ты в многозадачности нихрена не понимаешь, иди перечитывать учебник.

anonymous
()
Ответ на: комментарий от LamerOk

Почему я не удивлён?

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

X512 ★★★★★
()
Ответ на: комментарий от LamerOk

Аппаратной «многозадачности», реализованной через mpu/mmu.

Многозадачность оказывается через mpu/mmu реализуется, а мужики-то и не подозревали.

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

Аппаратной «многозадачности», реализованной через mpu/mmu.

А ещё, видимо, mpu умеет в виртуальное адресное пространство.

anonymous
()
Ответ на: комментарий от anonymous

А ещё, видимо, mpu умеет в виртуальное адресное пространство.

MPU умеет в защиту кода+данных на разных уровнях исполнения. Это MMU для бедных.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от X512

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

Наоборот. Я как раз утверждаю, что в реальном мире 21-ого века многозадачной ОС без защиты памяти не существует. Т.к. это пустое множество, поэтому и термина для него нет. Таким образом «многозадачная ОС» == «ОС с использованием аппаратной изоляции задач».

Q.E.D.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

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

Вполне себе существует в виде встраиваемых ОС реального времени. Защита памяти там только лишние накладные расходы.

аппаратной изоляции задач

Во многих современных ОС есть задачи без изоляции, называются «потоки». Это в старых UNIX потоков не было, только задачи в отдельных адресных пространствах.

X512 ★★★★★
()
Ответ на: комментарий от X512

Вполне себе существует в виде встраиваемых ОС реального времени.

Запускающих одну единственную программу по работе с оборудованием? Да-да, я знаю про MS-DOS.

Во многих современных ОС есть задачи без изоляции

Это жонглирование термином «задача». Как вы замените «многозадачную» на «многопроцессорную», где под процессором понимается не аппартный «процессор», а программный «процесс»?

Я всё ещё жду предложения.

старых UNIX потоков не было, только задачи в отдельных адресных пространствах.

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

LamerOk ★★★★★
() автор топика
Последнее исправление: LamerOk (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Запускающих одну единственную программу по работе с оборудованием?

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

Это жонглирование термином «задача».

…чем вы весь тред занимаетесь. Задача – это минимальная единица планирования планировщиком задач. Адресные пространства тут вообще не причём. Их может вообще не быть, может быть несколько задач (потоков, короутин) в одно адресном пространстве.

В первом юниксе и отдельных адресных пространств не было.

Потом сделали, а потоков ещё не было. pthreads – это сравнительно поздняя разработка. Например в UNIX-подобной системе BeOS есть потоки со своим API, но без pthreads.

X512 ★★★★★
()
Ответ на: комментарий от X512

Задача – это минимальная единица планирования планировщиком задач.

Прекрасно, и так ответ на вопрос

Как вы замените «многозадачную» на «многопроцессорную», где под процессором понимается не аппартный «процессор», а программный «процесс»?

... ?

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

«многопроцессорную», где под процессором понимается не аппартный «процессор», а программный «процесс»?

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

X512 ★★★★★
()
Ответ на: комментарий от LamerOk

Что не так? Кавычки часто ломают поиск. И лучше в Гугле на английском искать, в России не сильно распространено написание ОС.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

тебе нужно дать термины на русском для:

в Гугле на английском

Ты специально «включаешь дурачка» или это натуральный продукт?

в России не сильно распространено написание ОС

Я чувствую, ты живёшь в каком-то совершенно паралельном реальному мире.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

Ты специально «включаешь дурачка» или это натуральный продукт?

На русском про это в целом мало информации. Но даже в вашем поиске были релевантные результаты.

Я чувствую, ты живёшь в каком-то совершенно паралельном реальному мире.

Это в основном про использование ОС, а не написание. Подозреваю, что больше 98% из списка не про российские ОС.

X512 ★★★★★
()
Ответ на: комментарий от LamerOk

MPU умеет в защиту кода+данных на разных уровнях исполнения.

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

И вообще давай цитируй чёткое определение многопоточности, а то юлишь жопой, как модель на показе мод.

anonymous
()
Ответ на: комментарий от X512

На русском про это в целом мало информации.

На русском про это есть типографская литература не позднее 1980-ых годов.

Это в основном про использование ОС, а не написание.

Нет никакой разницы, когда мы обсуждаем терминологию. Итак,

Как вы замените «многозадачную» на «многопроцессорную», где под процессором понимается не аппартный «процессор», а программный «процесс»?

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

Не вижу смысла продолжать этот буквоедский спор. Всё равно не видно что вы понимаете о чём речь.

X512 ★★★★★
()
Ответ на: комментарий от anonymous

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

Потому речь шла про винтел. Это кучка налетевших дятлов сдерейлила тред в Cortex и PDP-11.

И вообще давай цитируй чёткое определение многозадачности

А я не обсуждаю «многозадачность». Я обсуждаю краткий русский термин для

ОС с использованием аппаратной изоляции задач».

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

А я не обсуждаю «многозадачность».

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

Ты опять юлишь?

anonymous
()
Ответ на: комментарий от X512

Всё равно не видно что вы понимаете о чём речь.

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

При этом на ходу изобрёл два общеупотребительных термина с частотой встречаемости в письменном виде в одном (прописью - одном) и 69 раз.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Я опять объясняю, что я вкладываю в термин: «многозадачная ОС». Не пытайся меня поймать на том, что я забуду контекст, и сделать вид, что «ОС» тут не важен.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

Я опять объясняю, что я вкладываю в термин: «многозадачная ОС». Не пытайся меня поймать на том, что я забуду контекст, и сделать вид, что «ОС» тут не важен.

Я читаю твои комментарии, а не твой контекст, такие дела.

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

anonymous
()
Ответ на: комментарий от anonymous

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

Ты описал DOS и Win 16. Погугли в яндексе ответ на свой вопрос.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от LamerOk

Так и запишем, не отдаёт себе отчёта в собственных высказываниях.

anonymous
()
Ответ на: комментарий от LamerOk

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

FreeRTOS например. Работает без MMU и защиты памяти. Поддерживает короутины и потоки. Поддерживается такими корпорациями, как Amazon.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от LamerOk

Я опять объясняю, что я вкладываю в термин: «многозадачная ОС».

Выдумали свой термин, а потом всех обвиняете. Гугл не даёт результатов «многозадачная ОС» как ОС с защитой памяти, пишут про кооперативную и вытесняющую многозадачность. Термин «многозадачная ОС» в вашем понимании не нужен.

X512 ★★★★★
()
Ответ на: комментарий от ixrws

fork очень удобен и прост для написание каких-нибудь обработчиков логов на perl во столько процессов, сколько нужно

Чем здесь fork помогает? Он может быть полезным в одном единственном сценарии — когда тебе, как в Redis, нужно сделать read-only снимок данных. В nginx он не нужен, для обработки внешних объектов в несколько задач не нужен, а внутренние объекты, как правило, можно сделать внешними, и тогда читай предыдущий пункт. Fork был абсолютным злом почти с начала, но это плохое решение было скопировано снова и снова. Та же винда, например, позволяет передавать в дочерние процессы дескрипторы файлов, но она не передает память, потому что копирование памяти целиком в дочерний объект — это бессмысленная и беспощадная операция. Ладно бы там еще блоки разделяемой памяти копировались, но нет же, копируется все подряд.

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

По моим ощущением со времен futex и epoll, в том числе в сочетании с eventfd и timerfd, подводных камней осталось минимальное количество, в основном это простая, прозрачная, и эффективная асинхронщина. Простая в том смысле, что реализовать аналогичное поведение на сигналах будет намного сложнее.

byko3y ★★★★
()
Ответ на: комментарий от ixrws

А ничего, что unix тех времён не была операционкой панацеей хотя бы потому, что тех задач, что стоят сегодня перед приложениями тогда попросту не было и таких сложных приложений тоже? Я к тому, что fork создавался в тех условиях, когда делать приложения, порождающие процессы, затем потоки, затем процессы и тд и любой вложенности - было просто негде и незачем. Незачем потому что не было задач

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

byko3y ★★★★
()
Ответ на: комментарий от X512

FreeRTOS например. Работает без MMU и защиты памяти.

FreeRTOS например работает очень даже с защитой памятью через MPU, если это возможно:

Intertask Communication from User Mode

Code executing in User mode cannot access RAM outside its own stack and the MPU regions that are configured for it. This does not prevent User mode tasks from using queues or semaphores to communicate with other tasks or interrupts.
The RAM used by queues and semaphores is owned and controlled by the kernel and can be accessed only when the processor is executing in Privileged mode. Calling an API function such as xQueueSend() causes the processor to switch temporarily into Privileged mode, from where the data being queued can be copied from the User mode task into the kernel controlled queue storage area. Similarly, calling an API function such as xQueueReceive() causes the processor to switch temporarily into Privileged mode, from where the data being received can be copied from the kernel controlled queue storage area into the User mode task.

Так что про «матчасть», чья бы корова. Ну и не надо выдавать нужду за добродетель.

Выдумали свой термин, а потом всех обвиняете. Гугл не даёт результатов «многозадачная ОС» как ОС с защитой памяти, пишут про кооперативную и вытесняющую многозадачность.

Я не обвиняю, а утверждаю, что ты, к примеру, разговариваешь не со мной, а с голосами в своей голове. Где выше по треду я утверждал, что в «многозадачной ОС» нет ни кооперативной, ни вытесняющей многозадачности? Правильно - нигде. Зачем ты это себе нафантазировал?

Термин «многозадачная ОС» в вашем понимании не нужен.

В моём понимании этот термин описывает все существующие многозадачные операционные системы - от IBM System/360 Model 67 и VAX/VMS до десяточки максимальной и даже, прости г-ди, Plan 9.

А вот ты пытаешься натянуть сову на глобус, и пока безуспешно.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от X512

я хз, о чём вы тут спорите, но просто «многозадачная ос» в 2021 это фуфло. серьёзная ос ещё использует все реальные аппаратные потоки

anonymous
()
Ответ на: комментарий от LamerOk

FreeRTOS например работает очень даже с защитой памятью через MPU, если это возможно:

если это возможно

А бывает что и невозможно.

X512 ★★★★★
()
Ответ на: комментарий от X512

не надо выдавать нужду за добродетель.

LamerOk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.