Search
Write a publication
Pull to refresh

Comments 11

Небольшое предупреждение! Я буду говорить не просто о том "Как запускаются комманды?"

В целом статья написана, с точки зрения русского языка, грамотно (что является весьма редким явлением), но вот в её "предисловии" команды почему-то с двумя м :)

Процессор i8080 (полн. "Intel 8080") был 8-разрядным,соответственно объемы обрабатываемой памяти были не такими уж и большими. Все написанные под эту ОС программы помещались в один файл команды и весили не больше чем 64Кб.

Пара замечаний. Во-первых, "у них", когда имеются в виду килобайты, принято сокращать их до KB, ну а Kb означают килобиты. Понятно, что в данном случае проблемы с пониманием вряд ли возникнут, но в других ситуациях такое может произойти (скажем, когда указывают ёмкость микросхемы памяти).

Ну а во-вторых, разрядность процессоров и размеры программ не имеют совсем уж прямой связи. Как, например, транслятор ассемблера в OS/360 мог выполняться в разделе памяти размером порядка 16 килобайт, если он сам суммарно имел куда больший объём и мог транслировать программы, чей размер, по большому счёту, ограничивался только доступным местом на дисках? (Система 360 -- 32-разрядная машина, адрес там был 24-битным, занимая три младших байта слова, т.е. теоретически адресуемый объём памяти достигал 16 Мбайт, но сами машины имели весьма небольшой объём физической памяти; у самой младшей модели 30 он составлял от 8 до 64 Кбайт -- всё ж середина 1960-х).

Так что "помещались в один файл" -- это именно особенности CP/M, а не безусловная необходимость для 8-разрядного процессора.

И, кстати, были же оверлейные программы, суммарный размер кода которых мог существенно превосходить 64 Кбайта. Это сейчас про оверлеи, наверное, мало кто помнит :)

Спасибо, буду разбираться дальше. Про оверлеи в следующий раз будет написано однозначно.

Как-то странно, автор пишет про CP/M, потом про DOS, а в выводе - погружение в NTVDM. Это, конечно, слой совместимости со старыми системами, но о нем вообще раньше ни слова не было, откуда оно взялось?

Спасибо! Постараюсь в следующий раз при вычитке замечать такое

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

а как же устройство терминала, оно там было? комманды и вся обвязка на минимальной ОС может (по моему мнению должна быть обвязана вокруг терминала)

тоесть можно изучать ОС начиная с терминала например PTY(примитивный VT convention - escape sequences ANSI - шрифт/стили, положение курсора, очистка) - цель получить сессию с привилегиями пользователя, чтобы получить доступ к stdin/stdout/stderr - тоесть системные потоки этого родителя с привилегиями пользователя через командную оболочку

а уже терминал запускает оболочку - sh, csh и тд

чтобы видеть привествие )

PTY Slave: /dev/pts/2
You can install extra packages for FreeBSD by using the ports system.
If you have installed it, you can download, compile, and install software by
just typing

        # cd /usr/ports/<category>/<portname>
        # make install && make clean

as root.  The ports infrastructure will download the software, change it so
it works on FreeBSD, compile it, install it, register the installation so it
will be possible to automatically uninstall it, and clean out the temporary
working space it used.  You can remove an installed port you decide you do not
want after all by typing

        # cd /usr/ports/<category>/<portname>
        # make deinstall

as root.

например )

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

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

начал изучать сам с устройства передачи команд через терминал, сделал прототип(pty-+sh получил всё что хотел и сессию и историю и всё что даёт терминал с вводом пароля ) и понял что это хороший путь для изучения полной ОС, потомучто минимальная ОС, если запустит приглашение и в ней будет уже всё обвязано по привилегиям и сигналам/потокам, начиная от старта биоса оптимальный путь - запускать терминал после инициализации оборудования, и дать возможность видео ускорения, тоесть запуска видео драйверов(я просто так для себя понял, если ошибся - понял)

например на OpenIndiana сегодня до сих пор есть терминал тоже

немного по сабжу

Отличная статья. Надеюсь, что автор простит меня, если я немного подушню.

На всякий случай, команда ld (полн. "LOAD") выполняется как mov из IA-32, а не как lea 

Для синтаксиса с меткой ld reg, label она выполняется именно как lea, то есть загружает именно адрес, а не значение. MASM-синтаксис для mov reg, label загружал значение, хранящееся в памяти по метке.

ОС загружает бинарный образ .COM файла начиная с адреса 0x0100. Именно благодаря ORG 100h комманде процессору.

Нет. Директива ORG указывает ассемблеру, что метки нужно пересчитывать в адреса таким способом, будто код, располагающийся после директивы ORG, размещён по адресу, указанному в этой директиве. А CP/M загружает бинарный образ .COM файла просто всегда с адреса 0x100. И, что очень важно, этот адрес и является точкой входа (не увидел упоминания этого факта).

И так, идея комманды не меняется. .COM это все еще PIE-монолит (исполняемый файл независящий от точки входа).

Эээ, вообще PIE означает "position-independent executable" (исполняемый код, не привязанный к адресу загрузки) и к COM-файлам никакого отношения не имеет ни в CP/M, ни в MSDOS. Для CP/M файл будет загружен в абсолютный адрес 0x0100, так что нет никакой независимости от адреса загрузки. Для MS-DOS файл будет загружен в какой-то сегмент и тоже по абсолютному смещению 0x0100, сегмент же не важен, за него COM-программа не вылезает. Из-за независимости от сегмента с большой натяжкой COM-файл для MSDOS может считаться PIE. А насчёт "независимости от точки входа" тоже хрень, точка входа всегда по адресу 0x0100.

Насколько я знаю, идея .COM файлов для MSDOS состояла в том, что бинарным транслятором машинный код для 8080/Z80 превращается в код для 8086, а DOS эмулирует в PSP функционал CP/M, предоставляя переносимость программ без исходников.

очень рад видеть такие комментарии. Это не является духотой. Я учту это и буду разбираться дальше

Можно наверное ещё и про TSR рассказать. В них PSP можно было «отдать системе». Это мало пригождалось правда, только сегментацию порождало.

Плюс выйти из .com можно было и через INT 20h или даже через RET, если мне память не изменяет (на стеке лежал адрес начала PSP, а там записан тот же INT 20h).

Ещё очень рекомендую разыскать и скачать «Ralf Brown's Interrupt List», библию всех, кто писал под DOS. Он обновлялся, надо искать версию как можно свежее.

Sign up to leave a comment.

Articles