A kezdetek Azt hiszem, kb. öt nagy IBM számítógép elegendő minden számítási igény kiszolgálására. Thomas Watson Az IBM elnöke 1943 floss.hu linuxprogramozas.hu
A Multics 1963 – projekt indul A nyertes: GE-645 mainframe, Multics operációs rendszerrel ● lapozott virtuális memória ● démonok ● dinamikus linkelés ● hierarchikus könyvtárszerkezet ● kölcsönösen hívható könyvtári függvények
A Multics nyelvei Az adaptált nyelvek a PL/I-en kívül ● BCPL – a C nyelv elődje ● BASIC ● APL ● FORTRAN ● LISP ● SNOBOL ● C – 1986-ban implementálták ● COBOL ● ALGOL 68 ● PASCAL ● ADA
A UNIX 1969 – A Bell Labs kiszáll a Multics projektből K.Thompson, D.M.Ritchie, M.D.McIlroy és J.F.Ossanna új rendszer fejlesztésébe fognak Egy PDP 7-esen megírják a Space Travel nevű játékot. Ennek farvizén kifejlesztik a UNIX-ot. A BCPL nyomdokain kifejlesztik először a „B” nyelvet majd a C-t.
A UNIX filozófiája ● Írj olyan programot, ami egy dolgot csinál de azt jól. ● Írj olyan programot, ami együttműködik a többivel. ● A programjaid kommunikáljanak szöveg folyamokkal, ez az igazán univerzális interface ● Összefoglalva: ● A Unix olyan keretrendszer, ami lehetővé teszi, hogy egymás munkáira építsenek a programozók.
A legfontosabb események 1969 – kernel, shell, editor, assembler 1971 – az első UNIX manual 1972 – átírják a rendszert C nyelvre 1978 – az első BSD UNIX, az első portolás 1979 – V7, az utolsó „igazi” UNIX; XENIX :-) Andy Tanenbaum elkezdi a Minixet 1982 – Stallman – GNU kiáltvány 1989 – a C programozási nyelv ANSI szabvány
Egy mail, amely megrengette a világot... From: Linus Benedict Torvalds Subject: What would you like to see most in minix? Newsgroups: comp.os.minix Date: :12:08 PST Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-) Linus PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT protable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(.
A user és kernel tér
A filerendszer
Hello World! #include int main (int argc, char* argv[]) { printf ("Hello world!\n"); return (0); } // main
Az eszközeink ● Terminál ● Shell ● C fordító ● Make utility ● Szerkesztő (editor) ● Dokumentáció (man page-ek) ● Debugger (gdb)
A fordítás folyamata
A program és a környezete ● Az input és output, azaz a stdin és stdout ● Minden fájl a Unix-ban: ● f p r i n t f ( stdout, " Hello world !\ n " ); ● Az argumentum lista ● int main ( int argc, char * argv []) ● A getopt és getopt_long ● A hibakezelés
A libraryk, azaz függvénykönyvtárak ● Statikus ● Megosztott ● Dinamikusan betölthető
A memória kezelés ● Néhány nagyon egyszerű függvényen keresztül ● Közvetlen memória hozzáférés nincs ● Az OOM-killer void *malloc(size_t size); void *calloc(size_t nmemb, size_t size); void free(void *ptr); void *realloc(void *ptr, size_t size);
Fájl kezelés ● Uniformizált felület ● open(), close(), read(), write() ● Nem pufferelt, kicsit rendszerközeli, igényli a fcntl() hívásokat ● File system interface, fopen(), fclose() és társai ● Teljes, rugalmas, rendkívül kényelmes felület a filekezeléshez
A folyamatok - processek ● Saját memória terület, nincs „átnyúlás” ● Mint egy virtuális gép ● IPC ● init – fork – exec – kill - wait ● A démonok – a DOS-nál tárrezidens program
Szál kezelés ● Thread ● Egy folyamaton – processen – belül több „alfolyamat” ● Gyors, „olcsó” a létrehozása ● Közös memória, mutex ● Pthread library
Az X programozása ● Kliens-szerver alapú grafikus rendszer ● Hálózati kapcsolat, X protokol ● Xlib, Xtoolkit ● Eszközkészletek: Xaw, Motif ● Rendkívül „fapados” ● A kód nagy része a felület előállítása ● Helyette GTK, Qt, vxWidgets, akármi más
Glib, gdk ● Keresztplatformos alapkönyvtár ● Nem keverendő a glibc-vel! ● Típusdeklarációk ● Eseményhurok kezelés ● Utility-k százai, pl. karakterkezelés, kódlap konverziók, dátumok, listák, stb. ● Makrók ● Gdk – keresztplatformos könyvtár, az eszköz készlet és az ablakkezelő köztes rétege
GTK ● Teljes grafikus eszközkészlet ● GIMP Tool Kit ● Leválás a Gnome-ról ● Printing support ● A GDK-ra és Glib-re épül ● C-ben íródik, de sok nyelvhez van „binding” ● Teljes keresztplatformos, az Ablaxtól a mobil telefonokig a Mac-en át mindenre protolták
Glade ● A felület generálása futásidőben ● libglade vagy gtkbuilder ● Nincs kódgenerálás! ● Integrálható komplett fejlesztőrendszerbe, lásd Anjuta
Az RS232 kezelése ● Minden file, tehát az RS232 port is az ● Nyisd meg, írd/olvasd, zárd be! ● /dev/ttyS0, /dev/ttyS1, és így tovább ● A POSIX terminal interface, #include ● Minden file, de azért vas van mögötte... ● int ioctl(int fd, int request,...); ● Várunk az adatra: ● select(), poll()
A hardver közvetlen programozása ● Átnyúlunk a kernel feje fölött ● Kivételes esetek, szűk lehetőségek ● Printer port, game port ● /dev/port vagy direkt I/O ● read(), write(), … nincs select(), poll() ● int ioperm(unsigned long from, unsigned long num, int turn_on); ● #include, inb(port), outb(value, port) ● Hobbi célokra
Köszönöm a figyelmet! floss.hu linuxprogramozas.hu