Учреждение образования «Белорусский государственный университет информатики и радиоэлектроники» Контрольная работа №1 Выполнил: Концевенко Алексей Владимирович студент заочного обучения кафедры КТ группа № 181078 контактный телефон: +375333403212 e-mail: konsei0705@gmail.com Проверил: Яковлев Андрей Валерьевич Минск 2021 Задание 1. Автоматизация усовершенствования процессов разработки ПО. Аббревиатура CASE (Computer-Aided Software Engineering – автоматизированная разработка программного обеспечения) обозначает специальный тип программного обеспечения, предназначенного для поддержки таких процессов создания ПО, как разработка требований, проектирование, кодирование и тестирование программ. Поэтому к CASEсредствам относятся редакторы проектов, словари данных, компиляторы, отладчики, средства построения систем и т.п. CASE-средства предлагают поддержку процесса создания ПО путем автоматизации некоторых этапов разработки, а также создания и представления информации, необходимой для разработки. В настоящее время подходящие CASE-технологии существуют для большинства процессов, выполняемых в ходе разработки ПО. Это ведет к улучшению качества создаваемых программ и повышению производительности труда разработчиков программного обеспечения. Уже сложилась развитая индустрия CASE-средств, а круг поставщиков и разработчиков этих программных продуктов очень широк. Классификация case-средств Существует несколько различных классификаций CASE-средств, и каждая предлагает свой взгляд на эти программные продукты. Рассмотрим классификацию по категориям, где CASE-средства классифицируются по степени интеграции программных модулей, поддерживающих различные процессы разработки ПО. Эта классификация содержит три основные категории: 1. вспомогательные программы (tools) поддерживают отдельные процессы разработки ПО, такие как проверка непротиворечивости архитектуры системы, компиляция программ, сравнение результатов тестов и т.д. Вспомогательные программы могут быть универсальными функционально законченными средствами или могут входить в состав инструментальных средств; 2. инструментальные средства (workbenches) поддерживают определенные процессы разработки ПО, такие как создание спецификации, проектирования. Обычно они представляют собой набор интегрированных вспомогательных программ; 3. рабочие среды разработчиков (environments) поддерживают все или большинство процессов разработки ПО и включают в себя несколько различных интегрированных инструментальных средств. Вспомогательные программы выбираются разработчиками ПО обычно по своему усмотрению. Инструментальные средства поддерживают определенные методы разработки на основе некоторой модели разработки ПО, наборов правил и нормативных указаний. Интегрированные рабочие среды представляют инфраструктуру поддержки для данных, управления и 2 интеграции системных представлений. Экспертные рабочие среды более интеллектуальны. Они включают базу знаний о процессах создания ПО и механизм, предлагающий разработчику те или иные вспомогательные или инструментальные средства. Инструментальные средства обычно объединяют через общий репозиторий. Такой пакет образуют следующие средства. 1. Редакторы диаграмм предназначены для создания диаграмм потоков данных, иерархий объектов, диаграмм «сущность-связь». Эти редакторы не только имеют средства рисования, но и поддерживают различные типы объектов, используемых в диаграммах. 2. Средства проектирования, анализа и проверки выполняют проектирование ПО и создают отчет об ошибках и дефектах в системной архитектуре. Они могут работать совместно с системой редактирования, поэтому обнаруженные ошибки можно устранить на ранней стадии проектирования. 3. Центральный репозиторий позволяет проектировщику найти нужный проект и соответствующую ему проектную информацию. 4. Словарь данных хранит информацию об объектах, которые используются в структуре системы. 5. Средства генерирования отчетов на основе информации из центрального репозитория автоматически генерируют системную документацию. 6. Средства создания форм определяют форматы экранных форм и документов. 7. Средства импортирования и экспортирования позволяют обмениваться информацией из центрального репозитория различным инструментальным средствам. 8. Генераторы программного кода автоматически генерируют программы на основе проектов, хранящихся в центральном репозитории. Различают два класса инструментальных систем технологии программирования: инструментальные системы поддержки проекта и языково-зависимые инструментальные системы. Инструментальная система поддержки проекта это открытая система, способная поддерживать разработку ПС на разных языках программирования после соответствующего ее расширения программными инструментами, ориентированными на выбранный язык. Набор инструментов такой системы поддерживает разработку ПС, а также содержит независимые от языка программирования инструменты, поддерживающие разработку ПС (текстовые и графические редакторы, генераторы отчетов и т.п.). Кроме того, он содержит инструменты расширения системы. Ядро такой системы обеспечивает, в частности, доступ к репозиторию. Языково-зависимая инструментальная система это система поддержки разработки ПС на каком-либо одном языке программирования, 3 существенно использующая в организации своей работы специфику этого языка. Эта специфика может сказываться и на возможностях ядра (в том числе и на структуре репозитория), и на требованиях к оболочке и инструментам. Примером такой системы является среда поддержки программирования на Аде. Помимо этого, CASE-средства можно классифицировать по применяемым методологиям и моделям систем и БД; степени интегрированности с СУБД; доступным платформам. Задание 2. Межпроцессное взаимодействие в POSIX / System V. Методы межпроцессного взаимодействия можно объединить следующие группы: Использование передачи сообщений Синхронизация (семафоры, мьютексы, критические секции и т.д.) Разделяемая память Удаленный вызов процедур (RPC) в Виды ipc в стандартах posix В стандарте POSIX определены следующие средства IPC: Очереди сообщений Семафоры Разделяемая память. Однако большинство POSIX-систем используют так же каналы, именованные каналы, сигналы и сокеты. Очереди сообщений Очереди сообщений предоставляют асинхронный протокол обмена, в котором отправитель и получатель не обязательно работают с очередью одновременно. С сообщениями работают четыре системных функции: msgget, которая возвращает или создает дескриптор очереди сообщений msgctl, которая устанавливает и возвращает связанные с дескриптором сообщений параметры или удаляет дескрипторы msgsnd, которая посылает сообщение msgrcv, которая получает сообщение При вызове msgsnd ядро выделяет сообщению место, используя карту сообщений, и копирует в это место данные из пространства пользователя. К сообщению присоединяется заголовок, после чего оно помещается в конец связного списка заголовков сообщений. Затем ядро выводит из состояния приостанова все процессы, ожидающие пополнения очереди сообщений. 4 Структуры данных, используемые в организации сообщений При вызове функции msgrcv ядро проверяет, имеет ли пользователь необходимые права доступа к очереди сообщений. Если тип считываемого сообщения имеет нулевое значение, ядро ищет первое по счету сообщение в связном списке. Если его размер меньше или равен размеру, указанному пользователем, ядро копирует текст сообщения в пользовательское пространство. Если какие-либо процессы, ожидавшие получения сообщения, находились в состоянии приостанова из-за отсутствия свободного места в списке, ядро выводит их из этого состояния. Если размер сообщения превышает значение maxcount, указанное пользователем, ядро посылает системной функции уведомление об ошибке и оставляет сообщение в очереди. Если, тем не менее, процесс игнорирует ограничения на размер (в поле flag установлен бит MSG_NOERROR), ядро обрезает сообщение, возвращает запрошенное количество байт и удаляет сообщение из списка целиком. Процесс может получать сообщения определенного типа, если присвоит параметру type соответствующее значение. Если это положительное целое число, функция возвращает первое значение данного типа, если отрицательное, ядро определяет минимальное значение типа сообщений в очереди, и если оно не превышает абсолютное значение параметра type, возвращает процессу первое сообщение этого типа. Семафоры Для семафоров определены две элементарные операции: P и V Операция P заключается в уменьшении значения семафора в том случае, если оно больше 0, операция V - в увеличении этого значения (и там, и там на единицу). Поскольку операции элементарные, в любой момент времени для каждого семафора выполняется не более одной операции P или V. Семафор в POSIX-системе состоит из следующих элементов: Значение семафора, Идентификатор последнего из процессов, работавших с семафором, Количество процессов, ожидающих увеличения значения семафора, Количество процессов, ожидающих момента, когда значение семафора станет равным 0. Для создания набора семафоров и получения доступа к ним используется системная функция semget, для выполнения различных управляющих операций над набором - функция semctl, для работы со значениями семафоров - функция semop. При вызове функции semop ядро меняет значение семафора в зависимости от кода операции. Если код операции имеет положительное значение, ядро увеличивает значение семафора и выводит из состояния приостанова все процессы, ожидающие наступления этого события. Если код операции равен 0, ядро проверяет значение семафора: если оно равно 0, ядро 5 переходит к выполнению других операций; в противном случае ядро увеличивает число приостановленных процессов, ожидающих, когда значение семафора станет нулевым, и "засыпает". Если код операции имеет отрицательное значение и если его абсолютное значение не превышает значение семафора, ядро прибавляет код операции (отрицательное число) к значению семафора. Если результат равен 0, ядро выводит из состояния приостанова все процессы, ожидающие обнуления значения семафора. Если результат меньше абсолютного значения кода операции, ядро приостанавливает процесс до тех пор, пока значение семафора не увеличится. Установка флага IPC_NOWAIT в функции semop позволяет семафору не переходить в состояние ожидания увеличения значения семафора выше определенного уровня или снижения до 0.В такой ситуации ядро сразу вернет сообщение об ошибке. В функции semop так же процесс может установить флаг SEM_UNDO: когда процесс завершится, ядро даст обратный ход всем операциям, выполненным процессом. Для этого в распоряжении у ядра имеется таблица, в которой каждому процессу в системе отведен указатель на группу структур восстановления, по одной структуре на каждый используемый процессом семафор. Структуры восстановления семафоров В структуре восстановления хранится результат вычитания суммы значений всех операций, произведенных над семафором, для которого установлен флаг SEM_UNDO. Если установочное значение становится равным 0, ядро удаляет структуру из списка. Когда процесс завершается, ядро просматривает все связанные с процессом структуры восстановления и отменяет выполненные семафором действия. Разделяемая память Процессы могут взаимодействовать друг с другом непосредственно путем разделения участков виртуального адресного пространства и обмена данными через разделяемую память. Функция shmget создает новую область разделяемой памяти или возвращает адрес уже существующей области, функция shmat логически присоединяет область к виртуальному адресному пространству процесса, функция shmdt отсоединяет ее, а функция shmctl имеет дело с различными параметрами, связанными с разделяемой памятью. Области выделяется память только тогда, когда процесс присоединяет область к своему адресному пространству. Если при вызове функции shmat вызывающий процесс является первым процессом, который присоединяет область, ядро выделяет для области все необходимые таблицы, записывает время присоединения в соответствующее поле таблицы разделяемой памяти 6 и возвращает процессу виртуальный адрес, по которому область была им подключена фактически. Ядро устанавливает также флаг, говорящий о том, что по завершении последнего связанного с областью процесса область не должна освобождаться. Таким образом, данные в разделяемой памяти остаются в сохранности, даже если она не принадлежит ни одному из процессов. Структуры данных, используемые при разделении памяти Процессы ведут чтение и запись данных в области разделяемой памяти, используя для этого те же самые машинные команды, что и при работе с обычной памятью. После присоединения к виртуальному адресному пространству процесса область разделяемой памяти становится доступна так же, как любой участок виртуальной памяти; для доступа к находящимся в ней данным не нужны обращения к каким-то дополнительным системным функциям. 7