Добро пожаловать на официальный сайт операционной системы
!!!
Или Monosoft Ltd.(R) Disk Operating System.
(Monosoft Ltd.(R) - имя виртуальной компании, разрабатывающей MN-DOS)
.:Меню:.
  Главная
  Новости
  Техн. подробности
  Download
  Форум
  О нас
  E-mail Гладких

 Дата последнего обновления 09.03.2003 02:10 am

Введение о системе:)
Файловая система.(Ф/С)
        Файловая система операционной системы MN-DOS 1.0 носит гордое имя SLTFS, что означает Sector Links Table File System, или в переводе на более доступный язык, Файловая Система Таблицы Цепочек Секторов. На первый взгляд она чем-то похожа на FAT, но, если вглядеться пристальнее, станут видны отличия, большие и не очень. Кое-что позаимствованно и из HPFS.  Ф/С основывается на большой таблице, с размером ячейки в зависимости от размера носителя, 12 бит, 2, 4 байта. Количество этих ячеек равно количеству секторов на диске. Эта таблица - единственная на весь диск, даже если там несколько логических разделов. - Это пятое отличие.
        Каждая ячейка описывает сектор, а не кластер. В этом первое существен-
ное отличие от FAT(или сходство с HPFS :). Эта таблица располагается ровно посредине диска (на 1.44 НГМД - начиная с 40 дорожки), копия расположена по другую сторону диска. При большом размере ДМНИ этих копий может быть больше двух, каждая из которых расположена по одну из сторон одного из "блинов" из пакета дисков. Это - второе существенное отличие и от FAT, и от HPFS. Это уменьшает и держит возле среднего значения среднестатистическое время доступа к диску, так как внезависимости от степени заполненности диска время доступа будет примерно одинаковым, и меньшим, чем в FAT. При повреждении одной из копий Таблицы надо лишь переключаться с головки на головку. А переключение во много раз меньше времени перехода с дорожки на дорожку, но это уже менее существенно. В каждой ячейке может быть FFFh - признак конца файла, FFEh - признак испорченного сектора, или любое другое значение, указывающее на следующий сектор в цепочке, или "0" - сектор свободен.
Указатели на файлы хранятся в Файловых Словарях. В эти словари занесены имена файлов, размеры, первые сектора и т.д. В заголовке  каждого словаря (это можно назвать и директорией) указана длина имен файлов. Она может  принимать значения 8+3, 32+3, произвольное значение или FF, что указывает на переменную длину имени файла. Это еще одно отличие. Эта система была разработана автором, впоследствии были внесены поравки. Поскольку ведётся учет секторов, а не кластеров, объём дискового пространства, оставшийся недоступным, не сможет превысить 511 байт. Это - четвёртое отличие. И что бы там ни говорили, я считаю, что в свете указаных выше отличий Ф/С имеет право на самостоятельное название.
Организация дискового пространства.
        Первые два сектора, независимо от типа носителя, отведены под загрузчик ядра операционной системы. Далее следует таблица томов данного устройства. Она есть только на НМД. Здесь перечислены тома диска, их длины и первые сектора. Это разделение условно по причине №5 предыдущей. главы. Эта причина очень важна - это ещё одно существенное ускорение и упрощение работы с диском. В даном конкретном случае упрощение вовсе не снижает надёжности системы.
    Далее следуют 4 сектора корневого каталога. В середине диска - Таблица, остальное пространство не регламентированно. Может быть, в следующих версиях системы таблица томов будет внесена во второй сектор загрузчика, благо там пока ещё место имеется.
Системный загрузчик.
        Может возникнуть вопрос - почему загрузчик такой большой? Но дело вовсе не в неумелом программировании, а в отличиях моей системы. Если бы не общая Таблица, загрузчик был бы ещё больше. При старте он загружает в память второй сектор, часть корневого каталога и начинает искать директорию SYSTEM. Ведь именно в ней находится ядро. Найдя SYSTEM, загрузчик загружает её по частям и ищет kernel.bin, не найдя SYSTEM или kernel.bin, загрузчик грозно крикнет, что мол, нечего занятых людей зря за всякими кернелами посылать ;). Ну а ежели ядро найдено, оно грузится в память(не 65536, а его размер / 512+1) по адресу 7000:0000h и управление отдаётся туда.


Словарик:
SLTFS - Sector Links Table based File System - Файловая система Таблицы цепочек секторов - файловая система MN-DOS
HPFS - Файловая система О/С OS/2 - High Perfomance File System.
НГМД - Накопитель на Гибких Магнитных Дисках - профессиональное название дисковода :)
ДМНИ - Дисковый(е) Магнитный(е) Накопитель(и) Информации - придуманная мною аббревиатура для НГМД, НМД, в отд. случаях устройства считывания компакт дисков(хотя оно и оптическое, но "сидит" на шине жёстких дисков), т.н. "итальянских" дисководов и прочего.
НЖМД - Накопитель на Жестких Магнитных Дисках - "винчестер".
НМД - "святое" профессиональное название различных накопителей, дабы его не коверкать, я и ввел ДМНИ.
Том - в современном стиле можно прочитать как логический диск, но понятие "том" обширнее.


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

     Самая важная часть системы - управление памятью, разделением процессов и процессорного времени между процессами. Я слышу ваши возражения, Коденетовцы! Дескать главное - драйвера, управление вводом-выводом и т.д. Но не спешите возражать. Представтье себе такую модель: Компьютер, в котором есть ОЗУ, АЛУ и таймер. О/С и задачи загружаются вручную, забивкой байтов непосредственно в ОЗУ. В этом случае О/С - это О/С. Она обесп. управление процессами, памятью, доступом к АЛУ. Все вводные берутся из ячеек памяти, туда же выводятся результаты.
Внешних устройств НЕТ! Но всеж таки это О/С, разделение процессов и памяти, которая может зависнуть :)))

Система MN-DOS - система, ориентированная на процедуры.
>---------------------------------------------
Ориентированная на процедуры модель.
Ориентированная на процедуры система характеризуется быстрой сменой контекста, осуществляемой за счет эффективных системынх вызовов. Взаимодействие процессов осуществляется при помощи блокировок, семафоров или событий. (В отличие от системы, ориентированной на сообщения. -прим. Г.Д.)
>---------------------------------------------

Программа - намагниченный кусок данных на НМД. Задача - программа, загруженная в память ЭВМ, и исполняющаяся(м.б. ждущая)/готовая к исполнению. Каждая задача состоит из одного или нескольких процессов. Все процессы задачи имеют приоритет задачи. Приоритет задачи указан в заголовке программы, или задается непосредственно перед выполнением последней или изменен в ходе выполнения.
В каждый конкретный квант времени в О/С может существовать максимум 256 процессов, включая немногие системные. Это удобно, так как PID(Process IDentificator)задается одним байтом(хотя скорее всего, будут 2). Кто-то может сказать, что это мало, что это ограничение, шаг к негибкости ситемы, и подобные глупости. Но: я смотрел хваленый Windows, в котором якобы можно кучу процессов параллельно иметь, но там идет такой список:
1....
2....
2018....
11005....
32767....
65535.....
No comments.......
У меня это было бы 0,1,2,3,4,5, что и проще, и чего вполне хватит. При освобождении процессом места другой процесс его займет.
Приоритеты процессов нумеруются в "обратном" порядке, т.е. № 0 - наименее привелигированный, № 255 - наиболее привелигрованный. В системе используются только динамические приоритеты, но разные коэффициенты прироста. Например, у задачи с PL=0 через такт CPL=0, т.е. такая задача никогда не исполнится. Это - холостой процесс. Задача с PL=255 через такт CPL=255 и задача поставится в очередь на исполнение. Вот теперь поговорим о 

Очередь процессов на исполнение.

Очередь состоит из 256 двухбайтовых ячеек. В первый байт записывается PID, во второй - флаг завершения. Диспетчер процессов знает позицию кадра, т.е. порядковый номер ячейки. При постановке процесса в очередь он ставится в конец, но менее привелигированные задачи ставятся реже, правда? Если какая-то задача достигла уровня исполнения, Планировщик процессов ставит процесс в конец очереди и проверяет, нет ли уже в очереди процесса с этим же PID. Если есть, старый процесс удаляется, и очередь дефрагментируется. При достижении Диспетчером задач "дна" очереди адрес кадра обнуляется и управление отдается Планировщику. Именно таким образом достигается равноправие задач, т.е каждый процесс задачи ОБЯЗАТЕЛЬНО будет обслужен, но менее привилигированные задачи будут исполняться реже, т.е. им будет отдаваться меньше процессорного времени.

Предыдущая идея, опубликованная ранее(3.01.2003), была частично неудачна, и я ее основательно переработал.

Теперь о распределении, выделении, переопределении, и прочем делении памяти.
Пока все задачи плотненько загружены в память, все ясно. Но вот, какую-нибудь задачу выгрузили, и "оголяется рабочее место", потом еще одно и т.д., т.е., память фрагментируется и система будет вынуждена при очередной попытке что-либо загрузить выдать печально-тривиальное "No free memory!". Дабы этого избежать, надо память, как и диск, дефрагментировать (ох, и люблю я всякие дефрагментации :) Но делать это постоянно - головная боль юзеру, ведь это требует достаточно больших вычислительных ресурсов. Выход - в таблице свободной памяти. Там записаны все свободные кусочки памяти, в том числе и еще неиспользованная память. Система будет контроллировать, чтобы смежные участки в таблице свободной памяти объединялись в один большой. Если необходимый участок не найден, система пытается загрузить задачу в конец памяти, после всех уже запущенных задач(точнее, в самый последний, самый большой участок, описанный последней ячейкой таблицы свободной памяти.)
В системе будут предусмотрены функции дополнительного выделения памяти, т.е. задача может увеличить свой сегмент ДАННЫХ в процессе исполнения. Эти "добавки" будут зарегистрированны с использованием PID главного процесса задачи. Как только какая-либо задача будет выгружена, ситема проглядит таблицу - не числится ли за задачей лишняя память. Если да, она обнуляется и заносится как свободная в таблицу свободной памяти. Если свободная память так и не будет найдена, система, в зависимости от настроек, либо запросит разрешение на дефрагментацию памяти, либо сделает это сама.

Взаимодействие программ, ядра и аппаратной части, работа драйверов.
В ядре MN-DOS при возникновении прерывания управление переходит к обработчику прерывания - он физически наодится в коде ядра, но логически целесообразно выделить его как часть драйвера. Этот обработчик(в разных источниках его называют драйвером, здесь и далее - аппаратный драйвер или аппаратная часть драйвера) преобразует и сохраняет необходимые данные, завершает прерывание. Вторая часть(ее нередко называют менеджером, здесь и далее - программный драйвер, программная часть драйвера, интерфейсная подпрограмма) обрабатывает вызовы программ(API, здесь и далее - пользовательские/интерфейсные функции), обспечивает 
их исполнение, выдачу соответствующих данных.
        Рассмотрим эту проблему на примере драйвра клаиватуры.  Допустим, поступило прерывание номер один - от клавиатуры. Процессор переключается на системный обработчик прерывания. Он считывает поступивший скан-код, анализирует его, преобразует и заносит в 16-позиционный кольцевой буфер. На этом его работа заканчивается. Вторая часть - интерфейсная подпрограмма при вызове анализирует номер функции, если требуется считывание информации, это происходит сразу же. Если требуется подождать ввода очередного символа, то: Поскольку в MN-DOS программа не может "захватить прерывание", адрес ожидания  заносится в нужную таблицу, ставится соответствующий флаг.
При очередном прерывании аппаратная часть драйвера проверяет наличие флага и после окончания всех своих необходимых действий не просто завершается, а передает управление нужному процессу.
Сегменты, находящиеся в распоряжении задачи и ее процессов.
        В LDT задачи занесены:
0)Специальный сегмент типа PSP с данными о задаче и для задачи.
1)Сегмент кода
2)Сегмент статических данных
3)Сегмент стека
4)Сегмент динамических данных
В коде типа COM некоторые дескрипторы будут алиасными.

Спасибо за внимание!
Веб-дизайн by NAIL & Гладких Дмитрий
Hosted by uCoz