Sad ide pitanje...
Zanima me kako OS (nije bitno koji!!) izvrsava aplikaciju?
Dakle kako OS zna sto aplikacija zahtijeva?!?
Mislim da je isto ako pitam kako radi interpreter.
Ovo je samo informacije radi, jer se prepucavam s jednim
prijateljem oko nacina kako se izvrsava aplikacija!!
Nadam se da pitanje nije preteško ;-)).
Thx
--
That's all from Amos Sam
Svaki OS ima svoj API (application programming interface) sto je u biti
skup funkcija koje program poziva. Te funkcije se nalaze u sistemskim
DLL fajlovima (sto se tice windowsa).
Ucita exe ili sto vec u memoriju pocne i skoci na pocetak koda i pocne ga
izvrsavati.
> Dakle kako OS zna sto aplikacija zahtijeva?!?
OS niti ne zna sto aplikacija trazi, to samo zna aplikacija.
> Mislim da je isto ako pitam kako radi interpreter.
Interpreter radi na drugom principu. Interpreter ima sve u sebi, tj. zna
napraviti sve sto bi "aplikacija" mogla zatrebati, i onda on to radi kada
"aplikacija" zatreba da napravi to nesto.
--
--bbabic(a)foi.hr--
--
2b||!2b?
Jako dobra knjiga za uvod u to podrucje je od Andrewa S. Tanenbauma, a
zove se "Operating Systems: Design And Implementation"
(ISBN: 0136301959).
Autor ima i noviju knjigu, "Modern Operating Systems" (ISBN: 0130313580),
ali nisam je imao prilike citati pa ne znam koliko je dobra.
--
v v
Kristijan Conkas
Pojednostavljeno receno, kada ti upises u terminalu naziv nekog
programa, OS potrazi datoteku s tim nazivom i ucita ju. U toj datoteci
su zapisane instrukcije sto treba raditi. OS kreira proces, dodijeli
mu njegov adresni prostor i krene izvrsavati instrukcije redom kako
su zapisane.
Eto, to bi bilo jednostavno. Za detalje ces morati malo zaroniti
dublje u literaturu.
Berni.
> Pojednostavljeno receno, kada ti upises u terminalu naziv nekog
> programa, OS potrazi datoteku s tim nazivom i ucita ju. U toj datoteci
Maleni ispravak potencijalno netočnog navoda: Zapravo u ovom slučaju
_shell_ potraži datoteku s tim nazivom i onda forka istu, a kernel na
temelju magic numbera (prvih par bitova filea), zaključi koji
interpreter pozvati. Ako je to "#!/bin/sh", bit će pozvan shell, ako
je to "#!/usr/bin/perl" pozvat će perl. Ako se radi o binarnom ELF
fileu, on će biti posebno učitan (kernel zna čitati ELF sekcije), a
kernel će potražiti hardkodiranu stazu runtime "ld.so" linkera, u
.interp headeru i pozvati ga. Dalje od toga je stvar runtime linkera,
da pročita .dynamic sekciju i pohvata simbole iz shareanih libova itd
itd ... Linux kernel zna čitati i a.out i coff binaryje, a ostali
binaryji se hendlaju preko binfmt_misc sučelja, gdje se po magic
numberu mogu registrirati novi binarni formati. Recimo ja java JAR-ane
i classe samo chmodam 755 i izvršavam sa "./program.jar" odnosno
"./alat.class".
> Eto, to bi bilo jednostavno. Za detalje ces morati malo zaroniti
> dublje u literaturu.
I source kernela. :-)
--
The Network is the Filesystem.
> Jako dobra knjiga za uvod u to podrucje je od Andrewa S. Tanenbauma, a
> zove se "Operating Systems: Design And Implementation"
> (ISBN: 0136301959).
>
> Autor ima i noviju knjigu, "Modern Operating Systems" (ISBN: 0130313580),
> ali nisam je imao prilike citati pa ne znam koliko je dobra.
Baš me zanima da li ovom knjigom još uvijek brije na microkernele. ;-)
A jesi ga pojednostavnio ;-)
Covjek je pitao bilo koji OS, a ti mu objasnio kako shell to radi ;-)
... kaze u pogrdnom tonu netko tko brije na Plan9. Buahahaha .... ;-)))
Shalu nastranu, svatko tko misli da su microkerneli loshi zasluzuje
jedan 8502 i par brojeva Mog Mikra pa nek se veseli...
(PS. Ne, Linux moduli NEMAJU veze s microkernelom ;-)
--
Senko Rasic <senko at senko dot net>
> bernard cupic <bernar...@ANTISPAMuljanik.hr> writes:
>
>> Pojednostavljeno receno, kada ti upises u terminalu naziv nekog
>> programa, OS potrazi datoteku s tim nazivom i ucita ju. U toj datoteci
>
> Maleni ispravak potencijalno netočnog navoda: Zapravo u ovom slučaju
> _shell_ potraži datoteku s tim nazivom i onda forka istu, a kernel na
> temelju magic numbera (prvih par bitova filea), zaključi koji
> interpreter pozvati. Ako je to "#!/bin/sh", bit će pozvan shell, ako
> je to "#!/usr/bin/perl" pozvat će perl. Ako se radi o binarnom ELF
> fileu, on će biti posebno učitan (kernel zna čitati ELF sekcije), a
> kernel će potražiti hardkodiranu stazu runtime "ld.so" linkera, u
Maleni ispravak potencijalno netočnog navoda... :-)
Zapravo u slucaju skripte nece kernel parsati skriptu vec tvoj
current shell koji ce prema "hash bangu" vidjeti koji interpreter
treba nahuskati na skriptu.
Pri tome nece vrsiti forkanje nego execanje i tek tu treba spominjati
kernel i sto se dogada prilikom execanja interpretera.
--
Josip Deanovic
> Miroslav Zubcic wrote:
>> Baš me zanima da li ovom knjigom još uvijek brije na microkernele. ;-)
> ... kaze u pogrdnom tonu netko tko brije na Plan9. Buahahaha .... ;-)))
Plan 9 kernel nije microkernel.
> Shalu nastranu, svatko tko misli da su microkerneli loshi zasluzuje
> jedan 8502 i par brojeva Mog Mikra pa nek se veseli...
> (PS. Ne, Linux moduli NEMAJU veze s microkernelom ;-)
No shit Sherlock!? :-)
> Zapravo u slucaju skripte nece kernel parsati skriptu vec tvoj
> current shell koji ce prema "hash bangu" vidjeti koji interpreter
> treba nahuskati na skriptu.
Slikovita inspiracija kroz rijec "nahushat" bi moglo ovako izgledat.
-> Scripta - provalnik
-> Interpreter - doberman, pitbul itd.
-> Shell - cuvar
Dakle cuvar vidi provalnika na monitoru, i po tjelesnoj gradji odluci hoce
li pustit dobermana ili putbula ili sta drugoga na "obradu" provalnika :-)
> Maleni ispravak potencijalno netočnog navoda... :-)
Misliš valjda na potencijalni ispravak ispravka potencijalno netočnog
navoda?
> Zapravo u slucaju skripte nece kernel parsati skriptu vec tvoj
> current shell koji ce prema "hash bangu" vidjeti koji interpreter
> treba nahuskati na skriptu.
Na ovo moram odgovoriti ispravkom potencijalno netočnog potencijalnog
ispravka potencijalno netočnog navoda. :-)
#include <stdio.h>
#include <unistd.h>
int
main()
{
execve("/usr/bin/collateindex.pl", NULL, NULL);
return 0;
}
[nimiumvax!mvz!mvz]$ strace -ff -eexecve ./test
execve("./test", ["./test"], [/* 73 vars */]) = 0
execve("/usr/bin/collateindex.pl", [0], [/* 0 vars */]) = 0
usage: /usr/bin/collateindex.pl [options] file
Do 'perldoc /usr/bin/collateindex.pl' for documentation.
Nisam zvao system(), čak niti execl(3) koji je library call koji AFAIR
i AFAIK niti ne troši sh(1) kao system(3), već execve(2) koji je
syscall(2). Kernel je MORAO znati što radi i koga da pozove (perl u
ovom slučaju).
Vidi također fs/binfmt_script.c.
> Pri tome nece vrsiti forkanje nego execanje i tek tu treba spominjati
> kernel i sto se dogada prilikom execanja interpretera.
Shell će forkati komandu, kod execanja bi shell prepustio svoj
image memorijskog prostora novom procesu i shell bi nestao kao da si
napisao "exec ls".
Pid 11437 je v7 sh(1) (upotrijebljen ovdje radi manjeg outputa, jer
bash sere nekoliko desetina ekrana function i sys callova da to nije
normalno).
ltrace -f -p 11437
...
strcmp("tty", "trap") = 1
strcmp("tty", "times") = 1
fork() = 12435
[pid 11437] wait(0xbffff444 <unfinished ...>
[pid 12435] __fpending(0x42135d80, 0x4000af21, 0x40013854, 0x40013e68, 1) = 0
[pid 12435] +++ exited (status 0) +++
--- SIGCHLD (Child exited) ---
<... wait resumed> ) = 12435
sbrk(0) = 0x08051000
free(0x08050298) = <void>
Ali je ostao negdje u zapecku povijesti vise nego razliciti
microkerneli koji se uspjesno koriste ;-)
>>(PS. Ne, Linux moduli NEMAJU veze s microkernelom ;-)
>
> No shit Sherlock!? :-)
A zacudio bi se kakvi komentari znaju iskrsnuti, pa se
cisto ogradjujem ;-)
Amos jel' ucis? ;-) Nadam se da odgovor nije pretezak ;-))
> Miroslav Zubcic wrote:
>> Plan 9 kernel nije microkernel.
> Ali je ostao negdje u zapecku povijesti
Nije. Takvi kerneli se more/less danas koriste. Pišu se za njih
driveri itd ...
> vise nego razliciti microkerneli koji se uspjesno koriste ;-)
Na primjer?
Mislis, 6502? :)
--
I've found a great way to fight spammers....if you want to find out how,
mail me at postmaster@localhost ... very very soon, there'll be a reply.
To get my mail just reverse the order. Ie. "ylf" is changed into "fly".
Pa sam mislim da od ovog odgovora nesto i razumim :-((!
Ali cini mi se da ili ja nisam dobro objasni ili nitko nije dobro
razumi (prin ce bit ono prvo ;-)) ).
Nije bitno jeli Linux, Win, ili bilo koja x86 platforma.
Ma uopce nije bitna platforma.
Provat cu reformulirati pitanje.
Imamo biranu datoteku koja je izvrsna.
Kad je pokrenes kako operativni sustav (nije bitno dali je to io.sys ili
Linux
kernel niti Windows kernel, vec bilo koji "custom" sustav) "zna" sto
aplikacija salje na obradu i sto ocekuje, te u kojem "formatu" se obavlja
ta "transakcija"??
Nadam se da sam sad bio jasniji.
Ne trebaju mi primjeri nago samo teorija!!
Fajl se ucita u memoriju. Iz headera fajla procita se na kojoj
udaljenosti (offset) od pocetka fajla pocinju instrukcije. Ima neka
instrukcija jmp ili kako nesto (ne znam asm) kojom se skoci na prvu
instrukciju i program se izvodi. Eto, tako ja to zamisljam :-)
Naravno, kada se tu uvede multitasking, multithreading, neka memorijska
podrucja... stvari se zakompliciravaju.
--
Milan Mimica
NP:
www.nista-pametno.da.ru
IIRC, QNX ima microkernel, i dobro mu ide.
--
Mladen Gogala
668: The Neighbour of the Beast.
Kako ti razumiješ ono što čitaš?
Pa išao si u školu i naučio prepoznavati slova i iz njih slagati riječi i
rečenice. Isto tako postoji jezik koji računalo razumije, a prevoditelj
(kompajler) prevodi jezik koji mi razumijemo u jezik koji računalo razumije.
Nako toga to još linker složi u jednu cjelinu i poveže s dinamičkim
bibliotekama i dobiješ štivo koje računalo razumije. Procesor poznaje osnovni
skup instrukcija i kompejler je preveo nekakav kompleksni kod u niz tih
osnovnih instrukcija koje čine jezik nekog procesora.
Što tu sad nije jasno?
Dečki su otišli u detalje za koje, vjerujem, nisi zainteresiran, ali i iz
toga možeš dosta zaključiti.
Pozdrav.
> Ali cini mi se da ili ja nisam dobro objasni ili nitko nije dobro
> razumi (prin ce bit ono prvo ;-)) ).
Ha?
> Nije bitno jeli Linux, Win, ili bilo koja x86 platforma.
> Ma uopce nije bitna platforma.
???
> Provat cu reformulirati pitanje.
Što ćeš?
> Imamo biranu datoteku koja je izvrsna.
Kako je biraš?
> Kad je pokrenes kako operativni sustav (nije bitno dali je to io.sys ili
> Linux
> kernel niti Windows kernel, vec bilo koji "custom" sustav) "zna" sto
> aplikacija salje na obradu i sto ocekuje, te u kojem "formatu" se obavlja
> ta "transakcija"??
> Nadam se da sam sad bio jasniji.
Nadasve pismen i smislen ...