podsystem we/wy

Transkrypt

podsystem we/wy
System OS-9
Obsługa we–wy
Przykłady funkcji wejścia-wyjścia
#include <modes.h>
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): ilość bajtów rzeczywiście odczytanych (0 = koniec pliku, -1 = bład - kod w errno).
MW-ZPCiR-ICT-PWr
1
System OS-9
Obsługa we–wy
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żke, dajac dodatkowy lokalny
numer dla wcześniej otwartej ścieżki.
I$Create (Create New File) Tworzy nowy plik i otwiera ścieżke
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ń.
I$Close (Close Path) Zamyka otwarta ścieżke. 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.
MW-ZPCiR-ICT-PWr
2
System OS-9
Obsługa we–wy
Usługi wejścia-wyjścia w OS–9 (2/3)
I$MakDir (Make Directory File) Podobnie, jak w I$Create, przy
atrybytach directory.
I$ChgDir (Change Default Directory) Tymczasowo otwiera
ścieżke, wywołuje funkcje modułu obsługi plików i zamyka
ścieżke. Adres urzadzenia jest wpisywany do P$DIO - w
deskryptorze procesu (jako bieżacy katalog danych lub programów, w zależności od atrybutu execute).
I$Delete (Delete File) Tymczasowo otwiera ścieżke, wywołuje
moduł obsługi plików i zamyka ścieżke.
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-ZPCiR-ICT-PWr
3
System OS-9
Obsługa we–wy
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-ZPCiR-ICT-PWr
4
System OS-9
Obsługa we–wy
Hierarchiczna obsługa we–wy w OS–9
/!!
=> $ % system
!"" #
$% &
$'() *
$'+(, -* "./
-
' 0"1 2
$'+() ' 0"1 3
kernel
(IOMan)
File Manager
Device Driver
0" 4".
576
0" 4"8
.9 : 5;<
' 0"1 MW-ZPCiR-ICT-PWr
5
System OS-9
Obsługa we–wy
Modułowy podsystem we–wy
e=fg*hifwki)hxv
pWyzv{l+|}
e=fghigCjkClmonpqf/m!r
hm0s4tgsjCuv8r
?A@CB+D
ECECE
?A@GFIH+JK
ECECE
?A@LMN/KPOQDKRS
ECECE
?A@T+?*UWV
?A@XDKY
ECECE
?A@+ZN\[
ECECE
"sc332"
...
"SCF"
...
"term"
...
?A@]^]
?A@B4D
ECEE
?A@F*H+JK
ECEE
?A@LMN/KPO_T+JIH`
ECEE
?A@+abKWS
]WVKWHW[K
ZN/KC`
ECECE
"SCF"
?A@]^]
e-fg*hikq,jCmf}~uv{l4r
hm0s4tgsjCuv8r
?A@CB+D
ECECE
?A@GFIH+JK
ECECE
?A@LMN/KPOQDVc+Y
ECECE
?A@4abKWS
ECECE
?A@4D\B+`c[
?A@4D^KHd
ECECE
"sc332"
?A@]^]
MW-ZPCiR-ICT-PWr
6
System OS-9
Obsługa we–wy
Moduł deskryptora urzadzenia

(device descriptor)
adr.
C
module.h
asm
module.a
znaczenie
Adres portu
Wektor obsługi przerwań
Poziom przerwania
Priorytet przerwania
Zakres
możliwosci
urzadzenia
Adres nazwy modułu
obsługi plików
Adres nazwy sterownika
urzadzenia
Adres obszaru parametrów specjalnych
Zarezerwowane
Wielkość
obszaru
opcji (zależna od typu
urzadzenia)
Poczatek obszaru opcji –
typ urzadzenia
30
34
35
36
37
mport
mvector
mirqlvl
mpriority
mmode
M$Port
M$Vector
M$IRQLvl
M$Prior
M$Mode
38
mfmgr
M$FMgr
3A
mpdev
M$PDev
3C
mdevcon
M$DevCon
3E
46
48
...
mopt
mdtype
MW-ZPCiR-ICT-PWr
...
M$Opt
M$DTyp
7
System OS-9
Obsługa we–wy
Tablica odstep
 ów (offset) procedur obsługi funkcji
we–wy w module obsługi plików (file manager)
adres
nazwa
wykonywana czynność
0000
0002
0004
0006
0008
000A
Create
Open
MakDir
ChgDir
Delete
Seek
000C
000E
0010
0012
0014
0016
0018
Read
Write
ReadLn
WriteLn
GetStat
SetStat
Close
Tworzenie nowego pliku
Otwieranie istniejacego pliku
Tworzenie katalogu
Zmiana katalogu bieżacego
Kasowanie pliku
Przesuwanie wskaźnika pozycji
odczytu/zapisu w pliku
Odczyt znaku (bajtu) z pliku
Zapis znaku (bajtu) do pliku
Odczyt linii (rekordu) z pliku
Zapis linii (rekordu) do pliku
Odczyt statusu pliku
Ustawienie statusu pliku
Zamykanie pliku
MW-ZPCiR-ICT-PWr
8
System OS-9
Obsługa we–wy
Moduł sterownika urzadzenia

(device driver)
adr.
C
module.h
asm
module.a
znaczenie
30
34
38
3C
mexec
mexcpt
mdata
mdinit
M$Exec
M$Excpt
M$Mem
M$DInit
3E
mdread
M$DRead
40
mdwrite
M$DWrite
42
mdgetstat
M$DGetStat
44
mdsetstt
M$DSetStat
46
mdterm
M$DTerm
48
mderror
M$DError
Wskaźnik startu programu
Wskaźnik obsługi TRAP
Wielkość obszaru danych
Odstep od procedury Init
(inicjalizacja urzadzenia)
Odstep procedury Read
(odczyt z urzadzenia)
Odstep procedury Write (zapis na urzadzeniu)
Odstep procedury GetStat
(odczyt statusu urzadzenia)
Odstep procedury SetStat (ustawienie statusu
urzadzenia)
Odstep procedury Term
(zakończenie
pracy
urzadzenia)
Odstep procedury Error
(obsługa wyjatków - 0=brak)
MW-ZPCiR-ICT-PWr
9
System OS-9
Obsługa we–wy

Systemowa tablica urzadze
ń (device table)
Statyczna tablica o stałej wielkości, wskazywana przez
zmienna globalna D DevTbl, zawierajaca struktury opisujace zainicjowane urzadzenia:
adres
nazwa
znaczenie
0000
V$DRIV
0004
V$STAT
0008
V$DESC
000C
V$FMGR
0010
V$USRS
Adres
modułu
sterownika
urzadzenia (device driver)
Adres bazowy pamieci statycznej przydzielonej sterownikowi
urzadzenia
Adres
modułu
deskryptora
urzadzenia (device descriptor)
Adres modułu obsługi plików dla
urzadzenia (file manager)
Licznik użyć urzadzenia
MW-ZPCiR-ICT-PWr
10
System OS-9
Obsługa we–wy

Pamie ć statyczna urzadzenia
Obszar zmiennych roboczych przydzielony sterownikowi
w trakcie inicjalizacji. Na poczatku zawiera stałe pola:
adres
nazwa
znaczenie
0000
0004
0006
V PORT
V LPRC
V BUSY
0008
V WAKE
000A
V Paths
000E
002E
...
V USER
Adres bazowy portu urzadzenia
ID ostatnio aktywnego procesu
ID aktualnie aktywnego procesu
(0=brak)
ID procesu, który ma zostać obudzony przez sterownik
Lista ścieżek otwartych na
urzadzeniu
Zarezerwowane
Poczatek obszaru roboczego dla
sterownika urzadzenia
MW-ZPCiR-ICT-PWr
11
System OS-9
Obsługa we–wy
Deskryptor ścieżki (path descriptor)
adres
nazwa
znaczenie
0000
0002
0003
0004
0008
000a
000e
0012
0014
0016
001a
001c
001e
0022
0026
0080
PD
PD
PD
PD
PD
PD
PD
PD
PD
MOD
CNT
DEV
CPR
RGS
BUF
USER
PD
PD
PD
PD
PD
...
PD
Paths
COUNT
LProc
ErrNo
SysGlob
Systemowy numer ścieżki
Flagi trybu
Licznik użyć (stary)
Adres w tablicy urzadzeń
ID aktualnego procesu
Adres ramki stosu procesu
Adres bufora danych
Numer grupy ...
... i ID użytkownika
Nastepna scieżka na urzadzeniu
Licznik użyć scieżki (nowy)
ID ostatniego procesu
Numer ostatniego błedu
Wskaźnik pamieci globalnej
Zarezerwowane
Obszar opcji
MW-ZPCiR-ICT-PWr
OPT
12
System OS-9
Obsługa we–wy
Systemowa tablica ścieżek (path descriptor table)
Tablica wskazywana przez zmienna globalna D PthDBT,
zawierajaca adresy deskryptorów otwartych ścieżek
dostepu do plików (indeks tablicy odpowiada numerowi
ścieżki):
indeks
odstep
zawartość
0
0000
0002
0004
0008
000C
0010
0014
...
Wielkość tablicy ścieżek
Rozmiar deskryptora (256)
Adres deskryptora #1 (0=brak)
Adres deskryptora #2 (0=brak)
Adres deskryptora #3 (0=brak)
Adres deskryptora #4 (0=brak)
Adres deskryptora #5 (0=brak)
...
1
2
3
4
5
...
MW-ZPCiR-ICT-PWr
13
System OS-9
Obsługa we–wy
Tablica translacji ścieżek procesu
32-elementowa tablica (P$Path) w deskryptorze procesu zawierajaca systemowe numery otwartych ścieżek
dostepu do plików (indeks tablicy odpowiada lokalnemu
numerowi ścieżki):
adres
indeks
zawartość
0168
0
016A
1
016E
2
0170
3
0172
4
...
01A6
...
31
Numer ścieżki systemowej
stdin (0=brak)
Numer ścieżki systemowej
stdout (0=brak)
Numer ścieżki systemowej
stderr (0=brak)
Numer ścieżki systemowej
lokalnej ścieżki #3 (0=brak)
Numer ścieżki systemowej
lokalnej ścieżki #4 (0=brak)
...
Numer ścieżki systemowej
lokalnej ścieżki #31 (0=brak)
MW-ZPCiR-ICT-PWr
dla
dla
dla
dla
dla
dla
14