Лекция 01 - chrislvt/OS GitHub Wiki

Есть история операционных систем. Компьютер (или вычислительная система, "железка") - программно управляемое устройство. Часть времени управляет (пользовательская) программа, а часть времени - операционная система.

Аналитическая машина Чарльза Бэббиджа

В 1833 году Чарльз Бэббидж построил аналитическую машину (изначально он называл её "разностной"). В машине были арифметические устройства, регистры памяти (он называл их "склад"). Чарльз Бэббидж предложил программное управление своей аналитической машины с помощью перфокарт. Машина Бэббиджа работала в 10-тичной системе счисления, была построена на шестерёнках.

img

Перфокарты.

Перфокарты бывают трёх назначений:

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

Интересный факт!

Ада Лавлейс - дочь известного поэта и революционера лорда Байрона, была знакома с Чарльзом Бэббиджем. Однажды она перевела ему статью на французском, в которой рассказывалась про его аналитическую машину. Ада дополнила эту статью своими заметками, которые описывали план операций для аналитической машины. Её труд был опубликован в научном журнале, Ада Лавлейс считается первым в мире программистом.

Жаккардовые ткацкие станки - в них первыми стали использоваться перфокарты.

Чарльз Бэббидж не смог довести машину до совершенства, англичане оставили её в музее. Кажется, лет 10 назад они её доделали, так как Чарльз оставил свои чертежи. Ещё бы - машина работала на шестеренках с помощью переключения зубчатых колес.

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

Вторая Мировая и послевоенный период

Во время Второй Мировой возникла острая потребность в быстрых масштабных вычислениях - началось активное финансирование работы над новыми вычислительными машинами. В 40-ых годах XX века потребовалась потребность больших объемов вычислений в допустимых пределах времени. Это было связано с гонкой вооружений. Основная задача - расчет траектории полета баллистических ракет. И американцы, американцы спонсировали это!

Интересный факт!

Вот уж не запомнила, про известный исторический случай говорила Наталья Юрьевна, или привела этот пример как в шутку. Шла война. Инженеры построили ракету - и стали рассчитывать её траекторию. И всё ручкам! Пол года считали, считали. А пока считали, война то и закончилась. После этого случая возникала необходимость в более быстрых способов расчетов.

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

Электромагнитное реле

Реле имеет два устойчивых состояния - '0' (нет напряжения) и '1' (есть пороговое напряжение) => двоичная система счисления.

MARK1 - первая машина на электромагнитном реле

В 1944 году в США была создана первая вычислительная машина на электромагнитном реле MARK1. Большая часть этой машины была механической, но принцип программного управления в ней был реализован.

ЭНИАК - первая электронно-цифровая машина

В 1946 году - создана первая электронно-цифровая вычислительная машина - ЭНИАК - на электронных лампах.

1944-1945 годы считаются началом периода первого поколения ЭВМ. Этот период длился 10 лет, до 1955 года. Несмотря на то, что концепция программного управления неизменна, но ЭВМ первого поколения управлялись так называемыми коммутационными панелями. Для того, чтобы задать какие-то действия вычислительной машине, использовались панели, в которых перекидывались провода на соответствующие контакты.

Интересный факт!

Именно отсюда пошло понятие "баг" - жучок. На свет ламп летело много мотыльков. Подлетая слишком близко, они обжигали свои крылышки и, умирая, падали на панели. Мертвые мотыльки замыкали контакты. Естественно, всё ломалось.

Первые вычислительные машины - машины первого поколения - никакой ОС не имели. Управление выполнялось с помощью коммутационных панелей. Для ввода/вывода данных/результата использовались перфоленты, затем - перфокарты, потом - магнитные ленты. Для вывода результата использовались АЦПУ - алфавитно-цифровое печатающее устройство. При этом, на первых порах все программирование выполнялось в абсолютных адресах. То есть у этих машин была память, она строилась, например, на запоминающих трубках Уильямса.

Машина Фон Неймана

В 1944 году к разработке ЭНИАК был привлечен Джон Фон Нейман. В 1946 году он опубликовал статью "Предварительное рассмотрение логической конструкции электронно-вычислительного устройства". В ней была описана формальная организация вычислительной машины. Вскоре после выхода этой статьи, машины, построенные на описанном им принципе, стали называться "машинами Фон Неймана".

Основные принципы устройства вычислительной машины, описанные в статье Фон Неймана. (цитата из статьи)

  1. Универсальная вычислительная машина должна содержать несколько основных устройств:
  • Арифметики
  • Памяти
  • Управления
  • Связи с оператором
  1. Мы хотим, чтобы после начала вычислений работа машины не зависела от оператора. Необходимо, чтобы машина могла запоминать информацию, требуемую для данного вычисления, но также и команды, с помощью которых должны производиться эти вычисления.

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

  3. Машина должна быть оснащена устройством управления (управляющим устройством), которое дешифрует команды, и арифметическим органом, который выполняет операции - может складывать, вычитать, умножать, делить.

Понятие адреса, появление языка ассемблера

В самом начале программирование велось в абсолютных адресах. Абсолютный адрес - конкретный адрес конкретной ячейки памяти.

Уже в первом поколении ЭВМ в машинах, построенных по описанию Фон Неймана, программа грузилась в последовательные ячейки памяти - это потребовало включение в состав компьютера счетчика программ.

Все адреса, в которые загружались программа и данные были абсолютные - программист работает с машинным кодом. Набор команд представлялся двоичным кодом в виде "сложить ячейку с адресом таким-то с ячейкой с адресом таким-то...". Это происходило на базе определенных таблиц, потому что программист такую информацию запомнить не может. От этого сразу пытаться уйти. Первым языком, который позволил это сделать, стал Assembler - мнемоническое представление машинных команд. Разные машины имеют разные наборы команд, разное представление команд (например, MOV/MOVE).

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

Второе поколение

Прорыв - поменялась элементная база. В середине 50х годов появились транзисторы - диоды и триоды. Этот этап принято считать следующим поколением - вторым. Огромные машины, занимающие огромные площади, которые еще и безумно грелись, сократились, увеличилась вычислительная мощность. Уже были наработки математических библиотек. На повестке было стремление к переходу к более высокоуровневым языкам и к сокращению времени разработки ПО. Это предполагало программирование не на основе коммутационных панелей, а с помощью устройства управления. Устройство управления дешифрует команды, команды считываются из памяти. Задача программиста - написать программу - набор команд, который будет выполняться последовательно вычислительной машиной. Для сокращения времени разработки появились языки высокого уровня - Algol и Fortran.

Интересный факт!

Поскольку язык Fortran существовал многие десятки лет, под него были написаны многие математические библиотеки и эти библиотеки были объявлены достоянием Америки.

Считается, что машина ЭНИАК - первая серийная машина. Определим, что значит "серийно выпускаемая машина" - ключевое отличие машины, выпускаемой серийно, от машины, сделанной на коленке - наличие на нее документации. Чтобы машину можно было выпускать серийно, необходимо наличие документациии.

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

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

Для решения этой проблемы фирма IBM предложила следующую схему:

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

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

Что из себя представляет пакет?

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

  1. Максимально необходимое время для выполнения программы
  2. Внешние устройства

Третье поколение, IBM360

С 1960 года появились интегральные микросхемы - в одной микросхеме объединяли несколько транзисторов. Это повлекло уменьшение габаритов, увеличение мощности и быстродействия машин. Параллельно совершенствовались устройства ввода/вывода и элементы памяти. Процесс этот непрерывный, и до сих пор не прерывался. Развивались языки, писались новые библиотеки.

Именно в третьем поколении машин появилась полноценная архитектура вычислительной системы.

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

Программа выполняется от начала до конца, программе надо вывести некие промежуточные данные на печать, это долго, и все это длительное время вывод на печать управлялся процессором - непроизводительное использование процессорного времени. Именно в третьем поколении машин, при создании машины IBM360, была реализована идея распараллеливания функций.

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

Два основных вида каналов:

  • Селекторный - быстрый, работает с одним устройством одновременно;
  • Мультиплексорный - переключает.... TODO.

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

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

Система прерываний, которую мы исповедуем в настоящее время - три типа прерывания в современной машине:

  1. Системные вызовы (программные прерывания). Эти прерывания использует программа(приложение), чтобы запросить сервис системы.
  2. Исключения (ошибки нашего ПО, например - деление на ноль)
  3. Аппаратные прерывания.
  • От системного таймера (всегда рассматривается отдельно) - крайне важные функции
  • От устройств ввода/вывода (от внешних устройств)
  • От действий оператора (например, ctrl+alt+del в Unix-подобных)

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

Краткое содержание

Первое поколение

~1944/46 - 1955 годы
Элементная база: электронные лампы, электромагнитное реле, управление с помощью коммутационных панелей
Яркие представители:

  • MARK1(1944г, реле),
  • ЭНИАК (1946г, лампы, первая серийная машина)
    Реализована идея программного управления

Второе поколение

~1955/56 (с середины 50х) - 1960 годы
Элементная база: транзисторы на диодах и триодах, управление с помощью устройства управления
Появилась многозадачность (много программ в памяти одновременно) и операционные системы (управление программами, переключение)

Третье поколение

~c 1960/64 года
Элементная база: интегральные микросхемы
Знаменательный представитель: IBM360 (1964г, считается первой машиной третьего поколения)
Реализована идея разделения функций: для работы с внешними устройствами появились каналы, процессор больше этим не занимается; для сообщения информации от процессора каналам и от каналов процессору создана система прерываний