Розділи
Розглянемо розміщення операційних систем на жорстких дисках. Для організації систем дисковий адресний простір блоків ділиться на частини, що називаються розділами (partitions) Розділи повністю подібні до цілого диску в тому, що вони складаються із суміжних блоків. Завдяки такій організації для опису розділу досить указати початок розділу і його довжину в блоках Жорсткий диск може містити чотири первинні розділи.
Під час завантаження комп'ютера BIOS завантажує перший сектор головного розділу (завантажувальний сектор) і передає йому управління. На початку цього сектора розташований завантажник (завантажувальний код), що прочитує таблицю розділів і визначає завантажувальний розділ (активний). А далі все повторюється Тобто він завантажує завантажувальний сектор цього розділу на цю ж адресу і знову передає йому управління.
Розділи є контейнерами усього свого вмісту. Цим вмістом є. як правило, файлова система Під файловою системою, з точки зору диска, мається на увазі система розмічання блоків для зберігання файлів. Після того як на розділі створена файлова система й у ній розміщені файли операційної системи, розділ може стати завантажувальним Такий розділ має у своєму першому блоці невелику програму, що здійснює завантаження операційної системи. Однак для завантаження певної системи потрібно запустити її завантажувальну програму з першого блоку
Розділи з файловими системами не повинні перетинатися. Це пов'язано з тим, що дві різні файлові системи мають кожна своє уявлення про розміщення файлів, але коли це розміщення припадає на одне й те фізичне місце на диску, між файловими системами виникає конфлікт. Цей конфлікт виникає не відразу, а лише в міру того, як файли починають розміщатися в тому місці диска, де розділи перетинаються Тому треба уважно ставитися до розмічання диска на розділи.
Само по собі перетинання розділів нічим не загрожує. Але небезпечним є саме розміщення декількох файлових систем на перехресних розділах. Розмічання диска на розділи ще не означає створення файлових систем. Однак уже сама спроба створення порожньої файлової системи (тобто форматування) на одному з перехресних розділів може призвести до виникнення помилок у файловій системі іншого розділу Усе сказане стосується однаковою мірою всіх операційних систем, а не тільки найпопулярніших.
Диск розбивається на розділи за програмою, тобто ви можете створити довільну конфігурацію розділів Інформація про розмічання диска зберігається в першому блоці жорсткого диска, який називається головним завантажувальним записом (Master Boot Record (MBR))
Головний завантажувальний запис
MBR є основним засобом завантаження з жорсткого диска, що підтримується BIOS Тільки один із розділів диска мас право бути позначеним як активний, Що означатиме, що програма завантаження повинна завантажити в пам'ять перший сектор саме цього розділу і передати туди управління. Програма завантаження переглядає таблицю розділів, вибирає з них активний, завантажує перший блок цього розділу і передає туди управління
Розглянемо, як операційні системи класу MS-DOS і Windows 9x оперують із розділами. ОС забирає у своє користування два з чотирьох розділів: Primary DOS partition, Extended DOS partition. Перший з них (primary) одержує букву С Другий — це контейнер логічних дисків. Вони усі знаходяться там у вигляді ланцюжка підрозділів, які так і іменуються: D:, Е: і т. д. Логічні диски можуть мати і сторонні файлові системи, відмінні від файлової системи FAT. яка застосовується в DOS/Windows 9x. Однак, я-к правило, сторонність файлової системи пов'язана з присутністю ще однієї операційної системи, яку, узагалі кажучи, варто було б помістити у свій власний розділ (не extended DOS), але для таких дій часто виявляється занадто маленькою таблиця розділів.
Відзначимо ще одну важливу обставину. Коли на чистий жорсткий диск установлюється DOS/Windows 9х, то при завантаженні немає ніяких альтернатив v виборі операційних систем. Тому завантажувач виглядає досить примітивно, йому не треба запитувати в користувача, яку систему той хоче завантажити. З бажанням мати відразу кілька систем виникає необхідність заводити програму, яка дозволяє вибирати систему для завантаження.
В операційних системах Windows NT/2000/XP завантажувач міститься в зaвантажувальному записі активного розділу. У завантажувачі передбачена можливість вибору як завантажувальної операційної системи, так і розділу, де вона знаходиться. За розділами в операційній системі також закріплюються певні букви, однак вони можуть бути змінені користувачем.
Int 13h — підтримка дисків
Функції дискового сервісу викликаються програмним перериванням Int 13h. Традиційно дисковий сервіс підрозділяє фізичні диски на дискети(diskette) і фіксовані диски (fixed disk). Набор функцій (таблиця. 7.8) для цих класів пристроїв декілька розрізняється як по складу, так і по реалізації. Класи розрізняються по діапазонах номерів фізичних пристроїв: для дискет відводяться номери 0-7Fh (реально лише 0-3), а для фіксованих дисків - 80h-FFh. Контроллери дискових інтерфейсів, додаткові модулі BIOS, що мають в своєму складі, перехоплюють вектор Int 13h, беручи на себе обслуговування своїх пристроїв. Коли в IBM PC/XT з'явилися жорсткі диски зі своїм контроллером, модуль BIOS цього контроллера, що ініціалізувався під час тесту POST, вставав на місце Int 13 h, а покажчик на вихідний обробник дискового сервісу (драйвер НГМД з системної BIOS) зберігався на місці Int 40h. Хоча підтримка жорстких дисків давно вже включена в системну BIOS, ради сумісності можливість використання переривання Int 40h для виклику драйвера гнучких дисків зберігається. Інтерфейс цього виклику збігається з Int13h, але номер пристрою (у регістрі DL) не повинен перевищувати 7Fh.
Окрім функцій дискового сервісу (Int 13h) з дисковими пристроями зв'язані ще і вектори, обслуговуючі апаратні переривання від контроллера НГМД, - Int 0Eh (лінія IRQ 6) і від контроллера жорстких дисків - Int 76h (лінія IRQ 14). За наявності двоканального порту АТА другий канал зазвичай задіює лінію IRQ 15 (вектор 77h). У XT контроллер жорстких дисків займав лінію IRQ 5 (вектор ODh). Додаткові контроллери дисків можуть використовувати і інші переривання. Апаратні переривання виробляються контроллерами після закінчення (нормальному і аварійному) внутрішніх операцій. На ці переривання BIOS не реагує, а при ініціалізації їх вектори прямують на програмну заглушку (інструкцію IRET).
Стандартні драйвери дискових функцій BIOS (включаючи і розширений сервіс) мають однозадачне походження. Під час виконання функції значний процесорний час може витрачатися на чекання завершення операції пристроєм. Драйвери багатозадачного режиму побудовані інакше: у них є зухвала частина, що ініціалізувала початок операції, і обробник апаратного переривання від контроллера, що повідомляє операційну систему про виконання операції і результат.
Традиційний сервіс BIOS
Традиційний дисковий сервіс працює в 16-розрядному режимі процесора, всі параметри виклику передаються через регістри процесора. Адреса сектора задається в системі CHS і розміщений вельми специфічно. Сервіс викликається програмним перериванням Int 13h, при виклику приймаються наступні угоди:
номер функції задається в регістрі АН і не повинен перевищувати 3Fh;
· логічний номер диска задається в регістрі DL (біт 7 = 0 - ознака звернення до НГМД);
· номер циліндра (0-1023) задається в регістрі СН (молодші 8 біт) і СЦ7:6] (старші 2 біта);
· номер голівки (0-255) задається в регістрі DH;
· номер початкового сектора (1-63) задається в регістрі CL [ 5 :0];
· кількість секторів, що беруть участь в операції, 8 біт - в регістрі AL (0-255);
· покажчик на початок буфера оперативної пам'яті для прочитуваних і записуваних даних (address of buffer) - в регістрах Е S: ВХ;
· результат виконання операції визначається по прапору перенесення: З F = 0 -успешное виконання операції, CF = 1 - виявлені помилки (код стануповертається в регістрі АН, код завершення останньої операції з дискетами зберігається за адресою 40:41h, з жорсткими дисками - 40:74h);
· таблиця параметрів диска для дискет (DPT) задана покажчиком в пам'яті за адресою 0:78h, для жорстких дисків (HDPT) - 0:104h або 0:118h.
Список функцій традиційного сервісу приведений в таблицю. 12.7, детальніше вони описані в [4, 9]. Пристрої можуть не підтримувати деякі функції, про що драйвери повинні «чесно повідомити» кодом повернення Olh.
1 Лише для фіксованих дисків.
2 Лише для дискет і інших змінних носіїв.
3 Призначення відрізняється від звичайного.
Формально традиційний сервіс дозволяє працювати з дисками, що мають до 1024 х 256 х 63 = 16 515 072 секторів (близько 8,4 Гбайт). Ряд операційних систем має помилку, що не дозволяє використовувати повний об'єм, допустимий даним сервісом. Для дисків об'ємом більше 15 481 935 секторів слід користуватися лише функціями розширеного сервісу (див. нижчий). Проте при роботі з пристроями АТА є ще і бар'єр в 528 Мбайт. Річ у тому, що контроллер жорсткого диска АТА, на який орієнтовані драйвери Int 13h, має лише 4-бітовий регістр номера голівки (а в BIOS - 6 біт). Правда, цей же контроллер здатний приймати 16-бітовий номер циліндра (у BIOS - 10 біт). Зрозуміло, що безпосередньо без спотворень через ці два фільтри (формат виклику і формат регістрів контроллера) може пройти лише виклик з найжорсткішими обмеженнями по кожній координаті. Тоді обмеження, отримане тим же перемножуванням діапазонів координат, виходить близько 528 мільйонів байт:
(210 = 1024 циліндри) х (24 = 16 голівок) х (26 - 1 = 63 сектори) х 512 байт = 528 482 304 байт.
Для подолання 528-мегабайтного бар'єру дисків АТА, не чіпаючи програмного інтерфейсу, в BIOS ввели розширення традиційного дискового сервісу. Інтерфейс АТА в тривимірній геометрії дозволяє реалізувати досить великий (але вже не позамежний) об'єм диска:
(216 = 65 536 циліндрів) х (24 = 16 голівок) х (28 - 1 = 255 секторів) х 512 байт = 136,9 Гбайт.
Аби досягти хоч би інтерфейсного обмеження BIOS (8,4 Гбайт), стали застосовувати трансляцію параметрів виклику функцій Int 13h, які теперназиватимемо логічними, у физические* параметри, передавані контроллерам АТА-дисков. У функції, яка повідомляє параметри диска (функція 8), виробляється зворотна трансляція, так що на стороні виклику програмного інтерфейсу Int 13 h присутньо лише логічні параметри. Природно, логічний об'єм диска не може перевищувати фізичного: (З х Н х 5) трансляції (LBA, Large Disk, ЕСН5) см.в [1,4,9].
Розширений сервіс BIOS
Аби дістати можливість роботи через BIOS з дисками об'єму більше 8,4 Гбайт, потрібно було ввести нові функції дискового сервісу.
Розширений дисковий сервіс BIOS, Enhanced Disk Drive Services (EDD), просувний фірмою Phoenix Technologies LTD, реалізується багатьма розробниками BIOS і пристроїв масової пам'яті. Він дозволяє працювати з пристроями, що мають об'єм до 264 секторів, ефективно використовуючи архітектуру процесорів IA-32 і IA-64. Сервіс оперує лінійною логічною адресою сектора (LBA). Замість традиційних таблиць параметрів дисків в нім використовуються нові, такі, що дають вичерпну інформацію про пристрої, їх фізичну організацію і інтерфейс. Пристрої можуть мати змінні носії і самі бути знімними в процесі роботи комп'ютера (наприклад, підключені до шини USB або IEEE1394), так що поняття «Змінюваність носія» декілька розмивається. Такі пристрої повинні підтримувати механізм повідомлення про зміну носія і програмне блокування зміни носія. По прогнозах ємкості даного інтерфейсу повинно вистачити на 15-20 років.
Розширення BIOS Int 13 h використовують ОС Windows 95, Windows 98, Windows 2000. Правда, це використання обмежене лише початковим завантаженням і процесом установки (FDISK, FORMAT), оскільки в регулярній роботі застосовуються власні 32-розрядні драйвери. Розширення BIOS Int 13 h не використовують DOS (всі версії), Windows 3. lx, Windows NT, Novell NetWare, OS/2 Warp, Linux, Unix.
В даний час визначено три набори функцій:
доступ до фіксованих дисків (fixed disk access subset) - функції 41-44h, 47h і 48h;
· блокування і зміна носія (device locking and ejecting subset) - функції 41h, 45h, 46h, 48h і 49h;
· підтримка розширених дисків (enhanced disk drive (EDO) support subset) -функции 41h і 48h.
Розширений сервіс, як і традиційний, викликається програмним перериванням Int13h з номерами функцій зверху 3Fh (регістр АН); номер пристрою (регістр D L) допустимий в діапазоні 80h-FFh. Основні параметри виклику - початкова адреса блоку, число секторів для передачі і адреса буфера - передаються через адресний пакет (device address packet). Формат пакету порівняно з передачею параметрів традиційного сервісу через регістри процесора досить просторий.
· Оскільки розширення BIOS може бути і відсутнім, є функція перевірки його наявності (номер 41h). Розширення може діяти вибірково (не для всіх пристроїв), так що перевірку треба виробляти для конкретного пристрою, що цікавить програму. Перевірка дає номер версії розширення і карту підтримуваних наборів функцій. Функції розширеного читання, запису, верифікації і пошуку (42h, 43h, 44h і 47h) по сенсу не відрізняються від їх аналогів з традиційного сервісу. Для роботи із змінними носіями введені функції отпирания/запирания, витягання і перевірки факту зміни носія (45h, 46h і 49h). Від ідеології традиційного сервісу сильно відрізняється функція здобуття параметрів пристрою (48h). Вона повертає в ОЗУ буфер з набором параметрів і детальним описом пристрою, що дозволяє ОС і додаткам працювати з ним, минувши BIOS. Функція установка апаратної конфігурації (4Eh) дозволяє управляти режимом передачі (Рio, DMA), а також попередньою вибіркою (пошуком).
· Для емуляції дисків на завантажуваних CD-ROM до сервісів BIOS Int 13h додається декілька нових функцій:
почати /завершить емуляцію диска (4Ah/4Bh), почати емуляцію диска і виконати завантаження (4Ch);
· прочитати сектори завантажувального каталога (4Dh); функції 41 -48h дозволяють звертатися до будь-яких логічних секторів CD-ROM (у режимі LBA з розміром сектора 2048 байт), коли для даного приводу включена емуляція.
2.написати і оформити згідно вимог програму на Асемблері для рисування вказаним кольором прямокутника заданого розміру у певній точці екрану
(задані координати лівої верхньої вершини) з використанням циклів.
Ширина 90
Висота 50
Колір 12
Х 90
У 50
title
sseg segment stack
db 256 dup(?)
sseg ends
dseg segment
dseg ends
cseg segment
assume cs:cseg,ds:dseg,ss:sseg
start: jmp main
main: push ds
mov ax,0
mov ax,dseg
mov ds,ax
;-----------------------------------------------------
mov ax,4F02h
mov bx,012h
int 10h
;-----------------------------------------------------
mov ah,0Ch
mov bx,0
mov al,12
mov cx,50
mov dx,50
a: int 10h
inc dx
cmp dx,140
jle a
;-----------------------------------------------------
mov ah,0Ch
mov bx,0
mov cx,140
mov dx,50
b: int 10h
inc dx
cmp dx,140
jle b
;-----------------------------------------------------
mov ah,0Ch
mov bx,0
mov cx,51
mov dx,50
c: int 10h
inc cx
cmp cx,139
jle c
;-----------------------------------------------------
mov ah,0Ch
mov bx,0
mov cx,51
mov dx,140
d: int 10h
inc cx
cmp cx,139
jle d
;-----------------------------------------------------
mov ax,4c00h
int 21h
cseg ends
end start
3.Перейти в існуючий каталог(прізвище студента).Відкрити файл(ім’я студента).Прочитати текст( N символів). Вивести текст на екран. Закрити файл. Знищитти файл. Перейти в кореневий каталог. Знищити існуючий каталог.
sseg segment stack робота з каталогами
db 256 dup(?)
sseg ends
dseg segment
path1 db 'c:\TASM\Narushunska',0
path2 db 'olya.txt',0
path3 db 'c:\tasm',0
buf2 db 10 dup(?)
buf21 db '$'
error2 db 'The folder is not found$'
lola3 db 0ah,'$'
dseg ends
cseg segment
assume ss:sseg,cs:cseg,ds:dseg
start: jmp main
main: push ds
xor ax,ax
push ax
mov ax,dseg
mov ds,ax
; перехід в каталог
m1: mov dx, offset path1
mov ah,3bh
int 21h
jc error
;відкрити файл
mov dx,offset path2
mov ah,3dh
mov al,0
int 21h
jc error
mov bx,ax
;читання даних з файлу
mov cx,19
mov dx,offset buf2
mov ah,3fh
int 21h
jc error
;друк результату
mov dx,offset buf2
mov ah,9
int 21h
mov dx,offset lola3
mov ah,9
int 21h
; закриття файлу
mov dx,offset path2
mov ah,3eh
jc error
;видалення файлу
mov ah,41h
mov dx,offset path2
int 21h
;перехід в кореневий каталог
mov dx,offset path3
mov ah,3bh
int 21h
jc error
;видалення каталогa
mov ah,3ah
mov dx,offset path1
int 21h
jc error
;вихід з програми
mov ah, 7 ;затримка тексту на екрані
int 21h
jmp exit
exit: mov ax,4c00h
int 21h
error:
mov dx,offset error2
mov ah,9
int 21h
mov ah, 7 ;затримка тексту на екрані
int 21h
jmp exit
jmp exit
cseg ends
end start
