Языки программирования операционных систем

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

Скажу сразу, я не программист. Пожалуйста, не надо сыпать сложными специфическими терминами. Но любопытство никто не отменял. Мне интересно. Да и другие могут заинтересоваться вопросом и обнаружат эту тему в Кью. Так что, польза будет.

Скажите, какие языки пригодны для написания ядра операционной системы и её графической оболочки? Помимо используемых — Ассемблер, C, C++, C#. Если кто-то захочет создать альтернативу и Виндовс, и Линукс, но не на языках семейства С. Этот не вопрос «зачем это нужно, если есть Виндовс и Линукс». Это вопрос — возможно ли и как?

Какие языки у меня на слуху? К примеру, развивающийся Питон. Можно ли на нем создать ядро и графическую оболочку? Или Java, позволяющий создавать и приложения, и графику. Или, к примеру, JavaScript. Для программирования графики и ВЭБ приложений. Говорят, на нем работает операционная система космических кораблей Dragon SpaceX. Или, к примеру — HTML 5. На HTML 5 пишут приложения, воспроизводят графику, фильмы и т.д.

Пожалуйста, продолжите список. Будет интересно узнать.

Вот мне любопытно. Представим, что кто-то реально захочет создать ОС на этих языках, или ещё на каких альтернативных, на уровне последних Виндовс. Как это можно реализовать?

Какие языки подойдут ядру? А какие для графической оболочки? Взять к примеру, тот же HTML 5. Предполагаю, что на нем можно создать и графическую среду, привычных ОС. Да и сами приложения для этой ОС. Ведь он же вполне может управлять портами, дисками, видеокартами, и тд. Ведь можно же сделать ядро, воспринимающее ВЭБ язык?

Было бы интересно узнать ваше мнение. Возможно ли это? Можно ли написать полностью функциональную ОС на одном из чистых языков, без примесей остальных. Или в комбинации нескольких.

А также, какие бы ещё языки вы видели как альтернативу семейству языков C. Если мой вопрос немного странный для специалистов программирования, прошу не злиться. Ведь интересуется человек «не в теме».

Источник

3 Тема 3. Языки управления ОС

Многие теоретические знания, представленные в данном разделе уже использовались при изучении материала предыдущих двух тем или известны студенам из учебного материала других дисциплин. Тем не менее, имеется ряд моментов, которые необходимо хорошо усвоить, прежде чем изучать вопросы, изложенные в последующих темах. Кроме того, для правильного понимания сути многих вопросов, необходим адекватный язык, на котором эту суть можно объяснить. Для этой цели и предназначен учебный материал данного раздела. Чтобы учебный материал получил должный уровень конкретизации, он опирается на практическую часть задач загрузки ОС УПК АСУ, изложенных в [3] и доступных в виде файла upk_asu.pdf на рабочем столе пользователя upk .

Читайте также:  Data scientist язык программирования

3.1 Языки программирования и командные интерпретаторы

Основным языком программирования ядра ОС и другого системного ПО является язык С . Этот язык специально создавался для написания ОС и постепенно вытеснил языки Ассемблера , которые, в большей степени чем С, зависели от архитектуры процессора, способов адресации памяти и других архитектурных особенностей ЭВМ. С другой стороны, язык С также сильно привязан к архитектуре ЭВМ и ОС : • через машинный язык , в который компилируется исходный текст языка С, исполняющийся конкретным процессором; • через структуру исполняемых программ , которые определяются ОС; • через библиотеку libc , связывающую, через системные вызовы , ПО режима пользователя с ПО ядра ОС. Очевидно, что язык С мало пригоден для создания масштабных приложений. Для этих целей используются языки объектно-ориентированного программирования ( ООП ), такие как С++ , C# , Java и другие. Ранее отмечалось, что, являясь базовым ПО ЭВМ, ОС охватывает ту часть программного обеспечения компьютера, которое называется системным ПО . Целевое назначение ОС — создание виртуальной машины или среды исполнения для работы системного, прикладного и инструментального ПО компьютера. Важнейшая функция такой виртуальной машины — управление программным обеспечением ЭВМ, работающим в режиме пользователя . Все ОС, для целей управления ПО ЭВМ, используют специальные языки программирования, которые называются командными интерпретаторами или shell : • ОС MS Windows, в качестве shell, использует язык batch или cmd . • ОС Linux — bash (Bourne Again Shell) и sh (Bourne Shell). • ОС UNIX — sh (Bourne Shell), csh (C Shell), ksh (Korn Shell), tcl и другие.

56 Несмотря на имеющиеся различия, все языки имеют сходный синтаксис и построены по одному принципу — каждая строка языка рассматривается как команда с аргументами , требующая немедленного исполнения: команда [ аргумент_1 аргумент_2 … ] конец_строки Строка — последовательность слов, разделенных символами пробела или табуляции и заканчивающаяся символами конца строки. Команда — слово, обозначающее действие: • встроенная команда исполняется непосредственно интерпретатором; • имя программы ОС , которую интерпретатор запускает. Аргумент — слово, интерпретируемое в контексте команды. Конец_строки — набор: • управляющих символов языка; • управляющих слов языка. Во времена, когда графический интерфейс ОС отсутствовал, командные интерпретаторы были единственным средством взаимодействия человека и ЭВМ. И сейчас они являются таковыми, когда графическая система выходит из строя. По функциональным возможностям все языки приблизительно одинаковые, хотя в деталях могут различаться синтаксисом. В частности, язык tcl разрабатывался с возможностью использования превдографики, что для своего времени было достаточно перспективно. Их современное совместное существование вызвано: • силой привычки, авторскими правами и рядом корпоративных интересов; • наличием достаточно большого количеста ПО, написанного ранее на этих языках. Общая проблематика интерпретаторов — увеличение функциональных возможностей shell влечет: • увеличение его размера и уменьшение скорости его загрузки; • повышенный расход оперативной памяти компьютера.

Читайте также:  Техническое задание программирование состав

3.2 Базовый язык shell (sh)

Как отмечено выше, термин shell применяется в двух аспектах: • как расширительное обозначение всех командных интерпретаторов ОС; • как конкретизация интерпретатора sh (Bourne Shell). Выбор языка sh обоснован следующими причинами: • стандартизация языка в рамках проекта POSIX 1003.2 — стандарта мобильных систем; • современные ядра ОС Linux запускают интерпретатор sh, при обнаружении в корне файловой системы скриптов init или linuxrc ; • интерпретатор bash , используемый ОС Linux, можно рассматривать как прямое функциональное расширение интерпретатора sh .

57 POSIX ( Portable Operating System Interface for Unix ) — переносимый интерфейс операционных систем UNIX. POSIX — набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой. Закреплен международным стандартом ISO/IEC 9945 и может использоваться не только для ОС UNIX. Определим ряд метапонятий , которые shell учитывает в своей работе: • shell — это программа (утилита или командный интерпретатор) sh , обычно /bin/sh , который работает в среде ОС : в пользовательском режиме; • запустить sh может любой процесс, посредством системного вызова exec*() ; при этом, sh будет использовать среду ОС, в которой работала вызывающая программа; • процесс sh может сам порождать необходимое количество дочерних процес- сов , посредством системного вызова fork() , отслеживая их работу и анализируя их коды завершения ; • нулевой целочисленный код завершения означает нормальное выполнение команды дочерним процессом; • ненулевой целочисленный код завершения означает ошибочное выполнение команды дочерним процессом и дополнительно интерпретируется, в зависимости от ситуации и режимов работы sh. Замечание Если sh обнаружил синтаксическую ошибку , то выполнение shell прекращается , в противном случае, возвращается код завершения последней выполненной команды. При запуске , sh как и любая прикладная программа, наследует все ресурсы вызывающего процесса, включая открытые файлы. На рисунке 3.1 показаны ресурсы типового прикладного процесса.

Читайте также:  Ритм usb 2 кабель для программирования

58 Каждая программа , запущенная в виде процесса на компьютере, имеет: • один системный ввод; • два системных вывода. На уровне файловых дескрипторов , мы имеем: устройство 0 — устройство ввода; устройство 1 — устройство нормального вывода программы; устройство 2 — устройство вывода ошибок. На уровне языка С , мы имеем стандартные устройства: stdin — устройство ввода; stdout — устройство нормального вывода программы; stderr — устройство вывода ошибок. На уровне языка Java , мы имеем три объекта: java.lang.System.in — объект канала ввода с клавиатуры; java.lang.System.out — объект канала нормального вывода; java.lang.System.err — объект канала вывода ошибок. Для чтения из потока ввода ( обычно клавиатура ) используются различные модификации функции read(. ) . Для вывода информации в потоки stdout и stderr ( обычно консоль ) используются различные модификации функций write(…) и print(. ) . Особо , следует обратить внимание на номера устройств ( целочисленные дескрипторы файлов ), которыми интенсивно манипулирует интерпретатор sh. Например , если процесс закрывает файл с дескриптором 0, а затем открывает новый файл. В результате, дескриптор нового файла будет равен 0 и процесс будет читать данные из файла, как будто он читает с клавиатуры. Кроме того , sh использует все свойства базовых категорий , определенных понятиями: файл, пользователь и процесс . В частности , обычные файлы подразделяются на: • бинарные , которые читаются процессом как последовательность байт, имеющих значения от 0 до 255; • текстовые (символьные) , в которых, в зависимости от кодировки, ряд значе- ний байт или не используются совсем или рассматриваются как управляющие, например: 10 — перевод строки; 13 — возврат каретки . Интерпретатор sh может использовать текстовые файлы как программы: скрипты или сценарии . В частности , все shell следуют общим правилам: • символ # используется как комментарий до конца строки; • сочетание символов #! , расположенных в первой позиции первой строки текстового файла, рассматривается как команда вызова конкретного интерпретатора shell.

Источник

Оцените статью