41

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

10 ответов10

35

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

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

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

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

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

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

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

Что это за основной интерфейс?

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

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

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

23

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

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

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

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

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

11

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

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

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

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

6

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

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

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

2

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

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 напечатает «Привет, мир!». Нам не нужна оболочка для этого. Если вы хотите запустить какую-либо другую программу, просто запустите новый процесс с помощью man 2 fork и man 2 execve , или прочитайте с терминального устройства и примите ввод пользователя. Все еще нет необходимости в оболочке.

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

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

1

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

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

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

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

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

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

0

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .