“Espai d'usuari” es refereix a l'entorn d'execució dels processos normals (en contraposició al nucli). Això no significa necessàriament que aquests processos siguin iniciats pels usuaris perquè un sistema estàndard normalment té diversos processos de “dimoni” (o de segon pla) que s'executen fins i tot abans que l'usuari obri una sessió. Els processos de dimoni també es consideren processos d'espai d'usuari.
Quan el nucli supera la fase d'inicialització, engega el primer procés, init
. El procés #1 tot sol és rarament útil per si mateix, i els sistemes de tipus Unix s'executen amb molts processos addicionals.
En primer lloc, un procés pot clonar-se a si mateix (això es coneix com un «fork» o “bifurcació”). El nucli assigna un espai de memòria de procés nou (però idèntic) i un altre procés per utilitzar-lo. En aquest moment, l'única diferència entre aquests dos processos és el seu pid. El nou procés normalment s'anomena procés fill, i el procés original del qual el pid no canvia s'anomena procés pare.
De vegades, el procés fill continua portant la seva pròpia vida independentment del seu pare, amb les seves pròpies dades copiades del procés pare. En molts casos, però, aquest procés fill executa un altre programa. Amb algunes excepcions, la seva memòria és simplement substituïda per la del nou programa, i l'execució d'aquest nou programa comença. Aquest és el mecanisme utilitzat pel procés init (amb número de procés 1) per iniciar serveis addicionals i executar tota la seqüència d'inici. En algun moment, un procés entre la descendència de l'
init
' engega una interfície gràfica perquè usuaris puguin iniciar sessió (la seqüència real d'esdeveniments es descriu en més detalls a
Secció 9.1, «Engegada del sistema»).
Quan un procés acaba la tasca per a la qual es va iniciar, finalitza. El nucli recupera la memòria assignada a aquest procés, i deixa de donar-li fragments de temps d'execució. El procés pare es informat que el seu procés fill ha acabat. fet que permet que un procés esperi la finalització d'una tasca que delega en un procés fill. Aquest comportament és clarament visible en els intèrprets de línia d'ordres (coneguts també com a «shells»). Quan una ordre s'escriu en un intèrpret d'ordres, l'indicador només reapareix quan s'ha acabat l'execució de l'ordre. La majoria dels «shells» permeten executar l'ordre en segon pla, és qüestió simplement d'afegir un &
al final de l'ordre. L'indicador ara reapareix immediatament, fet que pot provocar problemes si l'ordre necessita mostrar les seves pròpies dades.
Un «daemon» o “dimoni” és un procés iniciat automàticament per la seqüència d'arrencada. Es manté funcionant (en segon pla) per realitzar tasques de manteniment o proporcionar serveis a altres processos. Aquesta “tasca en segon pla” és realment arbitrària, i no té res de particular des del punt de vista del sistema. Es tracta simplement de processos, bastant similars a altres processos, que s'executen per torns quan arriba el seu moment. La distinció només és en el llenguatge humà: un procés que s'executa sense interacció amb un usuari (en particular, sense cap interfície gràfica) es diu que s'està executant “en segon pla” o “com a dimoni”.
B.5.3. Comunicacions entre processos
Un procés aïllat, ja sigui un dimoni o una aplicació interactiva, rarament és útil per si sol, motiu pel qual hi ha diversos mètodes que permeten a processos separats comunicar-se entre si, ja sigui per intercanviar dades o per controlar-se. El terme genèric que fa referència a això és «inter-process communication» o “comunicació entre processos”, IPC per escurçar.
El sistema IPC més simple és utilitzar fitxers. El procés que vol enviar dades les escriu en un fitxer (amb un nom conegut per endavant), mentre que el destinatari només ha d'obrir el fitxer i llegir-ne el contingut.
En el cas que no es vulgui emmagatzemar dades al disc, es pot utilitzar una «pipe» o “canonada”, que és simplement un objecte amb dos extrems; els «bytes» escrits en un extrem es poden llegir per l'altre. Si els extrems estan controlats per processos separats, això condueix a un canal de comunicació simple i convenient entre processos. Les canonades es poden classificar en dues categories: amb nom i sense nom. Una canonada amb nom es representa amb una entrada al sistema de fitxers (encara que les dades transmeses no s'emmagatzemen allà), de manera que tots dos processos poden obrir-la independentment, si la ubicació de la canonada amb nom és coneguda per endavant. En els casos en què els processos de comunicació estan relacionats (per exemple, un procés pare i el seu procés fill), el procés pare també pot crear una canonada anònima abans de bifurcar-se, i el fill l'hereta. Tots dos processos seran capaços d'intercanviar dades a través de la canonada sense necessitat del sistema de fitxers.
No totes les comunicacions entre processos s'utilitzen per moure dades. En moltes situacions, l'única informació que s'ha de transmetre són missatges de control, com ara “aturar l'execució” o “reprendre l'execució”. Unix (i Linux) proporcionen un mecanisme conegut com a «senyals» o “senyals”, a través del qual un procés pot simplement enviar un senyal específic (escollit des d'una llista predefinida de senyals) a un altre procés. L'únic requisit és conèixer el pid del destinatari.
Per a comunicacions més complexes, també hi ha mecanismes que permeten a un procés obrir l'accés, o compartir, part de la seva memòria assignada a altres processos. La memòria un cop compartida entre ells es pot utilitzar per moure dades entre els processos.
Finalment, les connexions de xarxa també poden permetre als processos comunicar-se; aquests processos fins i tot poden estar funcionant en diferents ordinadors, possiblement a milers de quilòmetres de distància.
És bastant habitual que un típic sistema de tipus Unix faci ús de tots aquests mecanismes en diversos graus.
Les biblioteques de funcions tenen un paper crucial en un sistema operatiu de tipus Unix. No són programes en si, ja que no es poden executar per si sols, sinó col·leccions de fragments de codi que poden ser utilitzats pels programes estàndard. Entre les biblioteques comunes podeu trobar:
la biblioteca C estàndard (glibc), que conté funcions bàsiques com ara obrir fitxers o connexions de xarxa, i d'altres que faciliten interaccions amb el nucli;
conjunts d'eines gràfiques, com ara Gtk+ i Qt, que permeten a molts programes reutilitzar els objectes gràfics que proporcionen;
la biblioteca libpng, que permet carregar, interpretar i desar imatges en el format PNG.
Gràcies a aquestes biblioteques, les aplicacions poden reutilitzar codi existent. El desenvolupament de l'aplicació se simplifica, ja que moltes aplicacions poden reutilitzar les mateixes funcions. Amb les biblioteques sovint desenvolupades per diferents persones, el desenvolupament global del sistema és més proper a la filosofia històrica de Unix.
A més a més, aquestes biblioteques sovint es coneixen com a “biblioteques compartides”, ja que el nucli només pot carregar-les a memòria una vegada, fins i tot si diversos processos utilitzen la mateixa biblioteca al mateix temps. Això permet estalviar memòria, en comparació amb la situació oposada (hipotètica) on el codi d'una biblioteca es carregaria tantes vegades com processos hi hagi que l'utilitzin.