Shakespeare och Linux

I går var det premiär för 3-dagars kursen Linux Systems Programming. Det är en kolossalt roligt kurs att både utveckla och undervisa i, samt mina elever verkar ha väldigt kul de med.

Kursen handlar om allt man behöver veta för att programmera på systemnivå i Linux/Unix. Såsom en förståelse for hur en applikations process är organiserad i olika minnes segment, hur det i detalj går till när en funktion anropas och returnerar, hur man gör sk longjmp.

I dag har vi pratat om signaler och process hantering, dvs exakt hur går det till bakom kulisserna när en ny applikation startar, sett i termer av systemanropen fork, exec, dup2, open/close, exit och mycket mer.

Det första vi gjorde i morse var dock att prata om avancerad I/O, som till exempel minnes mappade filer. Nå, vad ska man ha det till? Antag att man behöver läsa in en stoooor fil och sedan bearbeta innehållet. Det traditionella sättet är att läsa rad-för-rad och göra något. Men det blir genast mer komplicerat om man behöver göra flera bearbetningspass. Tänk om man på ett magiskt sätt kunde ha hela filen på plats direkt i minnet?

Det är detta som är minnes mappade filer. Eleverna fick börja med att ladda ned Shakespeares samlade verk från Project Gutenberg. Texten finns i ett flertal filformat. För kursen övningsuppgift använde vi text-versionen, som du kan hitta här>>. Sedan fick eleverna skriva ett C program som mappade upp filen i minnet och leta efter fraser såsom ‘to be ‘ eller Hamlet. Så här kan det då se ut när man kör programmet:

Om du någon gång undrat över hur många gånger Shakespeare använde namnet Hamlet i sina texter, så har du nu svaret här ovanför.

I morgon fredag kommer vi prata om olika sätt för processer att kommunicera med varandra, sk IPC. Det blir allt från pipes, messages queues, shared memory till TCP sockets.

Verkar detta kul, alltså att lära sig om processer, signaler, minnes-mappade filer och en massa annat? Registrera dig då på nästa kurs-tillfälle.