Re: Unix

Autor: lis_at_papuga.ict.pwr.wroc.pl
Data: Tue 23 Dec 1997 - 12:48:31 MET


Dariusz K. Ladziak <ladzk_at_ite.waw.pl> wrote:
: No wlasnie. Nawet nie widzisz - samo sie robi, system od poczatku tak
: pomyslany zeby, jesli jakis proces pamiec zwolnil i luka zostala to
: mozna pozostale, o ile taka koniecznosc istnieje, poprzesuwac zeby te
: wszystkie kawalki wolnej pamieci polaczyc do kupy i miec jeden duzy.

I tu sie mylisz. "Od poczatku" to ten system byl pomyslany na "minikomputer"
PDP11, 16-bitowy, co powodowalo ze maszyna miala powiedzmy 256KB pamieci,
a program mogl zaadresowac 64. Stad i idea "fork" - jak podzielic
robote na male kawalki, ktore zmieszcza sie w owych 64KB :-)

: Oczywiscie zadna funkcja systemowa tego nie robi, to siedzi jeszcze
: glebiej, dziala az furczy i wszystko gra - najlepszy dowod ze ty
: pytasz o co w ogole chodzi.

Wbrew pozorom wcale nie dziala tak doskonale :-)
Fragmentacji nie ma na poziomie systemu, ale jest na poziomie
kazdego procesu. Sproboj alokowac i zwalniac pamiec w zlosliwej kolejnosci -
i skonczysz z "no space in swap" mimo niewielkiej ilosci zajetej pamieci :-)

: A milosciwie nam panujacy DOS ze swoim genialnym formatem EXE nie daje
: w swej podstawowej postaci ZADNYCH szans na taka gospodarke pamiecia -
: jak proces postawiles od fizycznego adresu, to tkwic tam musi po
: koniec dni swoich...

Wbrew pozorom daje takie same szanse jak unix.
O Windows, PCMOS 386, Desqview, MDOS i paru innych slyszales?

Idea prosta - proces jest sobie pod stalym adresem ... wirtualnym.
A nadrzedny i niewidoczny dla procesow system przesuwa i i rozrzuca
te strony po fizycznej pamieci.

: a jest to konsekwencja wpisywania fizycznych
: adresow bezwzglednych w kod wykonywalny. A pozniej windowsy obchodza
: problem w stylu "lewa reka za prawe ucho..."

Obchodza normalnie, nawet powiedzialbym w tym przypadku lepiej niz
normalnie. Wszak poslugujesz sie "segmentem" - ktory w trybie protected x86
[x >= 2] jest tylko numerem pozycji w tablicy. Mala zmiana LDT/GDT -
i nie zmieniajac ani bajta w programie, ani nie uruchamiajac stronnicowania
mozemy sobie przesunac segmenty programu w inne miejsce.

Nawiasem mowiac - adresy bezwzgledne [nie mylic z fizycznymi] wpisywane
sa w kod w wiekszosci przypadkow. Po prostu bardzo malo jest procesorow,
w ktorych mozna sobie pozwolic na przesuwanie programu, bo wszystkie adresy
sa relatywne.

: No wlasnie. Zupelnie inne podejscie do pojecia "pamiec". Dla Unixa to
: obszar dany systemowi do swobodnego zarzadzania, dla takiego np. DOS-a
: to zbior drucikow, przerzutnikow, adresow typu segment:offset..., cos
: jak z liczeniem linii sil pola na sztuki!

I tu sie mylisz, bo pod DOS jest tak samo. Program dostaje pamiec, i sobie
nia sam zarzadza. [Niestety - moze tez zarzadzac ta ktorej nie dostal :-)]
Inaczej zaczyna byc w idiotycznym [ktory przed chwila chwalilem]
windows 3.x :-)
 

J.



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 16:38:55 MET DST