🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #58

System operacyjny XXI wieku. CD

#58
From: Wojciech Borkowski
Date: Thu, 25 Jan 1996 00:00
136 lines
7220 bytes
Odpowiedz na tekst p.  Waldka Hebisch'a:

Wlasnie w trakcie edycji odpowiedzi do pana, wspanialy system
IRIX  zawalil mi sie totalnie z powodu przepelnienia dysku -
i prawie napisany list przepadl. To taka dygresja. DObrze by bylo
zeby systemy tego nie robily, albo jak nie ma miejsca na dysku to
nie pozwalaly na wprowadzanie danych do pamieci puki sie tego miejsca 
nie zrobi. Bo szkoda roboty.

A teraz do meritum:
To beda moje aktualne poglady na sprawe, nieco rozne od przedstawionych w
artykule.

Pisze pan:
"(...)
	Ja sadze ze wysokopoziomowa czesc systemu jest w zasadzie 
latwa (choc pewnie bedzie wielokrotnie wieksza niz reszta), a glowna
czesc to znalezc niskopoziomowy mechanizm ktory bedzie wydajny i 
da porzadana semantyke. 
"

Wydaje mi sie ze optymalnym rozwiazaniem jest zaprojektowanie
API (OPI?) na takim poziomie abstrakcji zeby jednoczesnie dawala
 wystarczajaca moc i swobode w tworzeniu aplikacyjnej nadbudowy,
nie wymagala nadmiernego babrania sie w szczegolach na pozionie
aplikacyjnym, a  j e d n o c z e s n i e nie krepowala implementatorow
wewnetrznych warst systemu. Cos jak definicja systemu POSIX, tyle ze
pelniejsza i lepsza. 
		I to jest najtrudniejsza czesc zadania -
zaprojektowanie takiego interface. A wewnatrz jest pole do popisu dla
programistow systemowych. "Aplikatora" moze nie interesowac gdzie i jak
sa skladowane obiekty,  kiedy sa backupowane, czy metody wykonywane na
rzecz obiektu sa naprawde bardziej podobne sa do watkow czy do klasycznych
procesow, czy moze stosowana jest metoda monitorow - gdzies we wnetrzu
systemu kazdy aktywny obiekt ma chodzacy w petli watek odbierajacy wysylane
do niego komunikaty=wywolania metod i wykonujacy je kolejno, wreszcie jak jest
implementowana pamiec wirtualna, czy jej konfiguracja jest przechowywana dla
obiektu, czy zawsze tworzona od nowa itd.

"(...)
I tu mam, moim zdaniem, istotna uwage - pracujac 
na wysokim poziomie latwo jest zapomniec o szczegulach impementacji 
ktore moga byc kluczowe dla wydajnosci. Co gorsza, czesto najpierw robi 
sie probna malo wydajna implementacje - do sprawdzenia koncepcji, a 
potem wlasnosci tej wplywaja na istotne fragmenty jezyka. Np. w TCL uzycie 
interpretera pozwolilo na dynamiczna redefinicje procedur, ale ta redefinicja 
wlasciwie uniemozliwia klasyczna kompilacje. Podobnie Smalltalk ma wiele 
wlasnosci utrudniajacych kompilacje. 
"

Dlatego opieram sie na C++, ze przy jego projektowaniu myslano o wydajnosci i
technikach kompilacji. Nie ma co prawda wielu wygodnych wodotryskow jak
TCL czy inne jezyki interpretowane, ale jest wystarczajaco elastyczny, a
przy dobrym projektowaniu nie ustepuje wydajnoscia czystemu C, a nawet
assemblerowi (jesli kompilator jest dobry). 

"(...)
Sa to przy tym nie tylko problemy wydajnosci - stosujac silne mechanizmy 
do rozwiazania latwych problemow otrzymuje sie system o duzej zlorzonsci 
logicznej.
Wydaje mi sie tez ze jest tu kwestia metodologi programowania - dobra 
metodologia obiektowa mowi ze nie nalerzy dziedziczyc ze wspolnego obiektu 
tylko po to miec wspolny kod metody. Zgadzam sie z tym, ale aby 
miec wydajny system musze w efekcie najpierw zbudowac nizsza warstwe, 
a potem dopiero "zapakowac" ja w obiekty.
"

Obiektowosc daje szanse na ukrywanie zlozonosci przez tzw enkapsulacje.
Dla uzytkownika istotny jest interface, a implementacja moze byc zmienna.
Poza tym jesli wlozyc wystarczajaco duzo wysilku w projekt to mozna
stopniowac zlozonosc: wiele wlasnosci obiektu, nawet wszystkie, moze byc
domyslnych. Uzytkownik nie musi o nich wiedziec, choc jesli zechce, to
moze je odczytac a takze zmienic - ale na poziomie podstawowym moze
wystarczyc mu nazwa typu i pare podstawowych operacji o ogolnie
przyjetym znaczeniu:  operatory np [] czy >> , << , metody w rodzaju view,
edit, czy "Obecny stan obiektu jest zbyt wazny zeby go stracic" zapewniajaca 
zapis nieulotny i ewentualne przywrocenie tego stanu, jesli cos sie rypnie.

Co do pakowania. Mozna, ale nie trzeba. Co kto lubi. Czasem nawet system
operacyjny latwiej napisac w odpowiednim jezyku obiektowym. I to nawet
system REALTIME - czego dowodem jest np ADA.

"(...)
Szczegolowy proces projektowania 
moze byc bardzej skomplikowany, ale jest problem zapewnienia jednolitosci 
specyfikacji roznych czesci systemu. To MUSI uwgledziac (czy nawet bazowac) 
na aspektach niskopoziomowych. 
" 

Uwzgledniac tylko na tyle ile jet to konieczne dla efektywnosci, ale
starannie ukrywajac. Im lepiej aspekty niskopoziomowe sa schowane,
tym wiecej mozna potem zmienic we wnetrzu systemu, nie wplywajac na 
aplikacje.

"
(...)
Mam dodatkowa uwage co do wspoldzielenia danych przez obiekty:
Wydaje mi sie ze wiekszosc danych ma z natury zmienna dlugosc (teksty,
listy, itp) i przy malej zmianie (i natralnej metodzie skladowania) 
wieksza czesc danych obiektu ulegnie przesunieciu. W efekcie 
oczekowalbym ze rozne obiekty w zasadzie nie bedza mialy wspolnych 
stron danych (chyba ze "read only").
"
Oczywiscie takie "przesuniecie" jest smiertelne dla wspoldzielenia stron,
ale mozna go czesto uniknac:
Np lista, czy tekst (traktowany jako kolekcja lancuchow reprezentujacych
linie lub akapity) moze miec strukture dynamiczna. Wezmy chocby modyfikacje
lini w tekscie zwiazana z jej przedluzeniem:
  Tekst ma powiedzmy 100KB czyli powiedzmy 25 stron ( pamieci, nie druku).
"W-insertowanie" literki powoduje koniecznosc realokowania pamieci dla
tej linii, oczywiscie z jakims zapasem - np 16 czy 32 znakow. 
Zmieniaja sie wiec conajmniej dwie strony - ta gdzie byl zapisany odnosnik,
lub stara wersja lini, i ta gdzie umieszczono nowa wersje lini.
Ale to sa dwie a nie wszystkie. I potem ta linie czy akapit mozna edytowac 
dlugo nie powodujac zmian kolejnych stron.
Nawet bitmapa moze miec strukture dynamiczna. Kosztuje to datakowa pamiec
na wektor wskaznikow do linii, ale czasem moze sie oplacic.


			Wojciech Borkowski

PS: Tresc artykulu oraz starsza korespondencja dostepna jest przez link
z mojej strony domowej.


-- 
********************************************************************
*                 Wojciech Borkowski                               *
* Zaklad Systematyki i Geografii Roslin Uniwersytetu Warszawskiego *
*   oraz			        	                   *
* Instytut Studiow Spolecznych Uniwersytetu Warszawskiego          *
* WWW:                                                             *
* http://www.bot.astrouw.edu.pl/~borkowsk/Borkowsk.html            *
* MAIL:                                                            *
* bork...@ulmus.bot.astrouw.edu.pl bork...@samba.iss.uw.edu.pl   *
********************************************************************
Technical Details
Message-ID: <4e7vrp$lhe@bilbo.nask.org.pl>
Path: mbox-mo1.pugleaf.net!unknown!not-for-mail

Show Full Headers
Complete Article Headers
From: Wojciech Borkowski <bork...@ulmus.bot.astrouw.edu.pl>
Subject: System operacyjny XXI wieku. CD
Date: 1996/01/25
Message-ID: <4e7vrp$lhe@bilbo.nask.org.pl>
X-Deja-AN: 136862175
to: heb...@math.uni.wroc.pl
organization: ISS UW or ZSiGR UW
x-url: news:pl.comp.objects
mime-version: 1.0
newsgroups: pl.comp.objects
x-mailer: Mozilla 1.1S (X11; I; IRIX 5.3 IP22)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit