2012-10-10 12 views
20

Podczas kompilacji programu jest konwertowany na kod maszynowy, który może być "zrozumiany" przez urządzenie. W jaki sposób ten kod maszynowy wchodzi w interakcję z systemem operacyjnym, aby robić takie rzeczy jak pobieranie danych z klawiatury? Wydaje mi się, że kod maszynowy powinien działać na niższym poziomie niż system operacyjny i dlatego nie mogę zrozumieć, jak system operacyjny może działać jako pośrednik między skompilowaną aplikacją a sprzętem.W jaki sposób skompilowany program wchodzi w interakcję z systemem operacyjnym?

PS: Właśnie rozpoczął programowania C++ i próbuję zrozumieć jak cin i cout praca

+1

Skompilowana aplikacja po prostu wykonuje wywołania funkcji do bibliotek DLL (systemu operacyjnego, na przykład kernel32.dll w systemie Windows), które zawierają funkcje innego kodu maszynowego. Ten inny kod maszynowy został napisany specjalnie do pracy ze sprzętem, więc nie musisz tego robić. –

+1

Nieco styczny i nie jest to odpowiedź na twoje pytanie, ale może jeśli interesujesz się granicami między językiem a systemem operacyjnym, to da ci trochę respektu/strachu/obrzydzenia na wielu z wielu kroków w procesie, zastanawiam się ...: -/http://stackoverflow.com/a/2444508/211160 – HostileFork

Odpowiedz

23

To jest bardzo dobre pytanie (lepszy niż ty), a tam jest sporo nauczyć . DUŻO.

Spróbuję to krótko. System operacyjny działa jako poziom abstrakcji pomiędzy oprogramowania i sprzętu:

Software 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
Operating System 
     . 
     /|\  
     | communicates with 
     \|/ 
     ' 
    Hardware 

OS komunikuje się ze sprzętem za pośrednictwem programów o nazwie sterowniki (powszechnie używany termin) i OS komunikuje się z oprogramowaniem za pomocą procedur zwany system nazywa się (nie tak szeroko stosowany termin).

Zasadniczo po wywołaniu wywołania systemowego użytkownik opuszcza program i wprowadza kod systemu operacyjnego. Wywołania systemowe są jedynym sposobem, w jaki programiści mogą komunikować się z zasobami.


Teraz chciałbym tam zatrzymać, ale też powiedział:

Dla mnie wydaje się, że kod maszynowy powinien działać na niższym poziomie niż systemu operacyjnego i dlatego mogę” t zrozumieć, w jaki sposób system operacyjny może działać jako pośrednik między skompilowaną aplikacją a sprzętem .

Jest to podstępne, ale proste, gdy zrozumiesz podstawy.

Po pierwsze, cały kod to po prostu kod maszynowy uruchomiony na CPU. Żaden kod nie jest wyższy ani niższy od innych kodów (z wyjątkiem niektórych poleceń, które można uruchomić tylko w uprzywilejowanym trybie jądra). Pytanie brzmi: jak system operacyjny może mieć kontrolę, nawet jeśli rezygnuje z kontroli nad procesorem dla użytkownika?

Gdy kod jest uruchomiony na procesorze, istnieje pojęcie o nazwie przerwanie. Jest to sygnał wysłany do procesora, który powoduje zatrzymanie aktualnie uruchomionego kodu i przełączenie go z innym kodem, zwanym przerywnikiem obsługi.

Przykłady przerwań obejmują klawiaturę, mysz i, co najważniejsze, zegar.

Przerwanie zegara jest regularnie wywoływane, co powoduje uruchomienie obsługi przerwań zegara systemu operacyjnego. W ramach tej procedury obsługi przerwań zegara jest kod systemu operacyjnego, który sprawdza, jaki kod jest aktualnie uruchomiony, określa, jaki kod musi zostać uruchomiony w następnej kolejności. Może to być więcej kodu systemu operacyjnego lub więcej kodu użytkownika.

Ponieważ zegar jest zawsze tyka, a ponieważ system operacyjny zawsze dostaje ten okresowe szansę działać na CPU, to jest w stanie zgrać wszystko w komputerze, mimo że biegnie za pomocą tego samego zestawu Polecenia CPU jak każdy normalny program.

+1

Świetna robota wyjaśniająca to w bardzo prosty sposób. –

+2

CPU może również działać w wielu trybach (jądro i użytkownik), z kodem OS uruchamianym w trybie uprzywilejowanego jądra. – OrangeDog

+0

Dzięki ... to była bardzo dobra odpowiedź. Po prostu, aby było jasne, czy słusznie byłoby powiedzieć, że wywołanie systemowe jest jak przerwanie, które zatrzymuje wykonywanie kodu aplikacji i przełączniki są wyłączone (tzn. Rozpoczynają wykonywanie) kodu OS? – mahela007

5

System operacyjny zapewnia system calls, że programy mogą dzwonić, aby uzyskać dostęp do usług niższego szczebla.

Należy zauważyć, że wywołania systemowe różnią się od funkcji system(), którą prawdopodobnie wykorzystano do uruchamiania programów zewnętrznych.

wywołania systemowe są wykorzystywane do robienia rzeczy takie jak pliki dostępu, komunikować się przez sieć, zażądać pamięci sterty itp

Powiązane problemy