Нуль-Ядерная ОС ROSA YOUR Solutions
можно было, к примеру, изменить динамически подгружаемый модуль диспетчера памяти с Win32-подобного на Unix-образный или поэксперементировать со стратегиями многозадачности - не устраивает кооперативная многозадачность в стиле Novell NetWare - нет проблем, при следующей же загрузке получим многозадачность, идеологически заимствованную из микроядерной архитектуры QNX. В общем - что-то наподобие пресловутых "Тем рабочего стола Форточек XP", только на уровне Kernel Zero-Ground ("с нуля"), а не на уровне "ракраски" дизайнерских излишеств навязываемого кем-то ("безальтернативно лучшего") юзерского интерфейса.
А теперь о конкретике: поскольку ОСь сейчас находится в зародышевой стадии, я сейчас как раз и занят написанием этих самых Zero-Ground модулей менеджера задач и диспетчера памяти. Постоянно возникают проблемы, связанные с некоторым дефицитом подробной а, главное, точной, информации о средствах управления вычислительным процессом в ProtectedMode, реализованных в процессорах x86 (информации в Интернете много, но чувствуется, те, кто её предоставляет, знают не больше моего...) Вопрос: что есть Шлюз Вызова и как им пользоваться (если можно, хотя бы коротенький пример кода). А то уже слегка утомило писать что-то типа
mov ecx, (slRQ OR sysD32 OR Loaded) OR (1 SHL 8)
cl=ARB, ch=Количество копируемых слов из стека вызывающей задачи в стек вызываемой (см. "Assembler для DOS, Windows и Unix" Зубкова)
mov ebx, 30h SHL 3
ebx=смещение дескриптора относит. начала IDT (INT30)
mov eax, selExec32
selExec32-сегмент кода для процесса Init ядра
mov edi, OFFSET KernelRQ
OFFSET KernelRQ - это смещение точки входа в обработчик
call lctSluice ;(подпрограмма пишет все эти сведения из регистров в дескриптор. Работает правильно (проверял, разумеется) - вот только, по видимому, исходные данные для неё не соответствуют формату шлюза вызова)
и получать малоинформативный дамп от обработчика исключения GPF, ссылающегося на адрес инструкции "int 30h"
ты наверно так старался енто писал =))))) я поступил как скотина - прочитал первые 4 предложения ;) короче, тыб линк дал на твоЙ ось + я считаю что системные структуры потипо TSS,GDT, Pages должны быть статичны, и не выгрудаться не сгружаться...
Нет, ну я конечно всё понимаю,оригинальность (я бы даже сказал-экстравагантность) твоих речевых оборотов в стиле "модерн" опрделяется похвальным стремлением к самовыражению,
вот только порой это, к сожалению, создаёт несколько комичный эффект эмоционального восприятия людьми с генетически заложенным чувством юмора и может вызывать только раздражение у занудливых (а таких большинство) индивидуумов с полным отсутствием такового.
Я, к твоему, может быть, "счастью" отношусь к первой категории homosapiens :-)) Вот тебе в подарок от меня анекдот от автора книги "Операционная система реального времени QNX" Сергея Зыля:
-Дети, кто знает, что такое ос?
-Ос-это большой полосатый мух!
-Нет, полосатый мух - это шмэл, а ОС - это основа АСУ!
(из народного фольклора)
Да кстати, проблему с шлюзом вызова ядра (пока что через него вызываются только многочисленные сервисные функции "вспоиожения" отладке ядра из-под порождённых процессов не 0 уровня привилегий) . Вся проблема, оказывается, состояла в том, что дескриптор шлюза вызова помещается не в IDT, а в GDT или LDT, и, соответственно, вызывается дальним call типа
db 9Ah
dd ? ;что угодно: поле смещения игнорируется ;микропроцессором
dw slRQ_<имя шлюза> ;люблю осмысленную семантику. В данном случае slRQ_<имя шлюза> - селектор на дескриптор шлюза.
У меня нет сайта. Есть только адрес элетронной почты (Мудрая Собака ЛИСт) и огромный запас энтузиазма. "За окном шёл дождь и рота красноармейцев" - сами понимаете...да, это тоже - Родная Речь.
P.S. Жаль, что мёд нельзя пропихивать в mailbox'ы - а то просил бы Феликса Загировича прислать из Башкортостана кг или 10кг или 100-это уж смотря "почём". Люблю башкирский мёд...
>а в GDT или LDT
а хто тебе такое сказал?
а меду я тебе просто так пришлю, смотри клаву не заляпай когда качать бушь ;) кстати откду ФИО знать?
Коновалов Андрей Александрович. Присылай мёд на 119620 Москва, ул Богданова, 48/2, кв.79 OK? Жду!
гЫ..гЫ... =))))) тебе тоже огромный респект за иникальность ;) ты енто... скажи подробней.. что на данный момент твоя ось может умеет и т.д. если покачто мало чего нить реального то моожешь начать с нами, если в тебе пылает энтузиазм то к понедельники я набросаю спецификацию - убедищься что енто не что новое в ентом мире, на фоне чего даже растираются акие понятия как ядро..
>а в GDT или LDT
а хто тебе такое сказал?
У меня дескриптор шлюза вызова в GDT. Всё работает нормально. А что, у тебя есть другие варианты?
бррр.. запутыл ты меня.. мы о че говорили.. о шедулере? у тя ася то есть?
хых... я тебе грузовиком на 20 тон отправил ;)
В тротилловом эквиаленте? Или просто НЕТТО?
Послушайте, кто-нибудь из вас реализовывал в своих разработках ОС идею сплошной (совмещённой оперативной и дисковой) памяти? Подскажите в общих чертах как это удобнее организовать (а то ведь через годик-другой и сам додумаюсь)
В качестве файловой системы хочу использовать ReiserFS. У кого там челюсть отвисла? На мой взгляд, сейчас Reiser - объективно лучшая файловая система. Проблема только в сложности её алгоритмической реализации и сильной зависимости производительности от эффективности алгоритма работы с ней (всякие там сбалансированные деревья-это вам не фунт изюма съесть) Зато документации по Reiser в Inet'е масса, что радует...
>У меня дескриптор шлюза вызова в GDT. Всё работает нормально. А что, у тебя есть другие варианты?
бррр.. запутыл ты меня.. мы о че говорили.. о шедулере? у тя ася то есть?
Надо всё читать, а не первые несколько предложений в порядке произвольной выборки фраз из контекста ((:-)} Аси нет, а зачем оно мне. И форума вроде хватает...
;mlm is Memory Location Map (Карта Размещения в Памяти)
lb_ordTSS EQU 68h
lb_ord_Stack EQU 400h
lb_ord_DTL EQU 8*3
lb_TSS_Init=lb_ordTSS+108+4
lb_TSS_Shedlr=lb_ordTSS+108+4
lb_DTL_Shedlr=0
lb_Stack_Shedlr=800h
lbStatMem_Shedlr=1000h
;Описание таблицы LDT для процесса Shedlr
selExec_Shedlr=8 OR UseLDT
lb_Stack_KernelRQ=400h
cntSTEA_Offs=0
sysNewTask Macro idTaskList:VARARG
;;Enter:
;; esi=fptrSysTSSArea
FOR idTask, <idTaskList>
echo idTask
IF flDS_Is_Correct EQ 0
mov ax, sel_dtg
mov ds, ax
ENDIF
t3s&idTask=cntGDTDescrOffs
cntGDTDescrOffs=cntGDTDescrOffs+8
selTE&idTask=cntGDTDescrOffs
cntGDTDescrOffs=cntGDTDescrOffs+8
tt TEXTEQU <lb_TSS_>
tt CATSTR tt, @CatStr(<&idTask>)
% IFDEF tt
IF lb_TSS_&idTask LT lb_ordTSS
lb_TSS_&idTask=lb_ordTSS
ENDIF
ELSE
lb_TSS_&idTask=lb_ordTSS
ENDIF
;Созда„м дескриптор TSS и дублирующий дескриптор RW сегмента
lea edi, [esi+cntSTEA_Offs]
mov ebx, t3s&idTask
mov eax, lb_TSS_&idTask-1
mov ecx, 100h OR (sysItIsTSS OR sysD32 OR Loaded) OR (D32 SHL 4)
call lctDescrDT
;Если предусмотрено использование LDT для этой sysTE, добавим дескр.-ы LDT
;и RW-дублирующего сегмента
rp_TSS_TE&idTask=cntSTEA_Offs
cntSTEA_Offs=cntSTEA_Offs+lb_TSS_&idTask
;Проинициализируем дескрипторы используемых процессом сегментов из набора
;"стандартных" (located in STEA.mlm) в LDT или в GDT (ds уже настроен на соотв. таблицу)
IFDEF lb_DTL_&idTask
cntLDTDescrOffs=0
FOR vs, <_Stack,StatMem,_DLA>
tt TEXTEQU <lb>
tt CATSTR tt,@CatStr(<vs>),@CatStr(<_&idTask>)
% IFDEF tt
cntLDTDescrOffs=cntLDTDescrOffs+8
ENDIF
EndM
IF lb_DTL_&idTask LT cntLDTDescrOffs
lb_DTL_&idTask=cntLDTDescrOffs
ENDIF
cntLDTDescrOffs=0
cntXDTDescrOffs TEXTEQU <cntLDTDescrOffs>
flUseLDT=UseLDT
ELSE
cntXDTDescrOffs TEXTEQU <cntGDTDescrOffs>
flUseLDT=0
ENDIF
FOR vs, <_DTL,_Stack,StatMem,_DLA>
tt TEXTEQU <lb>
tt CATSTR tt,@CatStr(<vs>),@CatStr(<_&idTask>)
% IFDEF tt
lb_tt=@CatStr(lb<vs>_&idTask)
echof $=$,@CatStr(lb<vs>_&idTask), %lb_tt
IFDIFI @CatStr(<vs>), <_DTL>
IF lb_tt EQ 0
IFDEF lb_ord&vs
@CatStr(lb<vs>_&idTask)=lb_ord&vs
lb_tt=@CatStr(lb<vs>_&idTask)
ELSE
.ERR
echo Created segment size can't be 0
ENDIF
ENDIF
ENDIF
lea edi, [esi+cntSTEA_Offs]
mov eax, lb_tt-1
IFDIFI @CatStr(<vs>), <_DTL>
;Если для процесса используется собственная LDT, все дескрипторы создаваемых
;в его индивидуальном пространстве сегментов размещаем в LDT - иначе вынуждены
;использовать GDT
@CatStr(sel<vs>_&idTask)=cntXDTDescrOffs OR flUseLDT
cntXDTDescrOffs=cntXDTDescrOffs+8
mov ecx, (XAccess OR NoSys OR Loaded) OR (D32 SHL 8)
mov ebx, @CatStr(sel<vs>_&idTask) AND (NOT 111b)
call lctDescrDT
ELSE
;Размещаем дескриптор таблицы LDT процесса в GDT
ldts&idTask=cntGDTDescrOffs
cntGDTDescrOffs=cntGDTDescrOffs+8
sel_dtl&idTask=cntGDTDescrOffs
cntGDTDescrOffs=cntGDTDescrOffs+8
mov ebx, ldts&idTask
mov ecx, 100h OR (sysItIsLDT OR Loaded) OR (D32 SHL 4)
call lctDescrDT
mov eax, ebx
mov ds, ax
flDS_Is_Correct=0
ENDIF
@CatStr(rp<vs>_TE<&idTask>)=cntSTEA_Offs
cntSTEA_Offs=cntSTEA_Offs+lb_tt
ENDIF
EndM
EndM
EndM
Я таким образои статически (на этапе компиляции определяю для каждой из них местечко в памяти) создаю в пространстве STEA (System Thread of Execution Area) новые задачи. Это не спам (или как его), это-реклама MASM'а.
Как бы их "отменить" что ли? Правда, у них (у смайлов) тоже проблемы со зрением (товарищи по несчастью, понимаешь). Но программный текст искажают. Дилема (две "л" или две "м" в слове?) Ладно, я ещё подумаю над проблемой устранения смайлов, а пока отбой.
Что-то меня смайлы "восьмёрка-скобка" оч. сильно раздражают.
Как бы их "отменить" что ли? Правда, у них (у смайлов) тоже проблемы со зрением (товарищи по несчастью, понимаешь). Но программный текст искажают. Дилема (две "л" или две "м" в слове?) Ладно, я ещё подумаю над проблемой устранения смайлов, а пока отбой.
Да поможет тебе опция "Отключить смайлы в сообщениях" сразу под полем воода сообщения!!!
Да поможет тебе опция "Отключить смайлы в сообщениях" сразу под полем воода сообщения!!!
Да, точно. Я вообще по жизни человек оч. ненаблюдательный. Врочем, non principia...
Вот вам jpg, который на самом деле exe-бинарник "0.000" версии ОС Rosa. Естественно, запускается из-под чистого DOS'а.
Что это за формат? Ничем не конвертируется..
Прицепи чистый бинарник.
Что это за формат? Ничем не конвертируется..
Прицепи чистый бинарник.
а вы не пробовали его переминовать в ехе, )
а вы не пробовали его переминовать в ехе, )
Слушай, Феликс, ты гений! Это я тебе со всей ответственностью говорю.
Меня удивляет avm: там ведь в начале этого якобы txt буковки MZ (Mark Zbikovski) стоят. Может Вы, avm, к Unix-овским бинарникам привыкли?
там ведь в начале этого якобы txt буковки MZ (Mark Zbikovski) стоят.
ну нетакой уж и гений ;) я незнал как расшифровается MZ, но то что енто M$ бинарник мог голову на отсечение отдать ;) про твою ось.... ты выполняешь cli? а то под досом еррор синий экран, посередини какая надпись полсекунда и ресет.. а под виндой успел кое как прочитать то что в реале пишетсяююкакие цифры... давай лучше сам нам расскажи ;) + че комне на форум не за хож =) там nukee в FAQ про свою ось топик поднял.. остальных тоже привествую http://board.sysbin.com
ну нетакой уж и гений ;) я незнал как расшифровается MZ, но то что енто M$ бинарник мог голову на отсечение отдать ;) про твою ось.... ты выполняешь cli? а то под досом еррор синий экран, посередини какая надпись полсекунда и ресет.. а под виндой успел кое как прочитать то что в реале пишетсяююкакие цифры... давай лучше сам нам расскажи ;) + че комне на форум не за хож =) там nukee в FAQ про свою ось топик поднял.. остальных тоже привествую http://board.sysbin.com
А зачем я должен выполнять cli? То, что надпись на синем экране - так это не что-то наподобие синего экрана смерти Windows, а просто сообщения монитора процессов Sheduller (я не перепрограммировал таймер, поэтому messag'и появляются 91 раз за 5 секунд). На твоём компе проблема судя по всему возникает другая - ОС по необъяснимым причинам резетиться за последним отсчетом Sheduller'а - не радует меня это что-то. Да, кстати, мышкой попробуй подвигать (если она у тебя PS/2), в клаву потыкать и расскажи о результатах. Или у тебя всё сразу виснет? Тады может всё ж таки успеешь посмотреть, что именно пишет обработчик исключения CPU. А то не хотелось бы, чтоб уже на самых ранних этапах разработки ОС имела совместимость исключительно с моим компом. У тебя, кстати, процессор >=PIMMX? Конечно, прочих мастодонтов уже почти не осталось, но мало ли...
а ты все прерывания в IDT описал? их 256
>То, что надпись на синем экране - так это не что-> У тебя, кстати, процессор >=PIMMX?
енточ то такое?
Слушай, Феликс, ты гений! Это я тебе со всей ответственностью говорю.
Меня удивляет avm: там ведь в начале этого якобы txt буковки MZ (Mark Zbikovski) стоят. Может Вы, avm, к Unix-овским бинарникам привыкли?
Программа exe2bin, а также objcopy не понимает формат этого файла.
Это ты DRVTiny меня удивляешь.
Неужели ты думаешь, что я буду запускать чей-то exe-шник на своей машине?
Пробовал перевести в бинарник, чтобы запустить под Bochs-ем, но не получилось.
..И вообще, хороший тон - выкладывать исходники.
Программа exe2bin, а также objcopy не понимает формат этого файла.
Это ты DRVTiny меня удивляешь.
Неужели ты думаешь, что я буду запускать чей-то exe-шник на своей машине?
Пробовал перевести в бинарник, чтобы запустить под Bochs-ем, но не получилось.
..И вообще, хороший тон - выкладывать исходники.
Гм, не понял, ну коль уж параноя донимает, ну запускай под виртуальной машиной - я ж не против, только, ты уж извини за мою вопиющую безграмотность, зачем же exe в com (или ещё во что-то) превращать при том, что он у тебя ни в жизнь и не превратиться (у меня в файле rosa.asm несколько сегментов, никаких org 100h вначале файла не стоит). Ты вообще какие-нибудь, хотя бы самые слабые представлекния о том, чем вообще-то com от exe отличается имеешь? И вот хоть убей, не пойму, чем, собственно, com exe-шника безопасней. Между прочим, я твоим bochs пользовался - DOS из под него вполне нормально работает вроде (да и не вроде тоже). А в чём проблема exe из DOS запустить?
Кстати, коль уж ты такой умный - используй дизассемблер типа IDA - вот тебе и исходники будут :-))))
зачем же exe в com (или ещё во что-то) превращать
Да исключительно затем, что мне DOS под Bochs-ем совершенно не нужен, поэтому и нет пользы тратить время на выяснение, как его под ним запускать.
А бинарники грузить - нет проблем..
ЛЮБОЙ exe можно превратить в bin. Хотя бы таким элементарным способом, как взять образ уже загруженной и подготовленной к запуску программы и сохранить его в файле. И чистый бинарник готов - отдельно только придется запомнить адрес загрузки и точку входа.
Да исключительно затем, что мне DOS под Bochs-ем совершенно не нужен, поэтому и нет пользы тратить время на выяснение, как его под ним запускать.
А бинарники грузить - нет проблем..
ЛЮБОЙ exe можно превратить в bin. Хотя бы таким элементарным способом, как взять образ уже загруженной и подготовленной к запуску программы и сохранить его в файле. И чистый бинарник готов - отдельно только придется запомнить адрес загрузки и точку входа.
Но не любой exe можно конвертить в com?
Но не любой exe можно конвертить в com?
Не любой..
Только причем тут вообще com ?!..
Не любой..
Только причем тут вообще com ?!..
exe2bin всю мою сознательную жизнь только и занимался тем, что конвертил exe в com. А я вроде не вчера родился, чес слово :-))). А этот bin - это вообще для какого загрузчика исполняемых файлов предназначено (уж не для dbg ли) :???: Или может,он по собственному разумению exec'ютиться когда ему заблагорассудиться? И чем всё-таки в плане безопасности bin лучше?
>А зачем я должен выполнять cli?
а ты все прерывания в IDT описал? их 256
>То, что надпись на синем экране - так это не что-> У тебя, кстати, процессор >=PIMMX?
енточ то такое?
Аппаратных прерываний 16 (если два котроллера-эмулянта i8259A сцеплены по одному из входов прерываний) Исключения (все возможные) у меня обрабатываются выводом адреса ошибки и немедленным выходом в DOS. Деление на нуль отрабатывается выводом сообщения и искусственным обходом инструкции div, вызвавшей ошибку. PIMMX - это Pentium 166 MMX, разумеется...
Аппаратных прерываний 16 (если два котроллера-эмулянта i8259A сцеплены по одному из входов прерываний) Исключения (все возможные) у меня обрабатываются выводом адреса ошибки и немедленным выходом в DOS. Деление на нуль отрабатывается выводом сообщения и искусственным обходом инструкции div, вызвавшей ошибку. PIMMX - это Pentium 166 MMX, разумеется...
хы... не че то не так.. уж запомнил я ето число - 256 не просто так =)))) а про PIMMX - первый раз слышу =)
хы... не че то не так.. уж запомнил я ето число - 256 не просто так =)))) а про PIMMX - первый раз слышу =)
Ну да, знаю, ты ж у нас по CISC и RISC архитектурам специалист. Там в Уфе народ давно уж и забыл об IBM PC на Intel'овских процах - там же своебразное поле чудес - одни сплошь PowerPC да Alph'ы у всех - начиная системными администраторами и заканчивая домохозяйками. Очень рад за Вас, дорогие представители "продвинутого" башкирского народа!
хых.. =))) интеловские камушкито есть ;) а воТ PowerBOOK G4 ТОЖЕ =)
Купи AS/400 IBM'овский комп и ни в чём себе не отказывай.