Билет №8

1. Средства для работы с памятью в языке С++: указатели; базовые понятия; адресная арифметика.

Под управлением памятью имеются в виду возможности программы по размещению и манипулированию данными. Поскольку единственным "представителем" памяти в программе выступают переменные, то управление памятью определяется тем, каким образом работает с ними и с образованными ими структурами данных язык программирования.

Указателем называется переменная, которая содержит значение адреса элемента памяти, где хранится значение другой переменной. Главная операция над указателями - это косвенное обращение (разыменование), т.е. обращение к объекту, на который настроен указатель. Эту операцию обычно называют просто косвенностью. Операция косвенности * является префиксной унарной операцией. Например: char c1 = 'a'; char* p = &c1; // p содержит адрес c1 char c2 = *p;// c2 = 'a'

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

char A[20] ={0x11,0x15,0x32,0x16,0x44,0x1,0x6,0x8A}; char * p; int *q; long *l; p = A; q = (int*) p; l = (long*) p; p[2] = 5; /* записать 5 во второй байт области A */ q[1] = 7; /*записать 7 в первое слово области A*/

Здесь p - указатель на область байтов, q - на область целых, l - на область длинных целых. Соответственно операции адресной арифметики *(p+i), *(q+i), *(l+i) или p[i], q[i], l[i] адресуют i-ый байт, i-ое целое и i-ое длинное целое от начала области Область памяти имеет различную структуру (байтовую, словную и т.д.) в зависимости от того, через какой указатель мы с ней работаем. При этом неважно, что сама область определена как массив типа char - это имеет отношение только к операциям с использованием идентификатора массива.

Присваивание значения указателя одного типа указателю другого типа сопровождается действием, которое называется в Си преобразованием типа указателя , и которое в Си++ обозначается всегда явно. Операция (int*)p меняет в текущем контексте тип указателя char* на int*. На самом деле это действие является чистой фикцией (команды транслятором не генерируются). Транслятор просто запоминает, что тип указуемой переменной изменился и операции адресной арифметики и косвенного обращения нужно выполнять с учетом нового типа указателя.

Явное преобразование типа указателя в выражении. Преобразование типа указателя можно выполнить не только при присваивании, но и внутри выражения, "на лету". В этом случае текущий указатель меняет тип указываемого элемента только в цепочке выполняемых операций. char A[20]; ((int *)A )[2] = 5;

Имя массива A - указатель на его начало - имеет тип char*, который явно преобразуется в int* . Тем самым в текущем контексте мы ссылаемся на массив как на область целых переменных. Применительно к указателю на массив целых выполняется операция индексации и последующее присваивание. Результат : целое 5 записывается во второй элемент целого массива, размещенного в А .

Операция *p++ применительно к любому указателю интерпретируется как " взять указываемую переменную и перейти к следующей" , следовательно, значением указателя после выполнения операции будет адрес переменной, следующей за выбранной. Использование такой операции в сочетании с явным преобразованием типа позволяет извлекать или записывать переменные различных типов, последовательно расположенных в памяти.

char A[20], *p=A; *p++ = 5; /*Записать в массив байт с кодом 5*/ *((int* )p)++ = 5; /*Записать в массив целое 5*/ *((double*)p)++ = 5.5; /*Записать в массив вещественное 5.5*/

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

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

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

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

Другой вариант заключается в использовании объединения (union), которое, как известно, позволяет использовать общую память для размещения своих элементов. Если элементами union являются указатели, то операции присваивания можно исключить.

union ptr { int *p; double *d; long *l; } PTR; int A[100]; PTR.p=A; *(PTR.p)++ =5; *(PTR.l)++ =5; *(PTR.d)++=5.56;

2. Операционные системы. Вычислительный процесс. Основные и дополнительные состояния процесса. Прерывание. Операции над процессами.

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

Операционная система - комплекс программ, обеспечивающий: - выполнение других программ; - распределение ресурсов; - планирование; - ввод-вывод данных; - управление данными; - взаимодействие с оператором.

Операционную систему составляют: - монитор; - загрузчик; - супервизор; - планировщик; и - набор системных обслуживающих программ (утилит).

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

Прерывание - это событие/сигнал, привлекающий внимание ЦП и заставляющий его изменить текущий порядок исполнения команд процесса. Существуют аппаратные и программные прерывания.Аппаратные прерывания инициируются аппаратурой, сигналом принтера, нажатием клавиш клавиатуры и многими другими причинами.

Программные прерывания инициируются процессом и на самом деле ничего не прерывают. Это обычные процедуры, которые используются программами для выполнения стандартной рутиной работы. Однако эти программы содержатся в ОС, и механизм прерываний дает возможность обратиться к ним из программ пользователей. Программные прерывания могут выдаваться внутри друг друга (быть вложенными). Например, аппаратные прерывания могут возникнуть при выполнении программных прерываний. Когда разрешенное прерывание вызывается, ЦП оставляет свою работу, выполняет прерывание, а затем возвращается в место прерывания. Управляет прерываниями обработчик прерываний (Interrupt Handler).

Операции над процессами: Создание; Уничтожение; Запуск; Блокировка; Приостановка; Возобновление; Изменение диспетчерского приоритета процесса (работа с очередями).

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

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

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

Блок управления процессом (Program Control Block - PCB) является центральным объектом в ОС, который определяет процесс и содержит всю необходимую информацию о процессе.

PCB содержит определенные сведения: 1) Текущее состояние процесса (Program Status Word - PSW).(Всего 5 состояний); 2) Уникальный идентификатор процесса; 3) Приоритет;4) Указатели памяти процесса;4) Указатели выданных процессу ресурсов;5) Область сохранения регистров.

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

Обработка прерываний состоит в следующем: 1)При возникновении прерывания, управление передается в ОС. 2)ОС запоминает состояние прерванного процесса (обычно в PCB прерванного процесса). 3)ОС анализирует тип прерывания и передает управление соответствующему обработчику прерываний. 4)После обработки прерывания ОС либо продолжает выполнять прерванный процесс, либо запускает готовый процесс с наивысшим приоритетом.

3. Служба DHCP. Конфигурирование: области, пулы, аренда.

Это - открытый промышленный стандарт, который упрощает управление сетями на базе TCP/IP. Каждому хосту (компьютеру), подключенному к сети на базе TCP/IP, должен быть назначен уникальный IP-адрес. Протокол DHCP освобождает сетевых администраторов от необходимости настраивать все компьютеры вручную.

DHCP может автоматически конфигурировать настройки TCP/IP во время загрузки компьютера. Это позволяет хранить все доступные IP-адреса в центральной базе данных вместе с соответствующей информацией о конфигурации, такой как маска подсети, адрес шлюза и адреса серберов DNS и WINS. DHCP упрощает работу системных администраторов. При этом чем больше сеть, тем выгоднее применять протокол DHCP. Без динамического назначения адресов администратору пришлось бы настраивать клиентов вручную, последовательно назначая адреса. Изменения должны производиться для каждого клиента по отдельности. Чтобы избежать двойного использования, IP-адреса должны распределяться централизованно. Информация о конфигурации без протокола DHCP распределена по клиентам; в этом случае трудно получить представление о конфигурациях всех клиентов.

Понятия DHCP

Область DHCP. Область (scope) DHCP - административная группа, идентифицирующая полные последовательные диапазоны возможных IP-адресов для всех клиентов DHCP в физической подсети. Области определяют логическую подсеть, для которой должны предоставляться услуги DHCP, и позволяют серверу задавать параметры конфигурации, выдаваемые всем клиентам DHCP в подсети. Область должна быть определена прежде, чем клиенты DHCP смогут использовать сервер DHCP для динамической конфигурации TCP/IP.

Пул адресов. Если определена область DHCP и заданы диапазоны исключения, то оставшаяся часть адресов называется пулом доступных адресов (address pool) (в пределах области). Эти адреса могут быть динамически назначены клиентам DHCP в сети.

Диапазоны исключения. Диапазон исключения (exclusion range) - ограниченная последовательность IP-адресов в пределах области, которые должны быть исключены из предоставления службой DHCP.

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

Суперобласти. Это понятие, используемое в Диспетчере DHCP, которое задает множество областей, сгруппированных в отдельный административный объект - суперобласть (superscope). Суперобласти полезны для решения различных задач службы DHCP.

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

Опции DHCP. Опции DHCP - дополнительные параметры настройки клиентов, которые сервер DHCP может назначать при обслуживании арендных договоров клиентов DHCP. Например, IP-адреса маршрутизатора или шлюза по умолчанию, серверов WINS или серверов DNS обычно предоставляются для каждой области или глобально для всех областей, управляемых сервером DHCP. Кроме стандартных опций, сервер DHCP Microsoft позволяет определять и добавлять пользовательские опции.

Как работает DHCP

Протокол упрощает работу сетевого администратора, который должен вручную конфигурировать только один сервер DHCP. Когда новый компьютер подключается к сети, обслуживаемой сервером DHCP, он запрашивает уникальный IP-адрес, а сервер DHCP назначает его из пула доступных адресов. Этот процесс (рис. 17.1) состоит из четырех шагов: клиент DHCP запрашивает IP-адрес (DHCP Discover, обнаружение), DHCP-сервер предлагает адрес (DHCP Offer, предложение), клиент принимает предложение и запрашивает адрес (DHCP Request, запрос) и адрес официально назначается сервером (DHCP Acknowledgement, подтверждение). Чтобы адрес не "простаивал", сервер DHCP предоставляет его на определенный администратором срок, это называется арендным договором (lease). По истечении половины срока арендного договора клиент DHCP запрашивает его возобновление, и сервер DHCP продлевает арендный договор. Это означает, что когда машина прекращает использовать назначенный IP-адрес (например, в результате перемещения в другой сетевой сегмент), арендный договор истекает, и адрес возвращается в пул для повторного использования.

 

Hosted by uCoz