Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО ответы.doc
Скачиваний:
7
Добавлен:
20.07.2019
Размер:
417.79 Кб
Скачать
  1. Какими характеристиками могут обладать лексические элементы исходной программы? Какие характеристики являются обязательными?

Типовые характеристики присущие тем или иным элементам исходной программы:

– для переменных - имя переменной; тип данных переменной; область памяти, связанная с переменной;

– для констант - название константы (если оно имеется); значение константы; тип данных константы (если требуется);

– для функций - имя функции; количество и типы формальных аргументов функции; тип возвращаемого результата; адрес кода функции.

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

  1. Процессы и потоки в спо.

Каждый процесс имеет свое собственное виртуальное адресное пространство ( 4Gb до ХР). Процесс состоит из кода, данных и других системных ресурсов, таких как открытые файлы, каналы (pipes), синхронизирующие объекты.

Поток (thread) - базовый объект, которому ОС распределяет время центрального процессора.

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

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

Если ОС выполняет большой объем работ по управлению ресурсами, то создание нового процесса и выделение ему ресурсов не может обойтись без значительных "накладных расходов". Но для обеспечения распараллеливания работ по решению нескольких задач или внутри одной задачи выгодно иметь возможность «дешевого» создания процессов. Преодоление этого противоречия было найдено в концепции "потоков" (thread), реализованной в большинстве современных ОС.

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

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

Распределение времени между потоками. Процессорное время выделяется потокам в соответствии с их уровнем приоритета. Потоку с более низким приоритетом не выделяется время, если на него претендует поток с более высоким уровнем приоритета. Более того, процесс с более низким приоритетом прерывается до истечения кванта времени, если на процессор претендует поток с более высоким уровнем приоритета. Необходимо помнить, что в среде ОС основная “работа” потока состоит в ожидании события и реагировании на него. Это дает шанс на исполнение потокам с низким уровнем приоритета.

Уровни приоритетов варьируются в диапазоне от 0 (низший) до 31 (высший) (для ОС Windows).

Уровень приоритета каждого потока состоит из трех составляющих

  • класс приоритета процесса (простаивающий, нормальный, высокий, реального времени);

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

  • динамически установленный уровень приоритета.

При запуске на исполнение процесса ему назначается один из четырех классов приоритета. Уровень Idle (простаивающий) назначается процессу, который ничего не должен делать в случае активности других процессов (например, хранитель экрана). Процессам, запускаемым пользователем, присваивается нормальный уровень. Пользователь может запустить несколько процессов. Тому процессу, с которым пользователь непосредственно работает (а это может быть только один процесс), уровень приоритета поднимается на две единицы (например: 7+2 = 9). Это делает общение с прикладной программой более “комфортабельным”. Высокий класс приоритета назначается некоторым системным процессам, которые простаивают до возникновения определенных событий и, поэтому, не мешают остальным процессам. Только в особых случаях процесс может относиться к классу Real time.