Лекция: Потоки в операционных системах. (ОС)

Главный ресурс в процессорное время выделяется потоком.

Поток – процесс диспетчеризации.

Концепцию процесса можно охарактеризовать двумя параметрами:

1. Владение ресурсами.

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

2. Планирование и выполнение.

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

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

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

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

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

4. Директивы транслятора и команды Ассемблера: назначение, типовая запись, примеры использования. (ОргЭВМ)

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

Команда может включать до 4-х полей следующего вида:

[метка:] мнемокод [операнд] [; комментарий]

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

GETCONT: MOV CX, DX; инициализация счетчика, поместить содержимое регистра DX в регистр СХ

Пример команды с полем мнемокода:

PUSHF

Эта команда сохраняет в стеке содержимое регистра флагов.

Следует отметить, что Ассемблер не различает прописные и строчные буквы.

В качестве операнда в команде может фигурировать константа, которая может быть введена в следующих формах:

— двоичной, как последовательность цифр 0 и 1, заканчивающихся буквой В, например, 10111010В;

— десятичной (в привычной десятичной системе счисления с необязательной буквой D на конце), например, 129D или просто 129;

— шестнадцатеричной, как последовательность цифр от 0 до 9 и букв от А до F, заканчивающаяся буквой Н. Первым символом может быть только цифра от 0 до 9, например, ОЕ23Н (в данном случае первая цифра информирует ассемблер о том, что Е23 число, а не идентификатор переменной);

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

Мнемокоды могут иметь от 2 до 6 букв, при трансляции мнемокод преобразуется в числовое значение по таблице перекодировки (внутри транслятора). Мнемокоды имеют жесткий формат, предусматривающий 1,2 или отсутствие операндов. Если операндов 2, они отделяются друг от друга запятой.

Операнды команды могут задаваться по-разному:

1) неявно на микропроцессорном уровне. Такие команды работают либо с регистрами, либо с флагами и в конкретной команде объект определяется кодом команды, например:

PUSHF — команда пересылки флагов в стек. Источник (откуда берутся

Данные, в данном случае регистр флагов) и приемник (куда пересылаются данные, в данном случае стек) определяются кодом команды;

или CLD — обнуление флага направления DF;

2) явно в самой команде (непосредственный операнд), например:

MOV АХ,0;

3) одним из регистров общего назначения (РОН) или сегментным регистром;

4) идентификатором переменной (меткой переменной, описанной в сегменте данных). В этом случае операнд располагается в ОЗУ. При косвенной адресации адрес-смещение переменной в ОЗУ помещается в РОН или индексный регистр и в команде используется ссылка на этот регистр;

5) номером порта ввода-вывода. В этом случае номер задается шестнадцатеричной константой;

6) регистром стека, когда используются команды работы со стеком и в этом случае операнд либо заносится в вершину стека, либо считывается из вершины стека.

Меткой является последовательность букв и цифр, после которой ставится двоеточие. Нельзя использовать в качестве меток имена регистров и мнемокоды, кроме того метка должна начинаться с буквы, но может содержать цифры и спец символы: ?, @, /, _,$ и точку, однако точка может быть только первым символом метки.

Важной особенностью машинных команд является то, что они не могут манипулировать одновременно 2-мя операндами, находящимися в ОЗУ. Это означает, что в команде только 1 операнд может указывать на ячейку ОЗУ, 2-ой д.б. либо регистром, либо непосредственно указывать значение. По этой причине возможны следующие сочетания операндов в команде:

регистр — регистр;

регистр — память;

память — регистр;

регистр — непосредственный операнд;

память — непосредственный операнд.

Для команд МП Intel характерно, что если в них присутствуют 2 операнда, то 1-ый является приемником, а 2-ой -источником, иначе говоря результат операции сохраняется по 1-ому адресу, вот почему 1-ый операнд никогда не может быть непосредственным операндом или иначе говоря, константой.

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

Далее приводятся и поясняются наиболее употребительные из директив.

Сегменты, из которых состоит программа, описываются посредством директив. Подробная директива определения начала сегмента:

Имя сегмента SEGMENT [тип выравнивания (подгонки)] [тип связи] [‘класс’].

Тип выравнивания указывает, на границе слова (WORD ) или параграфа (PARA) должен быть установлен адрес начала сегмента. Выравнивание на границу параграфа означает, что адрес начала сегмента должен быть кратен 16 (на границе слова адрес кратен 2.

Тип связи (комбинирования сегментов) указывает, как нужно комбинировать одноименные сегменты различных модулей. По умолчанию предполагается PRIVATE, что означает, что сегмент не будет объединяться с сегментами с таким же именем вне данного модуля. Тип связи PUBLIC заставляет компоновщик объединить все сегменты с одинаковым именем в один сегмент. Объединенный сегмент будет непрерывным, все адреса данных или команд будут определяться относительно начала этого сегмента. В случае типа связи COMMON все сегменты с одним именем располагаются по одному адресу (перекрываются).

'Класс' — заключенная в кавычки строка символов определяет назначение сегмента и помогает компоновщику определить порядок следования сегментов внутри программы. Формально этот порядок может быть любым, но лучше, если все сегменты кода (содержат команды обработки) объединяются в общую группу. Заключенное в кавычки слово класс может принимать следующие значения: code, stack, data, что означает соответственно сегмент кода (команд программы), сегмент стека и сегмент данных.

Окончание сегмента определяется директивой:

Имя сегмента ENDS.

Между директивами начала и окончания сегмента записываются:

— для сегмента стека – директивы резервирования оперативной памяти. В этой области во время выполнения программы будут записываться результаты обработки, параметры вызываемых процедур, адреса возврата из процедур;

— в сегменте данных определяются структуры данных, переменные и константы;

— в сегменте кода – команды программы, которые выполняют заданное преобразование данных.

еще рефераты
Еще работы по информатике