Dizajn

I/O System - FreeBSD

Osnovni model UNIX-ovog ulazno/izlaznog sistema je sekvenca bajtova kojoj se može pristupiti bilo nasumično (random access) bilo sekvencijalno (sequential acces).

Različiti programi rade sa različitim strukturama podataka, ali ih kernel ne razlikuje. Uobičajeno je da se tekstualni fajlovi posmatraju kao niz linija ASCII karaktera koje se završavaju karakterom za novu liniju. Sto se tiče kernela svi fajlovi predstavljaju ulazno/izlazni tok bajtova (I/O stream).

UNIX procesi koriste deskriptore za pristup I/O stream-u. Deskriptori su mali, neoznačeni celi brojevi koje vraćaju open i socket sistemski pozivi. Deskriptori predstavljaju odgovarajuće objekte koje kernel podržava.

Sistemski poziv open se koristi za kreiranje novog, praznog fajla, ili za otvaranje postojećeg. Prenos podataka iz i u objekat kog deskriptor predstavlja obavlja se pomoću read i write sistemskih poziva, a sistemski poziv close se koristi sa oslobadjanje deskriptora.

Deskriptori mogu da predstavljaju file, pipe i socket.

Fajl
Niz bajtova. On ima svoje ime i postoji dokle god postoji referenca na njega u fajl sistemu ili dok god neki proces ima otvoren deskriptor koji ga predstavlja. I/O uredjajima se pristupa kao fajlovima.
Pipe
Takodje niz bajtova, ali se, za razliku od fajlova koristi kao ulazno/izlazni tok podataka u jednom smeru. Nema ime, tako da ne može biti otvoren open sistemskim pozivom. Umesto njega koristi se sistemski poziv pipe. Kernel takodje podržava named pipe (FIFO - First In First Out) - pipe koji postoji u fajl sistemu. Kada dva procesa žele da komuniciraju oni otvore FIFO, jedan za čitanje, jedan za pisanje.
Socket
Privremeni objekat koji se, kao i pipe koristi za medjuprocesnu komunikaciju. On postoji samo dok postoji otvoren deskriptor kojim je predstavljen. U suštini socket je generalizovan dvosmerni pipe. Socket pruža mogućnost komunikacije izmedju dva procesa koji se izvršavaju na različitim mašinama, čak i pod različitim operativnim sistemima.

Svakom procesu kernel prilikom startovanja obezbedjuje tri deskriptora: standardni ulaz (0), standardni izlaz (1) i standardna greška (2). Obično ova tri deskriptora predstavljaju korisnikov terminal. Program prima podatke čitajući standardni ulaz (tastaturu), a izlaz i greške ispisuje po ekranu. Ovi deskriptori mogu da predstavljaju i druge objekte osim tastature i ekrana, npr. fajlove. Ovo se zove I/O preusmeravanje. Pipe je način preusmeravanja izlaza jednog programa u ulaz drugog. Ako jedan program preusmeri izlaz, a drugi ulaz na pipe dobija se pipeline (cevovod).

Svi hardverski uredjaji su predstavljeni fajlovima i programi im mogu pristupiti koristeći iste sistemske pozive kao i za obične fajlove. Terminalima, štampačima i drugim sličnim uredjajima pristupa se preko I/O toka. Hardverski uredjaji se mogu podeliti na struktuirane i nestruktuirane. Nestruktuirani (character) uredjaji obradjuju znak po znak (komunikacione linije), a struktuirani (block) obradjuju vece grupe podataka od jednom, na primer, blokove od 512 bajtova (diskovi, magnetne trake, cdrom-ovi).

2000 - 2018, Autor - Marko Uskoković. Izrada i web prostor - Goran Aleksić.