Общая структура машинных команд.



Операнды, которые используются в операторах ассемблера, могут быть регистром (г), адресом памяти (mem), непосредственным значением, задаваемым прямо в опе­раторе (imm), сегментным регистром (sr). В связи с этим существуют различные форматы одних и тех же команд:

· первый и второй операнды - регистры. Результат помещается по адресу пер­вого операнда. Могут использоваться все регистры общего назначения.

· первый операнд - регистр, второй - адрес памяти. Результат помещается в регистр, указанный в операторе, например:

mov ах, DATA ; в регистр АХ помещается содержимое поля DATA

· первый операнд - адрес памяти, второй - регистр. Результат помещается по тому адресу, который используется в качество первого операнда.

· первый операнд - регистр, второй - непосредственные данные. Результат помещается в регистр.

· первый операнд - адрес памяти, второй - непосредственные данные. Резуль­тат помещается по указанному адресу.

· первый операнд - сегментный регистр, второй - регистр общего назначения. Результат помещается в сегментный регистр, причем задание регистра CS в таком формате команды не применяется.

· первый операнд - регистр общего назначения, второй - сегментный регистр. Результат помещается в регистр общего назначения.

Команды, работающие с одним операндом, могут работать с регистрами общего назначения, адресами памяти или с сегментными регистрами.

Способы адресации операндов. В программах на Assembler применяются следующие типы адресации операндов:

· регистровая;

· прямая;

· непосредственная;

· косвенная;

· базовая;

· индексная;

· базово-индексная.

Регистровая адресация подразумевает использование в качестве операнда регистра процессора, например: push DS mov BP,SP

При прямой адресации один операнд представляет собой адрес памяти, второй - регистр: mov DATA, АХ

Непосредственная адресация применяется, когда операнд длиной в байт или сло­во находится в ассемблерной команде: mov AX,4Ch

При использовании косвенной адресации исполнительный адрес формируется ис­ходя из сегментного адреса в одном из сегментных регистров и смещения в регистрах ВХ, ВР,SI или DI, например: mov АL, [ВХ], mov АН, [SI].

В случае применения базовой адресации исполнительный адрес являетсй суммой значения смещения и содержимого регистра ВР или ВХ, например:

mov АХ, [ВР + 6]

mov [ВХ + Delta], АХ 

При индексной адресации исполнительный адрес определяется как сумма значе­ний указанного смещения и содержимого регистра SI или DI так же, как и при базо­вой адресации, например:

mov DX, [SI+5]

mov ES: [DI]+6, AL

Базово-индексная адресация подразумевает использование для вычисления испол­нительного адреса суммы содержимого базового и индексного регистров, а также смещения, находящегося в операторе, например:

mov ВХ, [BP][SI]

mov ES:[BX+DI],AX

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

 

 

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

 

В процессоре, как правило, программно доступными являются большинство регистров – ячеек памяти, расположенных непосредственно на процессоре. В 8086 недоступным для непосредственного чтения и изменения является только счетчик команд IP. Остальные регистры 8088, а также 8 регистров сопроцессора доступны программисту. Изменение последовательности выполняемых операций осуществляется при выполнениии команд условного и безусловного перехода. Команды условного перехода передают управление по адресу, заданному операндом, в зависимости от состояния отдельных битов флагового регистра, кроме команды JCXZ, которая проверяет состояние регистра СХ. Модификацию флагов можно произвести как непосредственно, так и выполнив команду сравнения CMP, которая установит флаги по результату операции. Примеры команд условного перехода: JA, JE, JNE, JB, JZ, JL. Команда безусловного перехода JMP передает управление по указанному адресу.

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

Прерывания бывают 2 типов –

а)аппаратные (генерируются схемами ПК в ответ на какое-либо действие, например, при нажатии клавиши на клавиатуре генерируется прерывание 9). Иногда аппаратные прерывания генерируются устройством в случае некорректной работы программы, например деление на 0.

б)программные – генерируются программой для вызова различных подпрограмм из ОЗУ и ПЗУ.

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

 

19. Классификация объектных данных в программах на языках высокого уровня. Агрегатные данные: векторы, массивы, структуры, множества и их отображение на реальную ОП.

 

Большинство современных ЯВУ определяет понятие типа данных. Оно применяется ко всем объектам данных и определяет набор физический набор свойств и операций присущих данным этого типа. Различают языки со строгой типизацией (PASCAL) и со свободной (ASSEMBLER). Тип данных определяется как рекурсивное использование базовых предопределенных типов + агрегатирование. Агрегатирование – включает в себя описание массивов, структур, множеств, объединений.

Базовые типы

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

Агрегатирование

Массив – каждому элементу ставится в соответствие его индекс. Необходимо иметь возможность переводить индекс в адрес памяти. Для одномерных массивов проекция элементов на ОП выглядит как @A[i]=@A[0]+i*l, где l-длина элемента массива. Для многомерного есть 2 случая – размещение по строкам и по столбцам. Для двумерного массива прекция элемента @A[i,j]=@A[0]+i*lстр+j*lэл-та, где lстр – длина строки, а lэл-та – размер элемента. Если ЯВУ позволяет массивы переменной длины, то к массиву должен быть приписан скрытый элемент данных, наз. дополнительным вектором. Он должен содержать информацию о последних измененных размерностях для правильной индексации.

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

Объединение – похоже на структуру, но все члены объединения расположены на одном участке памяти.Описывает одни и те же данные “с разных точек зрения”. Размер объединения совпадает с размером самого большого члена объединения.

Множество – представление набора элементов. Могут быть ограниченные и динамические. Представлены в виде битовых полей – 1 означает наличие элемента, 0 – отсутсвие. Длина равна числу элементов разделить на 8 и дополнена до кратности 8 в большую сторону. Доступ – через логические операции.

 

20. Указатели и динамические структуры данных: стеки, списки, очереди, деревья.

Указатель – тип данных, хранящих адрес в памяти других данных. В зависимости от типизации указатель может быть нетипизированным (содержать просто адрес в памяти) и типизированным (указывать только на элемент определенного типа).

Стек – хранилише данных однородного типа с дисциплиной “последним пришел-первым вышел” (LIFO).

  ß SP
 

 

 

 

 

 

 

 

 

Над стеком определены операции PUSH, POP (затолкнуть, извлечь).

При операции PUSH указатель стека SP увеличится на 1, при извлечении уменьшится на 1.

Природа стека делает необходимым соответствие операций PUSH и POP. Если его нет, то возможно 2 ситуации:

а) переполнение – SP вышел за пределы верхнего значения

б) антипереполнение –“- нижнего.

Очередь – структура данных с дисциплиной FIFO – “первым вошел, первым вышел”.

     
 

ßtp

 

 

 

 

 

ßhp

 

Здесь HP – указатель на последнее значение, tp – номер последнего выбранного элемента. Если HP=TP – очередь пуста.

ENQ x - добавляем в очередь

HP=HP+1

A[HP]=x

DEQ x - извлекаем из очереди

TP=TP+1

x = A[TP]

Особые ситуации - так же как и со стеком.

 

Для реализации динамических структур данных используют т.н. кучу (heap). Это объем памяти, в котором можно выделить участок для произвольного элемента данных. Для кучи есть 2 операции: выделения памяти ALLOCATE и освобождения FREE. Эти функции не делают никаких действий с собственно памятью. При выделении программист получает адрес, а при освобождении доступный объем кучи становится больше. Одного адреса для этих операций недостаточно, требуется еще и размер элемента данных.

 

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

Для добавления элемента достаточно выделить под него память и присвоить адрес памяти нового элемента соответствующему предыдущему элементу. Для удаления элемента память из-под него освобождается, а указателям на него присваивается некоторое зарезервированное значение NULL – “указатель на ничто”.

 

data; struct s *next;   data; struct s *next;   data; struct s *next;   NULL

 

Односвязный список

 

data; struct s *prev; struct s *next;      data; struct s *prev; struct s *next;     data; struct s *prev; struct s *next;     NULL

 

Двусвязный список

 

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

Структура двоичного дерева. Каждый элемент содержит поле данных и два указателя - на левого и правого потомков.

 

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

Статическое выделение памяти – выделение памяти под данные внутри сегмента данных программы. Такие данные существуют на протяжении всей жизни программы до ее завершения.

Автоматическое распределение – выделение памяти под данные в стеке. Такие данные существуют на протяжении работы текущей подпрограммы (функции или процедуры), затем уничтожаются.

Динамическое выделение – выделение памяти под данные самой программой, когда это необходимо. Время жизни таких данных зависит от программы.

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

Куча. Для реализации динамических структур данных используют т.н. кучу (heap). Это объем памяти, в котором можно выделить участок для произвольного элемента данных. Для кучи есть 2 операции: выделения памяти ALLOCATE и освобождения FREE. Эти функции не делают никаких действий с собственно памятью. При выделении программист получает адрес, а при освобождении доступный объем кучи становится больше. Одного адреса для этих операций недостаточно, требуется еще и размер элемента данных. Если указатель типизированный, размер будет получен автматически. В случае нетипизированного указателя размер должен быть передан в функцию.

Для реализации кучи ЯВУ снабжаются диспетчерами памяти, которые выделяют и освобождают память, имеют сведения о ее фрагментации, знают наибольший кусок свободной памяти и ее общее количество и т.п. При ненадобности память должна своевременно освобождаться. При использовании динамической памяти возможноа ситуация образования «мусора» – кусков памяти, на которые утеряны ссылки, но которые не были своевремменно освобождены, поэтому менеджер считает их занятыми. Для оптимизации известна процедура “уборка мусора” – перестройка динамических структур с освобождением памяти из-под тех данных, на которые отсутствуют ссылки.

 

 

22. Понятие программного модуля: подпрограммы, функции, сопрограммы.

 

Модульное программирование подразумевает разбиение программы на подпрограммы по специфике обрабатываемых данных. Для этой цели в ЯВУ используются функции и процедуры. При вызове подпрограммы в стеке сохраняется текущее значение счетчика команд (ближняя модель вызова) и значение сегмента кода (дальняя модель вызова). При использовании дальней модели вызова подпрограмма необязательно должна находиться в том же сегменте, что и вызывающая программа. По окончании выполнения кода подпрограммы эти данные восстанавливаются, управление передается на следующий оператор после оператора вызова процедуры.

До вызова подпрограммы в стек помещаются параметры – аргументы подпрограммы. Если передан не сам аргумент, а его адрес, то подпрограмма может изменить аргумент, в противном случае нет, т.к. по завершению работы подпрограммы стек очищается от аргументов. Отличие функций от процедур в том, что функции могут возвращать значения в вызывающую программу и их можно присваивать, например, какой-либо переменной. В действительности функция при возврате значений просто модифицирует регистры процессора, а ЯВУ по соглашению использует данные из этих регистров.

 

 

23. Параметры подпрограмм и функций. Способы передачи параметров – по значению, по ссылке, по имени.

 

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

Передача самого аргумента – передача параметра по значению. Передача адреса аргумента – передача по ссылке.

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

После выполнения пролога все параметры подпрограммы имеют отрицательное смещение от регистра BP. После выполнения пролога, как правило, в стеке выделяется место под локальные переменные.

По окончании работы процедуры стек очищается от локальных переменнных и параметров.

 

24. Общая структура программного модуля для микропроцессора 80х86 – регистр BP , локальные переменные, глобальные переменные, параметры.

 

Обобщение 26, 28 (см. их для того, чтобы написать более подробно)

Регистр BP – относительно него с отрицательным смещением происходит адресация параметров после выполнения кода пролога в подпрограмме.

push bp

mov bp, sp

mov ax, word ptr [bp-2]; загрузка в ах аргумента

Локальные переменные – размещаются в стеке после вызова процедуры и выполнения кода пролога и удаляются перед завершением.

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

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

 

25. Сегментация памяти. Типы программных сегментов, их использование в программах.

 

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

а) унитарная структура объектного модуля.

б) механизм внешних ссылок позволяет устанавливать связи между отдельными частями.

в) Способ объединения отдельных частей в общий исполняемый модуль. В современных системах основой 3-го способа и является сегментация.

Сегменты – бывают 4 видов.

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

Сегменты данных бывают 3 типов:

а) сегмент инициализированных данных – содержит данные статического типа с уже присвоенными значениями

б) сегмент стека – как правило, ничем не инициализирован

в) сегмент неинициализированных данных. В него попадают данные, не имеющие начального значения (BSS).

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

   При использовании указателей в программах с не более чем одним сегментом данных и не более чем одним – кода достаточно 16-битового короткого указателя, т.к. значения сегментов фиксиованы и хранятся в регистрах DS и CS соответственно. Для большего количества сегментов требуются длинные указатели.

   Существует несколько моделей памяти – способов распределения программ по сегментам. Поддержка переключения моделей памяти есть в компиляторах C и ASSEMBLER, в остальных, например Trubo Pascal, чаще всего используется модель памяти LARGE.

TINY (крошечная) – и данные и код в одном сегменте (64К). Короткие указатели. Полученный исполняемый модуль может быть пригоден для конверсии в формат типа COM.

SMALL (малая) – 2 сегмента – код и данные (128K).Короткие указатели.

COMPACT (компактная) – 1 сегмент кода и много сегментов данных. Первая модель, где нужны дальние указатели.

MEDIUM (средняя) – наоборот, много сегментов кода, 1 данных.

LARGE (большая) – много сегментов кода и данных. Наиболее распространена.

HUGE (огромная) – то же, что и LARGE + все указатели программно приводятся к виду длинных. Используется для построения очень больших программ.

   В 32-битовом режиме модели памяти не нужны, т.к. размер сегмента достигает 4ГБ.

 

26. Понятие среды ОС. Взаимодействие прикладной программы с ОС. Системные соглашения о связях.

                                     

Среда ОС – совокупность условий, в которых работают прикладные програмы в данной ОС. Современная ОС обеспечивает, как минимум, 4 условия:

а) запуск и остановка прикладных программ.

б) распределение ресурсов.

в) обеспечение таких системных услуг, которых нет в аппаратуре.

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

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

Например: стандарт POSIX на API ОС UNIX включает функции:

1) Набор файловых операций

2) Операции со строками

3) Ф-ии многозадачности, управления процессами

4) Управление терминалом.

Помимо POSIX есть API Win32 и т.п. АPI ОС может включать самые разнообразные услуги, вплоть до поддержки функций телефонного аппарата на базе модема (TAPI Win32)

 

27. Принципы междумодульного взаимодействия: внешние ссылки и общие имена ( public names )

       

Внешние ссылки из сегмента позволяют получать доступ к данным, которые объявлены в другом модуле. Для объявления внешних ссылок в компиляторах с ассемблера используется директива EXTRN. Пример использования:

   EXTRN maybe:far

   Идентификаторы в программе можно сделать доступными из других модулей. Для этого применяется директива PUBLIC. Пример использования:

   maybe PROC far

   PUBLIC maybe

   Такие действия необходимы для того, чтобы после раздельной компиляции модулей компоновщик, используя имена и смещения, записанные в объектных модулях, разрешил все внешние ссылки директив EXTRN, использовав соответствующие директивы PUBLIC. Если для какой-то ссылки EXTRN не будет обнаружен соответствующий идентификатор PUBLIC, то компоновщик выдаст ошибку unresolved external <имя_идентификатора>, и сборка прекратится.

   Использование многомодульной структуры необходимо:

   а) для разбиения большого текста на модули по функциональному назначению;

   б) для создания библиотек процедур;

   в) для написания подпрограмм в языки высокого уровня.

 

28. Технология разработки программ – трансляция и редактирование связей. Понятие об исходном, объектном, выполняемом модулях.

 

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

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

   Исполняемый модуль –модуль, содержащий готовую к выполнению программу – м.б. 2 видов:

   а) точный образ памяти программы с привязкой к абсолютным адресам (в MS-DOS – формат файла *.COM)

   б) перемещаемый исполняемый формат, см. 17.

   Трансляция – получение объектного кода из исходного.

   Редактирование связей – разрешение внешних ссылок и создание исполняемого модуля из объектных.

       

       

 

29. Атрибуты сегментов

Атрибут комбинации сегмента предназначен дляуказания компоновщику, каким образом объединять сегменты, находящиеся в разных модулях и имеющие одинаковые имена. М.б. PRIVATE (сегмент не будет объединяться с одноименными из др. модулей), PUBLIC (будет) и некоторые другие.

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

Атрибут выравнивания сегмента – сообщает компонаовщику, чтобы он позаботился о том, чтобы сегмент начинался с указанной границы. Возможное выравнивание: BYTE – выравнивание не делается, сегмент начинается со следующего байта, WORD (DWORD) – выравнивание погарнице слова (двойного слова), PARA – выравнивание по границе 16-байтового параграфа, и т.п.

Атрибут размера сегмента – показывает размер, 16 или 32-битные сегменты.

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

 

30. Разрешение внешних ссылок, функция автовызова, библиотеки объектных модулей и их использование.

Библиотеки объектных модулей – пакет объектных модулей, собранных в один файл и подключаемый к программе на этапе разрешения внешних ссылок (все идентификаторы, которые должны быть доступны из библиотек, объявляются в модулях как PUBLIC). Компоновщик может просматривать библиотеку и самостоятельно находить нужные модули, избавляя от этого программиста. Библиотеки делаются с помощью программы-библиотекаря. Библиотекарь может добавлять и извлекать модули, а также получать список доступных идентификаторов.

   Любой компилятор ЯВУ имеет в комплекте несколько стандартных библиотек, например, библиотеки ввода-вывода, работы с плавающей точкой, графическую и т.п.

 

31. Типы внешних ссылок и общих имен. Статическое и динамическое разрешение ссылок.

 

Статическое и динамическое разрешение внешних ссылок.

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

а) Динамически вызываемый загрузчик, т.е. программа вызывает загрузчик и подсоединяет недостающие части. Такой подход невыгоден (сложен и требует много времени)

б) DLL – принцип разделяемых библиотек. DLL – это пакет функций, отредактированный для исполнения в позиционно-независимом стиле. Имеет таблицу всех содержащихся функций. Для работы с ним программа выполняет 1) функцию загрузки DLL, 2)переход по смещению в таблице функций.

При работе с DLL несколько программ могут использовать одну ее копию в памяти.

 

32. Динамическое распределение памяти, оверлейные программы. Общая структура объектного модуля.

       

Стандартный исполняемый псевдоперемещаемый модуль (например, типа EXE для DOS) содержит сегменты в том виде, в котором они будут размещены в памяти. Такое распределение памяти называется статическим. В ситуации нехватки памяти, отдельный код или данные, которые могут быть нужны не все вместе, а по очереди, разумнее было бы подгружать в память в процессе выполнения. Выделение памяти под выполняемый код в процессе работы программы и удаление их после использования называется динамическим распределением памяти. Программы, содержащие динамически подгружаемые модули, называются оверлейными, а сами такие модули – оверлеями. Загрузка данных из модуля в общем случае не представляет проблем, в случае загрузки кода перед выполнением он должен быть особым образом подготовлен (например, с учетом местоположения вызывающей программы в памяти для подпрограмм должны быть образованы правильные ссылки). Такую подготовку выполняет специальная программа – менеджер оверлеев. Он может поставляться, а) как библиотека компилятора [в Borland Pascal 7.0]. В этом случае оверлейный модуль, как правило, имеет какой-то свой специфический формат, работа с ним ведется с помощью стандартных подпрограмм. Код оверлейных подпрограмм и данных размещается в памяти [в BP буфер оверлеев имеет плавающую границу с кучей] и по окончании работы с ним может быть удален. б) Может быть внедрен в структуру оверлейного модуля. В этом случае модуль имеет формат исполняемого файла, и для инициализации он должен быть запущен стандартным для ОС способом из-под вызывающей программы.

   Оверлеи имеют широкое распространение в системе MS - DOS , при подгрузке используется не только основная память, но и DOS-спецификации расширенной: XMS, EMS. В развитых многозадачных системах используется, в основном, очень похожая технология DLL . Ее отличие в том, что она функционирует в защищенном режиме и позволяет использовать одну свою копию в памяти разным программам. DLL можно рассматривать как следущее поколение оверлейной технологии.

 

33. Основные функции ОС. Принципы мультипрограммирования. Системные ресурсы.

 

Основные функции ОС:

1) Управление процессором путем передачи управления программам.

2) Обработка прерываний, синхронизация доступа к ресурсам.

3) Управление памятью.

4) Управление устройствами ввода-вывода.

5) Управление инициализацией программ, межпрограммные связи.

6) Управление данными на долговременных носителях путем поддержки файловой системы.

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

 

34. Защита программ и данных в мультипрограммных средах. Режимы управления. Защита и распределение памяти.

  

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

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

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

 

35. Общая схема функционирования ОС – супервизор, диспетчер, планировщик. Виртуализация.

       

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

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

 

 

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

       

Виртуальная память отличается от обычной ОП тем, что какие-то ее редко используемые фрагменты могут находиться на диске и подгружаться в реальную ОП по мере необходимости. Такая организация памяти позволяетс снять ограничение, накладываемое объемом физической памяти, установленной на ЭВМ. Для реализации ВП используют, например, динамическю переадресацию. Сегментом в терминах ВП называется область памяти из 2L страниц. Вначале по номеру в таблице сегментов отыскивается сегмент. Таблица сегментов содержит начальный адрес таблицы страниц. Вторая часть адреса используется для обращения в эту таблицу, и по ней находится физический адрес данной страницы. Результаты поизка по таблицам запоминаются в быстродействующем ассоциативном ЗУ, называемом TLB. Наиболее часто употребляемые адреса откладываются в TLB и поэтому 98-99% обращений к памяти идут без просмотра таблиц.

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

   Свопинг – алгоритм реализации виртуальной памяти. Его можно разбить на три части: управление пространством на устройстве выгрузки, выгрузка процессов из основной памяти и подкачка процессов в основную память. В качестве устройства выгрузки используют раздел на устройстве типа жесткого (swap-partition) или дисковый файл (swap-file) на таком устройстве.

       

37. Системная архитектура 80386: сегментирование, страничная организация, средства авторизации и защиты.

       

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

   В 80386 есть режим виртуального 8086 – режим, эмулирующий 8086 в защищенном режиме, при котором у каждого пользователя многозадачной системы создается иллюзия монопольного владения ресурсами машины.

   80386 поддерживает 4-уровненвую систему защиты, управление защитой осуществляется с помощью уровней привелигированности. Уровень привелигированности управляется привелигированными командами, командами ввода-вывода и доступом к сегментным дескрипторам.

 

 


Дата добавления: 2019-07-15; просмотров: 223; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!