- •1 Лекция (01.02.2024)
- •2 Лекция (08.02.2024)
- •3 Лекция (15.02.2024)
- •4 Лекция (22.02.2024)
- •5 Лекция (29.02.2024)
- •6 Лекция (07.03.2024)
- •7 Лекция (14.03.2024)
- •8 Лекция (21.03.2024)
- •9 Лекция (28.03.2024)
- •10 Лекция (04.04.2024)
- •11 Лекция (11.04.2024) Небольшое объяснение насчёт экзамена:
- •Материал лекции:
- •Точка-Точка (point-to-point)
- •Управляемая петля (arbitrated loop)
- •Коммутируемая связная архитектура (switched fabric)
1 Лекция (01.02.2024)
Учиться программировать мы будем на базе утилит. Утилиты — это часть операционных систем, которые не загружаются и не существуют в памяти оперативной постоянно.
Согласно архитектуре фон Неймана, любой программный продукт загружает свою оперативную память. То, что загружено в оперативную память с точки зрения операционной системы и всегда там работает, называется ядром. Это CO или Canal. Два английских слова, обозначающих одно и то же. CO — это айберовская терминология, Canal — юниксовская. Всё вместе это составляет ядро.
Ядро — это резидент. Это то, что находится всегда в оперативной памяти и что всегда нам нужно. То же самое у прикладных программных продуктов. Мы с вами будем учиться делать всякую технологию промышленную на основе всяких системных программных продуктов.
Системные программные продукты – это операционные системы, утилиты операционных систем, компиляторы, линкеры, лоудеры, драйверы. Т.е., это то, что поддерживает систему.
Прикладные программные продукты – это то, что обеспечивает функционирование какой-то системы, связанной с определенной прикладной задачей (редактор, система учёта склада и т.д.).
Писать мы будем нерезидентные части операционных систем, которые называются как утилиты, т.е., это то, что не резидент.
Для того, чтобы это писать, мы должны научиться делать это в промышленном варианте. Такое промышленное программирование называется структурным программированием. Его автором является Дейкстра. Задача в промышленном программировании писать, вообще говоря, 100 операторов в день, причём на C, а не на Python. Для такой скорости программирования нужна высокая скорость и железный способ отладки.
Программирование начинают с документации. Ниже приведены фото в качестве фрагмента документации, написанной для определённой утилиты.
Дальше начинается программирование с понимания того, в какой среде я собираюсь это делать и под управлением какой операционной системы я пишу утилиту и прикладной продукт.
Она может быть интерактивной, которая запускается с экрана, или может запускаться как бетч, как управление заданием. Также определяют, что для этой утилиты есть параметры, а что есть дефолты. Параметры – это то, что нужно пользователю, чтобы он эту утилиту запускал, а дефолты – это то, что говорит, например, сколько раз я делаю ping.
Значит, дальше мы делаем блок-схему. Эта блок-схема должна соответствовать конечному автомату.
Вот это пример такого конечного автомата, ребят. Сам код пишется тоже по определенным правилам. Эти правила – это написание тела программного продукта (main) и декларации. Вот здесь примеры более-менее прилично написанного программного продукта.
Мы с вами будем писать ping. Для того, чтобы написать ping, нам нужен протокол, который называется ICMB, у которого есть свои RPC. RPC – это класс технологий, который может сделать любой, а также благодаря которому любой может положить информацию на сервер etf.org.
Протокол, который нужен для того, чтобы что-то писать, называется UDP, а дальше RTP, RTSP и так далее.
Также для того, чтобы начать писать, нужен ЯП C (любой). Он будет определяться компилятором (компайдером).
Программный продукт и всё другое всегда пишется модульно. Программирование структурной Дейкстры – это модульное программирование. Программный продукт, такой как информационная система, всегда модульный.
Любой код программного продукта всегда модульный и каждый модуль обычно пишется определенной командой, а модули создают архитекторы программных продуктов.
Код, который получает компилятор, называется объектным. Объектный код содержит инструкции, которые помещаются в регистры. Объектный код содержит команды, которые помещаются в регистр и инструкции по замещению этих команд. Т.е., после выполнения команды идёт переход к следующей.
Программный продукт, созданный из таких объектных кодов и который пишет каждая группа, надо собрать в одну кучу. Т.е., когда что-то запускается, запускается именно ядро. Для запуска существуют специальные программные продукты, которые называются линкеры. Компиляторы сделают инструкции объектного кода и поместят туда инструкции по замещению. А линкеры соберут в единый программный продукт эти модули объектного кода.
После сборки объектный код грузится в оперативную память при помощи лоудера. Когда линкер всё соберет, он получит exe-код. Exe’шник загружается при помощи лоудера. В современных системах во время такой загрузки необходимо сделать адресацию памяти при помощи специального контроллера Memory Management Unit (MMO), который должен быть у каждого компьютера. Если его не будет, то нормальную адресацию в стековой памяти просто не сделать.
Стоит обратить внимание, что все операционные системы написаны на ЯП С одной компании (спросить у Марины Наумовны, что за компания). Никаких машинных языков, ассемблеров и т.д. давно нет. Первая ОС, написанная на ЯП С, называлась MCP (Master Control Program). Она была написана на машине, которая называлась Burroughs B6700.
MCP была впервые написана на С, потому что нет обращения к никаким ячейкам памяти уже давно у современной техники. Обращение происходит к слову, т.е., считывается определённое количество слов в оперативной памяти. Для движения по битам этих слов используется pointer (указатель).
Любое программирование модульное. Эти модули задаются структурно. Во всех ЯП есть понятия поинтеров и функций над ними, а также оператор кейса или switch-кейс.
Когда создаётся программный продукт, обязательно должна быть отладка и тестирование. Отладка означает, что программный продукт работает согласно блок-схеме. Тестирование программного продукта означает, что этот программный продукт работает в определенной среде.
Вся система зависит от того, какая у нас топология: физическая или логическая. Физическая топология – это связь, собственно говоря, устройств. Логическая топология – это модули и интерфейсы между модулями.
Вся физическая топология современных систем – это топология, которая ссылается на стандарт 802.3.
Все топологии Ethernet — это либо звезда, либо кольцо-звезда. Это означает, что у нас в центре композиции находится коммутатор, а в сегменте- различные порты. Этот сегмент системы должен быть связан с другой системой при помощи роутера.
