00.1 (Конспект) Overview

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

Есть многозадачные и однозадачные устройства. Например, веб камера является однозадачным устройством (так как было бы довольно странно давать разным процессам доступ к веб камере и разрешать ею управлять ). Более интересная ситуация с графическими устройствами – с одной стороны понятное дело что все приложения которые запущены в графическом десктопе должны уметь рендерить 3-х мерку, а с другой стороны бывают ситуация когда доступ к ним некоторым приложениям лучше не давать (типичная ситуация когда вы работаем на сервере, на машине удаленно, довольно странно было бы использовать графическую карту для рендеринга одновременно всеми пользователями этой машины.) Команда limits показывает лимиты.

Условные процессы могут работ в двух режимах – в режиме supervisor mode и в режиме пользовательском (это еще принято называть kernel и user space). Большинство операционных систем организовано таким образом, что та часть, которая критична к понятию изоляции (или ограничения доступа или принятию решений о доступе и т.д.) реализовано исключительно в kernel space. По какой границе разделять на user space ограниченное количеством команд внутри своего виртуально пространства и kernel space, где можно выполнять вообще все команды. Есть два подхода – классическое монолитное ядро и микроядро.

3.png

Hardware – у нас есть уровень который выполняется в kernel space который нельзя передоверить в user space – это межпроцессные взаимодействия, разделение памяти, оперирование виртуальными страницами и диспетчер. Все остальные процессы собственно библиотеки, логика реализации распределения памяти, диспетчера, логика работы драйвера внешнего устройства, все это вынесено в user space.

Чем отличается левая картинка от правой? Мы вносим в kernel space не только сам факт осуществления доступа но и логику его реализации, например не только доступ к внешним устройствам к их регистрам как памяти, но и драйверу внешнего устройства.

Почему монолитное ядро лучше, чем “не монолитное” – проблема в переключения контекста процесса; дело в том, что контекста процесса придумали несколько позже чем компьютеры, а операция переключения из одного контекста в другой (например из user space в ядро и обратно) эта операция очень дорогая. На современных процессорах микроядра работают плохо.

Поговорим про классические архитектуры. Утилиты — это такие программы написанные для того, чтобы удобно использовать системные вызовы. У всех утилит, которые стоят в linux системах у всех у них есть доступные исходники. Однако одних утилит недостаточно. Shell это некоторая “обмазывательная структура” с помощью которой можно объединять команды в некоторые последовательности, некоторые скрипты. Мало того что shell удобен для использования в качестве интерпретатора командной строки, он еще является высокоуровневым языком программирования.

4.png

Модуль — это такая логика ядра которая встраивается туда по необходимости. О чем будет следующая лекция? Мы поговорим о shell – та штука, которая подает команды операционной системе.

HSE/ArchitectureOS/00_OverviewShell/Conspect (последним исправлял пользователь VasilyKireenko 2020-06-10 00:36:39)