2012-10-25 16 views
30

Pamiętam, że słyszałem o wbudowanym systemie operacyjnym, który jest w zasadzie tylko libc (może miał wsparcie dla C++). Nie miał jądra, rur ani innych rzeczy, których można się spodziewać po os. Próbowałem go znaleźć in wikipedia, ale nie widziałem go na liście.Czy istnieje serwer LibC?

Czy taki system operacyjny istnieje? Czy istnieje system operacyjny obsługujący gniazda terminalowe lub C/C++ + (tcp) do komunikacji poza maszyną wirtualną? Byłoby to przydatne dla mnie jako zabawki.

+0

Nie jestem do końca pewien, co masz na myśli. W jakiej architekturze szukasz systemu operacyjnego? Wiem o [uC/OS] (http://en.wikipedia.org/wiki/MicroC/OS-II) napisanym w C i działającym na mikrokontrolerach, ale mimo to jego funkcje są całkiem dobre. – ppeterka

+0

Jeśli szukasz czegoś o małej powierzchni, Linux może z łatwością dopasować rachunek bez żadnych programów przestrzeni użytkownika, z wyjątkiem twojego i libc. Chociaż domyślny glibc ma duży rozmiar, istnieje wiele projektów libc o małych rozmiarach. – Linuxios

Odpowiedz

37

Powodem, dla którego nie można znaleźć nazwy, jest to, że nie jest to system operacyjny - jest to brak systemu operacyjnego. Często jest to nazywane programowaniem typu "bare-metal".

Ogólna koncepcja programowania w trybie bare-metal polega na tym, że istnieje mały kod uniwersalny - "bootloader" - który konfiguruje kontroler pamięci i inne elementy sprzętowe na płycie, a następnie przekazuje kontrolę do twój program. (Systemy operacyjne mają również bootloadery, więc w tym sensie twój program to zastępujący system operacyjny.) Uboot to dość powszechny bootloader typu open-source, więc może to być dobre miejsce do rozpoczęcia wyszukiwania informacji.

Jedną z trudnych informacji na temat programowania w "bare-metal" jest to, że ponieważ nie istnieje system operacyjny obsługujący komunikację sprzętową, trzeba pomyśleć o "czym właściwie jest printf" jakie dane przechodzą do tego, co peryferyjne? " i "jak mogę tam dotrzeć?" Znowu niektóre programy rozruchowe zapewniają obsługę tego typu rzeczy, chociaż nie zawsze jest to łatwe, aby je połączyć. Znowu Uboot jest dobrym przykładem.

Tymczasem biblioteka C raczej będzie dostarczana przez Twój kompilator, a nie przez bootloader.

(Powinienem również dodać, jako notatkę z nazwy: Firma, w której pracuję, tworzy serię kompilatorów nagiego metalu i Linuksa, znanych jako Sourcery CodeBench.W przypadku CodeBench, wersje bare-metal są generalnie nazywane po specyfikacji ABI, której używają do łączenia programów, więc wersje "ELF" lub "EABI" to wszystkie kompilatory bare-metalowe, i myślę, że to dość powszechny sposób odwoływania się do tego Coś w tym stylu, więc zobaczysz także takie imię.)

+1

Świetny post. [Here] (http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html) jest ilustracją twojego trzeciego akapitu. Przewijając stronę, znajduje się przykład kodu, demonstrujący powiązanie niestandardowej funkcji uart io stdin, stdout i stderr. Odtąd, printf() i scanf() mają znaczenie. – Vorac

6

Myślę, że jest problem z niektórymi z twoich założeń. Masz rację mówiąc, że nie potrzebujesz jądra dla systemu operacyjnego, ale wszystko, co może uruchamiać aplikacje, może się statycznie skompilować w bibliotece libc.

Patrz: http://www.superfrink.net/athenaeum/OS-FAQ/os-faq-libc.html

Na przykład, możliwe jest użycie printf tak długo, jak skompilować tę funkcję dla danego systemu operacyjnego. Tak więc możesz używać MenuetOS tak długo, jak budujesz dla niego libc.

Teraz istnieje mała wersja biblioteki libc pod numerem http://pdclib.rootdirectory.de/, z której może korzystać część systemu wbudowanego.

W ten sposób dowolny mały system operacyjny można uznać za system operacyjny do uruchamiania biblioteki libc.

6

Zasadniczo jądro nie jest potrzebne, ale jeśli poszukujesz minimalnej wartości, OS http://wiki.osdev.org/Projects może być punktem rozpoczęcia. istnieje wiele projektów hobby i półprofesjonalnych, które wspierają podstawowe rzeczy i mają niewielkie rozmiary. Istnieje również kilka dobrych samouczków do samodzielnego napisania. Należy również wziąć pod uwagę, że sterowniki itp. Są potrzebne do prostych rzeczy, takich jak sieciowe lub seryjne operacje we/wy.

także Jądro Linux jest zawsze dobry początek (jakiś czas temu było distro linux to było tylko około 20 MB)

3

Libcc nie jest system operacyjny. Chociaż definicja systemu operacyjnego jest nieco rozmyta, zawiera więcej niż API. Wymaga zarządzania pamięcią, planowania procesów, itd.

5

Jest ich wiele.

Większość profesjonalnych systemów operacyjnych czasu rzeczywistego (RTOS) ma mniej lub bardziej kompletną implementację biblioteki C, a często nawet dla C++ (na przykład Keil MDK, μItron). Chociaż w praktyce często unika się tego, ponieważ wykorzystuje zbyt wiele dostępnych zasobów.

System operacyjny RTOS zwykle ma bardzo małe jądro, bez obsługi plików lub potoków. Zamiast tego mają tendencję do obsługi zadań, timerów, kolejek i flag zdarzeń, z niewielkim narzutem.

Powiązane problemy