vak: (Знайка)
[personal profile] vak
Ещё одно необычное добавление в коллекцию: набор классических юниксных утилит для MS-DOS, под названием MKS Toolkit. Позже были и DJGPP, и Cygwin, и MinGW, но MKS стал первой весточкой, что юниксная жизнь возможна даже во враждебных средах. 😀 И даже на 8088 процессоре.
Имеются непривычные для DOS вещи. К примеру, dev показывает список установленных драйверов.



Команда df выдаёт список файловых систем. Для каждого логического диска показывает количество свободного места и полный размер.



Командой ps можно посмотреть все досовские "процессы".

Date: 2025-12-08 04:41 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Ух ты, я не знал про этот тулкит. PS.EXE с этими PID и PPID смешной, конечно.

Date: 2025-12-08 05:48 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
О, какие древние штуки! Я в 99-м пользовался МКС. Хорошая вещь. Цивилизует как-то.

Date: 2025-12-08 08:51 (UTC)
chaource: (Default)
From: [personal profile] chaource
ps.exe - это загадка.

Что это за командa ]r??X??b и почему процессъ PPID=FREE запускаетъ команду "3440 bytes"?

Возникаетъ вопросъ - что такое "досовскiе процессы" и противъ кого они были направлены, кого на этихъ процессахъ обвиняли, а кого объявляли FREE?

Date: 2025-12-08 09:06 (UTC)
chaource: (Default)
From: [personal profile] chaource
Но вотъ тогда кстати вопросъ. Мы знаемъ, что 8086 не могъ поддерживать настоящую изоляцiю процессовъ. Любой процессъ могъ читать и записывать въ любой адресъ памяти. Но предположимъ мы будемъ использовать спецiальный дiалектъ Rust, чтобы гарантировать, что память используется безопасно. Можно ли тогда построить работающую юниксоподобную операцiонную систему съ безопасными процессами, которая не могла бы вызвать memory corruption?

Date: 2025-12-08 09:11 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Это и без Rust легко.
Достаточно в программах не менять никогда Сегментные регистры CS, DS, SS, ES.
В тогдашних компиляторах это называлось "модели памяти Tiny и Small"

Date: 2025-12-08 09:17 (UTC)
chaource: (Default)
From: [personal profile] chaource
Непонятно, почему этого достаточно. Безъ контроля за памятью, любая программа сможетъ взять любой указатель и прибавить къ нему любой offset и запортить всю ОС.

Или предполагается, что въ 640КБ памяти работаютъ всего 10 независимыхъ процессовъ и каждому даны по 64КБ памяти? И что каждый процессъ получитъ свои сегментные регистры и никогда-никогда не будетъ ихъ мѣнять?
Edited Date: 2025-12-08 09:19 (UTC)

Date: 2025-12-08 09:28 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
взять любой указатель и прибавить къ нему любой offset и запортить всю ОС
Процессор 16-битный и просто прибавляя смещение невозможно выбраться за пределы сегмента 64K

каждый процессъ получитъ свои сегментные регистры и никогда-никогда не будетъ ихъ мѣнять?
Да, примерно так.
Причём ОС сможет перемещать сегменты в физической памяти незаметно для процессов
Теоретически предел такой модели 256K на процесс: 64K под код, 64 под стек и 2 сегмента под данные

А если задействовать EMS, то можно много процессов поместить.

Edited Date: 2025-12-08 09:32 (UTC)

Date: 2025-12-08 09:36 (UTC)
ircicq: (Default)
From: [personal profile] ircicq
Стек может испортиться только принадлежащий процессу
Систему это не убьёт

Переключение процессов будет по прерыванию таймера
Interrupt Handler вызовется в любом случае. И он способен обнаружить переполнение стека и прибить процесс
Edited Date: 2025-12-08 09:39 (UTC)

Date: 2025-12-08 09:53 (UTC)
chaource: (Default)
From: [personal profile] chaource
Но от переполнения стека защититься не получится.
Да, про это я не подумалъ. Отъ этого спасетъ только Haskell ;) потому что тамъ стекъ размѣщается на Heap.