Лекция 02 - chrislvt/OS GitHub Wiki
(Продолжение темы первой лекции)
Именно в машинах третьего поколения, к которым относится IBM 360, появилась полноценная архитектура. Но в основу этой архитектуры положен принцип распареллеливания функций, т.е в состав этих машин были включены каналы - программно-управляемые устройства, которые взяли на себя функцию управления внешними устройствами. В результате процессор освободился от непроизводительных действий по управлению внешними устройствами, которые приводили к необходимости опроса готовности внешних устройств процессором, соответственно к непроизводительным тратам дорогого процессерного времени. В результате появления программно-управляемых устройств(каналов) процессор смог переключаться на другую работу, в то время канала брали на себя управление внешними устройствами. Это потребовало появлению в такой системе полноценной системы прерываний и с точки зрения современного видения мы с вами перечислили типы прерываний: системные вызовы, исключения и аппаратные прерывания.
Аппаратные прерывания их задача заключается в информировании процессора о завершении ввода вывода большей части, но аппаратные прерывания тоже бывают нескольких типов в системе. Но отдельно всегда выделяются прерывания от системного таймера и мы начали с вами лаб. работы с 8 прерывания пусть это прерывания DOS, но это прерывания от системного таймера, где мы с вами рассматриваем важнейшие вопросы - это ассинхронное периодическое прерывание. Оно переодически выполняется в разных системах с разной частотой. Большую часть аппаратных прерываний составляют прерывания от внешних устройств и именно эти прерывания информируют процессор о завершении операции ввода вывод.
Первые системы управляли выполнением так называемых пакетов. Для того чтобы сократить время переключения с одного пакета на другой в системе стали загружать сразу много пакетов, а это значит, что память компьютера стала делится между программами и в результате процессор получил возможность переключаться между этими программами. Когда в памяти одновременно находится большое число программ - это называется мультизадачность, многопроцессность. Программист при такой работе отключен от непосредственного взаимодействия с компьютером.
Когда Наталья Юрьевна была молодая это были самые хорошие годы.
Программистов такой подход не устраивал, все время хотелось непосредственно взаимодействовать со своим ПО. Для того чтобы получить такую возможность интерактивного взаимодействия со своей программой надо было изменить средства, которые позволяют такое интерактивное взаимодействие. CPU не очень способствовало этому взаимодействию. Внешние устройства также развивались в интересах увеличения производительности программистов, и в конечном итоге появились буквенно-цифровые мониторы. Таким образом, появилось средство динамичного вывода информации для программистов. Появление этих мониторов, возможность их удаленного подключения к компьютеру привело к возможности посадить за эти (мониторы + клавиатуры) терминалы программистов, но это потребовало изменение операционной системы, т.е программисты сидя за этим терминалом мог получить непосредственный результат выполнения своей программы на терминал, внести какие то данные, внести исправления, опять запустить свою программу на выполнение. Но таких терминалов на большой машине было много и как их обслуживать??? И в каком порядке, ммм?? Оказалось, что вообще-то человек, когда он напряженно работает, не может ждать неопределенно долго, т.е система должна гарантировать некоторое время ответа. В результате появление терминала появились "системы разделения времени". Смысл этого названия заключается в том, что процессорное время делится между большим количеством пользователей, процессорное время в таких системах стали квантовать, т.е каждая программа получала квант времени.
СМЕШНО ГОВОРИТЬ : "Мультизадачные системы разделения времени". НЕ НАДО ТАК ГОВОРИТЬ. Системы разделения времени по определению мультизадачные.
Для того чтобы программа могла выполняться, она должна находится в оперативной памяти.
IBM - не единственная система, которая работала на рынке в вычислительной техники.Очень известной является система Multics - вычислительная машина, которая создавалась как система разделения времени. В ней были реализованы очень интересные идеи, например большое количество колец защиты, т.е это уровни привилегий, на которых могли работать разные пользователи, выполнятся различные ПО. Над созданием Multics работали создатели ОС Unix. ОС Unix создавалась для машин среднего класса (для машин PDP). Машины PDP 11 с разработанной для этой машины ОС Unix относятся к четвертому поколению ЭВМ.
Четвёртое поколение, IBM 370, PDP 11
Запомните эти великие фамилии: Кен Томпсон, Деннис Ричи, Керниган - благодаря ним появились ОС Unix и язык Си. Они связаны с известной фирмой Bell Laboratories. Язык СИ они написали не в коммерческих целях, они его написали для сокращения времени разработки ОС, они его писали для себя. 1000 строк кода Unix написан на ассемблере, остальное на Си.
Машины PDP 11 с установленной ОС UNIX были поставлены в ведущие научно-учебные центры Америки, но при этом с открытым исходным кодом ОС.
Как говорят американцы, язык Си + Unix = любимая игрушка для аспирантов, докторантов.
Машина PDP 11 и ОС UNIX создавались сразу как система разделения времени. Им удалось создать структурированную ОС. В чем сила ОС UNIX, брат? Сила ее в структурированности. Каждая часть кода отвечает за определенные функции, в отличие от Windows. Дело в том, что функции планировщика в Windows не выполняет отдельно модуль, а эти функции по мере необходимости выполняются разными частями кода. Код не структурирован. Код Windows на порядок больше чем код Unix. Почему Windows стал популярен? Они просто сделали Word, Exel, Access. Unix отстал в этой игре.
Название системы разделения времени является классическим. Можно услышать понятие интерактивные системы, но не отражает суть этих ОС. Самое главное: ПРОЦЕССОРНОЕ ВРЕМЯ КВАНТУЕТСЯ!
Понятие терминал является базовым в Unix. До сих пор сохранилось в некоторых моментах понятие телетайп.
1960г - появился на рынке 48 разрядный компьютер на кремниевых транзисторах CDC 1604
1964г - Сеймур Крей создал первый суперкомпьютер CDC 6600 (Его быстродействие 3 MFLOPS)
1972г - Сеймур Крей организовал свою собственную фирму Cray. Были созданы выдающиеся суперкомпьютеры Cray1 и Cray2. Cray1 - первый коммерчески успешный суперкомпьютер.
Его суперкомпьютеры даже использовались в СССР.
Управление процессорами.
Ответ на вопрос билета 1.1 ОС – определение ОС. Ресурсы вычислительной системы.
Вычислительная машина - программно-управляемое устройство. Что такое ОС? Существует два взгляда на ОС:
-
Взгляд обычного неподготовленного пользователя. Для него ОС - это интерфейс. Оценивает ОС со своей колокольни: удобно работать или нет. Взгляд outside.
-
Взгляд профессионала. ОС - менеджер ресурсов вычислительной машины. Взгляд inside.
Определение ОС из оксфордского словаря по вычислительной системе:
ОС – это комплект программ, которые совместно управляют ресурсами и процессами, которые используют эти ресурсы.
Ресурс – любой из компонентов вычислительной вычислительной системы и предоставляемые ею возможности.
"Ну, как я уже сказала (покашливает), это определение дано в … словаре вычислительной техники. Э, существует большое количество сейчас …"
"Это – не единственное определение ОС, но оно крайне важно для нас с вами, для профессионалов. То есть, на самом деле, задача ОС – управление ресурсами ВС, но в каком смысле управление? Основная задача ОС – выделять ресурсы ВС процессам!"
К ресурсам относятся:
- Процессорное время ["Или же процессор у Дейтела, это не совсем верно, так как ресурсом, всё же, является процессорное время"]
- Объём памяти ["Речь идёт об оперативной памяти, так как, для того, чтобы выполняться, процессу нужен определённый объём оперативной памяти, и это мы уже увидим в нашем курсе"]
- Устройства ввода-вывода ["Очевидно, что процессу нужны устройства ввода-вывода, которые также являются ресурсами. Но, собственно, у нас всё является устройствами ввода-вывода, но, среди этих устройств есть так называемая «вторичная память» - средство долговременного хранения данных. Сейчас я не хочу в это углубляться, но у нас есть с вами в программировании такое понятие, как файл: значит, у линуксоидов специально выделяется «регулярный», или же, по-нашему, обычный файл. Что же это за штука? (Гомон в аудитории). Файлы – это структуры, которые позволяют осуществлять долговременное хранение информации: мы записываем информацию в файл, а где файл лежит? На вторичных носителях в долговременной памяти – это и есть «обычный файл». Ну, можете сделать вывод, что в системе есть и другие типы файлов."]
- Таймеры
- Ключи защиты
- Средства взаимоисключения (семафоры, мьютексы)
- Сообщения
- Программные каналы
- Разделяемая память
Количество ресурсов системы огромно и очень разнообразно по своим характеристикам.
Ну, как мы с вами видели в таком коротком экскурсе в историю, существуют разные типы операционных систем:
Ну, во-первых, в мире вычислительных машин существует такое понятие, как мейнфрейм. Мейнфрейм – это отдельно стоящая большая машина. Для мейнфреймов были написаны операционные системы и операционные системы мейнфреймов. Эти ОС ориентированы на обработку множества заданий одновременно.
И, соответственно, мы можем классифицировать ОС мейнфреймов как:
- ОС пакетной обработки
- ОС разделения времени
- ОС для систем обработки транзакций [«Это такие системы, которые предназначены для бронирования авиабилетов, обработки запросов в банке, но сейчас эта конкретная задача решается с использованием серверов. Стоит отметить, что мейнфреймы не ушли в далёкое прошлое: примером мейнфреймов являются IBM 350, IBM 370, и ОС, написанная для этих систем, но, в настоящее время это система IBM 390 и ОС 390, написанная для этой системы.»]
Ну, собственно, наш курс строится, прежде всего, на ОС мейнфреймов. Ну да, PDP-11 - система разделения времени – самая знаменитая и самая известная. Но мы не рассматриваем сетевые возможности – мы рассматриваем отдельно стоящую машину и возможности, связанные с управлением отдельно стоящей машины. Конечно, в конце второго семестр мы рассматриваем сокеты, но, опять же, с точки зрения взаимодействия параллельных процессоров. Взаимодействие там происходит по модели «клиент-сервер», что позволяет запускать и клиентов, и сервер, на одной машины.
В рамках нашего рассуждения можно выделить режимы работы системы:
- Режим непосредственного доступа [“Речь идёт о первых ЭВМ – программист непосредственно взаимодействовал с машиной, пусть и через коммутационную панель. Таким непосредственным взаимодействием мы занимались на ПК, на которых была установлена ОС DOS. Фактически, любая система разделения времени предоставляет … (бубнёж)”]
- Режим однопрограммной пакетной обработки [“В каждый момент времени на такой машине выполнялась одна программа, запускаемая в виде пакета. Никакого взаимодействия программиста с его программой не существовало.”]
- Мультипрограммной пакетной обработки
- Режим разделения времени.
- Режим реального времени.
- Режим в составе сети. [“Ну, здесь, конечно, натяжка – тут всё равно отдельно стоящие компьютеры, с которыми мы взаимодействуем в том же режиме разделения времени, но у нас имеются возможности обращаться к удалённым сервисам. Пам. Имеются некоторые нюансы: ну, на мой взгляд, это просто для того, чтобы подчеркнуть, что существуют специальные сетевые возможности, но сейчас все ОС обладают такими возможностями, которыми вы пользуетесь, не задумываясь об этом: вы пользуетесь интернетом, в этом интернете вы, естественно, обращаетесь к каким-то сетевым ресурсам, которые предоставляют вам различные э-э (бубнёж)”]
В этом перечислении мы не обсудили с вами только ОС реального времени. Это ОЧЕНЬ важное техническое понятие – реальное время. Вас может сбить с толку это название, могут пойти фантазии относительно того времени, в котором мы действуем или существуем, однако это сугубо техническое понятие. Смеркалось. Оно означает определённые условия, когда ОС может называться ОС реального времени.
ОС реального времени – это ОС, которая гарантирует выполнение запросов (лучше обработку запросов) в течение заданного интервала времени.
То есть, технически грамотно если говорить, то нельзя говорить, что реальное время – это быстро. Например, ВС может обслуживать медленную химическую реакцию, выполняемую очень медленно, но делать это быстро. Время должно строго соответствовать заданному времени обслуживания. Обычно такие системы обслуживают некоторые внешние по отношению к ВС системы или процессы.
Классическим примером такой системы является автопилот. На борту современных самолётов стоит цифровая ВC, на которую приходит информация с разных технических систем самолёта, это сложная техническая система даже с первого взгляда. Самые важные системы в самолёте – управление двигателем, впрыск топлива, климат-контроль, подача кислорода, опрос различных датчиков и своевременная реакция ВС на их показания, иначе пиздец катастрофа.
Соответственно, это может быть какой-либо внешний процесс, который система должна обслуживать за какой-либо интервал времени. О системах реального времени мы ещё поговорим. Соответственно, если двигаться дальше, мы должны двигаться к процессам. Базовым понятием любой современной ОС является понятие процесса.
Самое простое определение **процесса **(по Дейтелу) – это программа в стадии выполнения. Когда программа тихо лежит на диске, то она является файлом. Какой файл можно запустить? Исполняемый. Всего существует три типа файлов, связанных с программой – исходный, объектный, исполняемый. Значит, при запуске программы, основная абстракция системы, введённая разработчиками для сопровождения выполнения программы – процесс. Для данной абстракции вводится диаграмма состояний (см. ниже).
Рассмотрим с вами базовую диаграмму состояний любого процесса.
В интернете существует большое количество переделок от того же Дейтела, поэтому я скажу, что я считаю очень важными ещё два состояния процесса, в отличие от Дейтела – порождение и завершение.
- Порождение. ОС – программа, а программы мы пишем по определённому закону. Чтобы использовать какую-т переменную, мы сначала должны её объявить. ОС будет обращаться по этому идентификатору. Далее переходит запуск программы на выполнение. Другими слова, порождение – это идентификация процесса. Основной структурой, с которой работает система, является структура, описывающая процесс. Говорят, что главной таблицей в системе является система процессов. Фактически, любой процесс получает при его запуске дескриптор, у этого дескриптора есть номер. Это самый простой способ идентификации, в том числе в UNIX – процесс идентифицируется целым числом. Процесс идентифицируется, далее ему выделяется дескриптор – структура, описывающая процесс. Юниксоиды говорят, что процессу выделяется строка в таблице процессов. Но, на самом деле, никакой таблицы процессов в UNIX нет – в UNIX есть целый набор связный списков – и структуры процессов находятся в этих списках. Однако для яркости говорят о таблице процессов – главной таблице. Каждая строка этой таблицы является дескриптором процесса. Номер этой строки – идентификатор процесса. После получения процессом идентификатора и дескриптора для начала выполнения программы необходимо выделить программе память (загрузить в память). После того, как процессу выделена необходимая память, он переходит в состояние готовности.
- Готовность.
- Выполнение.
- Блокировка. Состояние ожидания процессом необходимого ему ресурса.
- Завершение. В состоянии завершения освобождаются ресурсы, занимаемые процессом и возвращаются в пул свободных ресурсов.
Очевидно, что для разных систем диаграмма будет иметь варианты. Например, для однозадачной системы диаграмма будет крутиться между всеми состояниями (кроме блокировки, но тут неизвестно, бабка делает пасы руками, которые нам не видны). В DOS, скажем, возможно то же ожидание какого-то ресурса, программа будет выполняться в системе, ресурсы в системе будут выделяться одной единственной… (от потока вводных слов информация ушла куда-то не туда). Соответственно, если у нас многозадачная система, то в ней, например, возможна такая ситуация, когда процесс вытесняется с выполнения, потому что пришёл более приоритетный процесс. Это происходит в системах с приоритетами. (клац – клац мелом)
Это, скажем, в системах пакетной обработки, мы с вами увидим в системах планирования, это нам поможет разобраться в современных системах.
Если говорить о системах разделения времени, то в состояние готовности процесс может перейти по истечении кванта. То есть, для разных типов систем переход из одного состояние в другое связан с разными причинами, определяемыми системой. Если речь идёт о многопроцессных системах, многозадачных, или, как говорят, мультизадачных системах, то в состоянии готовности одновременно находится большое количество программ, то есть в состоянии готовности находится очередь программ, создаётся очередь программ. И, соответственно, выполнение программы в этой очереди может происходить по некоторой системе приоритета.
"Чёт на вас слово приоритет не оказывает никакого эффекта."
[Задача со звёздочкой] Вот есть столовая/буфет. У кого в нём больше приоритет – у студентов или у преподавателей? [ремарка из зала – у того, у кого деньги]. Бабка жалуется, что есть студенты, которые лезут вперёд. По канону, преподаватели встают в начало очереди, так как имеют более высокий приоритет, чем студенты, а студенты встают в конец.
Процессы с более высоким приоритетом будут ставиться в начало очереди, исходя из чего они раньше получат процессорное время.
Для эффективного управления процессами и эффективной работы системы очень важно правильно спланировать управление процессами – это называется планирование. В системах различается планирование и диспетчеризация.
Планирование – организация очереди процессов, то есть постановка процессов в очередь.
Диспетчеризация – выделение процессу непосредственно процессорного времени.
Давайте проведём сразу классификацию планирования в рамках уже полученных нами знаний.
Планирование бывает:
- С переключением/Без переключения. Фактически, переключение процессора на выполнение другого процесса по истечении кванта времени.
- С приоритетами/Без приоритетов. Приоритеты бывают статические и динамические.
-
Статические приоритеты назначаются процессам до начала их выполнения и при выполнении не меняются
-
Динамические приоритеты изменяются в процессе выполнения.
- С вытеснением/Без вытеснения. Речь идёт о том, что в системах пакетной обработки процесс может быть вытеснен с выполнения более приоритетным процессом (например, в системах пакетной обработки). Очевидно, что вытеснение возможно только в системах с приоритетным планированием.
В рамках перечисленных типов планирования рассмотрим несколько классических алгоритмов планирования.
Самыми первыми системами, о которых можно что-то говорить, были мультизадачные системы пакетной обработки. Рассмотрим для них несколько алгоритмов.
Планирование в мультизадачных системах пакетной обработки.
- FIFO (First In – First Out). Алгоритм без приоритетов и без вытеснения, переключения. Программа, получив процессорное время, выполняется от начала до конца, и только после этого будут выполняться следующие программы. Это характерно для более ранних систем.
- SJF (Shortest Job First). Наикратчайшее задание первым. Как я сказала, мы сейчас рассматриваем мультизадачные системы пакетной обработки. Я вам всегда говорила, что всегда пакеты предварялись управляющими перфокартами, в которых указывалось максимальное необходимое время выполнения, максимальное необходимое количество памяти.
Исходя из этой априорной информации, получаемой системой из управляющих перфокарт, решался вопрос о планировании этих процессов. Преимущество получали задания, время выполнения которых являлось наименьшим. Такое приводило к бесконечному откладыванию больших задач. Процессы, которым нужно большое количество времени, не выполнялись вовсе. (череп с костями)
В Америке демонтировали последний мейнфрейм – IBM 360, и на нём обнаружили задачу, которая не была выполнена в течение 30 (!) лет. Доигрались с бесконечным откладыванием больших задач.
(Звонок!)
SRT - Shortest Remaining Time. Наименьшее оставшееся время. Выполняющийся процесс может быть прерван и вытеснен с выполнения процессом с меньшим оценочным временем выполнения