Объекты, свойства, методы, события

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

Здесь важнейшее значение имеют принципы инкапсуляции и скрытия данных.

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

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

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

Во-вторых, необходимо изолировать внешние объекты от особенностей внут­ренней реализации данных. Для внешних потребителей данных должен быть до­ступен только пользовательский интерфейс – описание того, какие имеются дан­ные и функции и как их использовать. А внутренняя реализация – это дело разра­ботчика объекта. При таком подходе разработчик может в любой момент модерни­зировать объект, изменить структуру хранения и форму представления данных, но, если при этом не затронут интерфейс, внешний потребитель этого даже не за­метит. Следовательно, во внешней программе и в поведении пользователя ничего не придется менять.

Чтобы выдержать принцип скрытия данных, в объекте обычно определяются процедуры и функции, обеспечивающие все необходимые операции с данными: их чтение, преобразование, запись. Эти функции и процедуры называются методами и через них происходит общение с данными объекта (рис. 3.2).



1. Управление задачами и памятью
в операционных системах

Основные понятия

Системное программное обеспечение – программы и комплексы программ, являющиеся общими для всех, кто совместно использует технические средства компьютера, и применяемые как для создания новых программ, так и для организации выполнения программ существующих.

Программное обеспечение (ПО) – совокупность входящих в состав вычислительной системы программных средств, т.е. программ, данных и документов к ним.

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

Системное программное обеспечение может быть разделено на следующие пять групп:

1. Операционные системы.

2. Системы управления файлами.

3. Интерфейсные оболочки для взаимодействия пользователя с ОС и программ­ные среды.

4. Системы программирования.

5. Утилиты.

Рассмотрим вкратце эти группы системных программ.

Операционная система (ОС) – комплекс программ, организующих вычислительный процесс в вычислительной системе. Операционная система, с одной стороны, выступает как интерфейс между аппаратурой компьютера и пользователем с его задачами, а с другой – предназначена для наиболее эффективного использования ресур­сов вычислительной системы и организации надежных вычислений. Любой из компонентов прикладного программного обеспечения обязательно рабо­тает под управлением ОС.

В данном учебном курсе нас прежде всего будут интересовать многозадачные ОС.

Многозадачная ОС – операционная система, способная одновременно поддерживать выполнение на компьютере нескольких задач.

Назначение системы управления файлами – организация более удобного доступа к данным, организованным как файлы. Именно благодаря системе управления файлами вместо низкоуровневого доступа к данным с указанием конкретных физических адресов нужной нам записи используется логиче­ский доступ с указанием имени файла и записи в нем. Как правило, все совре­менные ОС имеют соответствующие системы управления файлами. Однако выделение этого вида системного программного обеспечения в отдельную ка­тегорию представляется целесообразным, поскольку ряд ОС позволяет рабо­тать с несколькими файловыми системами (либо с одной из нескольких, либо сразу с несколькими одновременно).

Для удобства взаимодействия с ОС могут использоваться дополнительные интерфейсные оболочки. Их основное назначение – либо расширить возмож­ности по управлению ОС, либо изменить встроенные в систему возможности.

Система программирования представлена прежде всего такими компонентами, как транслятор с соответствующего языка, библиотеки подпро­грамм, редакторы, компоновщики и отладчики. Не бывает самостоятельных (оторванных от ОС) систем программирования. Любая система программи­рования может работать только в соответствующей ОС, под которую она и создана, однако при этом она может позволять разрабатывать программное обеспечение и под другие ОС.

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

Понятие «вычислительный процесс» (или просто – «процесс») является одним из основных при рассмотрении операционных систем.

Процесс – последовательность операций при выполнении программы или ее части вместе с используемыми данными.

Последовательный вычислительный процесс – это выполнение отдельной программы с ее данными и на последовательном процессоре. Последовательный процессор – процессор, обеспечивающий последовательную обработку данных.

В качестве примеров можно назвать следующие процессы (задачи): прикладные программы пользователей, утилиты и другие системные обрабатывающие про­граммы. Процессами могут быть редактирование какого-либо текста, трансляция исходной программы, ее компоновка, исполнение.

Задачей называют задание вычислительной системе, представленное в виде программы или части программы и данных, которое операционная система рассматривает как единое целое при распределении ресурсов.

Вычислительный процесс может включать в себя несколько задач. Термин «задача» в некоторых операционных системах совпадает с понятием «процесс».

Процессорное время и оперативная память являются основны­ми ресурсами в случае реализации мультипрограммных вычислений.

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

Ресурс – время, аппаратные, программные и другие средства, которые могут быть предоставлены вычислительной системой либо ее отдельными компонентами вычислительному процессу или пользователю.

Концептуально процессор рассматривается в двух аспектах: во-первых, он является носителем данных и, во-вторых, он выполняет операции, связанные с их обработкой.

Оперативная память – память, непосредственно связанная с центральным процессором вычислительной системы.

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

Операционная система выполняет следующие основные функции, связан­ные с управлением задачами:

• создание и удаление задач;

• планирование процессов и диспетчеризация задач;

• синхронизация задач, обеспечение их средствами коммуникации.

Система управления задачами обеспечивает прохождение их через компьютер. В зависимости от состояния процесса ему должен быть предоставлен тот или иной ресурс. Например, новый процесс необходимо разместить в основной па­мяти – следовательно, ему необходимо выделить часть адресного пространства. Новый порожденный поток текущего процесса необходимо включить в общий список задач, конкурирующих между собой за ресурсы центрального процессора.

Создание и удаление задач осуществляется по соответствующим запросам от пользователей или от самих задач. Задача может породить новую задачу. При этом между процессами появляются «родственные» отношения. Порождающая задача называется «предком», «родителем», а порожденная – «потомком», «сыном» или «дочерней задачей». «Предок» может приостановить или удалить свою дочер­нюю задачу, тогда как «потомок» не может управлять «предком».

Если мы возьмем набор таких процессов, которые не будут конкурировать между собой за неразделяемые ресурсы при параллельном выполнении, то, ско­рее всего, процессы смогут выполниться быстрее (из-за отсутствия дополнитель­ных ожиданий), да и имеющиеся в системе ресурсы будут использоваться более эффективно. Итак, возникает задача подбора такого множества процессов, что при выполнении они будут как можно реже конфликтовать из-за имеющихся в системе ресурсов. Такая задача называется планированием вычислительных про­цессов.

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

Долгосрочное планирование осуществляется гораздо реже, чем задача текущего распределения ресурсов между уже выполняющимися процессами и потоками. Основное отличие между долгосрочным и краткосрочным планировщиками за­ключается в частоте запуска: краткосрочный планировщик, например, может за­пускаться каждые 30 или 100 мс, долгосрочный – один раз за несколько минут (или чаще; тут многое зависит от общей длительности решения заданий пользо­вателей).

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

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

Планирование и диспетчеризация процессов и задач

Стратегии планирования

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

• по возможности заканчивать вычисления (вычислительные процессы) в том же самом порядке, в котором они были начаты;

• отдавать предпочтение более коротким процессам;

• предоставлять всем пользователям (процессам пользователей) одинаковые услуги, в том числе и одинаковое время ожидания.

Когда говорят о стратегии обслуживания, всегда имеют в виду понятие процесса, а не понятие задачи, поскольку процесс может состоять из не­скольких потоков (задач).

Поток – последовательность выполнения операторов в программе.