background image

Systemy Operacyjne – semestr drugi

Wyk ad trzynasty

ł

Warstwa operacji blokowych w Linuksie

 

Blokowe urz dzenia wej cia – wyj cia s  bardziej skomplikowane w obs udze ni  urz dzenia znakowe. W przeciwie stwie do tych ostatnich pozwalaj  one bowiem na

ą

ś

ś

ą

ł

ż

ą

ń

ą

swobodny dost p do zgromadzonych w nich danych. Oznacza to,  e umo liwiaj  one wyszukiwanie pozycji, gdzie s  zgromadzone interesuj ce nas dane, lub gdzie jest

ę

ż

ż

ą

ą

ą

miejsce, w którym te dane chcemy zapisa . Musi wi c istnie  jaki  mechanizm pozwalaj cy na dwukierunkow  zmian  po o enia wska nika danych wzgl dem bie

cej

ć

ę

ć

ś

ą

ą

ę

ł ż

ź

ę

żą

pozycji. Wszystkie urz dzenia blokowe s  wyposa one w system plików okre lonego typu. Najcz

ciej spotykanymi urz dzeniami blokowymi s  oczywi cie dyski twarde,

ą

ą

ż

ś

ęś

ą

ą

ś

ale istniej  równie  inne urz dzenia, które zaliczamy do tej kategorii (CD, DVD, pami ci flash). Czas dost pu do tych urz dze  (w szczególno ci do dysku twardego) jest

ą

ż

ą

ę

ę

ą

ń

ś

jednym  z  najbardziej  znacz cych  czynników   maj cych  wp yw   na  wydajno

 ca ego   systemu  komputerowego.  Z  tego  wzgl du,   a  tak e   z  uwagi   na  skomplikowanie

ą

ą

ł

ść

ł

ę

ż

zagadnienia, w j drze systemu Linux wyodr bniono osobny podsystem, zajmuj cy si  obs ug  takich urz dze , który 

ą

ę

ą

ę

ł

ą

ą

ń

nazywa si  warstw  blokowych operacji wej cia –

ę

ą

ś

wyj cia (

ś

ang. block IO layer). 

Urz dzenia   blokowe   przechowuj   dane   w   sektorach,   które   najcz

ciej   maj   wielko

  512   bajtów   (cho   nie   jest   to   regu ).   Sektor   jest   równocze nie   najmniejsz

ą

ą

ęś

ą

ść

ć

łą

ś

ą

jednostk   pami ci   urz dzenia   blokowego,   któr   mo na   zaadresowa .  

ą

ę

ą

ą

ż

ć Pojedyncza  operacja   wej cia   –   wyj cia   mo e   obejmowa   jeden   lub   wi ksz   liczb   sektorów.

ś

ś

ż

ć

ę

ą

ę

Wi kszo

 systemów  operacyjnych  nie  pos uguje   si  bezpo rednio   sektorami, ale 

czy je w zazwyczaj  wi ksze jednostki  zwane  blokami

ę

ść

ł

ę

ś

łą

ę

.  Blok mo e mie  taki sam

ż

ć

rozmiar  jak  sektor,  lub  jego  rozmiar   mo e by  

ż

ć wielokrotno ci

ś ą  rozmiaru   sektora.  W  systemie  Linux  przyj to,  celem uproszczenia   kodu   j dra,   e  bloki   b d   mia y

ę

ą

ż

ę ą

ł

wielko

 mniejsz  lub równ   jednej stronie, cho  to ograniczenie w przysz ych wersjach systemu mo e znikn

. Bloki na dane pochodz ce z odczytu lub zawieraj ce

ść

ą

ą

ć

ł

ż

ąć

ą

ą

dane do zapisu do urz dzenia blokowego s  umieszczone w pami ci operacyjnej, w

ą

ą

ę

 buforach. Ka dy z takich buforów wyposa ony jest w nag ówek okre lony struktur

ż

ż

ł

ś

ą

typu  struct buffer_head, przechowuj cy dane niezb dne do prawid owego zarz dzania takim buforem. Do tych danych nale

 mi dzy innymi: stan bufora, który jest

ą

ę

ł

ą

żą

ę

przechowywany   w   polu  b_state  tej   struktury.   Stan   ten   mo e   by   okre lony   jednym   lub   kilkoma   znacznikami   nale

cymi   do   wyliczenia  

ż

ć

ś

żą

bh_state_bits.   Znacznik

BH_Uptodate  oznacza,  e bufor zawiera zsynchronizowane z no nikiem dane,  

ż

ś

BH_Dirty  –  e zawarto

 bufora zosta a zmodyfikowana i powinna zosta  zapisana na

ż

ść

ł

ć

no niku,  

ś

BH_Lock  –   bufor   jest   chroniony   przed   dost pem   wspó bie nym   na   czas   realizowanej   w a nie   operacji   wej cia   –   wyj cia,  

ę

ł

ż

ł ś

ś

ś

BH_Req  –   bufor   jest   u ywany

ż

w realizowanym   zleceniu,  BH_Update_Lock  –   u ywany   do   oznaczenia   pierwszego   bufora   ze   wszystkich   znajduj cych   si   na   stronie   jako   chronionych   przed

ż

ą

ę

wspó bie nym dost pem na czas realizacji operacji wej cia-wyj cia,  

ł

ż

ę

ś

ś

BH_Mapped – bufor jest poprawnym buforem odwzorowanym w bloku urz dzenia, 

ą

BH_New – bufor

zosta  przydzielony,  ale  jeszcze  nie  by  wykorzystywany,  

ł

ł

BH_Async_Read  – bufor  jest u ywany  w operacji asynchronicznego  odczytu,  

ż

BH_Async_Write  – bufor  jest

u ywany w operacji asynchronicznego  zapisu,  

ż

BH_Delay  – bufor  nie zosta  jeszcze skojarzony z blokiem urz dzenia.,  

ł

ą

BH_Boundary  – bufor  opisuje  blok graniczny

ci g ego obszaru bloków, nast pny blok nie nale y ju  do tego obszaru,  

ą ł

ę

ż

ż

BH_Write_EIO  – wyst pi  b d podczas zapisu bufora na no nik,  

ą ł

łą

ś

BH_Eopnotsupp  – wyst pi

ą ł

b d „nierealizowalna operacja” dla bufora,  

łą

BH_Unwritten  – zosta o przydzielone miejsce na no niku dla bufora, ale dane z niego nie zosta y jeszcze w tym miejscu

ł

ś

ł

zapisane, BH_Quiet – b dy operacji na buforze nie b d  zg aszane. Wyliczenie 

łę

ę ą

ł

bh_state_bits zawiera równie  dodatkowy znacznik 

ż

BH_PrivateStart, który informuje,  e

ż

kolejne, starsze od niego bity pola  b_state s  wykorzystywane przez sterownik  

ą

urz dzenia

ą

 blokowego do w asnych celów. Kolejne pole tej struktury o

ł

 nazwie  b_count

jest licznikiem odwo a  do bufora. Jego warto  jest zwi kszana przy pomocy funkcji 

ł ń

ść

ę

get_bh(), a zmniejszana przy pomocy put_bh(). Obie funkcje s  funkcjami 

ą

inline.

Licznik odwo a  powinien by  zwi kszany przed wykonaniem ka dej z operacji dotycz cej danego bufora, gdy  zapobiega to jego wcze niejszemu zwolnieniu. Pole 

ł ń

ć

ę

ż

ą

ż

ś

b_dev

zawiera identyfikator urz dzenia fizycznego na którym znajduje si  blok skojarzony z

ą

ę

 buforem, a pole b_blocknr zawiera numer tego bloku. Strona na której znajduje

si  bufor jest okre lona warto ci  pola  

ę

ś

ś ą

b_page. Adres, od którego zaczyna si  obszar bufora na tej stronie jest umieszczony w polu  

ę

b_data. Rozmiar tego bufora jest

okre lony zawarto ci  pola 

ś

ś ą

b_size. 

Nag ówek   bufora  w  wersjach  j dra   systemu  wcze niejszych  ni   2.6  przechowywa  równie  informacje   dotycz ce  operacji jakie  by y  wykonywane   na  buforze.  Taka

ł

ą

ś

ż

ł

ż

ą

ł

sytuacja powodowa a nisk  efektywno  takich operacji, gdy  pojedynczy zapis lub odczyt z urz dzenia wymaga  pos u enia si  kilkoma takimi nag ówkami, dodatkowo

ł

ą

ść

ż

ą

ł

ł ż

ę

ł

rozmiar nag ówka by  porównywalny z rozmiarem bufora, który opisywa . W najnowszej serii j dra postanowiono wi c „odchudzi ” nag ówek bufora i stworzy  now

ł

ł

ł

ą

ę

ć

ł

ć

ą

struktur , o nazwie 

ę

bio, która osobno przechowuje dane zwi zane z operacjami wej cia – wyj cia. Reprezentuje ona takie operacje w trakcie ich trwania za pomoc  listy

ą

ś

ś

ą

segmentów

1

. Segment w tym przypadku jest definiowany jako ci g y fragment bufora. Bufory, których segmenty s  zgromadzone na li cie nie musz  tworzy  ci g ego

ą ł

ą

ś

ą

ć

ą ł

obszaru. Dodatkowo, dzi ki tej strukturze mo na realizowa  kilka  operacji wej cia – wyj cia na jednym buforze równocze nie.  Najwa niejsze  pola struktury  

ę

ż

ć

ś

ś

ś

ż

bio  to

bi_io_vecs,    bi_vcnt  oraz  bi_idx. Pierwsze z nich zawiera adres tablicy struktur  bio_vec, która jest wykorzystywana jako lista poszczególnych segmentów u ywanych

ż

w danej operacji wej cia – wyj cia. Ka dy z elementów tej tablicy jest opisany trójk :  

ś

ś

ż

ą <page, offset, len>, (strona, przemieszczenie, d ugo ). Ca a tablica opisuje wi c

ł

ść

ł

ę

sumaryczn  przestrze  stworzon  z segmentów buforów i wyznaczon  dla operacji. Drugie pole struktury 

ą

ń

ą

ą

bio okre la ile elementów z opisywanej tablicy bierze udzia

ś

ł

w operacji. Bie

c  pozycj  w tej tablicy  reprezentuje  ostatnie  z  wymienionych pól, którego zawarto

 jest aktualizowana  na bie

co.  U ycie tego pola  pozwala  na

żą ą

ę

ść

żą

ż

podzia  struktury  

ł

bio, co ma znaczenie w przypadku takich sterowników,   jak sterowniki macierzy RAID. Podzia  polega na kilkukrotnym skopiowaniu tej struktury

ł

i ustawieniu dla ka dej z tych kopii innej warto ci pola indeksuj cego. Podobnie jak nag ówek bufora równie  struktura 

ż

ś

ą

ł

ż

bio posiada licznik odwo a . Jego warto  jest

ł ń

ść

zwi kszana   przy   pomocy   funkcji  

ę

bio_get(),   a   zmniejszana   przy   pomocy  bio_put().   Pole  bi_private  mo e   by   wykorzystywane   dla   danych   twórcy   struktury  

ż

ć

bio.

Zastosowanie struktury bio przynios o nast puj ce korzy ci:

ł

ę

ą

ś

blokowe operacje wej cia – wyj cia mog  w prosty sposób korzysta  z wysokiej pami ci, gdy  struktura 

ś

ś

ą

ć

ę

ż

bio pos uguje si  strukturami 

ł

ę

page,

struktura bio mo e reprezentowa  zarówno zwyk e operacje I/O, jak i równie  operacje bezpo rednie, które nie korzystaj  z buforów j dra,

ż

ć

ł

ż

ś

ą

ą

u atwiona jest realizacja operacji wej cia – wyj cia, w których dane pochodz  z wielu roz cznych stron pami ci (tzw. operacje z rozproszonym  ród em),

ł

ś

ś

ą

łą

ę

ź

ł

obs uga takiej struktury jest mniej skomplikowana ni  obs uga nag ówków buforów. 

ł

ż

ł

ł

Wi kszo

  sterowników   urz dze   blokowych   utrzymuje   struktury   przechowuj ce   zlecenia   operacji   wej cia   –   wyj cia   przeznaczone   dla   obs ugiwanych   przez   nie

ę

ść

ą

ń

ą

ś

ś

ł

urz dze . Te struktury s  nazywane kolejkami zlece . S  one reprezentowane struktur  

ą

ń

ą

ń

ą

ą request_queue i zawieraj  dwukierunkow  list  zlece  i skojarzonych z nimi

ą

ą

ę

ń

informacji steruj cych. Ka dy z elementów tych kolejek jest opisany struktur  

ą

ż

ą struct request i reprezentuje pojedyncze zlecenie. Je li kolejka nie jest pusta, to pierwsze

ś

zlecenie znajduj ce si  na niej jest przekazywane przez sterownik do urz dzenia, które je realizuje. Ka de zlecenie mo e zawiera  wiele struktur  

ą

ę

ą

ż

ż

ć

bio, które opisują

segmenty zaanga owane w dan  operacj . 

ż

ą

ę

Za szeregowanie zlece  w opisywanej kolejce odpowiedzialny jest planista operacji wej cia – wyj cia (

ń

ś

ś

ang. I/O scheduler). Jego zadaniem jest zminimalizowanie liczby

przestawie   mechanizmu   s u

cego   do   odczytywania   i   zapisywania   danych   w   urz dzeniu   blokowym   (np.   g owicy   w   dysku   twardym),   co   pozwala   na   osi gni cie

ń

ł żą

ą

ł

ą

ę

maksymalnej  redniej przepustowo ci oraz unikanie zag odzenia 

da . Planista dokonuje tego wykonuj c operacje scalania i sortowania

ś

ś

ł

żą

ń

ą

2

. Kiedy nowe 

danie trafia

żą

do kolejki, wówczas planista stara si  je scali  z 

daniami, które dotycz  przyleg ych sektorów. Je li takowych 

da  nie ma, to planista stara si  umie ci  je po ród

ę

ć

żą

ą

ł

ś

żą

ń

ę

ś ć

ś

da , które dotycz  sektorów le

cych w pobli u, dzi ki czemu nie b dzie konieczna cz sta zmiana kierunku ruchu g owicy

żą

ń

ą

żą

ż

ę

ę

ę

ł

3

. W j drach serii 2.6 jest u ywany jeden

ą

ż

z czterech

4

 algorytmów szeregowania 

da . Dwa z nich s  wzorowane na algorytmie, który by  wykorzystywany w wersji 2.4, wi c on jako pierwszy zostanie opisany.

żą

ń

ą

ł

ę

Planista I/O w j drach wersji 2.4 dzia a  w oparciu o algorytm nazwany Wind  Linusa (

ą

ł ł

ą

ang. Linus Elevator). Algorytm ten stosuje scalanie obustronne. Oznacza to,  e

ż

1

Które nie maj  nic wspólnego z segmentami, którymi pos uguj  si  procesory Intela i pokrewne do adresowania pami ci operacyjnej. 

ą

ł

ą

ę

ę

2

W tym wypadku chodzi tu o dwie odr bne operacje a nie o operacj  sortowania przez scalanie. 

ę

ę

3

Podobnie jak w metodzie LOOK omawianej w poprzednim semestrze.

4

Liczba ta ulega co jaki  czas zmianie. W wersjach j dra 3.0 i nowszych s  dost pne tylko trzy takie algorytmy.

ś

ą

ą

ę

1

background image

Systemy Operacyjne – semestr drugi

nowe  zlecenie   mo e by  umieszczone  przed istniej cymi  ju   zleceniami  lub  za,  je li  tylko  b d  one  dotyczy y spójnego   obszaru sektorów. Pierwszy  rodzaj  scalania

ż

ć

ą

ż

ś

ę ą

ł

nazywany jest scalaniem frontowym, drugi scalaniem tylnym. Zazwyczaj ten drugi rodzaj wyst puje cz

ciej. Je li nowego zlecenia nie da si  scali  z innymi, które s

ę

ęś

ś

ę

ć

ą

obecne w kolejce, to nast puje etap sortowania. W tym etapie planista stara si  znale

 miejsce w kolejce dla nowego zlecenia, takie  e otaczaj ce je inne zlecenia b d

ę

ę

źć

ż

ą

ę ą

dotyczy y sektorów znajduj cych si  w pobli u. Je li nie znajdzie takiego miejsca, to umieszcza dane zlecenie na ko cu kolejki. Mo e tak post pi  jeszcze w jednym

ł

ą

ę

ż

ś

ń

ż

ą ć

przypadku, kiedy podczas przeszukiwania kolejki znajdzie przeterminowane zlecenie. Takie post powanie ma na celu wyeliminowanie g odzenia 

da , ale niestety nie

ę

ł

żą

ń

jest skuteczne i algorytm Windy Linusa mo e doprowadzi  do g odzenia 

da . 

ż

ć

ł

żą

ń

W j drze 2.6 postanowiono wi c go zast pi  czterema innymi rozwi zaniami. Pierwszym z nich jest planista terminowy (ang.

ą

ę

ą ć

ą

  deadline I/O scheduler). Zapobiega on

g odzeniu 

da , oraz faworyzuje operacje odczytu przed operacjami zapisu. Okazuje si  bowiem,  e opó nienia odczytu maj  wi kszy wp yw na wydajno ci systemu ni

ł

żą

ń

ę

ż

ź

ą

ę

ł

ś

ż

opó nienia operacji zapisu. Planista terminowy stosuje cztery struktury danych: g ówn  kolejk  zlece , kolejk  zlece  odczytu, kolejk  zlece  zapisu i

ź

ł

ą

ę

ń

ę

ń

ę

ń

 kolejk  rozdzia u.

ę

ł

Mechanizm ten przydziela ka demu zleceniu termin realizacji. Domy lnie wynosi on 500 ms dla operacji odczytu i 5 s dla operacji zapisu. Nowe zlecenia s  wstawiane

ż

ś

ą

równocze nie do kolejki g ównej, gdzie realizowane s  operacje scalania i sortowania, oraz w zale no ci od rodzaju zlecenia do kolejki zapisu lub odczytu

ś

ł

ą

ż

ś

5

. Te dwie

ostatnie kolejki s  typowymi kolejkami FIFO. Planista terminowy pracuje w dwóch trybach: w trybie normalnym pobiera pierwsze 

danie z kolejki g ównej i

ą

żą

ł

 wstawia

je do kolejki rozdzia u, z której trafi ono pó niej bezpo rednio do urz dzenia. Planista prze cza si  w drugi tryb je li zbli a si  termin realizacji operacji z

ł

ź

ś

ą

łą

ę

ś

ż

ę

 kolejek FIFO.

Wówczas do kolejki rozdzia u trafia 

danie z której  z tych kolejek. 

ł

żą

ś

Drugim planist  stosowanym w j drach serii 2.6 jest planista przewiduj cy

ą

ą

ą

6

. W przeciwie stwie do planisty terminowego pozwala on unikn

 sytuacji, kiedy ci gi

ń

ąć

ą

operacji zapisu s  przerywane przez pojedyncze 

dania operacji odczytu. W dzia aniu jest on bardzo podobny do planisty terminowego, ale stosuje tzw. heurystyk

ą

żą

ł

ę

przewidywania. W momencie przekazania zlecenia odczytu do kolejki rozdzia u planista nie wraca od razu do realizacji kolejnych zlece , lecz wstrzymuje swe dzia anie

ł

ń

ł

na   6 ms

7

.  Je li  po  tym czasie  aplikacja   wygeneruje  

danie  odczytu  dotycz ce  obszaru  le

cego  w  pobli u   tego,  którego  dotyczy o  poprzednie  

danie,  to  jest  ono

ś

żą

ą

żą

ż

ł

żą

realizowane   natychmiast.   Aby   ten   czas   oczekiwania   nie   by   czasem   straconym,   sytuacje   takie,   jak   opisywana   powy ej   powinny   mie   cz sto   miejsce.   Planista

ł

ż

ć

ę

przewiduj cy stara si  okre li  mo liwo  wyst pienia takiej sytuacji prowadz c statystyk  dzia a  aplikacji i stosuj c heurystyki. Planist  przewiduj cego usuni to

ą

ę

ś ć

ż

ść

ą

ą

ę

ł ń

ą

ę

ą

ę

z j dra systemu w wersji 2.6.33. 

ą

Planista   przewiduj cy   by   domy lnym   planist   wej cia-wyj cia   do   czasu   wydania   j dra   w   wersji   2.6.18   (cho   w   niektórych   dystrybucjach   przesta   nim   by   ju

ą

ł

ś

ą

ś

ś

ą

ć

ł

ć

ż

wcze niej).   Zast pi   go   planista   CFQ   (

ś

ą ł

ang.   Complete   Fair   Queuing),   który   po   raz   pierwszy   pojawi   si   w   wersji   2.6.6   j dra.   Jego   dzia anie   mo na   krótko

ł

ę

ą

ł

ż

scharakteryzowa  jako po czenie planowania z u yciem kolejek wielopoziomowych, algorytmu rotacyjnego i przewidywania. Ten planista wprowadza równie  now

ć

łą

ż

ż

ą

cech  procesów  u ytkownika:  priorytet  wej cia-wyj cia.   Ka demu  z  procesów,  który   wykonuje  operacje   blokowe  przydzielana  jest dynamicznie   kolejka   na   zlecenia

ę

ż

ś

ś

ż

synchronicznych operacji wej cia-wyj cia. Zlecenia operacji asynchronicznych trafiaj  do wspólnych kolejek, których zazwyczaj jest mniej ni  kolejek 

da  operacji

ś

ś

ą

ż

żą

ń

synchronicznych.   Planista  przegl da  kolejki   procesów  poczynaj c  od  kolejek   o  najwy szym priorytecie,  a  sko czywszy  na  kolejkach  o  najni szym.   Z  ka dej  z  tych

ą

ą

ż

ń

ż

ż

kolejek zdejmuje tyle zlece , ile mo e zrealizowa  w ci gu okre lonego dla kolejki przedzia u czasu. Kwant czasu i liczba zlece  dla kolejki s  zdeterminowane przez

ń

ż

ć

ą

ś

ł

ń

ą

priorytet wej cia-wyj cia jej procesu. Dla tych kolejek planista CFQ realizuje równie  opcj  przewidywania, czyli po opró nieniu danej kolejki zatrzymuje si  na krótki

ś

ś

ż

ę

ż

ę

czas, sprawdzaj c, czy nie pojawi  si  w niej nowe zlecenia. Je li tak si  stanie, to s  one realizowane natychmiast. Po obs u eniu kolejek operacji synchronicznych

ą

ą

ę

ś

ę

ą

ł ż

planista przechodzi do kolejek operacji asynchronicznych, ale w ich przypadku nie stosuje opcji przewidywania. 

Czwarty algorytm szeregowania 

da  I/O jest bardzo prosty w dzia aniu – realizuje wy cznie operacj  scalania. Ten algorytm nosi nazw  

żą

ń

ł

łą

ę

ę noop.

Planist   operacji   wej cia-wyj cia   mo na   wybra   na   etapie   kompilacji,   spo ród   czterech   (trzech   od   wersji   j dra   2.6.33)   opisanych   wy ej,   lub   w   czasie   wykonania

ę

ś

ś

ż

ć

ś

ą

ż

dokonuj c  odpowiednich  wpisów  do plików  w katalogu  

ą

/sys. W przypadku   urz dze  blokowych  o

ą

ń

 prawdziwie  swobodnym dost pie  (np.:  pami ci flash)   najlepszym

ę

ę

planist  jest 

ą

noop. 

 

5

Dok adniej: do tych kolejek zapisywany jest wska nik na to zlecenie.

ł

ź

6

Mo na go te  „ adnie” nazwa  planist  antycypuj cym.

ż

ż ł

ć

ą

ą

7

Czas ten mo na konfigurowa .

ż

ć

2