Смекни!
smekni.com

Разработка виртуальных лабораторных работ средствами эмулятора Emu8086 (стр. 17 из 21)

5. Контрольные вопросы

Преимущества использования команды SHL вместо TEST (пример №1.1)?

Чем отличаются команды

SHL dx,1

и

SHL dx, cl

Как переслать содержимое X в стек и получить обратно?

Опишите методику вывода значения байта в десятеричной системе счисления?

Опишите методику вывода значения байта в шестнадцатеричной системе счисления?

Опишите методику вывода двоичного кода числа, записанного в регистр X

Стек. Принцип работы. Команды работы со стеком.

Укажите отличия в работе тандема команд.

push DS

pop ES

от

push DS

pop ES

Приложение №1

Основные Скан-Коды клавиш клавиатуры.

Клавиша Код Клавиша Код Клавиша Код Клавиша Код
Esc 01h Enter 1Ch K* 37h Ins 52h
1! 02h Ctrl 1Dh Alt 38h Del 53h
2 @ 03h A 1Eh SP 39h SysRq 54h
3 # 04h S 1Fh Caps 3Ah Macro 56h
4 $ 05h D 20h F1 3Bh F11 57h
5% 06h F 21h F2 3Ch F12 58h
6 ^ 07h G 22h F3 3Dh PA1 5Ah
7 & 08h H 23h F4 3Eh F13/LWin 5Bh
8 * 09h J 24h F5 3Fh F14/RWin 5Ch
9 ( 0Ah K 25h F6 40h F15/Menu 5Dh
0) 0Bh L 26h F7 41h F16 63h
- _ 0Ch ;: 27h F8 42h F17 64h
= + 0Dh ' " 28h F9 43h F18 65h
BS 0Eh ` ~ 29h F10 44h F19 66h
Tab 0Fh LShift 2Ah Num 45h F20 67h
Q 10h \ | 2Bh Scroll 46h F21 68h
W 11h Z 2Ch Home 47h F22 69h
E 12h X 2Dh - 48h F23 6Ah
R 13h C 3Eh PgUp 49h F24 6Bh
T 14h V 2Fh K- 4Ah EraseEOF 6Dh
Y 15h B 30h 4Bh Copy/Play 6Fh
U 16h N 31h K5 4Ch CrSel 72h
I 17h M 32h ® 4Dh Delta 73h
O 18h , < 33h K+ 4Eh ExSel 74h
P 19h . > 34h End 4Fh Clear 76h
[{ 1Ah /? 35h I 50h
] } 1Bh RShift 36h PgDn 51h

3. Создание лабораторного практикума "Операционная система"

Операционная система состоит из следующих компонентов:

"Собственно ядро"

Драйвера устройств

Системные вызовы

В зависимости от организации внутренних взаимодействий, ядра подразделяются на "микроядра" (microkernel) и монолитные ядра.

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

Монолитное ядро имеет более жесткую внутреннюю структуру. Все установленные драйвера жестко связываются между собой, обычно прямыми вызовами. По таким принципам строятся обыкновенные операционные системы типа Linux, FreeBSD.

Естественно, не все так четко, идеального монолитного или "микроядра" нет, наверное, ни в одной системе, просто системы приближаются к тому или иному типу ядра.

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

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

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

Процессор предоставляет 4 "кольца защиты" (уровня привилегий), можно было бы использовать все, но это связано со сложностями взаимодействия программ разного уровня защиты. Поэтому в большинстве существующих систем используют два уровня.0 - привилегированный уровень (ядро) и 3 - непривилегированный (пользовательские программы).

Всем этим обеспечивается надежное функционирование системы и независимость программ друг от друга.

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

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

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

Системные вызовы - это интерфейс между процессами и ядром (читайте-железом). Никаких других методов взаимодействия процессов с устройствами компьютера быть не должно. Системных вызовов достаточно много, на Linux их 190, на FreeBSD их порядка 350, причем большей частью они совпадают, соответствуя стандарту POSIX (стандарт, описывающий системные вызовы в UNIX). Разница заключается в передаче параметров, что легко будет предусмотреть. Естественно, мы не сможем сделать ядро, работающее одновременно на Linux и на FreeBSD, но по отдельности совместимость вполне реализуема.

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

Ядро системы при распределении памяти оперирует 4-х килобайтными страницами.

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

Программа или процесс состоит из следующих частей:

Сегмент кода. Может только выполняться, сама программа его не прочитать, не переписать не может! Использовать для этого сегмента swap не нужно, при необходимости код считывается прямо из файла;

Сегмент данных состоит из трех частей:

Константные данные, их тоже можно загружать из файла, так как они не меняются при работе программы;

Инициализированные данные. Участвует в процессе свопинга;

Не инициализированные данные. Так же участвует в свопинге;

Сегмент стека. Так же участвует в свопинге.

Но, обычно, системы делят сегмент данных на две части: инициализированные данные и не инициализированные данные.

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

Очень интересный момент:

При выполнении программы операционная система делает следующие действия:

Готовит для программы локальную таблицу дескрипторов;

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

Все.

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

Еще один интересный момент:

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

Лабораторная работа № 1.

Загрузка операционной системы

Цель работы: Создать загрузочный диск для операционной системы.

Теоретические понятия.

Какие функции выполняет операционная система?

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

Обеспечивать загрузку пользовательских программ в оперативную память и их исполнение;

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

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

Предоставлять более или менее стандартизированный доступ к различным периферийным устройствам.

Предоставлять некоторый пользовательский интерфейс.

Что такое загрузочный монитор и каково его предназначение?