Оболочка, такая как bash или command.com (до Windows ME) или CMD.EXE (в более поздних версиях), обеспечивает интерфейс, который (среди прочего) принимает команды от пользователя. Как выглядит операционная система до запуска оболочки? Как использовались системы до разработки первой оболочки (например, UNIX в начале 1970-х годов)? Если компьютер не может даже принимать команды (нет командной строки), как пользователь может взаимодействовать с ним? Что это за самый простой интерфейс? Могу ли я запустить этот интерфейс в эмуляторе терминала или нет пути за оболочкой?
shell
operating-systems
history
44taka
источник
источник
Ответы:
Зависит от ОС и от того, как вы ее настраиваете. Linux может быть настроен на запись загрузочного текста на консольное устройство, будь то консоль в текстовом режиме, консоль кадрового буфера или последовательный порт. Это может также быть настроено, чтобы быть совершенно тихим. Некоторые ОС / системы могут записывать диагностическую информацию в энергонезависимую память, к которой можно получить доступ, переведя систему в режим разработчика, отладки или диагностики. Многие операционные системы поддерживают вывод загрузочной и диагностической информации в некоторую форму UART, которая может каким-то образом быть доступной на устройстве, даже если она скрыта от пользователя (например, «Добавить последовательный порт в DD-WRT» от Google, где производители скрывают последовательные порты и как вы можете добраться до них).
ОС вообще не обязательно должна иметь внешний дисплей - это просто другое устройство для ОС.
По сути (и много не учтено, но это должно дать вам представление) - вы загрузили свою программу, щелкнув переключатели на панели или используя устройство чтения бумажных лент (эти устройства могли бы записывать в память напрямую без вмешательства ЦП), а затем запустить процессор с другим переключателем. Процессор запустит эту программу, сгенерирует вывод и остановится. Это пакетная обработка, а не интерактивная обработка. Если вы хотели запустить другую программу, вы должны были сделать это заново.
Я не эксперт в этой области, но старые, старые компьютеры, такие как Altair, IMSAI и PDP-8 и другие, имели переключатели на передней панели, которые непосредственно контролировали ЦП и могли напрямую считывать и записывать память без вмешательства ЦП.
Я полагаю, что большинство, если не все современные процессоры, имеют «порт JTAG», который допускает один и тот же тип прямых операций. Имейте в виду, что в течение долгого времени ожидалось, что большинство компьютеров будет иметь ПЗУ или микропрограмму, которая контролирует систему при ее включении, прежде чем она будет передана в ОС. Здесь могут существовать предзагрузочные утилиты или существует минимальный механизм загрузки таких утилит. Некоторые загрузчики, такие как U-Boot, могут быть доступны через последовательный порт. Загрузчики не запускаются «позади» ОС, они загружают ОС, передают ей управление, а затем они больше не работают.
Нет, вам нужен интерфейс JTAG. Это погружение в сферу электроники, и я признаю, что не очень много знаю об этом, за исключением того, что мой GuruPlug поставляется с ним, и я могу напрямую запрограммировать с ним флеш-чип на плате GuruPlug - то есть, если что-то убивает загрузчик на GuruPlug, у меня есть «независимый от процессора» способ его перепрошивки.
источник
Операционная система не должна предоставлять оболочку, так как этот термин обычно используется сегодня (имеется в виду приложение, которое будет принимать команды в интерактивном режиме от пользователя), но такая операционная система на самом деле не будет «похожа» на что-либо пользователь. Как упоминает Оливер Зальцбург, он, вероятно, будет просто показывать пустой экран (если он вообще имеет поддержку вывода на экран), хотя нет причин для этого. Возьмем, к примеру, диагностический вывод ядра Linux в процессе загрузки и инициализации ядра.
Оболочка, будь то графическая оболочка, интерпретатор командной строки или что-то еще, использует средства, предоставляемые операционной системой, для выполнения таких задач, как чтение команд, запуск процессов, перенаправление ввода-вывода и так далее.
Однако нет причины, по которой приложение, использующее эти средства , должно быть оболочкой .
В старые времена операционные системы были просто набором тех «полезных процедур», которые в противном случае каждое приложение пришлось бы переписывать с нуля, а компьютеры были, по сути, устройствами пакетной обработки. Такие вещи, как файловый, дисковый и принтерный ввод-вывод, были, вероятно, одними из первых, которые были собраны в то, что теперь известно как операционная система, с последующим планированием процессов (стоит отметить, что в начале 1960-х годов Apollo Guidance Computer был многозадачным компьютером). Затем приложения могут выполнять вызовы ОС вместо использования своих собственных подпрограмм для выполнения таких задач, что снижает сложность программирования и, вероятно, помогает уменьшить размер кода или время выполнения (поскольку эти системные средства могут быть сильно оптимизированы и отлажены один раз, после чего каждый получит пользу) , По мере того, как компьютеры становились все более распространенными, операционные системы добавляли функции, которые были в значительной степени ориентированы на пользователя, такие как способ для пользователя взаимодействовать с компьютером и давать команды в интерактивном режиме; графические оболочки являются просто продолжением этой линии рассуждений.
Кроме того, не так давно (подумайте о конце 1980-х годов) все еще было довольно распространено написание приложений для запуска на голом оборудовании персонального компьютера без помощи какой-либо обычной операционной системы. Это было особенно полезно для игр, поскольку позволяло избежать затрат памяти и ресурсов операционной системы, но я уверен, что были и другие примеры. В этих случаях в некоторой степени приложение представляло собой собственную операционную систему, и, как следствие, пользовательский интерфейс, предоставленный этим приложением, представлял собой оболочку.
источник
У ранних компьютеров не было ОС в том смысле, в каком мы используем это слово сегодня. Они открывали функции, реализованные в оборудовании, непосредственно любой программе, работающей на нем. На них одновременно работала только одна программа. Сама программа должна была контролировать все задачи, ничего не делалось «в фоновом режиме» операционной системой.
Но все же была точка входа для пользователя, чтобы запустить программу. Если вы растянете слово, вы можете назвать это «оболочкой». Но, по сути, это было просто аппаратное обеспечение, ожидающее от пользователя ввода первого бита запускаемой программы. Будь то в виде нажатых кнопок, щелчковых переключателей, подключенных проводов на распределительном щите, перфокарт, перфорированной пленки или магнитной ленты. Возможно, они могли бы даже выбрать один из нескольких вариантов программы, загруженных ранее. Но даже выбор из списка, отображаемого в виде светящихся ламп, путем нажатия кнопки рядом с ним, уже можно считать «оболочкой».
Таким образом, если ваше определение «оболочки» - это «интерфейс, который принимает команды от пользователя», то до него не было времени, по крайней мере, для устройств, которые вы даже смутно называете компьютером.
Возможно, вы захотите проверить довольно хорошую страницу Википедии об истории вычислений , хотя она не слишком фокусируется на перспективе ввода / вывода.
источник
Вероятно, это будет пустой экран.
Оболочка , вероятно , названа оболочка , потому что это оболочка вокруг ядра (ядро является операционной системой). Так что, в некотором смысле, это пользовательский интерфейс для операционной системы, какой бы он ни был.
Если в операционной системе была только одна единственная функция, которая состояла бы в выключении компьютера, и вы создали бы программу, которая принимает любой ввод с клавиатуры и затем вызывает эту функцию, то это оболочка. Нет необходимости иметь сложный интерфейс командной строки для создания чего-то, что взаимодействует с пользователем.
источник
С исторической точки зрения я бы предположил, что были перфокарты ( https://en.wikipedia.org/wiki/Punched_card ). Для взаимодействия с компьютерной системой. Но я думаю, что это далеко назад для вашего вопроса.
источник
Первой ОС, которую я использовал (1981) после колледжа, была PRIMOS на миникомпьютере Prime. Это была операционная система с разделением времени, и она поддерживала несколько пользователей, каждый из которых использовал терминал, подключенный к компьютеру через кабель RS232. Вы должны были войти в терминал, указав имя пользователя и пароль. Ваш терминальный сеанс был своего рода оболочкой. Вы можете редактировать файлы, компилировать, запускать все те вещи, которые мы делаем в настоящее время. Все терминалы имели доступ к одной и той же системе регистрации. В основном эти терминалы были не более чем печатными машинками - никаких редакторов WYSISWYG, даже emacs была мечтой.
Операционная система была структурирована так же, как и сейчас, и ее можно представить как слой луковой кожуры. Внутренний слой имел очень низкую функциональность - как аппаратное управление, доступ к памяти. Выходя наружу, файловая система будет добавлена, а затем слои пользователя. В вашей программе вы сможете взаимодействовать с некоторыми слоями, но не с самыми внутренними (поэтому вы не сможете связываться с разделением времени или фактическим оборудованием - светом и т. Д.). Компьютер без оболочки будет похож на один из этих внутренних уровней, он может иметь доступ к жесткому диску и считывателю магнитных лент (на самом деле!), Но он не будет знать о файлах или пользователях.
Чтобы загрузить ранний компьютер, вам нужно было загрузить базовый набор инструкций (это может включать переключение физических переключателей в определенной последовательности на компьютере). Эта последовательность запускает вторую небольшую программу, которая может позволить считывателю ленты работать. Затем вы бы загрузили более сложную систему с помощью считывателя магнитных лент, что может привести в действие диск. Вы можете представить себе ОС без оболочки как один из этих начальных загрузчиков.
В настоящее время компьютеры имеют схожие последовательности, поэтому, когда вы запускаете компьютер, он загружает его BIOS, который запускает диски, сетевые карты, видеокарту и т. Д., Затем BIOS ищет конкретную программу на жестком диске и запускает ее (в Windows как минимум). Unix делает нечто подобное: он постепенно устанавливает ядро, начиная с самых базовых модулей и наращивая их до тех пор, пока не доберется до приглашения входа в систему.
источник
Операционная система как определение довольно неоднозначна. Это само ядро? Это ядро, а также сопутствующие инструменты? Linux - это ядро, но GNU / Linux - это операционная система, основанная на ядре Linux и инструментах проекта GNU. Shell является неотъемлемой частью такой операционной системы.
Однако, как только Linux будет запущен и завершит «загрузку», вам нужно указать, какую программу запускать. С тех пор все в руках этой конкретной программы. По умолчанию это тот,
init
кто знает, что делать дальше, и может в конечном итоге привести вас к красивому экрану входа в GUI. Но так не должно быть. Вы можете загрузиться такТогда программа
/bin/fancy
выведет «Hello world!». Нам не нужна оболочка для этого. Если вы хотите запустить какую-либо другую программу, просто создайте новый процесс с помощьюman 2 fork
иman 2 execve
или или прочитайте с терминала и примите ввод пользователя. Все еще нет необходимости в оболочке.На мой взгляд, оболочка операционной системы - это программа, способная считывать вводимые пользователем данные и запускать другие программы. Если вы думаете об этом, то совершенно очевидно, почему кто-то хотел бы написать такую программу.
Даже если вам не нужно интерактивно читать вводимые пользователем данные, гораздо удобнее написать простой сценарий оболочки для вашей задачи. В этом случае это просто интерпретатор хранимых команд оболочки. Вы также можете написать свою программу на переводчике другого языка.
источник
Операционные системы без оболочек командной строки или графических интерфейсов имеют много других видов «граней».
Встроенные системы просто выполняют свою работу без какого-либо пользовательского интерфейса, как, например, система управления двигателем в вашем автомобиле (к которой вы можете получить доступ через интерфейс OBD2 и подходящий терминал). Или могут иметь цифровые клавиатуры, ручки или что-то еще (например: микроволновая печь, лифт или лицевая панель современной звуковой системы). Считаете ли вы это формой оболочки, конечно же, субъективно.
Вот высокоуровневый рецепт того, как любитель может создать полезный компьютер без оболочки:
У очень ранних компьютеров общего назначения без оболочек были некоторые средства ввода, такие как чтение перфокарт. Но, конечно же, нужно было различать перфокарты: перфокарта дает компьютеру какую-то особую команду или это часть программы на Фортране? Поэтому необходимо было разработать «языки управления заданиями», которые фактически являются командными строками.
Перед перфокартами и языками управления заданиями программистам приходилось переключать переключатели, чтобы вводить двоичный код в машину. Возможно, вы слышали истории от старожилов, которые должны были «включить» последовательность команд, чтобы начать загрузку. Это все еще делается сегодня, в некотором смысле: устройства, которые имеют перемычки или DIP-переключатели, все еще существуют, и у них есть некоторые преимущества по сравнению с настройками в прошивке.
источник
Первым компьютером, на котором я застрял, был Siemens 305 в 1977 году, я изучал FORTRAN IV. Он имел пишущую машинку для запуска команд и печати диагностического сообщения на бумаге, устройство чтения перфокарт, устройство считывания / записи перфокарт и принтер. Не забывайте, съемный жесткий диск 40 МБ, 16 дюймов или около того. Так что у него уже была оболочка, а интерфейсом была пишущая машинка.
источник
Я помню запуск отладчика и текстового редактора (DDT и emacs) в качестве эквивалента командной оболочки еще в 1970-х годах. Так что, если вы запустите emacs в режиме консоли с любой другой программой, выполняемой через eshell, к отладчику, который выполняет программу, у вас будет близкий опыт.
Обратите внимание, что в emacs имеется полноценная среда lisp, поэтому в дополнение к хорошему редактированию истории команд и нескольким виртуальным терминалам у вас есть встроенные средства макросов и скриптов.
источник