urz ˛adzenia

Transkrypt

urz ˛adzenia
Obsługa wejścia–wyjścia w OS-9
Marek Wnuk
< [email protected] >
ZPCiR I-6 PWr
MW: RTOS6 – p.1/26
Przykłady funkcji wejścia-wyjścia
int open (char * name, short mode);
wejście (argumenty):
name wskaźnik do nazwy pliku,
mode tryb dostepu
˛
do pliku (opis w modes.h);
wyjście (wynik): lokalny numer ścieżki (-1 = bład
˛ - kod w errno).
int read (int path, char * buf, unsigned count);
wejście (argumenty):
path lokalny numer ścieżki,
buf wskaźnik bufora dla odczytu,
count maksymalna ilość bajtów do odczytania;
wyjście (wynik): liczba bajtów rzeczywiście odczytanych (0 =
koniec pliku, -1 = bład
˛ - kod w errno).
MW: RTOS6 – p.2/26
Usługi wejścia-wyjścia w OS–9 (1/3)
I$Attach (Attach I/O Device) Przyłacza
˛
urzadzenie
˛
zapewniajac
˛
jego inicjalizacje,
˛ przydzielenie pamieci
˛ statycznej,
umieszczenie w tablicy urzadze
˛
ń.
I$Detach (Detach I/O Device) Odłacza
˛
urzadzenie.
˛
I$Dup (Duplicate Path) Powiela ścieżk˛e, dajac
˛ dodatkowy lokalny
numer dla wcześniej otwartej ścieżki.
I$Create (Create New File) Tworzy nowy plik i otwiera ścieżk˛e
dostepu
˛
do niego.
I$Open (Open Existing File) Tworzony deskryptor ścieżki ma pola
PD_COUNT i PD_CNT ustawione na 1, PD_MOD - zgodnie
z podanym trybem. PD_USER ustawia sie˛ na numer grupy i
użytkownika procesu. Po wywołaniu I$Attach do PD_DEV
wpisuje sie˛ adres miejsca w tablicy urzadze
˛
ń.
MW: RTOS6 – p.3/26
Usługi wejścia-wyjścia w OS–9 (2/3)
I$Close (Close Path) Zamyka otwarta˛ ścieżk˛e. PD_COUNT i
PD_CNT sa˛ zmniejszane, jeśli żaden inny proces z niej nie
korzysta - jadro
˛
(kernel) wywołuje funkcje˛ close modułu
obsługi plików.
I$MakDir (Make Directory File) Podobnie, jak w I$Create, przy
atrybytach directory.
I$ChgDir (Change Default Directory) Tymczasowo otwiera
ścieżk˛e, wywołuje funkcje˛ modułu obsługi plików i zamyka
ścieżk˛e. Adres urzadzenia
˛
jest wpisywany do P$DIO - w
deskryptorze procesu.
I$Delete (Delete File) Tymczasowo otwiera ścieżk˛e, wywołuje
moduł obsługi plików i zamyka ścieżk˛e.
I$Seek (Change Current Position) Przestawia bieżacy
˛ wskaźnik
w pliku (w otwartej ścieżce).
I$Read (Read Data) Czyta do bufora dane bez ich
modyfikowania z otwartej ścieżki.
MW: RTOS6 – p.4/26
Usługi wejścia-wyjścia w OS–9 (3/3)
I$Write (Write Data) Pisze z bufora dane bez ich modyfikowania
do otwartej ścieżki.
I$ReadLn (Read Line of ASCII Data) Działa jak I$Read, lecz
kończy czytanie na końcu linii (w OS–9 zazwyczaj CR=$13).
I$WritLn (Write Line of ASCII Data) Działa jak I$Write, lecz
zakłada, że moduł obsługi plików kończy na CR i dokonuje
prostych konwersji (SCF - LF po CR, pauza po nowej stronie
i rozwijanie tabulacji).
I$GetStt (Get Path Status) Pozwala na dostep
˛ do takich
własności urzadze
˛
ń we/wy, które nie sa˛ osiagalne
˛
w inny
sposób. Wymaga otwartej ścieżki. Przy wywołaniu podaje sie
numer funkcji, który jest specyficzny dla sterownika
urzadzenia.
˛
I$SetStt (Set Path Status) Jak I$GetStt, ale dla zadawania
parametrów urzadzeniom
˛
i realizowania specyficznych
funkcji.
MW: RTOS6 – p.5/26
Hierarchiczna obsługa we–wy w OS–9
RSURJUDPRZDQLH
*GDQLH
SURJUDP
X*\WNRZQLND
RGELyUZ\QLNX
system
UR]SR]QDQLH
Z\EyUSURJUDPX
REVáXJL
kernel
(IOMan)
SU]HND]DQLH
Z\QLNX
REVáXJDSRQDG
SR]LRPHPVSU]
WX
File Manager
NRRUG\QDFMD
SU]HND]DQLD
Z\QLNX
REVáXJDVSU]
WX
Device Driver
RGGDQLHZ\QLNX
GDQ\FK
VSU]
W
MW: RTOS6 – p.6/26
Modułowy podsystem we–wy
PRGXáREVáXJL
SOLNyZ
PRGXáGHVNU\SWRUD
XU]G]HQLD
0,'
01DPH
07\SH 'HVF
0)0JU
03'HY
02SW
"sc332"
...
"SCF"
...
"term"
...
0&5&
0,'
01DPH
07\SH )PDQ
0([HF
&UHDWH
2SHQ
"SCF"
0&5&
PRGXáVWHURZQLND
XU]G]HQLD
0,'
01DPH
07\SH 'ULY
0([HF
0',QLW
0'5HDG
"sc332"
0&5&
MW: RTOS6 – p.7/26
Moduł deskryptora urzadzenia
˛
adr.
C
asm
znaczenie
module.h
module.a
30
_mport
M$Port
Adres portu
34
_mvector
M$Vector
Wektor obsługi przerwań
35
_mirqlvl
M$IRQLvl
Poziom przerwania
36
_mpriority
M$Prior
Priorytet przerwania
37
_mmode
M$Mode
Zakres możliwosci urzadzenia
˛
38
_mfmgr
M$FMgr
Adres nazwy modułu obsługi plików
3A
_mpdev
M$PDev
Adres nazwy sterownika urz.
3C
_mdevcon
M$DevCon
Adres obszaru parametrów spec.
3E
...
...
Zarezerwowane
46
_mopt
M$Opt
Wielkość obszaru opcji
48
_mdtype
M$DTyp
Poczatek
˛
obszaru opcji – typ urz.
MW: RTOS6 – p.8/26
Tablica wejść modułu obsługi plików
adres
nazwa
wykonywana czynność
0000
Create
Tworzenie nowego pliku
0002
Open
Otwieranie istniejacego
˛
pliku
0004
MakDir
Tworzenie katalogu
0006
ChgDir
Zmiana katalogu bieżacego
˛
0008
Delete
Kasowanie pliku
000A
Seek
Przesuwanie wskaźnika pozycji odczytu/zapisu
000C
Read
Odczyt znaku (bajtu) z pliku
000E
Write
Zapis znaku (bajtu) do pliku
0010
ReadLn
Odczyt linii (rekordu) z pliku
0012
WriteLn
Zapis linii (rekordu) do pliku
0014
GetStat
Odczyt statusu pliku
0016
SetStat
Ustawienie statusu pliku
0018
Close
Zamykanie pliku
MW: RTOS6 – p.9/26
Tablica wejść sterownika urzadzenia
˛
adr.
C
asm
znaczenie
module.h
module.a
3C
_mdinit
M$DInit
Odstep
˛ od procedury Init (inicjalizacja urzadzenia)
˛
3E
_mdread
M$DRead
Odstep
˛ procedury Read (odczyt z
urzadzenia)
˛
40
_mdwrite
M$DWrite
Odstep
˛ procedury Write (zapis na
urzadzeniu)
˛
42
_mdgetstat
M$DGetStat
Odstep
˛ procedury GetStat (odczyt statusu urzadzenia)
˛
44
_mdsetstt
M$DSetStat
Odstep
˛ procedury SetStat (ustawienie statusu urzadzenia)
˛
46
_mdterm
M$DTerm
Odstep
˛ procedury Term (zakończenie pracy urzadzenia)
˛
48
_mderror
M$DError
Odstep
˛ procedury Error (obsługa
wyjatków
˛
- 0=brak) MW: RTOS6 – p.10/26
Systemowa tablica urzadze
˛ ń
Statyczna tablica device table o stałej wielkości, wskazywana
przez zmienna˛ globalna˛ D_DevTbl, zawierajaca
˛ struktury
opisujace
˛ zainicjowane urzadzenia:
˛
adres
nazwa
znaczenie
0000
V$DRIV
Adres modułu sterownika urzadzenia
˛
(device
driver)
0004
V$STAT
Adres bazowy pamieci
˛ statycznej przydzielonej sterownikowi urzadzenia
˛
0008
V$DESC
Adres modułu deskryptora urzadzenia
˛
(device
descriptor)
000C
V$FMGR
Adres modułu obsługi plików dla urzadzenia
˛
(file manager)
0010
V$USRS
Licznik użyć urzadzenia
˛
MW: RTOS6 – p.11/26
Pami˛eć statyczna urzadzenia
˛
Obszar zmiennych roboczych przydzielony sterownikowi w
trakcie inicjalizacji. Na poczatku
˛
zawiera stałe pola:
adres
nazwa
znaczenie
0000
V_PORT
Adres bazowy portu urzadzenia
˛
0004
V_LPRC
ID ostatnio aktywnego procesu
0006
V_BUSY
ID aktualnie aktywnego procesu (0=brak)
0008
V_WAKE
ID procesu, który ma zostać obudzony przez
sterownik
000A
V_Paths
Lista ścieżek otwartych na urzadzeniu
˛
000E
...
Zarezerwowane
002E
V_USER
Poczatek
˛
obszaru roboczego dla sterownika
urzadzenia
˛
MW: RTOS6 – p.12/26
Deskryptor ścieżki (path descriptor)
adres
nazwa
znaczenie
0000
PD_PD
Systemowy numer ścieżki
0002
PD_MOD
Flagi trybu
0004
PD_DEV
Adres w tablicy urzadze
˛
ń
0008
PD_CPR
ID aktualnego procesu
000a
PD_RGS
Adres ramki stosu procesu
000e
PD_BUF
Adres bufora danych
0012
PD_USER
Numer grupy i ID użytkownika
0016
PD_Paths
Nastepna
˛
scieżka na urzadzeniu
˛
001a
PD_COUNT
Licznik użyć scieżki
001c
PD_LProc
ID ostatniego procesu
001e
PD_ErrNo
Numer ostatniego błedu
˛
0022
PD_SysGlob
Wskaźnik pamieci
˛ globalnej
0080
PD_OPT
Obszar opcji
MW: RTOS6 – p.13/26
Systemowa tablica ścieżek
Tablica wskazywana przez zmienna˛ globalna˛ D_PthDBT,
zawierajaca
˛ adresy deskryptorów otwartych ścieżek dost˛epu
do plików (indeks tablicy odpowiada numerowi ścieżki):
indeks
odstep
˛
zawartość
0
0000
Wielkość tablicy ścieżek
0002
Rozmiar deskryptora (256)
1
0004
Adres deskryptora #1 (0=brak)
2
0008
Adres deskryptora #2 (0=brak)
3
000C
Adres deskryptora #3 (0=brak)
4
0010
Adres deskryptora #4 (0=brak)
5
0014
Adres deskryptora #5 (0=brak)
...
...
...
MW: RTOS6 – p.14/26
Tablica translacji ścieżek procesu
32-elementowa tablica (P$Path) w deskryptorze procesu
zawierajaca
˛ systemowe numery otwartych ścieżek dost˛epu do
plików (indeks tablicy odpowiada lokalnemu numerowi
ścieżki):
adres
indeks
zawartość
0168
0
Numer ścieżki systemowej dla stdin (0=brak)
016A
1
Numer ścieżki systemowej dla stdout (0=brak)
016E
2
Numer ścieżki systemowej dla stderr (0=brak)
0170
3
Numer ścieżki systemowej dla lokalnej ścieżki #3
(0=brak)
0172
4
Numer ścieżki systemowej dla lokalnej ścieżki #4
(0=brak)
...
...
...
01A6
31
Numer ścieżki systemowej dla lokalnej ścieżki
#31 (0=brak)
MW: RTOS6 – p.15/26
Nazwy ścieżek dost˛epu do plików
I$Create, I$Open, I$MakDir, I$ChgDir, I$Delete korzystaja˛ z
nazwy ścieżki (pathname) jako parametru wejściowego.
Dopuszczalne znaki w nazwie (poprawność sprawdza usługa
F$PrsNam): [A-Z], [a-z], [0-9], ’.’, ’_’, ’$’; separatorem pól
nazwy jest dowolny znak niedopuszczalny.
Przykład poprawnej nazwy ścieżki:
/d0/usr/ala/kot.c
Kernel interpretuje pierwsze pole w nazwie ścieżki
zaczynajacej
˛ si˛e od ’/’ jako nazw˛e urzadzenia
˛
(nazw˛e modułu
deskryptora urzadzenia
˛
w systemie OS–9), a cała˛ nazw˛e
pozostawia dla procedury w module File Manager:
d0 – deskryptor napedu
˛
dysku elastycznego
Dla urzadze
˛ ń bez drzewiastego systemu plików (np. typu
DT_SCF) nazwa ścieżki musi zawierać wyłacznie
˛
nazw˛e
urzadzenia
˛
(np. /term ).
MW: RTOS6 – p.16/26
Klasy urzadze
˛ ń wejścia-wyjścia w OS–9
Opisane przez kod M$DTyp w deskryptorze urzadzenia
˛
kod
nazwa
typ urzadzenia
˛
0
DT_SCF
znakowe o dostepie
˛
szeregowym (drukarka,...)
1
DT_RBF
blokowe o dostepie
˛
dowolnym (dyski)
2
DT_Pipe
pseudopliki (łacza
˛
– bufory FIFO)
3
DT_SBF
blokowe o dostepie
˛
szeregowym (taśma)
4
DT_NFM
pliki dostepne
˛
sieciowo
5
DT_CDFM
pliki na nośniku CD–I
6
DT_UCM
komunikacja z użytkownikiem CD–I
7
DT_SOCK
logiczne urzadzenie
˛
sieciowe (gniazdko BSD)
8
DT_PTTY
pseudo–terminal
9
DT_INET
internetowe urzadzenie
˛
sieciowe (protokół IP)
10
DT_NRF
nieulotna pamieć
˛ RAM (CD–I)
11
DT_GFM
urzadzenie
˛
do wyświetlania grafiki (CD-I)
MW: RTOS6 – p.17/26
Funkcje FM dla różnych klas urzadze
˛ ń
nazwa
typ urzadzenia
˛
funkcji
DT_SCF
DT_RBF
Create
+
+
Open
+
+
MakDir
E$BPNAM
+
ChgDir
E$BPNAM
+
Delete
E$BMODE
+
Seek
–
+
Read
+
+
Write
+
+
ReadLn
+
+
WriteLn
+
+
GetStat
+
+
SetStat
+
+
Close
+
+
MW: RTOS6 – p.18/26
Uwagi o module zarzadzania
˛
plikami
Jeden moduł zarzadzania
˛
plikami (File Manager) może
pracować z wieloma różnymi sterownikami urzadze
˛ ń.
Twórca modułu musi wyspecyfikować:
funkcje i konwencje przekazywania parametrów dla
procedur sterownika urzadzenia
˛
(oprócz M$DInit i
M$DTerm);
strukture˛ obszaru opcji w deskryptorze urzadzenia
˛
(M$Opt) i deskryptorze ścieżki (PD_OPT);
strukture˛ obszaru pamieci
˛ dla File Manager w
deskryptorze ścieżki (PD_ );
strukture˛ obszaru pamieci
˛ dla File Manager w pamieci
˛
statycznej urzadzenia
˛
(V_ ).
MW: RTOS6 – p.19/26
Parametry od kernel dla procedur FM
Rejestry procesora:
(a1) = adres deskryptora ścieżki
(a4) = adres deskryptora procesu wywołujacego
˛
(a5) = adres ramki stosu rejestrów użytkownika
(a6) = adres globalnych zmiennych systemowych (D_ )
Deskryptor ścieżki:
PD_CPR = ID procesu wywołujacego
˛
PD_LProc = ID procesu wywołujacego
˛
PD_RGS = adres ramki stosu rejestrów użytkownika
UWAGA: I$Open i I$Create tworza˛ i pozostawiaja˛
deskryptor ścieżki, I$MakDid, I$ChgDir i I$Delete
tworza˛ tymczasowy deskryptor ścieżki (usuwany po
zakończeniu usługi), a I$Close – usuwa deskryptor
ścieżki, jeśli już nie jest używany (PD_COUNT=0).
MW: RTOS6 – p.20/26
Obsługa I$Read i I$Write
Przesłanie zadanej liczby bajtów z / na urzadzenie
˛
bez
przetwarzania danych.
RBF:
E$EOF (end–of–file-error ) jest zwracany, gdy przy odczycie
pierwszego bajtu wskaźnik pozycji odczytu jest na końcu pliku.
SCF:
E$EOF (end–of–file-error ) jest zwracany, gdy pierwszy odczytany
znak jest równy PD_EOF (end–of–file-character );
PD_EOR (end–of–record ) 6= 0 ⇒ zakończenie I$Read na znaku
równym PD_EOR;
PD_PAU (page–pause–flag ) 6= 0 ⇒ zatrzymanie wyjścia po
PD_PAG (page–length ) znakach końca linii (< CR >) od
ostatniego wejścia. .
MW: RTOS6 – p.21/26
Obsługa I$ReadLn i I$WriteLn
Przesłanie zadanej liczby znaków z / na urzadzenie
˛
z
przetwarzaniem.
RBF: jak w I$Read, I$Write, koniec na znaku < CR >.
SCF: jak w I$Read, I$Write, dodatkowo – możliwość edycji linii
wejściowej, koniec na znaku < CR >;
Flagi konwersji w opcjach deskryptora ścieżki:
PD_ALF < LF > automatycznie dodawany po
< CR >;
PD_UPC konwersja na duże litery.
Znaki sterujace
˛ edycja˛ linii wejściowej definiowane w opcjach
deskryptora ścieżki:
PD_PSC znak zatrzymujacy
˛ wyjście przed < CR >
(ˆ S);
PD_Tab znak tabulacji (ˆ I) – szerokość = PD_Tabs;
PD_BSP znak cofania kursora (ˆ H);
PD_DEL znak kasowania linii (ˆ X).
MW: RTOS6 – p.22/26
Kody I$GetStt i I$SetStt dla RBF
Kody przekazywane do sterownika urzadzenia
˛
przy wywołaniach
M$DGetStat i M$SetStat (definiowane dowolnie dla różnych klas
urzadze
˛
ń). E$UnkSvc - kod nieznany dla danej klasy.
GetStat:
SS_Ready sprawdzenie dostepności
˛
danych,
SS_Size odczyt rozmiaru pliku,
SS_Pos odczyt położenia wskaźnika w pliku,
SS_EOF sprawdzenie warunku końca pliku,
SS_FD odczyt sektora deskryptora pliku na dysku;
SetStat:
SS_Open zawsze przy I$Create i I$Open,
SS_Close zawsze przy I$Close,
SS_Opt modyfikacja opcji deskryptora ścieżki,
SS_Size ustawienie nowego rozmiaru pliku,
SS_FD modyfikacja deskryptora pliku na dysku,
SS_Attr zmiana zezwoleń na dostep
˛ do pliku
MW: RTOS6 – p.23/26
Sekwencja wywołań procedur we–wy
program
kernel
FMan
Driv
,5HDG
)5HDG
'5HDG
,6OHHS
USER
SYSTEM
RDY
HW
MW: RTOS6 – p.24/26
Ochrona zasobów (ścieżki) w OS–9
Kernel chroni ścieżki przed równoczesnym dost˛epem
korzystajac
˛ z PD_CPR (numer bieżacego
˛
procesu–użytkownika w deskryptorze ścieżki):
wejście do procedury usługowej (I$ ):
PD_CPR = N 6= 0 ⇒ F$IOQu
PD_CPR = 0 ⇒ PD_CPR := P$ID
wyjście z procedury usługowej (I$ ):
PD_CPR := 0
P$IOQN = N 6= 0 ⇒ WakeUp #N
UWAGA: Kernel nie zapewnia ochrony przed równoczesnym
dostepem
˛
do urzadze
˛
ń, ponieważ można otworzyć wiele
różnych ścieżek dostepu
˛
do plików na wspólnym urzadzeniu.
˛
MW: RTOS6 – p.25/26
Ochrona zasobów (urzadzenia)
˛
w OS–9
File Manager może chronić urzadzenia
˛
przed równoczesnym
dost˛epem. SCF (Sequential Character File Manager) i RBF
(Random Block File Manager) – korzystaja˛ z V_BUSY (numer
bieżacego
˛
procesu użytkownika w pami˛eci statycznej
urzadzenia):
˛
wejście do procedury obsługi plików:
V_BUSY = N 6= 0 ⇒ F$IOQu
V_BUSY = 0 ⇒ V_BUSY := P$ID
wyjście z procedury obsługi plików:
V_BUSY := 0
V_BUSY = N 6= 0 ⇒ WakeUp #N
˛
po zakończeniu dostepu
˛
UWAGA: SCF nie zwalnia urzadzenia
(zostanie ono zwolnione przez kernel po zakończeniu usługi
we–wy), co zapewnia niepodzielność linii tekstu przy pisaniu
na urzadzenie
˛
przez wiele procesów.
MW: RTOS6 – p.26/26

Podobne dokumenty