Как выглядит операционная система без оболочки?

41

Оболочка, такая как bash или command.com (до Windows ME) или CMD.EXE (в более поздних версиях), обеспечивает интерфейс, который (среди прочего) принимает команды от пользователя. Как выглядит операционная система до запуска оболочки? Как использовались системы до разработки первой оболочки (например, UNIX в начале 1970-х годов)? Если компьютер не может даже принимать команды (нет командной строки), как пользователь может взаимодействовать с ним? Что это за самый простой интерфейс? Могу ли я запустить этот интерфейс в эмуляторе терминала или нет пути за оболочкой?

44taka
источник
2
(В качестве отступления: термин «оболочка» относится не только к оболочкам командной строки .)
Арджан
2
@Ramhound Конечно, вы можете взаимодействовать с системой без командной строки. Можно спорить о достоинствах различных подходов к дизайну пользовательского интерфейса всю неделю, но, безусловно, было возможно взаимодействовать как с классической Mac OS, так и с Altair, несмотря на то, что ни одна из них не имела командной строки.
CVn
4
Самым базовым интерфейсом, вероятно, будет панель переключателей, как в PDP11 / 04 и т. Д.
Tog
1
Это похоже на шахматы raspberrypi.org/archives/4300
Нико Бернс
1
Это похоже на дерево, падающее в лес, и вокруг никого нет.
Натан Хейфилд

Ответы:

35

Как выглядит операционная система до запуска оболочки?

Зависит от ОС и от того, как вы ее настраиваете. Linux может быть настроен на запись загрузочного текста на консольное устройство, будь то консоль в текстовом режиме, консоль кадрового буфера или последовательный порт. Это может также быть настроено, чтобы быть совершенно тихим. Некоторые ОС / системы могут записывать диагностическую информацию в энергонезависимую память, к которой можно получить доступ, переведя систему в режим разработчика, отладки или диагностики. Многие операционные системы поддерживают вывод загрузочной и диагностической информации в некоторую форму UART, которая может каким-то образом быть доступной на устройстве, даже если она скрыта от пользователя (например, «Добавить последовательный порт в DD-WRT» от Google, где производители скрывают последовательные порты и как вы можете добраться до них).

ОС вообще не обязательно должна иметь внешний дисплей - это просто другое устройство для ОС.

Как использовались системы до разработки первой оболочки (например, UNIX в начале 1970-х годов)?

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

Если компьютер не может даже принимать команды (нет командной строки), как пользователь может взаимодействовать с ним?

Я не эксперт в этой области, но старые, старые компьютеры, такие как Altair, IMSAI и PDP-8 и другие, имели переключатели на передней панели, которые непосредственно контролировали ЦП и могли напрямую считывать и записывать память без вмешательства ЦП.

Что это за самый простой интерфейс?

Я полагаю, что большинство, если не все современные процессоры, имеют «порт JTAG», который допускает один и тот же тип прямых операций. Имейте в виду, что в течение долгого времени ожидалось, что большинство компьютеров будет иметь ПЗУ или микропрограмму, которая контролирует систему при ее включении, прежде чем она будет передана в ОС. Здесь могут существовать предзагрузочные утилиты или существует минимальный механизм загрузки таких утилит. Некоторые загрузчики, такие как U-Boot, могут быть доступны через последовательный порт. Загрузчики не запускаются «позади» ОС, они загружают ОС, передают ей управление, а затем они больше не работают.

Могу ли я запустить этот интерфейс в эмуляторе терминала или нет пути за оболочкой?

Нет, вам нужен интерфейс JTAG. Это погружение в сферу электроники, и я признаю, что не очень много знаю об этом, за исключением того, что мой GuruPlug поставляется с ним, и я могу напрямую запрограммировать с ним флеш-чип на плате GuruPlug - то есть, если что-то убивает загрузчик на GuruPlug, у меня есть «независимый от процессора» способ его перепрошивки.

LawrenceC
источник
4
Интерфейс JTAG обеспечивает (с помощью выделенного контроллера) доступ к интерфейсам тестирования всех компонентов в обход нормальных режимов работы. В зависимости от представленной функциональности теста вы можете запрограммировать память, управлять вводом / выводом, запускать / останавливать ЦП или считывать внутренние регистры.
Chaos_99
23

Операционная система не должна предоставлять оболочку, так как этот термин обычно используется сегодня (имеется в виду приложение, которое будет принимать команды в интерактивном режиме от пользователя), но такая операционная система на самом деле не будет «похожа» на что-либо пользователь. Как упоминает Оливер Зальцбург, он, вероятно, будет просто показывать пустой экран (если он вообще имеет поддержку вывода на экран), хотя нет причин для этого. Возьмем, к примеру, диагностический вывод ядра Linux в процессе загрузки и инициализации ядра.

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

Однако нет причины, по которой приложение, использующее эти средства , должно быть оболочкой .

В старые времена операционные системы были просто набором тех «полезных процедур», которые в противном случае каждое приложение пришлось бы переписывать с нуля, а компьютеры были, по сути, устройствами пакетной обработки. Такие вещи, как файловый, дисковый и принтерный ввод-вывод, были, вероятно, одними из первых, которые были собраны в то, что теперь известно как операционная система, с последующим планированием процессов (стоит отметить, что в начале 1960-х годов Apollo Guidance Computer был многозадачным компьютером). Затем приложения могут выполнять вызовы ОС вместо использования своих собственных подпрограмм для выполнения таких задач, что снижает сложность программирования и, вероятно, помогает уменьшить размер кода или время выполнения (поскольку эти системные средства могут быть сильно оптимизированы и отлажены один раз, после чего каждый получит пользу) , По мере того, как компьютеры становились все более распространенными, операционные системы добавляли функции, которые были в значительной степени ориентированы на пользователя, такие как способ для пользователя взаимодействовать с компьютером и давать команды в интерактивном режиме; графические оболочки являются просто продолжением этой линии рассуждений.

Кроме того, не так давно (подумайте о конце 1980-х годов) все еще было довольно распространено написание приложений для запуска на голом оборудовании персонального компьютера без помощи какой-либо обычной операционной системы. Это было особенно полезно для игр, поскольку позволяло избежать затрат памяти и ресурсов операционной системы, но я уверен, что были и другие примеры. В этих случаях в некоторой степени приложение представляло собой собственную операционную систему, и, как следствие, пользовательский интерфейс, предоставленный этим приложением, представлял собой оболочку.

CVn
источник
4
Сегодня очень часто пишут программы, которые работают на голом железе без операционной системы - возможно, чаще, чем когда-либо. В наши дни почти все, что содержит электронику, имеет микроконтроллер. Некоторые из этих встроенных систем, такие как автомобили или маршрутизаторы, имеют операционные системы, но простые вещи, такие как термостаты, стиральные машины и т. Д., Как правило, не имеют.
Жанна Пиндар
1
@JeannePindar Хороший вопрос; Я уточнил, что я имел в виду в контексте персональных компьютеров.
CVn
11

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

Но все же была точка входа для пользователя, чтобы запустить программу. Если вы растянете слово, вы можете назвать это «оболочкой». Но, по сути, это было просто аппаратное обеспечение, ожидающее от пользователя ввода первого бита запускаемой программы. Будь то в виде нажатых кнопок, щелчковых переключателей, подключенных проводов на распределительном щите, перфокарт, перфорированной пленки или магнитной ленты. Возможно, они могли бы даже выбрать один из нескольких вариантов программы, загруженных ранее. Но даже выбор из списка, отображаемого в виде светящихся ламп, путем нажатия кнопки рядом с ним, уже можно считать «оболочкой».

Таким образом, если ваше определение «оболочки» - это «интерфейс, который принимает команды от пользователя», то до него не было времени, по крайней мере, для устройств, которые вы даже смутно называете компьютером.

Возможно, вы захотите проверить довольно хорошую страницу Википедии об истории вычислений , хотя она не слишком фокусируется на перспективе ввода / вывода.

Chaos_99
источник
6

Вероятно, это будет пустой экран.

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

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

Der Hochstapler
источник
2

С исторической точки зрения я бы предположил, что были перфокарты ( https://en.wikipedia.org/wiki/Punched_card ). Для взаимодействия с компьютерной системой. Но я думаю, что это далеко назад для вашего вопроса.

Даниэль Штутц
источник
Перфокарты были (есть) механизмом хранения данных, а не видимой частью операционной системы.
CVn
2

Первой ОС, которую я использовал (1981) после колледжа, была PRIMOS на миникомпьютере Prime. Это была операционная система с разделением времени, и она поддерживала несколько пользователей, каждый из которых использовал терминал, подключенный к компьютеру через кабель RS232. Вы должны были войти в терминал, указав имя пользователя и пароль. Ваш терминальный сеанс был своего рода оболочкой. Вы можете редактировать файлы, компилировать, запускать все те вещи, которые мы делаем в настоящее время. Все терминалы имели доступ к одной и той же системе регистрации. В основном эти терминалы были не более чем печатными машинками - никаких редакторов WYSISWYG, даже emacs была мечтой.

Операционная система была структурирована так же, как и сейчас, и ее можно представить как слой луковой кожуры. Внутренний слой имел очень низкую функциональность - как аппаратное управление, доступ к памяти. Выходя наружу, файловая система будет добавлена, а затем слои пользователя. В вашей программе вы сможете взаимодействовать с некоторыми слоями, но не с самыми внутренними (поэтому вы не сможете связываться с разделением времени или фактическим оборудованием - светом и т. Д.). Компьютер без оболочки будет похож на один из этих внутренних уровней, он может иметь доступ к жесткому диску и считывателю магнитных лент (на самом деле!), Но он не будет знать о файлах или пользователях.

Чтобы загрузить ранний компьютер, вам нужно было загрузить базовый набор инструкций (это может включать переключение физических переключателей в определенной последовательности на компьютере). Эта последовательность запускает вторую небольшую программу, которая может позволить считывателю ленты работать. Затем вы бы загрузили более сложную систему с помощью считывателя магнитных лент, что может привести в действие диск. Вы можете представить себе ОС без оболочки как один из этих начальных загрузчиков.

В настоящее время компьютеры имеют схожие последовательности, поэтому, когда вы запускаете компьютер, он загружает его BIOS, который запускает диски, сетевые карты, видеокарту и т. Д., Затем BIOS ищет конкретную программу на жестком диске и запускает ее (в Windows как минимум). Unix делает нечто подобное: он постепенно устанавливает ядро, начиная с самых базовых модулей и наращивая их до тех пор, пока не доберется до приглашения входа в систему.

Дерек Найт
источник
1

Операционная система как определение довольно неоднозначна. Это само ядро? Это ядро, а также сопутствующие инструменты? Linux - это ядро, но GNU / Linux - это операционная система, основанная на ядре Linux и инструментах проекта GNU. Shell является неотъемлемой частью такой операционной системы.

Однако, как только Linux будет запущен и завершит «загрузку», вам нужно указать, какую программу запускать. С тех пор все в руках этой конкретной программы. По умолчанию это тот, initкто знает, что делать дальше, и может в конечном итоге привести вас к красивому экрану входа в GUI. Но так не должно быть. Вы можете загрузиться так

kernel /boot/vmlinuz-2.6.30 root=/dev/sda1 ro init=/bin/fancy

Тогда программа /bin/fancyвыведет «Hello world!». Нам не нужна оболочка для этого. Если вы хотите запустить какую-либо другую программу, просто создайте новый процесс с помощью man 2 forkи man 2 execveили или прочитайте с терминала и примите ввод пользователя. Все еще нет необходимости в оболочке.

На мой взгляд, оболочка операционной системы - это программа, способная считывать вводимые пользователем данные и запускать другие программы. Если вы думаете об этом, то совершенно очевидно, почему кто-то хотел бы написать такую ​​программу.

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

Мирослав Кошкар
источник
1

Операционные системы без оболочек командной строки или графических интерфейсов имеют много других видов «граней».

Встроенные системы просто выполняют свою работу без какого-либо пользовательского интерфейса, как, например, система управления двигателем в вашем автомобиле (к которой вы можете получить доступ через интерфейс OBD2 и подходящий терминал). Или могут иметь цифровые клавиатуры, ручки или что-то еще (например: микроволновая печь, лифт или лицевая панель современной звуковой системы). Считаете ли вы это формой оболочки, конечно же, субъективно.

Вот высокоуровневый рецепт того, как любитель может создать полезный компьютер без оболочки:

  • Создайте печатную плату для микроконтроллера или получите универсальную плату.
  • Подключите его, чтобы управлять некоторыми полезными устройствами, такими как, например, датчик влажности и водяной клапан. Микроконтроллер имеет периферийные контакты для этой цели: UART, GPIO и так далее.
  • Напишите прошивку для мониторинга датчика и поливайте почву.
  • Загрузите прошивку с помощью средств разработки (поэтому на хост-компьютере не требуется никакой оболочки для загрузки и запуска чего-либо, а прошивка хранится во флэш-памяти на чипе). Программирование может включать в себя подключение микроконтроллера к специальной плате программирования, или может быть способ сделать это, когда он находится на вашей реальной плате. Плата подключается к вашему компьютеру (например, через USB), и вы используете некоторые инструменты: например, IDE или инструменты командной строки на хосте.
  • Разверните эту штуку: теперь это по сути электронный черный ящик, который каким-то образом контролирует влажность почвы и включает воду, без каких-либо других входов или выходов.

У очень ранних компьютеров общего назначения без оболочек были некоторые средства ввода, такие как чтение перфокарт. Но, конечно же, нужно было различать перфокарты: перфокарта дает компьютеру какую-то особую команду или это часть программы на Фортране? Поэтому необходимо было разработать «языки управления заданиями», которые фактически являются командными строками.

Перед перфокартами и языками управления заданиями программистам приходилось переключать переключатели, чтобы вводить двоичный код в машину. Возможно, вы слышали истории от старожилов, которые должны были «включить» последовательность команд, чтобы начать загрузку. Это все еще делается сегодня, в некотором смысле: устройства, которые имеют перемычки или DIP-переключатели, все еще существуют, и у них есть некоторые преимущества по сравнению с настройками в прошивке.

Kaz
источник
0

Первым компьютером, на котором я застрял, был Siemens 305 в 1977 году, я изучал FORTRAN IV. Он имел пишущую машинку для запуска команд и печати диагностического сообщения на бумаге, устройство чтения перфокарт, устройство считывания / записи перфокарт и принтер. Не забывайте, съемный жесткий диск 40 МБ, 16 дюймов или около того. Так что у него уже была оболочка, а интерфейсом была пишущая машинка.

ott--
источник
0

Я помню запуск отладчика и текстового редактора (DDT и emacs) в качестве эквивалента командной оболочки еще в 1970-х годах. Так что, если вы запустите emacs в режиме консоли с любой другой программой, выполняемой через eshell, к отладчику, который выполняет программу, у вас будет близкий опыт.

Обратите внимание, что в emacs имеется полноценная среда lisp, поэтому в дополнение к хорошему редактированию истории команд и нескольким виртуальным терминалам у вас есть встроенные средства макросов и скриптов.

mpez0
источник