Programowanie maszyn takich jak virualbox

0

Oczywiście nie twierdzę, że od jutra biorę się za pisanie takiej aplikacji. Stworzyłem jednak tutaj ten temat,bo googlam i googlam i nie mogę się doszukać ogólnej nazwy działu programowania, które dotyczy właśnie takich aplikacji jak virtual box albo virtualcd. Pod jakim hasłem mam w ogóle szukać wiedzy na ten temat.

Oczywiście kojarzy mi się to z nazwami takimi jak funkcje virtualne, ale tak na prawdę to nie wiem.

Czyli reasumując, do jakiego działu zaliczyć wiedzę niezbędną do pisania takich programów jak virtual cd lub box? Ja tę wiedzę dopadnę, ale muszę wiedzieć w czym tego szukać.

0

Oczywiście źle Ci się kojarzy ;) Funkcje wirtualne nie mają powiązania z maszynami wirtualnymi ;) Generalnie jeśli chcesz pisać maszynę wirtualną, to możesz np. zacząć od napisania interpretera assemblera. Poszukaj informacji o przerwaniach sprzętowych, itp. Generalnie chodzi o to, że musisz umieć symulować sprzęt... ale to nie jest robota dla jednej osoby, wierz mi ;)

0

na początek musisz przeznaczyć bardzo dużo czasu aby przyswoić podstawową wiedzę. Powinieneś zacząć od pozycji prawiących o maszynach cyfrowych, architekturach, wiedza z zakresów systemów operacyjnych również może okazać się pomocna (a to nawet nie wierzchołek góry lodowej!). Najważniejszy jest fakt, że Jak uzupełnisz tą podstawową wiedzę to będziesz wiedział dalej co robić. Prawda jest taka, że jeśli ktoś zadaje pytania w stylu "od czego zacząć pisanie systemu operacyjnego" czy "jak napisać maszynę wirtualną" to wiadomo, że taka osoba nie ma najmniejszych podstaw teoretycznych by w ogóle ten temat ruszyć. Nie pije tutaj do ciebie tylko generalizuje. Musisz więc skupić się na samym początku na samych podstawach szeroko pojętych nauk informatycznych. Osoba, która posiada przynajmniej podstawową wiedzę, ma pewne wyobrażenie na temat tego typu problemów i wie gdzie poszukiwać informacji i w ogóle jak się do tego zabrać.

1

maszyna wirtualna działa z grubsza tak:
Odpalamy cały system operacyjny jako zwykły program.
Większość instrukcji procesora daje się normalnie bezpośrednio wykonać z pełną prędkością.
Ale system operacyjny to nie zwykły program — wykonuje uprzywilejowane instrukcje, odwołuje się do sprzętu. Takie instrukcje w programie bez podniesionych uprawnień spowodują wywołanie wyjątku. Łapiemy więc te wyjątki, patrzymy jaka instrukcja się „nie udała” i emulujemy ją.

Inna technika to „edytowanie” kodu maszynowego jeszcze przed jego wykonaniem, i podmiana tych instrukcji systemowych na nasze procedury emulujące.
Jeszcze inna to sprzętowa obsługa wirtualizacji, gdzie część powyższej roboty jest zaszyta w procesorze.

Jeszcze inna to modyfikacja wirtualizowanego systemu tak, aby mniej operacji trzeba było emulować. Odbywa się to przez instalację w systemie gościa dodatkowych sterowników (zwanych „virtual machine additions” albo podobnie).

Typowe programy do wirtualizacji (vmware, virtual box) korzystają z wszystkich tych wymienionych technik.

0

Mam pomysł. Napisz sobie najpierw własną, prostą implementację maszyny Javy ;) (parsowanie i wykonywanie bajtkodu)

0

Ja myślę że na początek powinieneś po kolei:

  • napisać interpreter prostego języka
  • napisać kompilator prostego języka do maszyny wirtualnej
  • napisać maszynę wirtualną (np. dla bajtkodu javy)

1 użytkowników online, w tym zalogowanych: 0, gości: 1