osdev.orgРазработка операционных систем
ВВЕДЕНИЕ (29 августа 2012 года форматирование не завершено)

Оглавление | Оригинал 


 
 1. Добро пожаловать
 2. Что такое Операционная Система?
 3. Что такое Ядро?
 4. Что такое Оболочка?
 5. Что такое GUI?
   5.1 Среда рабочего стола, оконный менеджер, библиотека виджетов
   5.2 Вопросы связанные с GUI
 6. Зачем разрабатывать операционные системы?

Добро пожаловать

 Добро пожаловать в разработку операционной системы!
Не все смогут "сделать это". Многие даже не смогут пройти дальше "Hello World", однако, возможно, кто-то пойдёт дальше и создаст новый Linux? Или Windows? Или же MinuetOS? Или даже CP/M?

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

 Что вам необходимо для достижения успехов в разработке операционных систем? Прочитайте раздел "Приступая к работе". Если вы собираетесь использовать C/C++ в качестве языка программирования, мы рекомендуем, для начала сборку кросс-компилятора GCC.

 Вы хотите шаг за шагом читать учебник по написанию базового ядра? Прочитайте Учебник по разработке ядра Брана и статьи о известных ошибках Брана. Кроме того, существует основанный на Ассемблере учебник "детских шагов", или если вы не хотите задерживаться и начать с быстрого старта - существуют учебники Bare Bones доступные для нескольких языков. Как только вы освоите основы, вы сможете перейти к более продвинутым учебникам о разных предметных областях.

 Удачи Вам!

Что такое Операционная Система?

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

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

 Операционная система это "не":
  •  оборудование компьютера
  •  конкретные приложения, подобные текстовым процессорам, веб браузерам или играм
  •  среда разработки (хотя некоторые операционные системы, подобные UCSD Pascal или Smalltalk-80, объединяют интерпретатор и IDE)
  •  графический интерфейс пользователя (хотя многие современные операционные системы включают графический интерфейс как часть операционной системы)
 
 В то время, как большинство операционных систем распространяются с этими инструментами, сами они не являются необходимой частью операционной системы. Некоторые операционные системы, такие как Linux, могут распространяться в различных формах, называемых "дистрибутивами", имеющими различный набор пакетов приложений и утилит, и возможно, несколько различающиеся аспекты системы. Тем не менее, все они являются версиями одной и той же базовой операционной системы, и не должны рассматриваться как отдельные виды операционных систем.

На текущий момент (2011) наиболее популярные операционные системы:
 В прошлом существовало огромное разнообразие операционных систем, многие из которых здравствуют и по ныне. В любой момент времени, существует несколько проектов по разработке новой операционной системы.

Что такое Ядро?

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

 Например, обработчики аппаратных событий (обработчики прерываний) получают номер нажатой клавиши и преобразовывают его в соответствующий символ хранящийся в буфере таким образом чтобы его могли использовать программы.

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

 Большинство программ пользователя непосредственно не используют системные вызовы (за исключением, например ассемблерных программ ASM), а вместо этого используют стандарные библиотеки, которые выполняют работу по форматированию аргументов в соответствии с требованиями ядра и создания системного вызова. (Например, функция C, fopen() в конечном итоге вызывает функцию ядра, которая на самом деле открывает файл).

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

Что такое Оболочка?

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

 Для выполнения этих действий, оболочке придётся формировать многочисленные системные вызовы, такие как "открыть файл Х;  открыть файл Y и создать его если он не существует; читать содержимое файла X; писать в файл Y, закрыть оба файла, вывести результат операции на стандартный вывод".

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

 Современные оболочки могут имять ряд дополнительных функций, таких как:
  •  Автозавершение (Auto-Completion): при нажатии кнопки TAB (или любой назначенной), ввод команды пользователя будет завершён командой оболочки, именем файла, директория или чем-то иным. Многократное нажатие кнопки автозавершения может предоставлять и иные возможности.
  •  Вставка символа (Character Insertion): пользователь может перемещаться по строке ввода с помощью клавиш стрелок и вставлять в текст новые символы.
  •  История оболочки (Shell History): с помощью стрелок пользователь может прокручивать историю ввода команд
  •  Скроллинг (Scrolling): при числе строк большем чем значение строк консоли, результат сохраняется в буфер вывода и пользователь может перемещаться вверх и вниз по консоли.
  •  Сценарии (Scripting): некоторые оболочки имеют собственные языки сценариев. Примерами скриптовых языков являются bash или DOS batch.
  •  ...
     
Что такое GUI?

  Графический интерфейс пользователя (GUI) является наиболее видимой частью любой операционной системы. Его роль выходит за рамки простой библиотеки рисования; он должен уметь:
  •  захватывать события ввода пользователя (клавиатура, мышь и пр.) и отображать их на корректный объект
  •  обновлять внутреннюю информацию о том что будет отображаться на экране, в каком месте, и какие части экрана должны быть перерисованы
  •  обновление видимого содержимого экрана, перерисовка необходимых элементов
  •  соответствие треббованиям интуитивности и своевременной реакции на действия пользователя

Среда рабочего стола, оконный менеджер, бибилиотека виджетов
 Когда вы запускаете сессию KDE или Windows образуется среда рабочего стола, т.е. графическая оболочка предоставляющая функциональную среду для всех низкоуровневых функций.

 Часть системы отвечающая за организацию окон различных запущенных программ, изменения их размеров и закрытие, контролирующая границы окон, полосы прокрутки и прочие параметры называется оконным менеджером (Window Manager).

 Наконец, у вас есть подсистема, которая отрисовывает управляющие элементы, документы на экране и т.п. Обычно, эта подсистема называется библиотекой виджетов (widget library).

Вопросы связанные с GUI
 Будете ли вы реализовывать графический интерфейс?
 Разработка GUI
 Обработка событий ввода в GUI

Зачем разрабатывать операционные системы?

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

 Получение полного контроля над машиной. При разработке приложения или программы пространства пользователя, разработчик должен принимать во внимание особенности чужого кода: кода операционной системы, библиотек, других программ и т.п. Наиболее полно можно контролировать код запущенный только на собственной операционной системе.

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

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

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

К сожалению, многие проекты операционных систем начинаются по неправильным причинам. Посмотрите статью "Ошибки начинающих".