Wykład nt. podstawy systemów operacyjnych -- wejście/wyjście
Instytut Informatyki
Politechniki Łódzkiej w Łodzi
mgr inż. Bartosz Lis
Wykład nt.
Podstawy systemów operacyjnych
dla potrzeb Studium Podyplomowego "Inżynierskie Zastosowania Informatyki"
Poprzedni | Spis treści
| Następny
Rozdział 4: Zarządzanie wejściem-wyjściem
Ogólna architektura podsystemu wejśia/wyjścia
Ogólną architekturę wejścia/wyjścia przedstawiono na rys. 4.1.
Na sprzęt (patrz rozdział 1
i rys. 1.1) składa się pewna ilość urządzeń wejścia wyjścia zwanych dalej
urządzeniami fizycznymi (ang. phisical device), każde z tych urządzeń sterowane
jest przez sterownik sprzętowy (ang. hardware controller).
Do komunikacji z urządzeniami fizycznymi wykorzystuje się zasoby urządzeń
t.j. rejestry we/wy, przerwania, adresowalną pamięć urządzeń i kanały DMA.
Jądro systemu operacyjego zawiera pewną ilość modułów zwanych stertownikami
programowymi urządzeń (ang. device driver), które potrafią sterować urządzeniami.
Jeden sterownik może obsługiwać wiele urządzeń podobnego typu (np. sterownik
dysków) lub uzupełniających się typów (np. sterownik terminala obsługuje
klawiaturę i kartę graficzną wraz z monitorem).
Sterowniki programowe tworzą dla wyższych warstw oprogramowania urządzenia
logiczne (ang. logical device). Urządzenie logiczne jest obiektem będącym
abstrakcją urządzenia fizycznego. Na urządzeniu logicznym można dokonywać
operacji zapisu i odczytu poprzez podprogramy dostarczane przez sterownik.
Wyższe warstwy oprogramowania nie muszą znać szczegółów sterowania danym
urządzeniem.
Wsród urządzeń logicznych można wyodrębnić następujące typy:
Urządzenia znakowe lub strumieniowe (ang. character device). Z urządzenia
znakwego można czytać w sposób sekwencyjny ciągi bajtów, lub w sposób sekwencyjny
zapisywać ciągi bajtów.
Przykłady urządzeń fizycznych dla których tworzy się logiczne urządzenia
znakowe: zegar systemowy, porty szergowe i równoległe oraz widoczne przez
nie drukarki, modemy, myszy i terminale, komsola, streamery itp.
Urządzenia blokowe (ang. block device). Z urządzenia blokowego można odczytywać
i zapisywać bloki bajtów określonej dla danego urządzenia wielkości. Dostęp
do danych w urządzeniu blokowym w przeciwieństwie do urządzeń znakowych
jest swobodny t.j. poprzez podanie adresu bloku.
Przykłady urządzeń fizycznych dla których tworzy się logiczne urządzenia
blokowe: dyski, niektóre skanery.
Inne. Urządzenia te oferują funkcje, która wykraczają znacząco poza operacje
odczytu/zapsu na urządzeniu znakowym lub blokowym.
Przykłady urządzeń: karty sieciowe, karty graficzne.
Modyły jądra odpowiedzialne za wyższe funkcje to moduły systemów plików,
protokołów sieciowych, interfejsu użytkownika itp.
Systemy plików mogą być zakładane na urządzeniach blokowych. System
plików umożliwia przechowywanie na tym samym urządzeniu różnych informacji
w sposób pozwalający wyszukać potrzebne zbiory danych oraz zabezpieczyć
dane przed niepowołanym dostępem.
Wyższe funkcje we/wy dostępne są przez tzw. API (application programmer's
interface - interfejs programisty aplikacji) czyli zbiory podprogramów
dostępnych do wywołania przez aplikacje.
Istnieją pewne złożone operacje, które nie powinny lub nie muszą być
wykonywane w jądrze systemu operacyjnego ze względu np. na wydajność systemu,
dążenie do zmniejszenia stopnia komplikacji jądra czy bezpieczeństwo. Do
wykonania tych operacji uruchamia się przy starcie systemu programy usługowe
zwane też demonami (ang. daemon). Przykłady zastosowań: zarządzanie kolejkami
wydruków, implementacja części usług sieciowych czy wymiatanie buforów
dyskowych.
Programy usługowe i aplikacje mogą się odwoływać bezpośrednio do urządzeń
logicznych, jeżeli konfiguracja systemu na to pozwala lub do odpowiednich
API. Żadna warstwa oprogramowania z wyjątkiem sterowników programowych
nie odwołuje się bezpośrednio do sprzętu.
Zasoby urządzeń fizycznych
Zasoby urządzeń fizycznych umożliwiają procesorowi i wykonywanemu się na
nim oprogramowaniu komunikować się z urządzeniami fizycznymi. Wyróżnia
się cztery klasy zasobów urządzeń fizycznych:
rejestry we/wy (ang. I/O registers),
przerwania (ang. interrupts),
adresowalna pamięć sterownika,
kanały DMA.
Rejestry we/wy
Rejestry we/wy to rejestry sterowników sprzętowych, do których procesor
może wpisywać (lub odczytywać) dane podane na magistralę danych, podając
na magistralę adresową adres rejestru. Wiele procesorów informuje o operacjach
na rejestrach we/wy podając sygnał na specjalną ścieżkę w magistrali sterującej,
co pozwala oddzielić przestrzeń adresową pamięci fizycznej od przestrzeni
adresowej rejestrów we/wy. Rozwiącanie to zastosowano w procesorach Intela.
Istnieją procesory, które nie rozróżniają pamięci operacyjnej i rejestrów
we/wy, jak np. Motorolla 6502. Komplikuje to pracę projektantom magistral.
Funkcje rejestrów we/wy mogą być różne. Zapis do pewnego rejestru może
być komendą dla sterownika sprzętowego urządzenia. Inne rejestry służą
jako bufory wejścia wyjścia - należy do nich wpisyswać dane wysyłane do
urządzenia a odczytywać dane przychodzące z urządzenia. Jeszcze inne rejestry
pozwalają odczytać status urządzenia lub ostatnio wykonanej operacji.
Adresy rejestrów we/wy danego sterownika sprzętowego często mogą być
modyfikowane. Nadaje się je ustawiając zworki na karcie sterownika (np.
dawne modele kart sieciowych zgodnych z NE2000), konfigurując programem
SETUP (np. adresy portów szeregowych) lub programem dostarczonym przez
producenta urządzenia (np. karty sieciowe ISA 3Com) lub poprzez fakt włączenie
karty w konkretne gniazdo magistrali (np. karty PCI).
O ustawieniu adresów we/wy na sterowniku sprzętowym należy poinformować
sterownik programowy (ang. driver), aby mógł się poprawnie odwoływać do
danego urządzenia. Nowsze sterowniki programowe potrafią same wykryć adresy
we/wy swoich sterowników fizycznych.
Adresy we/wy nie muszą tworzyć spójnej przestrzeni adresowej jak to
było z pamięcią fizyczną. Jeżeli adresy we/wy dwóch sterowników pokrywają
się, to urządzenia te nawzajem przeszkadzają sobie w pracy. Mówimy wtedy
o konflikcie adresów we/wy. Konflikt rozwiązuje się nadając jenemu z urządzeń
inne adresy we/wy i informując o tym sterownik programowy danego urządzenia.
Rejestry we/wy zapewniają przepływ niewielkich paczek informacji w
obie strony (procesor <-> urządzenie). Inicjatorem komunikacji jest
zawsze procesor.
Przerwania
Przerwana to sygnały jakie wysyłają sterowniki sprzętowe aby poinformować
procesor o istotnym zdarzeniu, które wymaga poświęcenia przez procesor
uwagi danemu urządzeniu. Przykładami takich wydarzeń może być wciśnięcie
klawisza, zakończenie operacji dyskowej, nadejście pakietu informacji do
karty sieciowej itp.
Aby odróżnić zdarzenia pochodzące od różnych urządzeń, poszczególnym
sterownikom sprzętowym przypisuje się numery przerwań w podobny sposób
jak to było z adresami we/wy, przy czym zakres numerów przerwań sprzętowych
jest niewielki i przykładowo wynosi od 0 do 15 dla komputerów o architekturze
PC/AT. Konflikt numerów przerwań może być równie katastrofalny w skutkach
jak konflikt adresów we/wy. Podobnie jak z adresami we/wy, o ustawieniu
numeru przerwania w sterowniku sprzętowym należy poinformować odpowiedni
sterownik programowy.
Po otrzymaniu przerwania procesor przerywa aktualnie wykonywany proces,
zapisuje część swego kontekstu na stosie (przynajmniej wskaźnik instrukcji
i rejestr flagowy) i przechodzi do wykonania podprogramu obsługi przerwania
zarejestrowanego dla danego numeru przerwania. Podprogram ten pochodzi
ze sterownika programowego danego urządzenia i został zarejestrowany w
trakcie inicjacji sterownika. Po zakończeniu obsługi przerwania sterowanie
wraca do przerwanego procesu, który wykonuje się dalej tak jakby nie został
przerwany.
Istnieje hierarchia przerwań, tzn. pewne przerwania mogą być przerywane
przez inne umieszczone wyżej w hierarchii.
Aby zwiększyć szybkość reagowania na przerwania podprogram obsługi
przerwania wykonuje się w kontekście procesu, który został przerwany, co
pociąga za sobą możliwość manipulowania danymi procesu przez podprogram
obsługi przerwania pochodący ze źle lub złośliwie napisanego sterownika
programowego.
Adresowalna pamięć
Adresowalna pamięć sterownika to część pamięci RAM lub ROM sterownika sprzętowego,
która jest widoczna dla procesora w przestrzeni adresów fizycznych pamięci.
Przykłady zastosowań: pamięć obrazu karty graficznej, pamięć ROM zawierająca
kod podprogramów wchodzących w skład sterownika programowego danego urządzenia.
Kanały DMA
Kanały DMA (direct memory access - bezpośredni dostęp do pamięci) są to
narzędzia jakie udostępniają magistrale sterownikom sprzętowym we/wy, aby
te mogły bezpośrednio czytać lub pisać do pamięci operacyjnej (bez pochłaniania
uwagi procesora). Podczas gdy sterownik sprzętowy dokonuje operacji przez
kanał DMA magistrala stgerująca blokuje procesorowi dostęp do całości lub
części pamięci. Z kanałów DMA korzystają sterowniki urządzeń przesyłających
dane z wielkimi prędkościami takich jak dyski, karty sieciowe czy kardt
dźwiękowe.
Kanały DMA mają swoje numery, do których przydzielania odnoszą się
podobne uwagi co do przydziału adresów we/wy.
Sterowniki i urządzenia logiczne
Sterownik programowy (ang. device driver) to zbiór podprogramów pozwalających
sterować danym urządzeniem (urządzeniami) fizycznym. Dla poprawnej pracy
sterownik musi znać zasoby sterownika sprzętowego urządzenia fizycznego,
poprzez które może się z nim komunikować. Jeżeli sam nie potrafi ich znaleźć,
należy podać mu je podczas konfiguracji.
Pojedyńczy sterownik może obsługiwać wiele urządzeń fizycznych tego
samego typu (np. dysków) lub typów uzupełniających się (np. klawiatura
i ekran).
Wyższym warstwom oprogramowania sterownik prezentuje pewną ilość urządzeń
logicznych (ang. logical device). Każde urządzenie logiczne ma swoją unikalną
nazwę np. "A:", "C:", "COM1:" w MS DOS czy "/dev/fd0", "/dev/hda1", "/dev/cua0"
w Linuksie (podobne nazwy są w innych systemach uniksowych).
W MSDOSie nazwy urządzeń logicznych nie mogą być dłuższe niż 9 znaków
łącznie z obowiązkowym końcowym znakiem dwukropka ":". W MS Windows NT
nazwy urządzeń logicznych umieszczone są w drzewie nazw obiektów systemowych,
dodatkowo istnieje mechanizm tłumaczenia nazw MSDOSa na nazwy obiektów
MS Windows NT. W uniksie każdemu urządzeniu logicznemu udostępnionemu przez
administratora odpowiada plik specjalny w katalogu "/dev", stąd nazwy urządzeń
zaczynają się na "/dev/".
Urządzenia logiczne reprezentują abstrakcje urządzeń fizycznych:
Urządzenia logiczne mogą wprost odpowiadać urządzeniom fizycznym. Np. w
MSDOS urządzenie logiczne "COM1:" odpowiada pierwszemu portowi szeregowemu
i w konsekwencji przypiętej do niego myszce.
W niektórych przypadkach wiele urządzeń logicznych odpowiada temu samemu
urządzeniu fizycznemu. Dzieje się tak gdy urządzenie daje się na pewnym
poziomie abstrakcji podzielić na kilka odrębnych fragmentów. Np. w systemie
MSDOS działającym na komputerze z jednym dyskiem podzielonym na dwie partycje,
urządzenia logiczne "C:" i "D:" odpowiadają poszczególnym partycjom tego
samego dysku fizycznego. Inny przykład: naświetlarka t.j. urządzenie do
naświetlania klisz do offsetu może być widoczna jako kilka drukarek logicznych,
każda drukarka logiczna reprezentuje inne parametry naświetlania (takie
jak rozdzielczość).
Możliwa jest również sytuacja gdy jedno urządzenie logiczne odpowiada więcej
niż jednemu rządzeniu fizycznemu, np. "/dev/console" w linuksie odpowiada
konsoli znakowej, czyli klawiaturze i monitorowi.
Sterownik programowy urządzenia zapewnia m.in.:
podprogramy obsługi przerwań obsługujące przerwania danego urządzenia,
podprogramy implementujące operacje na urządzeniach logicznych jakie dany
sterownik dostarcza wyższym warstwom,
podprogramy do wykonania czynności organizacyjnych zlecanych przez system
operacyjny takich jak np. inicjacja urządzenia.
Sterowniki programowe urządzeń mogą być dostarczne przez firmy niezależne
od producenta systemu operacyjnego w szczególności przez proucentów urządzeń
we/wy. Najbardziej fundamentalne sterowniki takie jak sterowniki dysków,
klawiatury, karty graficznej i monitora przychodzą razem z systemem operacyjnym.
System operacyjny musi dawać się rozszerzać o inne sterowniki oraz definiować
i egzekwować normy, których przestrzeganie pozwoli współistnieć w jednym
systemie operacyjnym sterownikom programowym pochodzącym od różnych producentów.
Po zainstalowaniu, sterownik programowy staje się częścią systemu operacyjnego,
w związku z czym, sterowniki nieznanego pochodzenia mogą stanowić wyłom
w bezpieczeństwie systemu.
Urządzenia dyskowe
Budowa urządzeń dyskowych
Dysk jest urządzeniem blokowym przeznaczonym do przechowywania dużych ilości
danych. Najmniejszą porcję danych jaka może być odczytana/zapisana na dysk
nazywamy sektorem.
Obecnie budowane dyski składają się z pewnej ilości talerzy (ang. plate)
na których dwustronnie zapisywana jest informacja przez kolumnę głowic
(ang. head) odczytująco-zapisujących. Na każdym talerzu wyodrębnić można
ścieżki (ang. track) w postaci koncentrycznych okręgów, na których przy
ustalonym położeniu kolumny głowic zapisywana jest informacja. Ścieżki
należące do różnych dysków odpowiadające ustalonemu położeniu kolumny głowic
nazywa się cylindrem (ang. cylinder). Na każdej ścieżce wyodrębnia się
pewną ilość sektorów.
Bezpośredni kontroler dysku jest najczęściej zintegrowany z dyskiem.
Do komputera dysk jest przyłączony poprzez magistralę dyskową i adapter
- sterownik sprzętowy magistrali dyskowej. Popularnie stosowane są dwa
rodzaje magistral dyskowych i związanych z nimi protokołów komunikacji
z dyskami:
IDE (Integrated Drive Electronics - zintegrowany kontroler dysku), którego
nowsze wersje występują pod akronimami: ATA (AT Attachment Interface -
interfejs przyłącza architektury AT), EIDE (Enhanced IDE - rozszerzony
IDE), ATA-2, Fast-ATA, ATAPI (ATA Packet Interface - interfejs pakietowy
do ATA, wzorowany na SCSI, używany do napędów CD-ROM). Do magistrali IDE
można prezyłączyć 1 adapter i maksymalnie 2 dyski. Jeden z dysków pełni
rolę nadrzędną (ang. master) w stosunku do drugiego (ang. slave). W wytwarzanych
obecnie komputerach PC najczęściej dwa adaptery (pierwszy - primary i drugi
- secondary) IDE są zintegrowane z płytą główną, pozwalając obsługiwać
maksymalnie 4 dyski. Zaletą standardu IDE jest niski stopień komplikacji
sterowników sprzętowych a co za tym idzie niska cena. Wadą jest mała elastyczność,
rozszerzalność i wydajność. Niska wydajność (w porównaniu ze SCSI) wynika
z przyjętego protokołu, który blokuje magistralę IDE, a przez to drugi
dysk do czasu wykonania operacji.
SCSI (small computer system interface - interfejs małych systemów komputerowych)
zaprojektowany początkowo dla minikomputerów okazał się bezkonkurencyjny
przy budowie serwerów i silnych stacji roboczych oraz przyłączaniu do komputera
urządzeń niekoniecznie dyskowych produkujących lub konsumujących duże ilości
danych (takich jak np. skanery i naświetlarki). Do magistrali SCSI można
przyłączyć do 8 lub w nowszych wersjach do 16 urządzeń. Jednym z nich jest
adapter komputera zarządzający magistralą (ang. host adapter). Zaletą tego
rozwiązania jest jego elastyczność i duża wydajność. Protokół SCSI pozwala
by adapter wysyłał zlecenia do urządzenia podczas gdy urządznie to lub
inne przyłączonego do tej samej magistrali wciąż jeszcze wykonuje swoje
poprzednie zlecenie. Wadą jest duży stopień komplikacji urządzeń a przez
to wyskoa cena.
Wydajność dysku (ang. overall disk speed) charakteryzują parametry:
Prędkość transferu danych z dysku do sterownika (ang. data transfer rate)
- jest to prędkość, z jaką dysk jest w stanie przesyłać dane na magistralę
łączącą go z adapterem. Traci na znaczeniu, gdy odwołania do dysku następują
w dużej ilości do przypadkowych miejsc.
Średni czas dostępu do sektora (ang. average seek time) - jest to średni
czas potrzebny głowicy na znalezienie się nad losowo wybranym sektorem.
Ilość obrotów dysku na minutę (rpm - ang. reverses per minute) i związany
z tym średni czas oczekiwania głowicy na odczyt/zapis sektora na tej samej
ścieżce (ang. average track seek time). Ten czynnik ma duże znaczenie gdy
odwołania następują w wiekszości do sąsiednich sektorów dysku, co dzieje
się przy wczytywaniu dużych niepofragmentowanych plików.
Ilość pamięci podręcznej na danym dysku (ang. internal disk cache size).
Wewnętrzna pamięć podręczna dysku pozwala przyspieszyć operacje na dysku:
zmniejszeniu ulega ilość fizycznych odczytów/zapisów dysku dzięki przechowywaniu
ostatnio odczytanych/zapisanych sektorów oraz
można zaimplementować mechanizm czytania sektorów z wyprzedzeniem.
Organizacja logiczna dysku
Dysk jest charakteryzowany przez następujące zależne od siebie parametry,
od których zależy pojemność dysku:
geometrię: ilość zapisywalnych stron talerzy (ang. sides) = ilość głowic
(ang. heads), ilość cylindrów, ilość sektorów na ścieżce (ang. sectors
per track), rozmiar sektora (ang. sector size);
ilość wszystkich sektorów, rozmiar sektora;
Sektory na dysku można posortować w/g numeru cylindra, numeru głowicy i
numeru sektora na ścieżce a następnie w tej kolejności ponumerować. Powstaje
w ten sposób płaski numer sektora. Niektóre dyski dopuszczają by do ich
sektorów odwoływać się poprzez podanie płaskiego numeru sektora, inne wymagają
podania tzw. parametrów geometrycznych tj. numeru głowicy, numeru cylindra
i numeru sektora na ścieżce.
Utworzenie na dysku ścieżek i sektorów na ścieżkach nazywamy formatowaniem
niskopoziomowym. Formatowanie niskopoziomowe przeprowadzane jest najczęściej
u producenta lub jako pierwsza czynność po zainstalowaniu dysku w systemie.
W czasie formatowania niskopoziomowego dokonywane jest także sprawdzanie
zdatności nośnika magnetycznego. Przeprowadzenie formatowania niskopoziomowego
wymazuje z dysku wszelkie informacje (łącznie z tablicą partycji).
Na dysku można wydzielać obszary zwne partycjami, przydzielane różnym
systemom plików, być może należących do różnych systemów operacyjnych.
Wiele systemów plików wymaga aby ich partycje zawierały pełne cylindry.
Opis podziału dysku na partycje znajduje się w tzw. tablicy partycji umieszczonej
na początku dysku. Zmiana podziału na partycje niszczy zawartość partycji,
których rozmiar lub położenie uległo zmianie. Do manipulacji tablicą partycji
służy program fdisk.
Na każdym dysku obsługiwanym przez MSDOS, MS Windows 3.xx lub 95 może
istnieć jedna partycja podstawowa FAT16 lub FAT32 oraz jedna partycja rozszerzona
z pewną ilością podpartycji FAT16 lub FAT32.
Po utworzeniu partycji należy na każdej z nich zapisać dane niezbędne
do poprawnego funkcjonowania systemu plików. Ten proces nazywamy formatowaniem
wysokopoziomowym. Formatowanie wyskokpoziomowe może zniszczyć dane zapisane
na danej partycji.
Jeżeli system operacyjny startuje z dysku, jedna z partycji, tzw. partycja
aktywna powinna zawierać program ładujący jądro systemu operacyjnego oraz
wszystkie inne pliki niezbędne do startu systemu. Program ładujący jadro
bywa umieszczany w zerowym sektorze dysku, zwierającym też tablicę partycji
zwanym sektorem startowym (ang. bootsector).
System operacyjny łączy sektory dyskowe w większe jednostki, które
traktuje nierozdzielnie przy przydzielaniu ich plikom. Jednostki te nazywają
się w różnych systemach: jednostkami alokacji (ang. allocation unit), blokami
(ang. block) klasterami (ang.cluster). Przykładowe rozmiary jednostek alokacji
to:
512 B = 1 sektor - SCO Unix, MSDOS FAT16 dla partycji nie większych niż
32 MB
1kB = 2 sektory - Linux Ext2, MSDOS FAT16 dla partycji nie większych niż
64 MB
4kB = 8 sektorów - Novell Netware, MSDOS FAT16 dla partycji nie większych
niż 256MB, MS Windows NT NTFS, MS Windows 95 FAT32.
Programowe sterowniki dysków wykorzystują pamięć podręczną przy dostępie
do dysków. W pamięci podręcznej przechowywane są jednostki alokacji, na
których ostatnio dokonywano operacji (zapis na dysk nie następuje natychmiast)
oraz te, o których sądzi się, że w niedługim czasie będą odczytywane. Przyspiesza
to czas operacji na często używanych plikach, lub gdy wczytuje się dane
z pliku w sposób sekwencyjny. W MSDOSie i MS Windows 3.11 rozmiar dyskowej
pamięci podręcznej należało ustawić ręcznie. W nowszych systemach rozmiar
ten ustalany jest automatycznie na podstawie ilości dostępnej pamięci i
częstości operacji na dysku.
Systemy plików
Pliki
Systemy plików mają zapewnić możliwość przechowywania zbiorów danych na
urządzeniach zewnętrznych komputera w sposób pozwalający na późniejsze
odwoływanie się do danych, ich przetwarzanie oraz łatwe wyodrębnianie,
kopiowanie, przenoszenie i usuwanie do i z systemu.
Plikiem lub zbiorem danych (ang. file) nazywamy ciąg bajtów określonej
długości stanowiący dla systemu plików atomiczną całość, wyposażony w nazwę
i inne atrybuty zależne od systemu plików takie jak daty utworzenia, ostatniej
modyfikacji, dostępu, flagę archiwizacji, czy uprawnienia.
Strumieniem (ang. stream) nazywamy obiekt z którego można czytać lub
do którego można zapisywać dane w sposób sekwencyjny (bajt po bajcie).
Strumienie stanowią ważną abstrakcję danych, wykorzystywaną m.in. przy
dostępie do plików. Przykładami strumieni mogą być poza zwykłymi plikami
znakowe urządzenia logiczne (w szczególności terminale).
Wiekszość systemów plików zapewnia do zwykłych plików zarówno dostęp
sekwencyjny (tak jak do strumienia) jak i swobodny (w dowolnym momencie
można powoływać się na dowolny bajt, lub ciąg bajtów pliku podając adres
pierwszego bajtu i długość ciągu).
Katalogi
Aby ułatwić odszukiwanie plików, tworzy się hierarchiczną strukturę zwaną
drzewem katalogów.
Katalogiem (ang. directory) nazywamy plik interpretowany przez system
plików jako listę odwołań do innych plików. Jako synonimy katalogu stosuje
się także nazwy folder i kartoteka.
Wszystkie obecnie spotykane systemy plików dopuszczają aby katalogi
zawierały inne katalogi (tzw. podkatalogi ang. subdirectory), przy czym
wymaga się, aby graf katalogów był drzewem (ang. tree) skierowanym. Każdy
katalog ma co najwyżej jeden nadkataolg (ang. updir). Istnieje dokładnie
jeden katalog będący korzeniem drzewa katalogów, który nie posiada swego
nadkatalogu (lub sam jest sobie nadkatalogiem, ang. root directory). Niektóre
systemy plików (np. uniksowe systemy plików) dopuszczają aby ten sam plik
mógł się znajdować w wielu katalogach jednocześnie lub w tym samym katalogu
pod różnymi nazwami. W takich systemach plików katalogi i pliki tworzą
graf acykliczny. W systemach plików FAT16 i FAT32 stosowanych w MSDOS i
MS Windows 3.xx i 95 pliki i katalogi tworzą drzewo.
System plików FAT16
Nazwa tego systemu plików wzięła się od najważniejszej struktury danych
służącej w nim do przechowywania informacji organizującej bloki partycji
w katalogi i pliki - FAT (ang. File Allocation table) - tablica alokacji
plików.
W systemie tym partycja jest dzielona na 4 części:
bootsektor - zawiera program ładujący system operacyjny i metryczkę partycji,
pierwsza kopia tablicy FAT,
druga kopia tablicy FAT - jest używana, w razie fizycznego uszkodzenia
sektorów wchodzących w skład pierwszej kopii,
obszar bloków.
Pierwsze dwa bloki z obszaru bloków są przydzielone do katalogu głównego
danej partycji. Pozostałe bloki mogą być przyznawane zarówbo do plików
jak i katalogów.
W blokach przypisanych plikowi zapisana jest jego zawartość. Dzięki
temu, że system plików FAT zapamiętuje kolejność przyznawania bloków do
pliku, możliwe jest zachowanie kolejności bajtów zawartości.
Bloki przyznane do katalogów zawierają tablice, których pozycje przechowują
metainformacje opisujące pliki i katalogi wchodzące w skład danego katalogu:
nazwę i rozszerzenie;
datę i czas modyfikacji;
atrybuty: tylko do oczytu, wymaga archiwizacji, ukryty, systemowy;
rozmiar pliku;
czy plik jest katalogiem, czy zwykłym plikiem
adres pierwszego bloku w pliku.
W systemie tym przewiduje się 16 bitów na adres bloku (jednostki alokacji,
klastera), przy czym kilka wartości adresu jest zabronionych jako adresy
aby mogły być wykorzystywane jako znaczniki.
Pierwsze dwa bloki obszaru bloków (o adresach 0x0000 i 0x0001) są zawsze
przeznaczone na katalog główny. Pozostałe bloki (maksymalnie 65518) są
przeznaczone na pliki i katalogi. Każdemu blokowi z obszaru bloków odpowiada
jadna dwubajtowa pozycja w każdej kopii tablicy FAT. Jeśli sektory dysku,
w których zapisane są kopie tablicy FAT nie są fizycznie uszkodzone, to
obie kopie tablicy FAT są identyczne, zatem w dalszej części wywodu tablica
FAT będzie traktowana jak pojedyńczy obiekt.
Pozycje tablicy FAT opisują status poszczególnych bloków systemu plików
oraz ich przydział do pliku. Pozycje tablicy FAT liczą 16 bitów (2 bajty)
- tyle ile adres bloku.
Jeśli na pozycji FAT odpowiadającej blokowi y pojawi się wartość 0x0000,
to znaczy, że blok y nie jest wykorzystany przez pliki i katalogi i można
go użyć do utworzenia nowego pliku, lub powiększenia istniejącego. W czasie
kasowania pliku, na pozycje FAT odpowiadające blokom kasowanego pliku wpisywana
jest wartość 0x0000.
Jesli na pozycji FAT odpowiadającej blokowi y pojawi się wartość 0xFFF7,
to znaczy, że w skład bloku y wchodzi fizycznie uszkodzony sektor, i bloku
tego nie należy przydzielać do plików.
Wartości 0x0001 i 0xFFF0-0xFFF6 nigdy nie zostaną wpisane do żdnej
pozycji tablicy FAT.
Adres pierwzego bloku wchodzącego w skład pliku jest pamiętany w odpowiadającej
mu pozycji katalogu, pozostałe adresy bloków wchodzących w skład pliku
przechowywane są na pozycjach tablicy FAT odpowiadających poprzedzającym
je w pliku blokom. A więc, jeśli na pozycji y FATu znajduje się wartość
x z przedziału 0x0002-0xFFEF, to znaczy, że blok y należy do pewnego pliku,
a następnym blokiem w tym pliku jest blok o adresie x.
Wartości 0xFFF8-0xFFFF na pozycji odpowiadającej blokowi y oznaczają,
że dany blok jest przydzielony do pliku i jest ostatnim blokiem w pliku.
Znaczenie wartości wpisywanych do pozycji FAT podsumowuje poniższa
tabelka.
x
Co się znajduje pod adresem x
Co oznacza wartość x wpisana do pozycji FAT y
0x0000
pierwszy blok katalgu głównego
blok y jest wolny
0x0001
drugi blok katalogu głównego
wartość nieużywana - zarezerwowana do przyszłych zastosowań
0x0002-0xFFEF
bloki wykorzystywane przez pliki i katalogi
blok y jest przypisany do pliku, adres następnego bloku w pliku
to x
0xFFF0-0xFFF6
nie ma takiego adresu
wartości nieużywane - zarezerwowane do przyszłych zastosowań
0xFFF7
nie ma takiego adresu
blok y zawiera uszkodzony fizycznie sektor - bloku nie można
używać
0xFFF8-0xFFFF
nie ma takiego adresu
blok y jest przydzielony do pliku i jest ostatnim blokiem w
pliku
Jeśli pobraliśmy z katalogu pozycję opisującą dany plik i chcemy wczytać
jego zawartość, to musimy usyalić adresy bloków wchodzących w skład pliku.
Adres pierwszego bloku już mamy - jest on pamiętany w pozycji katalogu.
Adresy następnych oczytujemy z FATu. Na pozycji FAT odpowiadającej pierwszemu
blokowi pliku znajdujemy adres drugiego bloku. Na pozycji odpowiadającej
drugiemu blokowi znajdujemy adres trzeciego bloku itd. W pewnym momencie
natrafiamy na wartość z przedziału 0xFFF8-0xFFFF. Znaczy to, że znaleźliśmy
już wszystkie bloki wchodzące w skład pliku.
Ciągi adresów bloków opisywane przez tablicę FAT nazywamy łańcuchami.
W poprawnie działającym systemie plików każdemu łańcuchowi odpowiada dokładnie
jeden plik, tzn. istnieje pozycja w pewnym katalogu, która powołuje się
na pierwszy adres w tym łańcuchu (w przeciwnym razie mamy do czynienia
z zerwanym łańcuchem) oraz pozycja taka jest dokłądnie jedna (w przeciwnym
razie mamy do czynienia ze zduplikowanym łańcuchem). Zduplikowany łańcuch
może powstać także wtedy, gdy dwie pozycje FATu odwołują się do tej samej
trzeciej pozycji, jako pozycji następnej.
Nazywanie plików
Jak wcześniej stwierdzono, każdy plik posiada nazwę (ang. file name). Nazwa
pliku musi być unikalna w ramach katalogu.
Każdy plik w systemie plików posiada (przynajmniej jedną) pełną (bezwzględną)
nazwę, unikalną w ramach całego systemu plików, tworzoną przez połączenie
z nazwą pliku tzw. ścieżki bezwzględnej, t.j. nazw wszystkich katalogów,
jakie należy przejść aby osiągnąć dany plik poczynając od korzenia drzewa
katalogów. Jeśli pliki i katalogi tworzą drzewo to każdy plik posiada dokładnie
jedną pełną nazwę.
Między innymi dla uproszczenia nazewnictwa plików wprowadza się pojęcie
katalogu bieżcego. Katalog bieżący może być związany z procesem (jak np.
w Uniksie) lub być globalnym dla wszystkich procesów systemu (MSDOS). Nazwa
utworzona z nazwy pliku i tzw. ścieżki względnej, t.j. nazw katalogów jakie
należy przejść aby osiągnąć dany plik poczynając od katalogu bieżącego
nosi nazwę nazwy względnej. Przejście do nadkatalogu sygnalizowane jest
w ścieżce i nazwie względnej przez człon "..".
Do łączenia nazw katalogów i plików w ścieżki i nazwy względne i bezwzględne
używa znaku charakterystycznego dla danego systemu operacyjnego zwanego
dalej znakem katalogu:
"\" - w MSDOS, MS Windows XX,
"/" - w systemach zgodnych z uniksem,
"." - w VMSie
W MSDOSie, MS Windows XX i systemach zgodnych z uniksem katalog główny
nosi nazwę taką jak znak katalogu ("\" w MSDOS, "/" w uniksach), a nazwa
bezwzględna różni się tym od nazwy względnej, że nazwa bezwzględna zaczyna
się znakiem katalogu, np. "\Windows\Command" - ścieżka bezwzględna, "Command"
- nazwa względna, (względem katalogu "\Windows").
System operacyjny z różnych powodów narzuca pewne ograniczenia na nazwy
plików, np. długość - 8 znaków nazwy właściwej + 3 znaki rozszerzenia w
MSDOS, 14 znaków w niektórych uniksach, 255 znaków w niektórych nowszych
systemach operacyjnych. Innym ograniczeniem jest to jakie znaki można stosować
w nazwach. Uniksy dopuszczają wszystkie znaki oprócz (co jest oczywiste)
znaku katalogu "/" i znaku końca łańcucha (znak o kodzie 0). Systemy te
rozróżniają duże/małe litery. MSDOS dopuszczał jesynie litery, cyfry, i
kilka znaków nieliterowych, m.in. "_", "$" i "!". MS Windows 95 dopuszczają
m.in. odstęp (czyli sację " "), "-" i wiele innych. Systemy te nie rozróżniają
dużych/małych liter przy odwołaniach do plików, choć MS Windows 95 rozróżnia
je przy wyświetlaniu nazw plików.
Kilku słów komentarza wymaga mechanizm pozwalający korzystać z tego
samego systemu plików zarówno przez MS Windows 95 (długie nazwy) jak i
starsze wersje systemów Microsoftu. Mechanizm ten zwany jest Virtual FAT
(vfat). Każdy plik posiada dwie nazwy, tzw. nazwę długą tworzoną zgodnie
z regułami MS Windows 95 i nazwę 8+3 tworzoną zgodnie z regułami MSDOSa
na podstawie nazwy długiej. MSDOS widzi w danym katalogu tylko nazwy 8+3,
natomiast MS Windows 95 widzi obie nazwy, a domyślnie wyświetla nazwy długie.
Systemy plików a dyski logiczne
Każdej partycji odpowiada urządzenie logiczne i związana z nim nazwa dysku
logicznego. Istnieją dwa podejścia do nazywania plików położonych na różnych
partycjach:
Globalny system plików. Takie nazewnictwo występuje w uniksach. Istnieje
jeden katalog główny dla całego systemu operacyjnego. Katalog ten jest
jednocześnie katalogiem głównym wyróżnionej partycji, zwanej partycją korzeniową
(ang. root). Katalogi główne pozostałych partycji są montowane do liści
drzewa partycji korzeniowej lub wcześniej zamontowanych partycji, rozbudowując
drzewo. Rozmieszczenie poszczególnych katalogów i plików na partycjach
jest przezroczyste dla użytkowników. Dołożenie nowego dysku lub przemieszczenie
całych katalogów pomiędzy partycjami nie musi powodować zmiany nazwy bezwzględnej
żadnego pliku. Pomaga w tym mechanizm dowiązań symbolicznych (ang. symbolic
link, czyli skrót, ang. shortcut, w terminologi MS Windows ).
Jawne nazwy dysków. Takie nazewnictwo wykorzystują m.in. MS DOS i MS Windows
XX. Nie istnieje globalny system plików. Tworząc pełną nazwę pliku należy
powołać się na nazwę dysku logicznego. Dyski logiczne mają nazwy składające
się z pojedyńczej dużej litery alfabetu łacińskiego i dwukropka (np. "A:",
"C:", takich nazw może być najwyżej 26). Użytkownik musi pamiętać
na którym dysku znajdują się jego pliki. Dodanie nowego dysku lub przemieszczenie
katalogów między dyskami powoduje zmianę bezwzględnych nazw plików.
Dla ułatwienia tworzenia nazw względnych pojawia się pojęcie dysku
bieżącego. Jeżeli nazwa pliku nie zawiera nazwy dysku, to przyjmuje się
że odnosi się do dysku bieżącego.
Każdy dysk logiczny ma swój katalog bieżcy. Jeśli w nazwie pliku podana
będzie nazwa dysku, a po niej nie nastąpi znak "\", to plik jest poszukiwany
idąc po ścieżce poczynając od bieżącego katlogu podanego dysku.
Typy plików
Systemy operacyjne wyróżniają typy plików, które są traktowane w sposób
specyficzny. Jeden spośród atrybutów pliku zwany typem pliku decyduje o
sposobie traktowania pliku przez system operacyjny. Najczęściej spotykane
typy plików to:
Katalogi. O katalogach była już mowa.
Pliki specjalne urządzeń - występują w systemach uniksopodobnych, służa
do nazywania urządzeń logicznych.
Kolejki FIFO, kolejki komunikatów, gniazda (ang. sockets), strumienie -
pliki realizujące bardziej złożone sposoby dostępu. Występują w systemach
uniksopodobnych i MS Windows NT.
Dowiązania sybmoliczne (ang. symbolic link) inaczej skróty (ang. shortcut).
Pliki które stanowią odwołanie do innych plików lub katalogów. Większość
operacji wykonywanych na tych plikach odnosi się w rzeczywistości do plików
przez nie wskazywanych.
Pliki wykonywalne (ang. executables): programy, komendy, skrypty (ang.
scripts), pliki wsadowe (ang. batch files) - pliki zawierające kod programu
do wykonania przez procesor lub komendy do wykonania przez powłokę (lub
inny interpreter).
Programy mogą być wyróżnione jak w systemach uniksopodobnych przez
posiadanie specjalnego uprawnienia do wykonania lub przez nadanie odpowiedniego
rozszerzenia, np. ".COM", ".EXE " i ".BAT" w MSDOSie.
Zwykłe pliki z danymi. Te dzielą się na podtypy, zależnie od posiadanego
rozszerzenia, tj przyrostka nazwy pliku zaczyającego się zazwyczja znakiem
kropki lub od tzw. liczby magicznej tj. pierwszych 2 lub 4 bajtów zawartości
pliku. Interpretacją zawartości plików z danymi róznych typów zajmują się
specjalizowane aplikacje (takie jak MS Word, AutoCAD itp.). System operacyjny
nie próbuje interpretować tych plików, co najwyżej powłoki użytkownika
dostarczają narzędzi do łatwego uruchamiania odpowiednich aplikacji, rejestrowania
nowych typów plików z danymi i kojarzenia z nimi aplikacji.
ASCII
Na osobne omówienie zasługuje plik tekstowy ASCII. Otrzymuje on często
rozszerzenia ".txt" lub ".asc". Bajty przechowywane w tym pliku interpretowane
są jako znaki alfanumeryczne kodowane w ASCII (Amercan Standard Code for
Information Interchange). Kod ten koduje duże i małe litery, cyfry, znaki
przestankowe oraz podstawowe symbole matematyczne.
Aby nadać danym przechowywanym w plikach ASCII formę podobną do dokumentów
pisanych na dwuwymiarowych kartkach, pewne znaki o kodach mniejszych od
32 oraz znak o kodzie 127 otrzymują specjalne znaczenie sterujące. Na znaczenia
przypisane znakom sterującym poważny wpływ miały terminale teletekstowe
(ang. teletype) stosowane w początkowych fazach rozwoju informatyki. Ważniejsze
znaki sterujące to:
CR (dziesiętny kod znaku: 13) - Carriage Return - powrót karetki. Oznacza
przesunięcie głowicy drukarki na początek wiersza.
LF (dziesiętny kod znaku: 10) - Line Feed - przejście do nowego wiersza.
W systemach uniksopodobnych służy do rozdzielnia wierszy pliku tekstowego.
W systemach Microsoftu do tego celu służy para nastepujących po sobie znaków
CR LF.
FF (dziesiętny kod znaku: 12) - Form Feed - przejście do nowej strony.
Powoduje wysunięcie strony z drukarki i przejście do drukowania na nowej.
HT (dziesiętny kod znaku: 9) - Horizontal Tab - tabulacja pozioma. Powoduje
przejście do następnej pozycji przy tworzeniu tabel, zazwyczaj przejście
do najbilższej kolumny znaków o numerze podzielnym przez 8.
BS (dziesiętny kod znaku: 8) - BackSpace - wymazywanie wsteczne. Nakazuje
wymazanie poprzedniego znaku.
ESC (dziesiętny kod znaku: 27) - Escape - kod ucieczki. Oznacza, że po
nim nastąpi zakodowana komenda dla urządzenie wyświetlającego lub drukującego.
W edytorach nazywany jest także metaznakiem (ang. meta, metacharacter)
służącym do konstruowania znaków niedostępnych bezpośrednio z klawiatury
lub komend.
Znak końca pliku (kod dziesiętny różny w róznych systemach). Oznacza koniec
pliku tekstowego lub transmisji tekstowej.
Oryginalny kod ASCII jest siedmiobitowy. Ósmy bit bajtu używany był jako
suma kontrolna. Obecnie wykorzystywane jest wszystkie osiem bitów. Tak
uzyskane dodatkowe 128 znaków służy do przedstawiania semigrafiki lub znaków
narodowych. Ponieważ jest to zamało do przedstawienia znaków narodowych,
choćby wszystkich alfabetów łacińskich, wprowadzono strony kodowe, t.j.
sposoby kodowania znaków spoza podstawowego alfabetu łacińskiego. W Polsce
obowiązuje norma przemysłowa zgodna z normą międzynarodową ISO 8895-2.
Popularnie stosowane oprogramowanie Microsoftu z wyjątkiem MS Windows NT
stosujących unikody (ang. unicode) nie jest zgodne z powyższymi normami
i wprowadza dwie własne strony kodowe CP 852 (MSDOS) i CP 1250 (MS Windows
XX).
Pliki ASCII ze wględu na prostotę kodowania informacji są powszechnie
wykorzystywane jako pliki konfiguracyjne, dzienniki odnotowujące błedy
programów, pliki przenoszące dane między różnymi aplikacjami lub przechowujące
dane w sposób ułatwiający użytkownikowi ingerencję niezależnie od aplikacji.
Poprzedni | Spis
treści | Następny
Wszelkie uwagi i komentarze: bartoszl@stud.ics.p.lodz.pl
Wyszukiwarka
Podobne podstrony:
C w7 pliki operacje we wysysop weSystemy wyklad ochrona we wySO 11 WE WYLINIE WE WYPorty we wywe,wyuklady we wysysop upsysop paObudź we mnie Venus SixteenWe wish you a Merry ChristmasŻYCIE WE WSZECHŚWIECIE(1)Tyszka Rodzina we współczesnym świecieWy pkm 14 SP IIO szukaniu diabła we wszystkich rzeczachwspolpraca;z;we;dwoje;pl,site,3więcej podobnych podstron