WPC 2%B9P Z Courier 10cpiCourier 10cpiUnivers (Scalable)Univers Bold (Scalable)HP LaserJet IIISiHPLASIII.PRSx  @H}FZX@+ ?< 3'3'Estndar6&6&EstndarrJet IIISip+ USES2WY!iZ+3|x Courier 10cpiUnivers (Scalable)ivers (WN) (Bold)HP LaserJet IIISiHPLAIISI.WRSx  @,4p UX@2 (X*@@+?xxx,wx6X@8;X@2~CC,qX~xP7XP2CC,!hXp?7Xntbrush, Grficos (PCX) Program (EXE) Program (COM)Otro WordPerfectWindows Metaf"5@^CCc}}ǗCCC}CCCC}}}}}}}}}}CCgǓ}ro7okv}ǐzCCC}c}krkrkJrr00k0rrrrFcJrooo`YcY}CC!}}}R}}zkkkkkékrkrkrkrk70707070rrrrrrrrrCokrrrorvr}}}kk}}}}}}}r}r}rr}}}}}}7zokk0kRrr}CCFRcCCNC}}Cgoo}}CQQ}Mcc}MCCCCCCCCCCCCCCCCMtCnnyy2}o6coonCzohbnonvyXzXshn~|yxxxxxxxxxxxxxxxxxxxCCc}}ǗCCC}CCCC}}}}}}}}}}CCgǓ}ro7okv}ǐzCCC}c}krkrkJrr00k0rrrrFcJrooo`YcY}CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC}}}}c}}cQoCc}}MM}o}}MQogÌrrrr7777Ǘvzkkkkkkkkkkk0000rrrrrrrrrrrror"5@^CCg}}ǗCCC}CCCC}}}}}}}}}}CCgǓ}ro7okv}ǐzCCC}c}krkrkJrr00k0rrrrFcJrooo`ccc}CC!}}}R}}zkkkkkékrkrkrkrk70707070rrrrrrrrrCokrrrorvr}}}kk}}}}}}}r}r}rr}}}}}}7zokk0kRrr}CCFRcCCNC}}Cgoo}}CQQ}Mcc}MCCCCCCCCCCCCCCCCMtCnnyy2}v6coonCzvhbnonvyXzXshn~|yxxxxxxxxxxxxxxxxxxxCCg}}ǗCCC}CCCC}}}}}}}}}}CCgǓ}ro7okv}ǐzCCC}c}krkrkJrr00k0rrrrFcJrooo`ccc}CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC}}}}c}}cQoCc}}MM}v}}MQogÌrrrr7777Ǘvzkkkkkkkkkkk0000rrrrrrrrrrrror24 "Sh5^CCd~~ȘCCC~CCCC~~~~~~~~~~CChȔ~so8okv~ȐzCCCddCkskskJss00k0ssssFdJsooo`YdY~C~~~~~C~~~~~~d~z0kkkkkĪksksksksk80808080sssssssssok~ssosvsk~~~~~~~~~~~~~~s~~~~~~~0~~~~Cz`~~~~~~~kIk0~~~~ȵ~~d~~~~~~~~s~~~sȮ~z`CddCCCWddddddddddddddddddddddddddddddddddddddddNd~~Choo~~~QQ~NNdd~NCCdd~JJ~~zzdddzzCddN"Ȑdjd dCCȐvȐxCd~o~ȐȔdC~d~sȐkȐȐȧzȐUvŐdȐYYCCCCŔo~kodks]zUsk80dhoo~UssvkvvY~]k`sC~koCC~~~~~~~CsdYCx"Sh5^CCh~~ȘCCC~CCCC~~~~~~~~~~CChȔ~so8okv~ȐzCCCddCkskskJss00k0ssssFdJsooo`ddd~C~~~~~C~~~~~~d~z0kkkkkĪksksksksk80808080sssssssssok~ssosvsk~~~~~~~~~~~~~~s~~~~~~~0~~~~Cz`~~~~~~~kNk8~~~~ȵ~~d~~~~~~~~s~~~sȮ~z`CddCCCWddddddddddddddddddddddddddddddddddddddddNd~~Choo~~~QQ~NNdd~NCCdd~JJ~~zzdddzzCddN"Ȑdod dCCȐzȐxCd~v~ȣȔ`C~o~sȐdȐȐȮzȐUvŐdȐddCCCCŔs~vodssdz]sz84ddvo`szvsz]~]vosC~sCC~~~~~~~CzdYCx  Jh#[(p-bN= &6Standard`xx4UUUUUUUUUUUUU 5h 5h ah a| h a.z h ahL473#\  P<P#NUCLEO uP NUCLEOJ25 < #\  P<P#UNIX uP   UNIXO7:K#\  P<P#INTERFASE uP  INTERFASEYADz# #\  P<P#LLAMADAS AL SISTEMA uP LLAMADAS AL SISTEMAH03wKc#\  P<P#DE uP DE   $-| f! ; h qh  ;  *  @Q9<R#X\  P<P#COMANDOS DE nrNP  COMANDOS DEN69!q#X\  P<P#COMANDOS vrNP x-COMANDOSR:=!D##X\  P<P#DE DRIVERS Y `rNP  zADE DRIVERS YP8;L#X\  P<P#PROTOCOLOS lrNP  NjPROTOCOLOSM587#X\  P<P#PIPES Y VrNP UPIPES YM58={K#X\  P<P#FILTROS _rNP iFILTROSR:= "]#X\  P<P#SERVICIOS DE ^rNP  {SERVICIOS DEO7:!Y"q#X\  P<P#MANTENIM. irNP  [MANTENIM.Q9<5##X\  P<P#DEL SISTEMA brNP  HDEL SISTEMAP8; $ #X\  P<P#ENTORNO DE jrNP    ENTORNO DES;>, $| #X\  P<P#CONFIGURACION irNP   CONFIGURACION[CF d#X\  P<P#COMANDOS Y UTILIDADES frNP iCOMANDOS Y UTILIDADESR:=x#X\  P<P#DEL SISTEMA ^rNP  DEL SISTEMAO7: J#X\  P<P#EJECUCION crNP  * hEJECUCION]EH ^#X\  P<P#FOREGROUND Y BACKGROUND mrNP  |FOREGROUND Y BACKGROUNDO7: A T#X\  P<P#PROGRAMAS rrNP  r PROGRAMASP8;  #X\  P<P#EJCUTABLES erNP  b EJCUTABLESR:= * z #X\  P<P#DIRECTAMENTE krNP  c DIRECTAMENTEO7: #X\  P<P#INTERFASE brNP  9 INTERFASEQ9<6. #X\  P<P#DE COMANDOS nrNP  #DE COMANDOSP8;5 #X\  P<P#DE USUARIO drNP  DE USUARIO r  $T( !O7:) )#\  P<P#PROGRAMAS uP  PROGRAMASS;> (#\  P<P#DE APLICACION uP  = DE APLICACIONR:=V0#\  P<P#APLICACIONES uP  APLICACIONESW?Bj#\  P<P#DE COMUNICACIONES uP &DE COMUNICACIONESM58=(#\  P<P#Y REDES uP Y REDESW?BqV #\  P<P#DE BASES DE DATOS uP <DE BASES DE DATOSN69!#\  P<P#SISTEMAS uP qSISTEMASK36 u #\  P<P#OTROS uP _OTROSO7:y#\  P<P#PROGRAMAS uP  "qPROGRAMASQ9< Z#\  P<P#DE UTILIDAD uP  ( /DE UTILIDADY>D 1.#X\  P<P#DIRECCI:N DE E/S ^rNP . DIRECCIN DE E/S !XhN69C\#\  P<P#HARDWARE uP sHARDWAREp-bN= &6Standard`xx4UUUUUUUUUUUUU33O O LL!![CFe#\  P<P#"/" (DIRECTORIO RAIZ) uP "/" (DIRECTORIO RAIZ)I14uE#\  P<P#bin juP binI14 1#\  P<P#dev xuP devI14c B E#\  P<P#bin juP  binI14IE#\  P<P#usr euP usrI14L\#\  P<P#etc auP 1etc J253 #\  P<P#usr1 kuP U usr1J25" p#\  P<P#usr2 kuP wV usr2I14 #\  P<P#ges ouP AV gesp-bN= &6Standard`xx4UUUUUUUUUUUUUO W!W!iO i$Z$Z^^ $h'$h'^ ^C  C; I!I!;  C   Ci i jRU; Q #\  P<P#INTERFACE DE LAS LLAMADAS AL SISTEMA uP *$ INTERFACE DE LAS LLAMADAS AL SISTEMA\DG*\#\  P<P#SUBSISTEMA DE FICHEROS uP 61SUBSISTEMA DE FICHEROS - - R:= *#\  P<P#BUFFER CACHE uP  ) BUFFER CACHE c c i N69C;  #\  P<P#CARACTER uP  CARACTERL47 ; ` #\  P<P#BLOQUE uP $ BLOQUEZBEo}b #\  P<P#MANEJADORES DE DISP. uP 7MANEJADORES DE DISP.ZBE !#\  P<P#CONTROL DEL HARDWARE uP CONTROL DEL HARDWAREeMPt'#\  P<P#SUBSIST. DE CONTROL DE PROCESOS uP %SUBSIST. DE CONTROL DE PROCESOS^FI:!#X\  P<P#COMUNICACION DE PROCESOS frNP W9COMUNICACION DE PROCESOSZBENjD#X\  P<P#PLANIFICACION DE CPU _rNP bPLANIFICACION DE CPUX@C Y#X\  P<P#GESTION DE MEMORIA erNP kwGESTION DE MEMORIA f h h   h h;;UU;+;e;;::;;Thhhh - f   k @ @- -    - - ^^^^- 3-  f % %   % %k@@   ^n  ^o o o :o kAA^^' ^   R R } ^,,W  + q+qrWWWuuJZs/s/qqssq ^G 2 MM#\  P<P# `HKf X#\  P<P#NIVEL DE USUARIO: PROCESOS uP  NIVEL DE USUARIO: PROCESOS T<?j-#\  P<P#NIVEL HARDWARE uP NIVEL HARDWARE]BHS#\  P<P#NIVEL DE NBCLEO UNIX uP 3(NIVEL DE NCLEO UNIXp-bN= &6Standard`xx4UUUUUUUUUUUUUW' W' ' ' ' ' LLL' L' 3WW3333L3L3LL33 3 3  3W%W%%%%%^^^%^%%% 3pRp'' '' pp3  @ +E/3 q\' 8 Z1EDY/  Yqo\YRY''YYY+YYYDQY;Yo^FICO ,#\  P<P#tabla de descriptores de duP tabla de descriptores de YAD @#\  P<P#ficheros de usuario fuP  ficheros de usuario W?BG,#\  P<P#tabla de ficheros cuP tabla de ficheros Q9<]lm#\  P<P#del sistema guP  del sistema U=@%,#\  P<P#tabla de inodes fuP Jtabla de inodes Q9<p$@#\  P<P#del sistema guP  del sistema  p-bN= &6Standard`xx4UUUUUUUUUUUUU kWkWkWWkk}k}k}}kkkkLkLkLLkkrkrkrrkk k k  A kA kA A  k k  gkgG/2C*`#\  P<P#1 }uP 1 G/26P#\  P<P#2 }uP l%2 G/2:6#\  P<P#3 }uP l3 G/2C`#\  P<P#4 }uP v4 G/2C`4#\  P<P#5 }uP  5 G/2C`#\  P<P#6 }uP 6 G/2C`p#\  P<P#7 }uP E7 G/2CZ`#\  P<P#8 }uP 8 G/2C `#\  P<P#9 }uP l9 H03C *#\  P<P#10 }uP  10 H03C)  #\  P<P#11 }uP  11 H03C e #\  P<P#12 }uP : 12 H03CO #\  P<P#13 }uP 13    CC  VV  }}  ``    pY. E     m B   i>    ' f   x 3  3    A A CyCyyy$$}  }h$ A ,,  - n C C    { { J J g  k *    7 " x yy   y yA A i yi y   ,X C    }R  fgR)ppC)C)VpVp))N)N)^)^) ) )A A  ) )0#q=S)i(y  h~)$6(6y-  h!~ )^1(yA , Sh)  ( cSX hC ) ( (~ yS> S( yyyyqq)))])]){(;(%ySS)JS=yc=(txbK " ]$((C$C$((V$V$}(}($$8(8($$`(`($$(( $ $0!#h7#hw#R#R$V7#L# w##$7#L# yw##$L!#7#J4w##q$^7# L# w# # $ 7# L#k ] H#U #U G/2  #\  P<P#. >uP  . G/2  4#\  P<P#. >uP  . G/2  #\  P<P#. >uP  . G/2  H#\  P<P#. >uP  . G/2  #\  P<P#. >uP  . G/2  \#\  P<P#. >uP  1. G/2 2 #\  P<P#. >uP  . G/2P#\  P<P#. >uP  %. G/2&#\  P<P#. >uP  . G/2N#\  P<P#. >uP  #. G/2:#\  P<P#. >uP  . G/2b#\  P<P#. >uP  7. G/2N#\  P<P#. >uP  . G/2  #\  P<P#. >uP   . G/2 : #\  P<P#. >uP   . G/2  #\  P<P#. >uP   . G/2~F#\  P<P#. >uP . G/21~#\  P<P#. >uP . G/2~Z#\  P<P#. >uP /. G/2*#\  P<P#. >uP j. G/2g#\  P<P#. >uP j<. G/2=#\  P<P#. >uP j. G/2-  #\  P<P#. >uP . G/2, 1#\  P<P#. >uP . G/2 = #\  P<P#. >uP j . G/2)  #\  P<P#. >uP j . G/2u#\  P<P#. >uP j. G/2 #\  P<P#. >uP j. G/22#\  P<P#. >uP j. G/2#\  P<P#. >uP j. G/2F#\  P<P#. >uP j. [CFc V#X\  P<P#bloques directos (10) CrNP  tbloques directos (10) ZBE ?  #X\  P<P#bloque indirecto (1) CrNP + bloque indirecto (1) `HKg#X\  P<P#bloque doble indirecto (1) CrNP B bloque doble indirecto (1) aILHT#X\  P<P#bloque triple indirecto (1) @rNP !B bloque triple indirecto (1) ]EH^#X\  P<P#bloques doble indirecto DrNP 9|bloques doble indirecto X@C#X\  P<P#bloques indirectos CrNP x bloques indirectos X@C=6 #X\  P<P#bloques indirectos CrNP Tbloques indirectos V>A)3 #X\  P<P#bloques de datos FrNP  bloques de datos V>A #X\  P<P#bloques de datos FrNP .(bloques de datos V>A.~#X\  P<P#bloques de datos FrNP "bloques de datos V>A$)#X\  P<P#bloques de datos FrNP $ bloques de datos  p-bN= &6Standard`xx4UUUUUUUUUUUUU O 5"5"]O ] O 5" ] O }5"} O 5" O 5" O L5"L O 5"X=C; f#\  P<P#nCmero de inode zuP  ;nmero de inode X@C-f#\  P<P#nombre del fichero kuP T;nombre del fichero H03e#\  P<P#83 }uP i83 G/2e#\  P<P#. >uP . G/22#\  P<P#2 }uP hv2 H03#\  P<P#.. >uP v.. J254#\  P<P#1200 }uP j 1200 J25Q4#\  P<P#gest duP  gest I14,#\  P<P#358 }uP i358 K36Q#\  P<P#datos iuP datos I14,p#\  P<P#400 }uP iE400 O7:Qp#\  P<P#program.c quP  Eprogram.c G/2Z^#\  P<P#. >uP . G/2m^#\  P<P#. >uP . G/2 ^+#\  P<P#. >uP . G/2 ^*#\  P<P#. >uP  . G/2 ^= #\  P<P#. >uP  . G/2 ^Q #\  P<P#. >uP & . G/2 ^e #\  P<P#. >uP : . G/2^y #\  P<P#. >uP N . G/2^w #\  P<P#. >uP L. G/2^#\  P<P#. >uP `. G/2^#\  P<P#. >uP t. G/2 ^#\  P<P#. >uP . G/2^#\  P<P#. >uP . G/21^#\  P<P#. >uP . G/20^#\  P<P#. >uP . T<?^ #\  P<P#desplazamiento nuP desplazamiento G/2e#\  P<P#0 }uP 0 H03r v#\  P<P#16 }uP K16 H03r`  #\  P<P#32 }uP 32 H03r  #\  P<P#48 }uP 48 H03r E#\  P<P#64 }uP 64  p-bN= &6Standard`xx4UUUUUUUUUUUUU wV= V= w= VV= VVww^^w' ' ^w^' ^' ^^^VwVw w w  w '  ' w '    '     VpVppp^^ p p  I141eH#\  P<P#109 }uP 109 I14e #\  P<P#106 }uP 6 106 I14 e#\  P<P#103 }uP  103 I14ne#\  P<P#100 }uP 100 I141Hp#\  P<P#211 }uP E211 I14 p#\  P<P#208 }uP 6 E208 I14 p#\  P<P#205 }uP  E205 I14np#\  P<P#202 }uP E202 I141) H #\  P<P#310 }uP  310 I14) #\  P<P#307 }uP 6 307 I14 )  #\  P<P#304 }uP  304 I14n)  #\  P<P#301 }uP  301 ssH   ^s^s H I14CZH#\  P<P#109 }uP 109 I14C Z#\  P<P#211 }uP  211 G/2e#\  P<P#. >uP r. G/2ej#\  P<P#. >uP . G/2e#\  P<P#. >uP K. G/2eeC#\  P<P#. >uP . G/2e#\  P<P#. >uP %. G/2)e#\  P<P#. >uP |. G/2et#\  P<P#. >uP . G/2e#\  P<P#. >uP V. G/2p#\  P<P#. >uP rE. G/2!p#\  P<P#. >uP tE. G/2xVp#\  P<P#. >uP E. G/2yWp#\  P<P#. >uP E. G/2p#\  P<P#. >uP #E. G/2=p#\  P<P#. >uP E. G/2p#\  P<P#. >uP E. G/2p#\  P<P#. >uP jE. G/2oMp#\  P<P#. >uP E. G/2)  #\  P<P#. >uP r . G/2) j #\  P<P#. >uP  . G/2)  #\  P<P#. >uP K . G/2e) C #\  P<P#. >uP  . G/2)  #\  P<P#. >uP % . G/2))  #\  P<P#. >uP | . G/2) t #\  P<P#. >uP  . G/2)  #\  P<P#. >uP V .  p-bN= &6Standard`xx4UUUUUUUUUUUUU 0-0- 0 0 0000 !0! h'0h'J25pS#\  P<P#open yuP ?(open K36D<#\  P<P#creat auP creat I14f#\  P<P#dup }uP >;dup J258y#\  P<P#pipe kuP ?Npipe K36#\  P<P#close fuP ?bclose J25  S#\  P<P#open yuP _(open K36  g#\  P<P#creat auP _<creat K36  f#\  P<P#chdir fuP _;chdir L47 ( y#\  P<P#chroot juP `Nchroot K36 D #\  P<P#chown uP _bchown K36 R #\  P<P#chmod uP _vchmod J25' !S#\  P<P#stat VuP | (stat J25' Kg#\  P<P#link auP | <link L47' Ef#\  P<P#unlink juP } ;unlink K36' }y#\  P<P#mknod uP | Nmknod K36' E#\  P<P#mount uP | bmount L47' #\  P<P#umount uP } vumount K369S#\  P<P#creat auP  (creat K36 g#\  P<P#mknod uP  <mknod J25f#\  P<P#link auP  ;link L47y#\  P<P#unlink juP  Nunlink K36 S#\  P<P#chown uP %(chown K36g#\  P<P#chmod uP %<chmod J25f#\  P<P#stat VuP %;stat J25Q S#\  P<P#read kuP X(read K36 g#\  P<P#write fuP X<write K36/ P#\  P<P#lseek fuP %lseek K36"%S#\  P<P#mount uP  #(mount L47"Q&g#\  P<P#umount uP  #<umount K36T(*S#\  P<P#chdir fuP ((chdir K36T(+g#\  P<P#chown uP (<chown f&f&yad  #\  P<P#algoritmos de bajo nivel del subsistema de ficheros guP 93 salgoritmos de bajo nivel del subsistema de ficheros f&f&- -  -  -  n- f&- f&U U U f&U f&{{K36  #\  P<P#namei zuP  namei U=@ #\  P<P#iget iput YuP Pliget iput X@C#\  P<P#ialloc ifree XuP 7Wialloc ifree \DG5%#\  P<P#alloc free bmap buP tWalloc free bmap eMP} & #\  P<P#algoritmos de manejo de buffers juP %w algoritmos de manejo de buffers jm $! #\  P<P#getblk brelse bread breada bwrite ^uP B< getblk brelse bread breada bwrite  p-bN= &6Standard xx4UUUUUUUUUUUUUWWW  W W:: mk k  W%% H rr^ J r1r_ J "0"J n"n m"m k"k i"i 8"8 L"L `"` ^"^  "   "   "  +G ,\,1}+r @\ JrJ o o  @U \U  \ @r  +, u+ uO $@ _J _ +Z  _U U  % BQBQ!! < }<}&Q&<Q g G, r,6kQgVmkk&)<V@Q<kkx/ <d:kaL&& O7:,|#X\  P<P#USER TEXT crNP  USER TEXTL47k'#X\  P<P#REGION grNP nREGIONO7:}#X\  P<P#USER DATA grNP  /USER DATAL47CR#X\  P<P#REGION grNP REGIONP8;]#X\  P<P#USER STACK erNP  :USER STACKL47F#X\  P<P#REGION grNP DdREGIONQ9<- } #X\  P<P#KERNEL TEXT frNP   KERNEL TEXTL47DV S #X\  P<P#REGION grNP  REGIONQ9<mM #X\  P<P#KERNEL DATA irNP  k KERNEL DATAL47CRa #X\  P<P#REGION grNP REGIONR:=B#X\  P<P#KERNEL STACK grNP  &KERNEL STACKL47CR1#X\  P<P#REGION grNP OREGIONN69,|#X\  P<P#P32 TEXT [rNP P32 TEXTN69P##X\  P<P#P32 DATA `rNP P32 DATAO7:U_K#X\  P<P#P32 STACK ^rNP  P32 STACKI14{:#X\  P<P#781 SrNP 6X781I14 #X\  P<P#670 SrNP a670I14&v#X\  P<P#780 SrNP L780I143#X\  P<P#649 SrNP LQ649I14v#X\  P<P#580 SrNP L580I14[ R#X\  P<P#781 SrNP p781I140@ #X\  P<P#670 SrNP 670I14  [#X\  P<P#780 SrNP Dy780I14 o#X\  P<P#580 SrNP Y580I14n #X\  P<P#649 SrNP Y 649P8;@-#\  P<P#PROCESO 32 uP  PROCESO 32W?B@D #\  P<P#TABLA DE REGIONES uP TABLA DE REGIONESR:=kB #\  P<P#MODO USUARIO uP  MODO USUARIOW?B@ #\  P<P#TABLA DE REGIONES uP TABLA DE REGIONESQ9<+ #\  P<P#MODO NUCLEO uP  MODO NUCLEOW?B X#\  P<P#TABLAS DE PAGINAS uP m TABLAS DE PAGINASR:= A#\  P<P#MODO USUARIO uP  MODO USUARIOQ9<i H-#\  P<P#MODO NUCLEO uP  MODO NUCLEOT<?AX$#\  P<P#MEMORIA FISICA uP MEMORIA FISICAS;>#X\  P<P#( CONTENIDO ) ZrNP  ( CONTENIDO )='**"='"='*X* ('* ('O*O S'V*V"#m#S'S'##='='='('('='='T"##S'('#$#:"##=''S'R#@#V" $#h'='##`"E ##=''w#b#R:=%.$+~#X\  P<P#TABLA PFDATA grNP  %TABLA PFDATAp-bN= &6Standard`xx4UUUUUUUUUUUUU) C) C) C) C) C) C) CCV) V) VV}) }) }}) ) ) ) ) )  )  )   A ) A ) A A ") ") ""J) J  ) W ) WM58 @#\  P<P#SWAPPER uP CSWAPPER P8;zg#\  P<P#ESPERA E/S uP  <ESPERA E/S S;>>y#\  P<P#ESPERA BUFFER uP  ZNESPERA BUFFER R:=#\  P<P#ESPERA INODE uP  vESPERA INODE X@C #\  P<P#ESPERA ENTRADA TTY uP qESPERA ENTRADA TTY W?B#\  P<P#ESPERA SALIDA TTY uP ESPERA SALIDA TTY W?Bk/d#\  P<P#EXIT PROCESO HIJO uP EXIT PROCESO HIJO YAD ?+#\  P<P#NIVEL DE USUSARIO 0 uP qNIVEL DE USUSARIO 0 X@C*i  #\  P<P#NIVEL DE USUARIO 1 uP  NIVEL DE USUARIO 1 X@C r#\  P<P#NIVEL DE USUARIO N uP [NIVEL DE USUARIO N T<?C| @#\  P<P#PRIORIDAD MODO uP PRIORIDAD MODO S;> O#\  P<P#NO PERMITIDAS uP  $NO PERMITIDAS T<?  #\  P<P#PRIORIDAD MODO uP 2PRIORIDAD MODO P8;P #\  P<P#PERMITIDAS uP  2PERMITIDAS [CFi #\  P<P#NUCLEO INTERRUPCIONES uP }NUCLEO INTERRUPCIONES [CFi 1#\  P<P#NUCLEO INTERRUPCIONES uP NUCLEO INTERRUPCIONES YAD #\  P<P#PRIORIDADES EN MODO uP U PRIORIDADES EN MODO M580 # = #\  P<P#USUARIO uP  USUARIO G/2 e #\  P<P#. >uP : . G/2y #\  P<P#. >uP N . G/2w #\  P<P#. >uP L. G/2#\  P<P#. >uP `. G/2#\  P<P#. >uP t. G/2 #\  P<P#. >uP . ) ) p-bN= &6Standard xx4UUUUUUUUUUUUU  h 1mh E0h h .1h  h h _h & & nk  ,k,4zz  T h fz ` O" OdzJ`+A H)Qqg\X - g1|S Y<n''' ( (  d S d i   O 9  &U h fh0D.~ohF9 K# h % (0 z z #$ #$W z z #  k l , @  N69/#X\  P<P#COMIENZO lrNP COMIENZOR:=Ui#X\  P<P#LLAMADA FORK nrNP  LLAMADA FORKN69' #X\  P<P#LISTO EN \rNP +LISTO ENJ25a !#X\  P<P#SWAP rrNP K?SWAPN69g #X\  P<P#LISTO EN \rNP +LISTO ENM58eL#X\  P<P#MEMORIA rrNP jMEMORIAM58#X\  P<P#DORMIDO prNP \DORMIDOM58#X\  P<P#EN SWAP hrNP EN SWAPM58#X\  P<P#DORMIDO prNP lDORMIDOP8; #X\  P<P#EN MEMORIA krNP  - EN MEMORIAR:=+, | #X\  P<P#EJECUTANDOSE irNP   EJECUTANDOSEQ9<B d #X\  P<P#MODO NUCLEO orNP   MODO NUCLEOR:=4g#X\  P<P#EJECUTANDOSE irNP  /EJECUTANDOSER:=H#X\  P<P#MODO USUARIO krNP  ZMODO USUARION69$? ( #X\  P<P#TRATANDO qrNP &% TRATANDOR:=#> R) #X\  P<P#INTERRUPCION drNP  Q$ INTERRUPCIONL47P#X\  P<P#ZOMBIE irNP ZOMBIEV>A^ =#X\  P<P#( MODO USUARIO ) ^rNP [( MODO USUARIO )V>Aan#X\  P<P#( MODO USUARIO ) ^rNP ( MODO USUARIO )YAD 5#X\  P<P#PETICION DE MEMORIA brNP Z SPETICION DE MEMORIAX@C _#X\  P<P#MEMORIA DISPONIBLE drNP  -MEMORIA DISPONIBLEYAD ^#X\  P<P#PETICION DE MEMORIA brNP PETICION DE MEMORIAP8;C #X\  P<P#- SWAP OUT `rNP  8>- SWAP OUTP8;H/#X\  P<P#- SWAP OUT `rNP  $- SWAP OUTS;>C3#X\  P<P#FIN DE EVENTO `rNP  QFIN DE EVENTOM58EG#X\  P<P#WAKE-UP lrNP eWAKE-UPS;> #3#X\  P<P#FIN DE EVENTO `rNP  QFIN DE EVENTOM58!G#X\  P<P#WAKE-UP lrNP oeWAKE-UPQ9<_? #X\  P<P#EXIT O KILL YrNP   EXIT O KILLM58= :#X\  P<P#LLAMADA urNP  LLAMADAP8;f N#X\  P<P#AL SISTEMA brNP  AL SISTEMAR:=1#X\  P<P#INTERRUPCION drNP  INTERRUPCIONO7:1#X\  P<P#O LLAMADA orNP  O LLAMADAP8;G#X\  P<P#FINALIZADA crNP  ;FINALIZADAK364 i#X\  P<P#SLEEP arNP  SLEEPR:=&( x #X\  P<P#INTERRUPCION drNP   INTERRUPCIONS;>6#X\  P<P#PRE-EMTED POR drNP  VPRE-EMTED POR^FIt$#X\  P<P#UN PROCESO DEL NUCLEO DE drNP rUN PROCESO DEL NUCLEO DEU=@Sr!#X\  P<P#MAYOR PRIORIDAD hrNP MAYOR PRIORIDADO7:h#X\  P<P#PRE-EMTED grNP  PRE-EMTEDO7:5#X\  P<P#- SWAP IN XrNP  - SWAP INR:=z b#X\  P<P#INTERRUPCION drNP  INTERRUPCION$ p  ~ & &$ qS\'<#jr\  P<P#COMPROBACI:N Y TRATAMIENTO DE SE8ALES eP +%/COMPROBACIN Y TRATAMIENTO DE SEALES J25')R#jr\  P<P#(**) YeP (E(**) J25U#jr\  P<P#(**) YeP 2(**)   Grp-bN= &6Standard`xx4UUUUUUUUUUUUU0*0*-*yy`-*`y++yJJ[vvKz    O O $ >  i i    YY.Q||&&oDD####w#w#L#h''''='=''z%%%%O%O%$%``[`_`_5O  z z `$ `$  )  T T ` `  n`C`CQ||`&`&o`D`Dz%%%%`O%`O%$%$zNI!3!( eec M N$!pvLLJJJ25Jg#\  P<P#open yuP <openK36* g#\  P<P#close fuP <closeK36g#\  P<P#ioctl XuP <ioctlJ25c  g#\  P<P#read kuP  <readK36' g#\  P<P#write fuP | <writeJ25eS#\  P<P#open yuP (openK36eg#\  P<P#mount uP <mountK36$ S#\  P<P#close fuP (closeM58/!g#\  P<P#unmount ~uP m<unmountJ25"%g#\  P<P#read kuP  #<readK36f&)g#\  P<P#write fuP &<writeJ25 J*#\  P<P#open yuP  openK36 * *#\  P<P#close fuP  closeJ25c *#\  P<P#read kuP  readK36' *#\  P<P#write fuP | writeK36 *#\  P<P#ioctl XuP  ioctlO7: ) #\  P<P#MANEJADOR uP  | MANEJADORaILW . #\  P<P#MANEJADOR DE INTERRUPCIONES uP ! MANEJADOR DE INTERRUPCIONESJ25e *#\  P<P#open yuP  openK36 *#\  P<P#close fuP l closeN69 $ '*#\  P<P#strategy buP d$ strategyO7: " #\  P<P#MANEJADOR uP  l| MANEJADORaIL ) #\  P<P#MANEJADOR DE INTERRUPCIONES uP !F MANEJADOR DE INTERRUPCIONESkk^FIUr#\  P<P#VECTOR DE INTERRUPCIONES uP VECTOR DE INTERRUPCIONESeMP)1#\  P<P#TABLA DE DISPOSITIVOS DE BLOQUE uP %TABLA DE DISPOSITIVOS DE BLOQUEgOR'1#\  P<P#TABLA DE DISPOSITIVOS DE CARACTER uP '!TABLA DE DISPOSITIVOS DE CARACTERk!!`k`R:=5" *#\  P<P#BUFFER CACHE uP  "vBUFFER CACHE5"-*-*5" S2   3'3'Estndar6&6&EstndarHPLASIII.PRSx  + #X~xP7qXP# ag EL SISTEMA OPERATIVO UNIX XCONTENIDOS:" X1. Introducci;n." X2. Estructura del Sistema." X3. La visi;n del usuario." X4. Estructura general del nCcleo." X5. El Subsistema de Ficheros UNIX." XX` ` 5.1. Descripci;n general del Subsistema de Ficheros."` XX` ` 5.2. Inode."` XX` ` 5.3. Estructuraci;n de la informaci;n en ficheros."` XX` ` 5.4. Los directorios UNIX."` XX` ` 5.5. Asignaci;n del espacio en disco."` XX` ` 5.6.Llamadas al Sistema."` X6. El Subsistema de Control de procesos." XX` ` 6.1. Descripci;n general de un proceso."` XX` ` 6.2. Estructura de los procesos UNIX."` XX` ` 6.3. Manejo de Memoria."` XX` ` 6.4. Planificaci;n de procesos."` XX` ` 6.3. Llamadas al Sistema para el control de procesos."` X7. El Subsistema de Entrada/Salida." XX` ` 7.1. Interfases de manejadores de dispositivos."` XX` ` 7.2. Configuraci;n del Sistema."` XX` ` 7.3. Llamadas al Sistema."` "p-++P"  S2 1. Introducci;n.  El sistema operativo UNIX proporciona un entorno adecuado y comCn de  `operaci;n a sus usuarios. Su gran popularidad se debe, entre otras causas, a su  `4capacibilidad de funcionamiento tanto en peque9os ordenadores  `(microordenadores) como en poderosos sistemas de computaci;n. El sistema UNIX  `fposee dos partes bien diferenciadas: la parte "visible" a los usuarios constituida por  `una serie de programas y servicios (compiladores, procesadores de texto, etc) y  `una segunda parte formada por el sistema operativo que soporta a estos programas  `y servicios. Estas dos partes funcionan como un todo, resultando al final un sistema cuyas caracter1sticas las podr1amos resumir en:  X- Sistema construido en un lenguaje de alto nivel; debido a ello es fcil su comprensi;n, posibles cambios y traslado a otras mquinas." X- Ofrece primitivas que facilitan la construcci;n de aplicaciones complejas." X- Sistema de ficheros eficiente y de fcil manejo."  X- Uniformidad en el tratamiento de ficheros; tratndolos como cadenas de bytes." X- Interfase simple y coherente con los dispositivos de E/S."  S2X- Proporciona un entorno multiusuario y multiprogramaci;n ."  S2 2. Estructura del sistema.  6La figura 1 muestra la arquitectura de alto nivel de UNIX. El hardware, que  `est en el centro de la figura, proporciona los servicios bsicos al sistema  `operativo. A continuaci;n nos encontramos con el nCcleo del sistema operativo que  `aisla las especificidades hardware del usuario; esto hace que los programas bajo  `UNIX puedan moverse entre mquinas distintas. Seguidamente aparecen las capas  S2 ` Ilustrac. 1  Ilustrac. 1 ms externas que se comunican con el nCcleo a trav)s de las llamadas al sistema ;  `en estas capas estarn por un lado los comandos del sistema y por otro lado los programas de aplicaci;n dise9ados por los usuarios.  Ilustrac. 1  Ilustrac. 1   Como resumen podemos decir que bajo el nombre de UNIX se engloba a un  `conjunto de subsistemas y programas que utilizan los servicios que el nCcleo les  `Hproporciona a trav)s de las llamadas al sistema. En este sentido cabe decir que el  `4sistema operativo UNIX contempla 64 llamadas al sistema estndares que deben  `ser soportadas en cualquier versi;n, por ejemplo: Solaris para estaciones sun, SCO UNIX para PCs , HPUX para equipos Hewlett Packard, AIX para IBM, etc. " (p-++@)"  S(!tp-bddf1unix.wpg t)ZFigura 1. Estructura interna UNIXb $""""!"$ 3. La visi;n del usuario.  S2  ^En esta secci;n se describen brevemente los rasgos de alto nivel de UNIX,  `>concretamente se pasa revista al sistema de ficheros y al entorno de procesos. El  `Jsistema de ficheros de UNIX se organiza en forma de rbol, tal y como se representa en la figura. A "a!p-bf2uni.wpgj  )xFigura 2. Ejemplo de organizaci;n l;gica de ficheros UNIXnM  S72 ^Existe una Cnica raiz, root , que se denota por "/", cada nodo no hoja es un7p-++\e"!.!"#$%( $4!"m0Aְ"j!!!]!!@?@P  `directorio de ficheros, los nodos hojas pueden ser directorios, ficheros normales o  S2 `ficheros especiales. El nombre de un fichero viene dado por su path_name que especifica como localizar el fichero en la estructura jerrquica.  <Los programas bajo UNIX deben interpretar los datos contenidos en los  `Xficheros. La sintaxis de acceso a los datos de un fichero es la misma para todo  ` programa y es definida por el sistema, en cambio, la semntica de los datos es soportada por los programas.  S12 Los directorios son ficheros cuya informaci;n especifica los nombres de los  `bficheros contenidos en ellos, en este sentido, )stos son ficheros normales cuya  `particularidad es que sus datos s;lo pueden ser accedidos por un conjunto de primitivas para el manejo de directorios.  En cuanto a los ficheros especiales, los ms importantes son los ficheros  S 2 `asociados a dispositivos, ya que UNIX de cara a los usuarios, trata a los  S2 `Zdispositivos como si fuesen ficheros . Debido a ello, los usuarios podrn acceder a  `los dispositivos utilizando la misma sintaxis que se emplea para el acceso a los  `ficheros de datos corrientes. En cuanto a los usuarios se contemplan tres  SK2 `categorias: el propietario, el grupo y dems usarios . Cada fichero tendr asociado  `Runos permisos de acceso para cada categor1a de usuario. Finalmente se resumen algunas de las caracter1sticas relevantes del sistema de ficheros UNIX: X- Estructura jerrquica." X- Tratamiento coherente de los ficheros." X- Capacidad de crear y borrar ficheros." X- Crecimiento dinmico de los ficheros." X- Protecci;n de ficheros." X- Tratamiento de los dispositivos perif)ricos como ficheros."  dEn cuanto al entorno de procesos, el sistema operativo UNIX permite la  S72 `j multitarea . Para UNIX un proceso es simplemente un programa en ejecuci;n siendo  `un programa un fichero ejecutable. UNIX dispone de varias llamadas al sistema para  `la creaci;n, sincronizaci;n y finalizaci;n procesos, as1 como para el control de la  `respuestas a eventos. Seguidamente se describen algunas de estas llamadas al sistema:  S!2  Xfork: Crea un nuevo proceso. Al proceso creador se le llama "padre" y el proceso creado es llamado "hijo"."  Sh$2 , Xexit: Finaliza un proceso. Todo proceso debe acabar su ejecuci;n con una llamada a este servicio. "  S#'2 2X wait: Suspende la ejecuci;n del proceso llamador hasta que finalice un  determinado proceso. Este servicio es t1pico en la sincronizaci;n de procesos."  S*2 Un ejemplo de proceso padre es el shell , int)rprete de comandos de UNIX,"*p-++,"  `bsu misi;n es interpretar la primera palabra de una l1nea de comando como una  ` orden; de forma que el resto de las palabras de la l1nea de comando son tratadas  `como argumentos. Para ejecutar dicha orden se crea un proceso hijo que se  S2encargar de la ejecuci;n del comando. El shell reconoce tres tipos de comandos:  S2 $X- Internos, intr1nsecos o residentes: Contenidos en el pr;pio c;digo del shell . "  S_2 NX- Externos, extr1nsecos o trasintorios: Sus c;digos estn contenidos en  Fficheros ejecutables que se han de cargar en memoria cada vez que se invoquen."  S 2 X- Ficheros batch: Ficheros que contienen una secuencia de l1neas con comandos de cualquier tipo."  hUNIX distingue dos tipos de modo de ejecuci;n durante la vida de cualquier proceso:  Sy2  XModo usuario: Los procesos en modo usuario s;lo pueden acceder a sus  Sb2 Zpr;pios datos y direcciones. Un proceso en modo usuario podr pasar a  SK2 modo sistema si ejecuta una instrucci;n privilegiada a trarv)s de una llamada al sistema."  S2 v XModo sistema: Los proceso en modo sistema pueden acceder a sus datos y direcciones tanto suyas como de cualquier otro proceso. "  El nCcleo proporciona una serie de servicios. Aparte de los ya mencionados, destacan:  X- Control de la ejecuci;n de procesos permitiendo la creaci;n suspensi;n y comunicaci;n."  ^X- Servicios para la correcta planificaci;n de los procesos. El recurso de CPU  S 2es compartido por los procesos mediante un esquema de tiempo compartido ."  X- Asignaci;n de memoria principal para la ejecuci;n de un proceso. Se  permite la compartici;n de memoria por parte de varios procesos bajo ciertas condiciones." X- Control del acceso a los perif)ricos por parte de los procesos."  SQ%2 4. Estructura general del nCcleo.  El modelo de sistema UNIX se fundamenta en base a dos conceptos: fichero  `y proceso. La siguiente figura muestra una visi;n l;gica del nCcleo con sus m;dulos y las relaciones existentes entre ellos. "*p-++,"Ԍ" S2 "atp-bddf3unix.wpg t)hFigura 3. Estructura interna del nCcleo UNIXb $""""a"$Se pueden distinguir tres niveles: nivel de usuario, nivel de nCcleo y nivel  `4hardware. La interfase entre el nivel de usuario y el nCcleo se realiza mediante las  `4llamadas al sistema y las librer1as del sistema. El conjunto de llamadas al sistema  `se dividen en dos grupos: las que interaccionan con el subsistema de ficheros y las que lo hacen con el subsistema de control de procesos.  SN( El subsistema de ficheros es el responsable de: X- Manejo de ficheros." X- Control de acceso a los ficheros." X- Gesti;n del espacio libre." X- Administraci;n de los datos."  JLos procesos interaccionan con este subsistema haciendo uso de llamadas  S"2 `"al sistema tales como: open, close, read, write, chmod, chown, etc . El subsistema  S#2 `4de ficheros accede a los datos usando la t)cnica de buffering , que regula el flujo  `de datos entre el nCcleo y los dispositivos de almacenamiento secundario. El  `mecanismo de buffering interactCa a su vez con los manejadores de dispositivos de  `bE/S cada vez que se realiza una transferencia de datos. Sin embargo, existe la  `Pposibilidad de que el subsistema de ficheros opere directamente con los  `Rmanejadores de dispositivos evitando as1 el uso de los buffers; para ello se utilizan las cola de E/S y una serie de servicios de bajo nivel.  S*(  El subsistema de control de procesos es responsable de la sincronizaci;n yX*p-++\+3"a.!"#$%( $4X  S2 `comunicaci;n entre procesos y el manejo y la gesti;n de la memoria . El subsistema  `de ficheros interactCa con este subsistema cada vez que un fichero ejecutable es  `cargado en memoria para su ejecuci;n. Algunas de las llamadas al sistema para  S2control de procesos son: fork, exec, exit, wait, signal, brk, etc .  |El m;dulo de manejo de memoria controla el espacio de memoria haciendo  Sv2 `uso de la t)cnica swapping , soportando generalmente memoria virtual . En cuanto  `al m;dulo gestionador de CPU (planificador), )ste gestiona el uso de la CPU por  SH2 `parte de los procesos; la pol1tica de planificaci;n de CPU consiste en desasignar la  `JCPU a un proceso cuando )ste pida otro recurso, o bien, cuando a )ste se le  S 2 `cumpla su rodaja de tiempo de uso de CPU , entonces el gestionador elige al  `>proceso de mayor prioridad para su ejecuci;n. La comunicaci;n entre procesos es  S 2 `posible a trav)s de diferentes mecanismos: semforos, se9ales, mensajes, memoria  S 2compartida y pipes .  S 2 Finalmente el m;dulo de control del hardware es responsable del manejo  S2 `de las interrupciones y de la comunicaci;n con la mquina . Dispositivos tales como  `terminales o discos pueden interrumpir a la CPU mientras un proceso es ejecutado.  `Si es as1, el nCcleo puede reanudar la ejecuci;n del proceso interrumpido una vez  `latendida la interrupci;n. El tratamiento de las interrupciones se lleva a cabo por medio de funciones especiales del nCcleo (no por procesos especiales).  S2 5. El subsistema de ficheros UNIX:  S( 5.1. Descripci;n del subsistema de ficheros:  S|2 :Cada fichero en UNIX tiene asociado una estructura de control llamada inode  `Tque contiene la descripci;n del fichero: localizaci;n en el disco, permisos de  `>accesos, propietarios y tiempos de acceso. Cuando un proceso hace referencia a  S72 `un fichero por su nombre, el nCcleo localiza su inode asociado y comprueba los  S 2 `permisios de acceso. La creaci;n de un inode lleva consigo la asignaci;n de un  S 2 ` inode no usado. Los inodes se localizan en memoria secundaria, siendo transferidos  S2 `por parte del nCcleo a memoria principal; concretamente a una tabla llamada tabla  S2de inodes .  S!2 El nCcleo utiliza otras dos tablas: la tabla de ficheros y la tabla de  S"2 `descriptores de ficheros de usuario . La tabla de descriptores de ficheros de usuario  `se asocia a cada proceso y tiene por finalidad identificar los ficheros abiertos por  `un proceso. En cuanto a la tabla de ficheros, )sta contiene la siguiente informaci;n:  ` desplazamiento en bytes y los permisos de acceso asociados. La siguiente figura muestra muestra las tablas descritas y la relaci;n existente entre ellas.  S#'20xp-bnnf4unix.wpg> )ZFigura 4. Tablas de ficheros UNIXd  X#'p-++<(3"5.x>!"#$%( $4X  4$""""4"$Cuando se producen llamadas al sistema para abrir o crear un fichero, el  ` nCcleo devuelve un descriptor de fichero el cual es un 1ndice dentro de la tabla de  `ldescritores de ficheros de usuario. Cuando se producen lecturas o escrituras, el  S2 `nCcleo utiliza la tabla de descriptores de ficheros para obtener el puntero que  S2 `permita acceder a la tabla de ficheros y a la tabla de inodes donde se encuentra e l  S2 `inode asociado al fichero en cuesti;n, a partir de su informaci;n se podrn localizar  `los datos a acceder. UNIX, debido a la diferencia de tiempos de acceso entre las  `cintas y discos, utiliza estos Cltimos como memoria secundaria sobre los cuales  `:construye sus sistemas de ficheros. Una instalaci;n bajo UNIX puede soportar  `varias unidades f1sicas de disco, conteniendo cada una de ellas uno o varios  SN2 `sistemas de ficheros, siendo uno de ellos el sistema de ficheros root (de arranque).  `Cada sistema de ficheros se denomina dispositivo l;gico y la conversi;n entre  `dispositivo l;gico y f1sico es responsabilidad del manejador de dispositivo que forma parte del nCcleo.  S2 Internamente un sistema de ficheros consiste en una secuencia de bloques  S 2 `>de bytes ; cada uno de 512, 1024, 2048 o cualquier mCltiplo de 512 dependiendo  `del tama9o elegido en el momento de la creaci;n del sistema. El tama9o de los  ` bloques l;gicos es el mismo para cada sistema de ficheros, en cambio puede ser  `distinto para sistemas de ficheros diferentes. Cada sistema de ficheros posee la siguiente estructura:  S:&2 X- Si es de tipo root (de arranque), comenzar con un bloque "boot" que  ocupa el principio del sistema de ficheros, normalmente el primer sector, que puede contener el c;digo de bootstrap."  S)2 X- El super-bloque que describe el estado del sistema de ficheros, )sto es: tama9o, espacio libre, etc."X*p-+++3"5.x>!"#$%( $4XԌ S2 ԙX- Lista de inodes cuyo tama9o es especificado por el administardor del sistema cuando se crea el sistema de ficheros."  S2X- Los bloques de datos que empieza despues de la lista de inodes. "  Sv2 5.2. Inode.  DComo ya se mencion; anteriormente, UNIX asigna para cada fichero un Cnico  S12 `4 inode . Esta estructura de control almacena la informaci;n necesaria para que los  `procesos puedan acceder a la informaci;n a trav)s del nCcleo. La informci;n  S 2contenida en inode se estructura de la siguiente forma: X- Identificador de propietario."  X- Tipo de fichero: Regulares, Directorio, Especiales de caracter, Especiales de bloque y Pipes." X- NCmero de Links asociados." X- Direcciones de los bloques de datos en disco."  X- Tama9o del fichero. Se define como el mayor offset que puede soportar ms uno."  S2 Cuando el inode ha sido transferido de disco a memoria, el nCcleo le a9ade la siguiente informaci;n:  S2X- Estado del inode :"  S2XX` ` * El inode est bloqueado."` XX` ` * Un proceso est esperando a que se desbloquee."`  S2XX` ` * El inode se ha actualizado modificando algCn campo suyo."`  S|2 ` tXX` ` * El inode se ha actualizado debido a una actualizaci;n de los datos del fichero asociado."` X- El nCmero l;gico de dispositivo que contiene al sistema de ficheros. "  S72X- NCmero de inodes en la lista de inodes de disco."  S 2X- Puntero a otro inode en memoria." X- NCmero de veces que el fichero asociado se ha abierto."  S ( 5.3. Estructuraci;n de la informaci;n en ficheros.  S"2 NComo ya se dijo anteriormente cada inode asociado a un fichero UNIX posee  `zuna tabla de direcciones de los bloques de disco que contiene los datos del fichero.  Sh$2 ` Por defecto todo inode contiene una tabla de 13 entradas y cada entrada puede  SQ%2 `ser: directa, indirecta, doble indirecta o triple indirecta. Una entrada directa  S:&2 `contiene la direcci;n de un bloque de datos del fichero. Una entrada indirecta  `bcontiene la direcci;n de un bloque de disco que contiene una tabla directa. Una  S (2 `entrada doble indirecta contiene la direcci;n de un bloque de disco que contiene  S(2 `Luna tabla indirecta. Por Cltimo, una entrada triple indirecta contiene la direcci;n de un bloque de disco que contiene una tabla doble indirecta. "* p-++,"Ԍ" S2 "txp-bddf5unix.wpg t)yFigura 5. Organizaci;n interna de los ficheros regulares UNIXd $"""""$Debido al compromiso existente entre flexibilidad en el crecimiento de  `>ficheros y el tiempo de acceso a la informaci;n, las distintas implementaciones de  `HUNIX fijan el nCmero mximo de entradas no directas que un fichero puede tener, as1 por ejemplo:  Se( * AT&T UNIX ver. 6: XEn un inode hay 8 entradas:" XX` ` Ficheros peque9os (Small Files): 8 entradas directas."`  ` HXX` ` Ficheros grandes (Large Files): 7 entradas indirectas y una doble indirecta."`  S(XX` ` X ,XhXhhXX "  S(* AT&T UNIX ver. 7: XBloques de 512 bytes." XEn un inode hay 13 direcciones de bloque." XX` ` 10 entradas directas."` XX` ` 1 entrada indirecta."` XX` ` 1 entrada doble indirecta."` XX` ` 1 entrada triple indirecta."`  S:&(  S#'(* AT&T UNIX system V: XBloques de 1 Kbytes." XMismo esquema de direccionamiento que el anterior." X* p-++4+3" .x!"#$%( $4XԌ S( 5.4. Los directorios UNIX.  S2  nUn directorio UNIX es un fichero que proporciona estructura jerrquica al  `sistema de ficheros, a trav)s de ellos se transforman los nombres de los ficheros  S2 `Rdados por los usuarios, en el nCmero de inode asociado . Cada directorio est constituido por una secuencia de entradas conteniendo cada una de ellas:  S_2X- NCmero de inode asociado (2 bytes) ." X- Nombre del fichero (mximo 14 caracteres)." La siguiente figura ilustra la estructura interna de un directorio.  S (b xp-bnnf6unix.wpg  )nFigura 6. Estructura interna de un fichero directoriod $"" ""b"$ 5.5. Asignaci;n del espacio en disco.  Para entender como se gestiona el espacio en disco en UNIX hay que tener  S 2 `presente la estructura interna del super-bloque , caracter1stico de cada sistema de  S 2 `*ficheros, construido en UNIX con el comando mkfs . Un super-bloque en UNIX posee la siguiente informaci;n: X- Tama9o del sistema de ficheros." X- NCmero de bloques libres en el sistema de ficheros."  S"2X- Lista de bloques libres en el sistema de fichero." X- Un indice a esta lista para asignar el pr;ximo bloque." X- Tama9o de la lista de inodes." X- NCmero de inodes libres en el sistema de ficheros."  S:&2X- Lista de inodes libres en el sistema de ficheros." X- Indice del pr;ximo inode libre a asignar." X- Campos de bloqueo de acceso a la lista de bloques libres y de inodes." X- Un flag que indica que el super-bloque ha sido cambiado. "  S*2 Cuando el comando mkfs crea un sistema de ficheros, )ste construye en elX* p-++z+3"` .x!"#$%( $4X  S2 ` super-bloque una lista de bloques libres de forma que cada entrada contiene la  `direcci;n de un bloque de disco disponible. La Cltima entrada contiene la direcc;n  `de un bloque de disco que posee otra lista de bloques libres cuya organizaci;n es  `la misma que la anterior. As1 pues, cuando se necesita espacio en disco, el nCcleo  S2 `zacude a la copia del super-bloque en memoria (cuando se monta un sistema de  S2 `ficheros, mount, su super-bloque se transfiere a memoria principal) para tomar el  `siguiente bloque disponible. En el caso de que )ste sea el Cltimo de la lista de  `bloques libres; entonces no es considerado como un bloque libre de datos, sino que  `es tomado como un bloque que contiene otra lista de bloques libres. Cuando ocurre  S12 `lo anterior, el nCcleo procede a transferir dicha lista a la zona del super-bloque en memoria destinada a contener dicha lista.  S 2 xp-buf7unix.wpg|  )v_Figura 7. Organizaci;n de los bloques de disco disponiblesd $"" """$  S|2 5.6. Llamadas al sistema del subsistema de ficheros.  En la siguiente figura se ilustra el conjunto de algoritmos y llamadas al sistema del subsistema de ficheros:  S 2 "p-bf8unix.wpg  )lGFigura 8. Funciones del subsistema de ficheros UNIXb $"" """$ p-++R e" .x|!"#$%( $4""0 ֊"!!!]!!@?@PԌ S2X- IX` ` Llamadas que retornan un descriptor de fichero."`  S2X- IIX` ` Llamadas que usan namei."`  S2X- IIIX` ` Llamadas que necesitan inode libres; ialloc y ifree."`  S2X- IVX` ` Llamadas para asignar o cambiar atributos."`  S2X- VX` ` Llamadas de E/S; alloc, free y algoritmos de buffers."`  S2X- VIX` ` Llamadas que cambianla estructura del sistema de ficheros."`  Sv2X- VIIX` ` Llamadas que cambian la organizaci;n de los ficheros. "`  S1( Algoritmos de bajo nivel del subsistema de ficheros.  ZEn este apartado vamos a describir de forma algoritmica algunas de las tareas ms bsicas del subsistema de ficheros UNIX.  S 2 Obtenci;n del inode asociado al nombre de un fichero:  S2 El algoritmo que realiza esta acci;n es namei , antes de pasar a estudiar este  `lalgoritmo se debe tener en cuenta como estan estructurados internamente los ficheros directorios.  S42 Algoritmo: ` ` namei"`  S2 Entrada: ` ` Path name del fichero"`  S2 Salida: ` ` inode bloqueado"` "Si" (path name comienza desde la ra1z) "Entonces" Xinode de trabajo = inode de la ra1z ; " "Si no" Xinode de trabajo = inode del directorio actual ; " Fin si" "Mientras" (Existan componentes en el path name) "Hacer" XExtraer siguiente componente del path name ; " XVerificar que el inode de trabajo es de un directorio ; " XVerificar accesos ; "  X"Si" (inode de trabajo es del root y la componente es "..") "Entonces" continue ; " XLeer directorio asociado al inode de trabajo ; " XBuscar la componente actual en dicho fichero ; " X"Si" (Exito en la bCsqueda) "Entonces" " XX` ` Extraer nCmero de inode asociado ; "` XX` ` Liberar inode de trabajo ;"` XX` ` inode de trabajo = inode buscado ;"` X"Si no" " XX` ` return(no inode) ; "` X"Fin si" " "Fin mientras" Return (inode de trabajo) ; "* p-++,"Ԍ S2 Obtener direcci;n de los datos asociados al offset de un fichero:  S2 &Esta tarea se implementa a trav)s del algoritmo bmap . Antes de pasar a leer dicho algoritmo se debe recordar la organizaci;n de los datos en un fichero UNIX.  S2 Algoritmo: ` ` bmap"`  Sv2 Entrada: ` ` (1) inode"`  S_2 XX` ` (2) Offset en bytes"`  SH2 Salida: ` ` (1) NCmero de bloque del sistema de fichero"` XX` ` (2) Offset en bytes dentro del bloque"` XX` ` (3) bytes de E/S dentro del bloque"` XX` ` (4) flag de indirecci;n"` Calcular nCmero de bloque l;gico del fichero ; Calcular Offset dentro del bloque l;gico ; /* salida 2 */ Calcular bytes de E/S en el bloque ; /* salida 3 */ Comprobar si existe indexaci;n de bloques ; /* salida 4 */ Determinar nivel de indexaci;n ; "Mientras" (no final de indexaci;n) "Hacer" XCalcular 1ndice dentro del inode o del bloque indirecto ;" XObtener nCmero del bloque de disco a acceder ;" XLiberar buffer de la lectura previa ;" X"Si" (final de indexaci;n) "Entonces" return(nCmero de bloque); /* salida 4 " XLeer bloque indirecto de disco ; " XAjustar nCmero de bloque l;gico segCn nuevo nivel ; " "Fin mientras"  Se2 Asignaci;n de un In_core inode a un inode del sis. de ficheros:  S72 Esta labor se realiza a trav)s de la implementaci;n del algoritmo iget . Antes  S 2 `de pasar a leer este algoritmo repase los conceptos de inode del sistema de ficheros  S 2y de In_core inode .  S2 Algoritmo: ` ` iget"`  S 2 Entrada:` ` nCmero de inode del sistema de ficheros"`  S!2 Salida: ` ` inode bloqueado"` "Mientras" ( ) "hacer" X"Si" (inode ya es In_core inode) "Entonces"" XX` ` "Si" (inode bloqueado) "Entonces""` XX` ` X ,sleep (evento: inode no bloqueado) ;" XX` ` X ,continue ;" XX` ` "Fin si""` XX` ` "Si" (inode en lista de inodes libres) "Entonces" "` XX` ` X ,borrarlo de la lista de inodes libres ;" XX` ` "Fin si""` "*p-++,"ԌXX` ` Incrementar nCmero de referencias del inode ;"` XX` ` return(inode) ;"` X"Fin si"" X"Si" (lista de inodes libres vac1a) "Entonces" return(error) ;" XExtraer entrada de la lista de inodes libres ;" XColocar inode el la tabla de inodes del sistema ;" XLeer inode desde disco ;" XInicializar inode ;" Xreturn(inode) ;" "Fin mientras"  S 2 Liberamos un In_core inode:  S 2Esta tarea se realiza a trav)s del algoritmo iput .  S2 Algoritmo: ` ` iput"`  Sy2 Entrada` ` puntero a un In_core inode "`  Sb2 Salida: ` ` ninguna "` Bloquear inode si aCn no est bloqueado ; Decrementar las referencias del inode ; "Si" (referencias = 0) "Entonces" X"Si" (contador de link del inode = 0) "Entonces"" XX` ` Liberar bloques de disco del fichero ;"` XX` ` Poner el tipo de fichero a cero ;"` XX` ` Liberar inode ;"` X"Fin si""  hX"Si" (fichero accedido o inode alterado) "Entonces" Actualizar inode en disco Poner inode en la lista de inodes libres ;" "Fin si" desbloquear el inode ;  S2 Asignaci;n de un inode del sistema de ficheros a un fichero:  S 2 Esta tarea se realiza a trav)s de la implementaci;n del algoritmo ialloc . Para  S!2 `entender este algoritmo es conveniente tener claro como se organizan los inodes  S"2 `en el super_bloque de disco y diferenciarlos de los In_core inodes . Tambi)n hay que  S#2 `tener presente que cuando un sistema de ficheros se monta se crea una lista inodes  Sh$2 `libres en memoria . Esta lista proviene de la lista de inodes libres del superbloque de  `disco y es ms peque9a que esta; de ah1 que cuando en la lista de inodes libres de  `un superbloque en memoria est vac1a se desencadena un proceso de bCsqueda de  `inodes libres de la lista de inodes libres del superloque en disco. Este proceso de  S (2 `bCsqueda tiene la particularidad que se empieza en un inode marcado como inode  S(2 `de referencia que no es otro que aquel de mayor nCmero, de esta manera se reduce considerablemente el tiempo de bCsqueda de inodes libres. "*p-++,"Ԍ S2 Algoritmo: ` ` ialloc"`  S2 Entrada: ` ` sistema de ficheros"`  S2 Salida: ` ` inode bloqueado"` "Mientras" ( ) "Hacer" X"Si" (super_bloque bloqueado) "Entonces"" Xsleep (evento: superbloque no bloqueado) ;" Xcontinue ;" X"Fin si"" X"Si" (Lista de inodes del superbloque vac1a) "Entonces"" XX` ` bloquear superbloque ;"` XX` ` Obtener inode marcado para bCsqueda de inodes libres;"` XX` ` Buscar inodes libres de disco hasta llenar la lista ;"` XX` ` Desbloquear el superbloque ;"` XX` ` wake up (evento: superbloque no bloqueado)"` XX` ` "Si" (no se encontraron inodes libres) "Entonces" return(no inode) ;"` XX` ` Obtener el inode de referencia para busquedas ;"` X"Fin si"" XObtener nCmero de inode de la lista de inodes libres ;" XAsignarle un In_core inode (iget) ;" X"Si" (inode no disponible) "Entonces" " XX` ` Escribir inode en disco ;"` XX` ` Liberar inode (iput) ;"` XX` ` continue ;"` X"Fin si"" XInicializar inode ;" XEscribir inode en disco ;" XDecrementar inodes libres del sistema de ficheros ;" Xreturn(inode) ;" "Fin mientras"  S 2 Liberamos un inode del sistema de ficheros:  S2Esta tarea se realiza a trav)s del algoritmo ifree .  S 2 Algoritmo: ` ` ifree"`  S!2 Entrada: ` ` nCmero de inode del sistema de ficheros"`  S"2 Salida: ` ` ninguna"` Incrementar nCmero de inodes libres del sistema de ficheros; "Si" (superbloque bloqueado) "Entonces" return ; "Si" (lista de inodes libres llena) "Entonces" X"Si" (nCmero de inode < marca de bCsqueda) "Entonces"" XX` ` marca de bCsqueda = nCmero de inode ;"` X"Si no"" XX` ` Almacenar nCmero de inode en la lista de inodes"` XX` ` libres ;"` "*p-++,"ԌX"Fin si"" Xreturn ; " "Fin si"  S2 Asignaci;n de un bloque de datos del sistema de ficheros:  S_2 Esta tarea se realiza a trav)s del algoritmo alloc . Para pasar a la descripci;n  SH2 `de este algoritmo es necesario recordar como estaban organizados los bloques  `tlibres en un sistema de ficheros y como se acced1an a ellos a trav)s del  S 2superbloque del sistema de ficheros .  S 2 Algoritmo :` ` alloc"`  S 2 Entrada: ` ` nCmero de sistema de ficheros"`  S 2 Salida: ` ` buffer para el nuevo bloque"` "Mientras" (superbloque bloqueado) "Hacer" Xsleep (evento: superbloque no bloqueado) ;" "Fin mientras" Extraer un bloque libre de la lista de bloques libres ; "Si" (es el Cltimo bloque de la lista) "Entonces" Xbloquear superbloque ;" XLeer el bloque ;" XCopiar nCmeros de bloques en el superbloque ;" XDesasignar buffer del bloque ;" Xdesbloquear superbloque ;" Xwake up (evento: superbloque no bloqueado) ;" "Fin si" Obtener buffer para el bloque extraido de la lista ; Decrementar nCmero total de bloques libres ; Marcar superbloque como modificado ; return buffer ;  S2 Llamadas al sistema:  En esta secci;n se describirn las llamadas al sistema de UNIX del  `>subsistema de ficheros. En algunas se presentarn sus algoritmos asociados y en otras nos limitaremos a describir su sintaxis y acciones que realizan.  SQ%2 * open:  S#'2 La llamada al sistema open debe ser invocada simpre que un proceso quiera  `hacer uso de un fichero. Retornar un valor entero (descriptor de fichero) que es  `zun 1ndice en la tabla de descriptores de ficehros de ususario del proceso invocador. "*p-++,"Ԍ S( Xint open(pathname,flags,modo) "  S2 Xpathname : ,nombre del fichero"  S2 Xflags :X` ` X ,modo de apertura del fichero"  S2 Xmodo : ,permisos de acceso" Convertir pathname a inode (namei) ; "Si" (fichero no existe o acceso denegado) "Entonces" return(error) ; Asignarle una entrada en la tabla de ficheros del sistema ; Asignar una entrada en al tabla de descriptores del proceso; "Si" (apertura de truncamiento) "Entonces"  S 2 XLiberar todos los bloques del fichero (free)" unlock(inode) /* bloqueado pr)viamente por namei */ return(descriptor de fichero) ;  S( * read:  Sb2 La llamada al sistema read lee bytes de informaci;n de un fichero  `especificado por su descriptor asociado. Retornar el nCmero de bytes leidos que siempre ser menor o igual que el nCmero especificado en la llamada.  S( Xint read(fd,buffer,count) "  S2 Xfd:X` ` X ,descriptor de fichero"  S2 Xbuffer : ,destino de la informaci;n leida "  S2 Xcount :  ,nCmero de bytes a leer"  S2 Extraer informaci;n de la tabla de descriptores; Chequear permisos de acceso ; Ubicar parmetros de la llamada en la U_area del proceso ; Obtener inode de la tabla de ficheros del sistema ; Bloquear inode ; Poner el offset del fichero en al U rea ; "Mientras" (cuenta no satisfecha) "hacer" XConvertir Offset a direcci;n de bloque (bmap) ;" XCalcular offset dentro del bloque ;" XNCmero de bytes a leer;" X"Si" (nCmero de bytes a leer = 0 ) "Entonces" break ;" XLeer bloque ;" XCopiar bytes en el buffer de usuario ;" XActualizar parmetros de la llamada en la U rea ;" XLiberar buffer del sistema de transferencia ;" "Fin mientras" Desbloquear inode ; Actualizar Offset del fichero en la tabla de ficheros ; return(nCmero de bytes leidos) ; "*p-+++"Ԍ S( * write:  S2 La llamada al sistema write efectua la escritura desde memoria de usuario a  `4un fichero. Tanto la sintaxis como el algoritmo de esta llamada son anlogos a los de la llamada read.  Sv(X int write(fd,buffer,count) "  S_2 Xfd:X` ` X ,descriptor de fichero"  SH2 Xbuffer : ,destino de la informaci;n leida "  S12 Xcount : ,nCmero de bytes a escribir"  S 2  S 2* lseek:  Las llamadas read y write realizan accesos secuenciales a un fichero, pero  `bpara aquellos casos en los que se requieran accesos aleatorios a un fichero por  S2 `parte de un proceso, UNIX dispone de la llamada lseek . El retorno de esta funci;n es el desplazamiento del pr;ximo byte a acceder en el fichero.  SK( Xlong lseek(fd,offset,referencia) "  S42 Xfd :X` ` X ,descriptor del fichero"  S2 Xoffset : ,desplazaminento en bytes requerido"  S2 Xreferencia : ,principio, final o posici;n actual."  S2 `  Lseek simplemente actualiza un nuevo valor de offset en la tabla de ficheros del sistema, no origina operaciones se "seek" en disco.  S|( * close:  SN2 La llamada al sistema close realiza el cierre de un fichero. El nCcleo para ello  `\accede a la tabla de decriptores de ficheros del proceso que invoc; a esta llamada  `Hy a las tablas del sistema de ficheros y de inodes y las actualiza. Si el contador de  `referencias en la tabla de ficheros del sistema es mayor que uno, debido a llamadas  S2 ` fork o dup , entonces simplemente se decrementa dicho contador. En cambio si el  `contador de referencias es uno entonces se procede a la liberaci;n de la entrada en  `zla tabla de inodes asociada al fichero s;lo si el contador de referencias del inode en  `Hmemoria es uno, en caso contrario simplemente se decrementar dicho contador; ya que existen otros procesos que quieren acceder al fichero.  Sh$( Xint close(fd) "  SQ%2 Xfd :X` ` descriptor de fichero "`  S (( * creat:  S)2 La llamada al sistema creat crea un nuevo fichero en el sistema. Retorna un descriptor de fichero."*p-+++"Ԍ S(ԙ Xint creat(pathname,modos) "  S2 Xpathname : ,nombre del fichero"  S2 Xmodos : ,permisos de acceso del fichero"  S2 Obtener el inode del fichero (namei) "Si" (fichero ya existe) "Entonces" X"Si" (permiso de acceso denegado) "Entonces"" XX` ` Liberar inode (iput) ;"` XX` ` return(error) ;"` X"Fin si"" "Si no" XAsignar un inode libre del sistema de ficheros ;" XCrear una nueva entrada en el directorio padre ;" "Fin si" Asignar una entrada libre en la tabla de ficheros ; "Si" (fichero ya exist1a) "Entonces" Liberar bloques del fichero (free) ; unlock(inode) ; return(descriptor de fichero de usuario) ;  S42 * mknod:  S2 DLa llamada mknod construye un fichero nuevo de tipo especial, )sto es: pipe, fichero de dispositivo o directorio. La sintaxis es:  S( Xint mknod(pathname,tipo y permisos,dev) "  S2 Xpathname : ,Xhnombre del fichero"  S2 Xtipo y permisos :htipo del fichero y accesos permitidos"  S|2 Xdev :X` ` X ,XhnCmero mayor y memor del dispositivo ;"  SN2 "Si" (No pipe y no es super_usr) "Entonces" return(error) ; Acceder al inode del padre del nuevo fichero (namei) ; "Si" (ya exist1a inode a crear) "Entonces" XLiberar inode del padre (iput) ;" Xreturn(error) ;" "Fin si" Tomar un inode libre del sist. de ficheros (ialloc) ; Crear una nueva entrada en el directorio padre ; Liberar inode del padre ; "Si" (inode de dispositivo) "Entonces" Escribir nCmero mayor y menor ; Liberar inode creado (iput) ;  S#'2 6. El subsitema de control de procesos.  S(2 6.1. Descripci;n general de un proceso.  Un proceso es un programa en ejecuci;n. Bajo UNIX se pueden ejecutar"*p-+++"  `lmCltiples procesos simultneamente segCn el nCcleo los seleccione, cuando un  `proceso se ejecuta sigue un orden que )l mismo se impone y no puede hacer  `preferencia a otros procesos. La comunicaci;n entre procesos se realizar mediante  `zllamadas al sistema. Todo proceso bajo UNIX es una entidad creada por la funci;n  S2 `L fork , la cual fue invocada por otro proceso al que se le llama proceso padre . Cada  `proceso posee un identificador num)rico Cnico. Todo fichero ejecutable posee la siguiente estructura: X- Cabecera, describiendo atributos del fichero." X- Instrucciones del programa."  ,X- Representaci;n de aquellos datos que se deben inicializar al comienzo de la ejecuci;n." X- Tabla de s1mbolos."  Todo fichero ejecutable, que consiste en una cadena de bytes que la CPU  `interpretar como instrucciones o datos, se carga en memoria a trav)s de la  S2 `llamada al sistema exec . L;gicamente todo proceso UNIX est dividido en tres  Sy2 `partes o regiones: Texto (instrucciones), Datos y Pila . Las regiones de texto y datos  `Vprovienen del fichero ejecutable, en cambio, la regi;n de pila se crea  `automticamente y su tama9o se ajusta dinmicamente por el nCcleo en tiempo de  ` ejecuci;n. Debido a que todo proceso se puede ejecutar en dos modos diferentes  S2 `(usuario y sistema), UNIX emplea dos pilas separadas para cada uno de estos modos, de forma que:  S2X- La pila en modo usuario se usa para la ejecuci;n en modo usuario."  S2X- La pila en modo sistema se usa para la ejecuci;n en dicho modo."  Existe un matiz importante entre la ejecuci;n en modo usuario y en modo  Se2 `Jsistema. Este consiste en que la ejecuci;n en modo sistema es "non-preentive" , es  `decir, un proceso en modo sistema cede la CPU de forma voluntaria (parada  S72 ` voluntaria o retorno a modo usuario), en cambio, en modo usuario la ejecuci;n es  S 2"preentive" .  S( 6.2. Estructura de los procesos UNIX.  En la secci;n anterior se di; una descripci;n muy general del concepto de  `proceso y de algunos aspectos relacionados con ellos. En esta secci;n vamos a  `profundizar aCn ms; concretamente vamos a describir las estructuras de control  `relacionadas con ellos, disposici;n en memoria, contexto de un proceso y finalmente como se manipula el espacio de direcciones de un proceso.  S#'2 Estructuras de control relacionadas con un proceso:  hExisten dos estructuras de datos del sistema que describen el estado de un  S)2 `proceso: la tabla de procesos y el U rea . La tabla de procesos es accedida por el  S*2 `sistema en todo momento, en cambio, al U re a s;lo se accede cuando los"*p-++,"  `4procesos se ejecutan. A continuaci;n se muestra el contenido de cada entrada en la tabla de procesos: X- Estado del proceso. "  S2 X- Informaci;n que indica la localizaci;n del proceso y de su U rea en memoria principal o secundaria, as1 como su longitud." X- Identificador del propietario que determina los privilegios del proceso." X- Flag de indicaci;n de proceso en reposo. " X© Parmetros de scheduling. "  6X- Informaci;n acerca de las se9ales que se han enviado y que aCn no han sido tratadas." X- Contadores que dan el tiempo de ejecuci;n del proceso. "  S 2 Todo proceso posee su U rea , la informaci;n que posee esta estructura de control es: X- Puntero a la tabla de procesos. " X- Identificadores de usuario que determinan los privilegios del proceso."  X- Contadores que se decrementan a medida que el proceso se ejecuta en modo usuario o sistema."  X- Una tabla que inidica qu) debe hacer el proceo cuando reciba una se9al determinada." X- Identificador del terminal asociado al proceso. " X- Campo de error para las llamadas al sistema. " X- Campo de resultados para las llamadas al sistema. " X- Parmetros de E/S: Cantidad, destino , etc. " X- Directorio actual. " X- Tabla de descriptores de ficheros abiertos. " X- L1mites del proceso. "  "X© Campo de permisos de acceso que tendrn asociados los ficheros que el proceso cree."  S 2 Descripci;n de la disposici;n en memoria:  Como ya se mencion; todo proceso UNIX est dividido en tres partes l;gicas  S 2 `o regiones: TEXT, DATA y STACK . La secci;n TEXT est constituida por las  `Hinstrucciones ejecutables del proceso y se direcciona a s1 misma y a cualquiera de  S"2 `las otras dos secciones. Las secciones DATA y STACK se constituyen a partir de los datos y pila respectivamente.  rCuando se compila un programa, el compilador genera direcciones virtuales  `\que son traducidas a direcciones reales mediante el subsistema de memoria. Este  `subsistema de memoria est constituido por una parte l;gica y otra f1sica (hardware  `de direccionamiento). Este esquema permite que un proceso pueda ser ubicado en diferentes zonas de memoria durante la vida del mismo (reubicaci;n dinmica).  S*2 ` Regiones: El espacio direccionable virtual de un proceso se estructura en regiones"*p-++,"  `Rl;gicas. Una regi;n es un conjunto de direcciones virtuales contiguas de un mismo  `proceso que puede ser tratada como una unidad diferenciada del resto de las  S2 `Rregiones del proceso en cuanto a protecci;n y compartici;n. Normalmente TEXT,  S2 `DATA y STACK se construyen en regiones separadas en un proceso. As1 por  `ejemplo, varios procesos que provienen de un mismo programa pueden ejecutarse  S2 `compartiendo la misma regi;n TEXT . Todo proceso posee una estructura de  `control, llamada tabla de regiones, cuya finalidad es describir cada regi;n del proceso. Cada entrada en esta tabla est asociada una regi;n y su estructura es: X© Direcci;n de la tabla de pginas (si es una sistema paginado)." X© Inode del fichero de donde proviene la regi;n." X© Tama9o , estado y tipo." X© Contador de referencia."  S 2 ` Pginas: En sistemas paginados se relacionan las direcciones virtuales de cada  `regi;n con las direcciones reales asociando los nCmeros de pginas l;gicas de cada  S2 `8regi;n con los nCmeros de pginas f1sicas a trav)s de una tabla de pginas . Esta  `tabla contiene en cada una de sus entradas informaci;n referente al nCmero de  `pgina f1sica y se entra en ella a trav)s del nCmero de pgina l;gico. Cada entrada en la tabla de regiones del sistema posee un puntero a una tabla de pginas.  S2 `V Disposici;n del nCcleo: El nCcleo del sistema se trata de la misma forma que los  `procesos, solo que cuando el sistema es cargado se produce un mapeo de memoria  `virtual a memoria f1sica del sistema. El c;digo y los datos del nCcleo residen de  `Rforma permanente en el sistema y son compartidos por todos los procesos. Por lo  `Rtanto, hay que distinguir entre memoria del sistema y de procesos. Por Cltimo hay  S2 `>que decir, que toda U rea de un proceso es accesible s;lo cuando el proceso se  `fest ejecutando en modo sistema. Dicha rea se almacena en una posici;n fija de  `Tmemoria virtual, esto es debido a que el compilador asigna direcciones fijas  `virtuales a las variables globales de un programa, y tambi)n a que el nCcleo  S72 `falmacena el U rea de un proceso en una variable cuando quiere acceder a dicha rea.  S2 El contexto de un proceso:  `El contexto de un proceso consiste en el contenido de su espacio de  `:direcciones, y el contenido de las estructuras de control del nCcleo asociadas a dicho proceso. Podemos distinguir tres partes bien diferenciadas:  SQ%2 ` El contexto de nivel de usuario: Se compone del programa y los datos, en definitiva  S:&2se trata de las regiones TEXT, DATA y STACK .  S (2 El contexto de registros: Se compone del contenido de los registros, es decir: X© Contador de programa. " X© El registro de estado del proceso. ""*p-++,"ԌX© Registros de stack. " X© Registros de prop;sito general de la CPU. "  S2 ` El contexto a nivel de sistema: Se compone de una parte esttica que es constante, en cuanto a tama9o, durante la vida de un proceso y otra parte dinmica:  Sv2 X© Parte esttica : Formada por las entradas en la tabla de procesos, U rea, tabla de regiones."  S12 nX© Parte dinmica : Formada por una pila donde el nCcleo almacena los diferentes niveles de contexto en los que el proceso se ha ejecutado. "  El contexto de un proceso se salva cuando alguno de los siguientes eventos ocurre: XX` ` © Interrupci;n."` XX` ` © Excepci;n."` XX` ` © Llamada al sistema."`  SK2 rCuando se produce una interrupci;n el nCcleo procede de la siguiente manera: X1. Salva el contexto de registros del proceso. " X2. Determina la causa de la interrupci;n. " X3. Se llama a la subrutina de tratamiento. "  ^X4. Cuando finaliza la rutina se restaura el contexto a trav)s de instrucciones mquina espec1ficas. "  S|2 Cuando lo que se produce es una llamada al sistema entoces se procede de la siguiente manera: X1. Se identifica la llamada al sistema asociandole un 1ndice"  2X2. Con este 1ndice se entra en la tabla donde se localiza la subrutina de tratamiento y los parmetros correpondientes." X3. Se toman los parmetros en la pila de usuario. " X4. Se copian en la U rea. " X5. Se ejecuta la subrutina de tratamiento. "  X6. Una vez terminado el tratamiento se chequean los parmetros de error devolviendo los resultados en la U rea." X7. Se retorna a modo usuario. "  S:&2 6.3. Manejo de memoria:  En todo sistema el recurso de la memoria principal es vital ya que para poder  `zejecutar un proceso )ste debe estar, al menos parcialmente, en memoria principal. El subsistema de manejo de memoria es el responsable de: X""*p-++,"ԌX- Gestionar el espacio virtual de direcciones. " X- Gestionar la memoria principal. " X "  FHist;ricamente UNIX gestionaba la memoria mediante transferencia de  S2 `procesos enteros entre memoria principal y el dispositivo de swap , tal t)cnica  S2 `llamada swapping s;lamente permit1a transferir parcialmente un proceso, cuando  `)sta consist1a en bloques compartidos. Actualmente los sistemas UNIX soportan  S_2 `el concepto de memoria virtual, utilizando la t)cnica de gesti;n de memoria por  SH2 `demanda de pgina en la que la memoria se gestiona mediante bloques de tama9o  `pfijo llamados pginas. Bajo estas condiciones los procesos no tienen por qu) residir  `totalmente en memoria principal para su ejecuci;n. Comparando estas dos filosof1as de manejo de memoria principal podemos llegar a las siguientes conclusiones:  S 2 BX© La demanda de pgina proporciona una mayor flexibilidad en la  transformaci;n entre memoria f1sica y virtual. Proporcionando un mayor grado de multiprogramaci;n. "  S2 X© Swapping es ms fcil de implementar y posee un menor coste de implementaci;n. "  @Un detalle a tener en cuenta es que la utilizaci;n de la t)cnica de demanda de pgina implica la utilizaci;n de Swapping.  S2 Swapping:  6Seguidamente vamos a realizar una descripci;n de los tres aspectos sobre los que se fundamenta esta t)cnica:  S|2X* El dispositivo de swap . "  Se2X* Proceso de Swapping out de un proceso. "  SN2X* Proceso de Swapping in de un proceso. "  S 2 `p Swap device: El dispositivo de swap (swap device) est formado por el conjunto  `de registros f1sicos de disco. El nCcleo asigna dicho espacio de forma diferente a  `\como asigna los registros f1sicos que forman un sistema de ficheros. Mientras que  `para los ficheros del sistema de ficheros la asignaci;n del espacio de disco se  S 2 `realiza a trav)s de bloques individuales, la asignaci;n de espacio en el dispositivo  S!2 `swap se realiza por bloques cont1guos. La raz;n para llevar a cabo la asignaci;n de esta manera es que de esta forma las operaciones de E/S sern ms rpidas.  Debido a esta diferencia, la estructuras de datos que utiliza el nCcleo para  SQ%2 `gestionar el dispositivo swap difieren de las empleadas para controlar el espacio en  S:&2 `disco del sistema de ficheros. El nCcleo utiliza una lista encadenada para el sistema  S#'2de ficheros, en cambio para el dispositivo swap utiliza una tabla llamada map .  S(2 NLa tabla map es un vector cuyas entradas constan de dos campos: el primero  S)2 `es de direcci;n del registro y el segundo contiene el nCmero de registros  S*2 `consecutivos a partir de esta direcci;n que pueden ser utilizados . A medida que los"*p-++,"  S2 `procesos van siendo transferidos del dispositivo swap a memoria principal y  S2 `viceversa la tabla map va siendo actualizada por el nCcleo. Seguidamente para  `0ilustrar este proceso de actualizaci;n se muestra el algoritmo de asignaci;n de  S2 `espacio mediante la tabla map y un ejemplo de como actCa dicho algoritmo. Supongamos un estado inicial  Sv(X Direcci;n ,XhUnidad "  SH2 X1X` ` X ,Xh10000 "  |Entonces la gesti;n del espacio de swap se har1a, en lo que a peticiones de  `bloques, segCn el algoritmo de la funci;n malloc (funci;n para pedir memoria dinmicamente).  S 2 Algoritmo: ` ` malloc /* algoritmo de ubicaci;n en Swap dev. */"`  S 2 Entrada: ` ` (1) tabla map"` XX` ` (2) nCmero de unidades requeridas"`  Sy2 Salida: ` ` direcci;n en Swap device, si hay disponible"` XX` ` 0, si no hay disponible"` "Para" (cada entrada en la tabla map) "hacer" X"Si" (tama9o asociado >= petici;n) "Entonces"" XX` ` "Si" (petici;n = tama9o asociado) "Entonces""` XX` ` X ,borrar entrada en la tabla ;" XX` ` "si no""` XX` ` X ,ajustar direcci;n de comienzo de la entrada ;" XX` ` "Fin si" "` Xreturn(direcci;n original de la tabla) ;" X"Fin si"" "Fin para" return(0) ;  S ( Direcci;n` ` UnidadhXhhXXXppXDirecci;n  Unidad "   S21XX` ` 10000 hasignaci;n de 100 blk` ppX101XX  9900"   S ( Direcci;n` ` UnidadhXhhXXXppXDirecci;n  Unidad "   S!2101XX` ` 9900X ,Xhasiganci;n de 50 blk` ppX151XX  9850"   Sh$2 "Cuando de lo que se trata es de liberar espacio del dispositivo swap , el  `nCcleo localiza la entrada correspondiente en la tabla map mediante el campo direcci;n. Existen tres casos posibles:  |X1. Los recursos liberados llenan completamente un hueco de la tabla map y  Tson contiguos a las entradas cuyas direcciones le preceden y seguen en la  S)2 tabla, entonces el nCcleo crea una Cnica entrada en la tabla map fusionando las tres anteriores.""*p-+++"Ԍ S2 ԙX2. Los recursos liberados llenan parcialmente un hueco del map y la direcci;n  S2 Zde los recursos liberados es cont1gua con una entrada en el map que le  precede o con la que le sigue, pero no con ambas, entonces el nCcleo adopta  la direcc;n de la entrada apropida para justificar los recursos liberados; en  S2este caso, el nCmero de entradas en la tabla map no se modifica."  X3. Los recursos liberados llenan parcialmente un hueco pero no son  cont1guos con los recursos del map, entonces se crear una nueva entrada."   S ( Swap out:  S 2  En nCcleo realiza una tarea de swap out , o de desalojo de la memoria principal, sobre un proceso cuando necesita memoria principal debido a: X- Realizaci;n de una llamada al sistema fork. " X- Realizaci;n de una llamada al sistema brk. "  X- Obtener memoria para procesos que pr)viamente hab1an sido desalojados de memoria principal."  Cuando el nCcleo selecciona un proceso para el swapping desde memoria  `Rprincipal, decrementa en uno el nCmero de referencias de cada rea del proceso y  S2realiza un swap out cuando )ste es cero.  ^Cuando se realiza una llamada al sistema fork y no hay memoria suficiente  `para el proceso hijo, el sistema libera memoria asignada a otros procesos que no  `Nsean el proceso padre. Mientras esto ocurre, el proceso hijo se encuentra en el  S|2 `t dispositivo swap y es el proceso padre qui)n pone al hijo en estado ready. S;lo en este estado el proceso hijo ser ubicado en memoria.  Cuando un proceso necesita ms memoria de la que se le asign; o de la que  S 2 `est disponible, en el dispositivo swap se reservar espacio suficiente para contener  `el espacio de memoria del proceso, incluyendo el espacio ms recientemente  `psolicitado. Luego se ajusta el mapa de traducci;n de direcciones del proceso, y por Cltimo se desaloja el proceso.  S!( swap in:  Este proceso consiste en ubicar procesos en memoria principal, esta tarea  Sh$2 `.se aplicar a aquellos procesos que est)n en el dispositivo swap de forma que se  `eligir aquel que ms tiempo lleve esperando. Si existe suficiente espacio en  `Rmemoria principal el proceso se realiza invirtiendo los pasos del swap out, esto es:  S#'2 `Asignar memoria f1sica, leer el proceso del dispositivo swap , y liberar espacio del  S (2 ` dispositivo swap . Cuando no existe memoria suficiente, se intenta relaizar un swap  S(2out y cuando )ste finaliza se intenta realizar de nuevo un swap in .  S*2"*p-+++"Ԍ S2 Demanda de pginas:  S2 Los t)cnica de demanda de pginas se pueden implementar s;lo en aquellas mquinas que posean: X- Una arquitectura de memoria basada en pginas. "  Sv2 X- CPU que posean instrucciones espec1ficas de RESTAR para situaciones de "fallo de pgina". "  S12 La gesti;n de memoria por demanda de pgina es transparente a los  `procesos; de forma que permite liberar a estos de las limitaciones del tama9o de  `memoria principal. La Cnica limitaci;n que se impone en cuanto al tama9o de los  S 2programas de usuario la define la dimensi;n de la memoria virtual .  La raz;n por la que en estos sistemas paginados se obtienen buenos  `Rresultados se debe fundamentalmente al cumplimiento, por parte de los procesos,  S2 `ndel llamado principio de localizaci;n de Denning que establece que las referencias  `a direcciones de un proceso se localizan en peque9as porciones de su espacio de  `direcciones. Este principio se acentCa a medida que los programas se construyen  SK2 `>de forma ms modular. Desde un punto de vista ms formal, Denning formul; su  S42 `principio a trav)s del concepto de conjunto de trabajo de un proceso (working set)  `que se define como el nCmero de pginas de memoria que el proceso ha  S2 `referenciado en las Cltimas n referencias, al nCmero n se le denomina ventana de  S2 `trabajo . Debido a que el conjunto de trabajo representa una porci;n de un proceso,  `entoces se tendrn ms procesos en memoria principal (grado de  S2 `~multiprogramaci;n) cuando )sta sea ocupada por los conjuntos de trabajo de los  S2 `.procesos y no por los procesos enteros, esto ocurr1a en un sistema de swapping .  `Cuando un proceso referencia a una pgina que no est en memoria se produce un  S|2 `V fallo de pgina ; implicando la parada del proceso y la transferencia de dicha pgina a memoria principal para el posterior reinicio del proceso.  S ( Estructuras de control utilizadas por la demanda de pginas:   Existen cuatro estructuras de control bsicas sobre las que se fundamenta  S2la demanda de pginas , )stas son: X- Tabla de pginas." X- Descriptores de bloque de disco. " X- Tabla de franjas de pginas (pfdata). " X- Tabla de swap. "  Cuando el sistema es paginado, cada regi;n contendr una tabla de pginas. Cada entrada en esta tabla contendr:  S (2 X- Direcci;n f1sica de la pgina. " X- Bits de protecci;n. " X- Bit de validez. ""*p-++,"ԌX- Bit de referencia. " X- Bit de modificaci;n. " X- Bit de copiado de escritura. " X- Bits de edad."  S2 El bit de validez es utilizado por el nCcleo para indicar cuando contiene una  Sv2 `pgina "legal". El bit de referencia indica si la pgina ha sido referenciada  S_2 `recientemente. El bit de modificaci;n indica si el contenido de la pgina ha sido  SH2 `alterado. El bit de copiado de escritura indica si el nCcleo debe crear una nueva  `hcopia en caso de modificar su contenido, este bit se utiliza con la llamada al  S 2 `Bsistema fork. Por Cltimo, los bits de edad indican cuanto tiempo hace que la pgina  S 2forma parte del conjunto de trabajo del proceso.  S 2 Cada entrada en la tabla de pginas tiene asociada un descriptor de bloque  S 2 `*de disco , que posee informaci;n acerca de la copia virtual de la pgina. De esta  S 2 `manera, procesos que comparten una regi;n compartirn la tabla de pginas de  S2 `Fdicha regi;n y los respectivos descriptores de bloques de disco . El contenido de la  Sy2 `pgina virtual podr estar en un dispositivo swap o en un fichero ejecutable.  Sb2 ` Cuando se encuentra en un dispositivo swap el descriptor de bloque de disco  `Rcontiene el nCmero de dispositivo l;gico y el nCmero de bloque que contiene dicha  `pgina. Si la pgina est en un fichero ejecutable el descriptor de bloque de disco contendr el nCmero de bloque l;gico que contiene la pgina.  S2 La tabla pfdata contiene en cada una de sus entradas una descripci;n de cada pgina en memoria f1sica. Los campos de cada entrada son: X- El estado de la pgina" XX` ` * En dispositivo swap."` XX` ` * En fichero ejecutable."` XX` ` * En transferencia de DMA."` XX` ` * Disponible."` X- Dispositivo l;gico y bloque que contiene una copia de la pgina. " X- NCmero de procesos que referencian a la pgina. "  S 2X- Puntero a otras entradas de la tabla pfdata , dando lugar a una lista."  S2 La tabla de uso de swap contiene una entrada por cada pgina que est) en un dispositivo swap. La informaci;n que cada entrada contiene es:  X© Contador de referencia (nCmero de entradas en la tabla de pgina le apuntan)." X© NCmero de pgina." X© NCmero de bloque."  S (2 En cuanto al descriptor de bloque de disco ; existe uno por entrada en la tabla de pginas (puede ser visto como una extensi;n de )sta), cada descriptor contiene: X© Dispositivo swap (nCmero l;gico de dispositivo).""*p-++,"ԌX© NCmero de bloque." X© Tipo de pgina (en Swap, en Fichero, demanda "fill", demanda "Zero"). s Q ."  S2N!xp-bddmapmemun.wpgP )mFigura 9. Organizaci;n de los procesos en memoriad $""""N!"$  S ( 6.4. Planificaci;n de procesos.  El planificador de procesos de UNIX se basa en la pol1tica conocida de  S 2 `| Round-Robin con colas realimentadas multinivel , bsicamente esta pol1tica consiste  `:en asignar una rodaja de tiempo a cada proceso que se ejecuta, de forma que  `zcuando )sta se acaba se acaba, el proceso es introducido en una de las colas y se asigna la CPU a otro proceso que est) en una de las colas.  S (( Prioridades entre procesos:  S(2  La prioridad de un proceso puede tomar una serie de valores, dichos valores  S*2 `se dividen en dos: valores de prioridad de modo nCcleo (prioridade altas) y valoresX*p-++*+3"B!!.xP !"#$%( $4X  S< @#de prioridad de modo usuario . Los valores de prioridad de modo usuario se definen  @#en funci;n del uso reciente de la CPU; de forma que procesos con prioridad baja  @#se corresponden con aquellos que usar;n la CPU recientemente. Los valores de  S_< @#prioridad en modo nCcleo , a su vez, se dividen en dos clases: prioridades que dan  @#lugar a ejecuciones sin interrupci;n y prioridades que dan lugar a ejecuciones que  S1< @#`pueden ser interrumpidas . En la siguiente figura se ilustra este esquema de prioridades. " S < pp "Atxp-bdduf11unix.wpg t) :2_Figura 10. Prioridades de ejecuci;nd $"" ""A"$La asignaci;n de prioridades de modo nCcleo es funci;n de la causas que  @#hacen que un proceso pueda pasar a estado de espera, en cambio, no se  @#contemplan aspectos tales como ciclos de E/S , ciclos de CPU. A la hora de asignar  S#< @#prioridades se tiene en cuenta el fen;meno de cuello de botella que se produce en  @#ciertos recursos del sistema; as1 por ejemplo, a los procesos que esperan por la  @#4finalizaci;n de una E/S de disco se les asignar una prioridad mayor que a los  @#procesos que esperan por un buffer disponible, en este caso varias son las razones  @#para obrar as1: la primera de ellas consiste en que un proceso que espera por la  @#finalizaci;n de un E/S ya posee al menos un buffer, y por lo tanto, cuando )sta  @#Pfinalice puede liberar algCn buffer, consiguientemente habrn ms recursos  @#disponibles por lo que la posibilidad de detener la ejecuci;n de un proceso por falta  @#de buffer disminuye, con lo que el flujo total del sistema aumenta. La segundaX*p-++`-3"$Al=x ext Format (RTF)=WPX  @#raz;n radica en que pudiera darse el caso de que el buffer que necesita el proceso  @#bloqueado ya estubiese asignado a un proceso que est a la espera de finalizar una  @#$E/S de disco, entonces cuando )sta finalice ambos procesos podr1an reanudarse,  @#<de forma que si el que se reanuda es el proceso peticionario del buffer en uso por  @#`la transferencia de datos, se producir un nueva detenci;n de dicho proceso hasta  @#que la transferencia finalice. P;r Cltimo, y en cuanto a prioridades, hay que comentar que se pueden variar las prioridades en las siguientes situaciones: X© El proceso realiza una llamada al sistema sleep." X© El proceso retorna de modo nCcleo a modo usuario." X© El manejador del temporizador ajusta las prioridades por uso de CPU."  pp La planificaci;n de la CPU se lleva a cabo cada vez que ocurre una  @#interrupci;n asociada al temporizador del sistema (t1picamente entre 50 y 100  @#dveces por segundo). Existen otros eventos que producen un reasignaci;n de la CPU, )stos son: X© Terminaci;n del proceso." X© El proceso necesita ms memoria para seguir ejecutndose." X© El proceso se bloquea." X© Por apropiaci;n de la CPU por un proceso de mayor prioridad. "  S0 6.5. Llamadas al Sistema para el control de procesos.  pp HEn esta secci;n vamos a describir las llamadas al sistema de control de  @#procesos usadas ms frecuentemente. Concretamente nos referimos a las llamadas  S< @#al sistema para crear procesos, fork , terminaci;n de un proceso, exit , sincronizar  S|<procesos, wait , controlar eventos, signal , y por Cltimo terminar la ejecuci;n exit .  S70 Creaci;n de procesos:  pp La creaci;n de procesos en UNIX se realiza a trav)s de la llamada al sistema  S< @# fork . el proceso que la invoca se le denomina proceso padre , y al proceso creado  S<se le llama proceso hijo . La sintaxis de esta llamada es : Xpid = fork() ;"  pp Esta funci;n retorna al procesos padre un identificador nCmerico asociado  @#al proceso hijo. Los dos procesos poseen identicos contextos a nivel de ususario. El nCcleo realiza la siguiente secuencia de operaci;n cuando se invoca esta funci;n: X1. Localiza una entrada en la tabla de procesos." X2. Se asigna un ID Cnico al nuevo proceso."  pp 8X3. Se realiza una copia del contexto del proceso padre. Si el proceso padre  pp hposee regiones comapartidas, entonces el nCcleo incrementa el nCmero de referencias en vez de copiarlas.""* p-++H0"Ԍ pp X4. Se incrementan los contadores de ficheros y de inodes de los ficheros del proceso padre."  pp X5. Se retorna el PID ( identificador de proceso) del proceso hijo al proceso padre, y cero al proceso hijo."  pp La implementaci;n de esta llamada al sistema no es trivial, en el algoritmo  @#que se propone a continuaci;n se supone que hay memoria suficiente para el proceso hijo.  S1< Algoritmo: ` ` fork"`  S < Entrada: ` ` Ninguna"`  S < Salida: ` ` Al proceso padre el PID del proceso hijo"` XX` ` Al proceso hijo le retorna un 0"` XComprobar que el nCcleo dispone de recursos." XObtener una entrada disponible en la tabla de procesos." XComprobar que el propietario no sobrepasa el nCmero de procesos." XPoner al proceso hijo en estado de "en creaci;n"."  pp DXCopiar informaci;n del proceso padre contenida en la tabla de procesos en la entrada asociada al proceso hijo." XIncrementar contadores de referencias en tabla de ficheros." XRealizar una copia del contexto del proceso padre:" XX` ` - u_area."` XX` ` - Texto."` XX` ` - Datos."` XX` ` - Pila."` XCopiar contenidos de registros en el contexto de sistema del hijo." X"Si" (se ejecuta el proceso padre) "Entonces"" XX` ` Cambiar estado del proceso hijo a "Listo para ejecutar"."` XX` ` Retornar ID del proceso hijo."` X"Si no"" XX` ` Inicializar campos de temporizaci;n en u_area."` XX` ` retornar 0"` X"Fin si""  pp En este algoritmo habr1a que aclarar qu) se entiende por "comprobar que el  @#nCcleo dispone de recursos"; )sta consiste en verificar que el sistema dispone de  @#`suficiente espacio para contener al proceso hijo en el rea de swap, y para el caso  @#de sistemas paginados, tambi)n habr1a que ver si se dispone de espacio en memoria para contener las tablas de pginas del proceso creado.  S#'0 se9ales:  pp Tambi)n se les denomina interrupciones software, en un entorno UNIX  @#System V existen 19 se9ales y )stas informan a los procesos de la ocurrencia de eventos as1ncronos. Se podr1an clasificar en base a su origen de la siguiente manera:"*!p-++`0"ԌX- Terminaci;n de procesos." X- Condiciones de excepci;n." X© Errores irrecuperables durante la ejecuci;n de una llamada al sistema." X- Errores recuperables durante la ejecuci;n de una llamada al sistema." X- Originadas por procesos en modo usuario." X- Interacci;n con terminales." X- Ejecuci;n paso a paso procesos (debbuging)."  pp El tratamiento de se9ales contempla varios aspectos, bsicamente debemos tener claro los cuestiones: X- Como el nCcleo env1a se9ales a los procesos." X- Como los procesos tratan las se9ales." X- Como controlan su reacci;n a tales se9ales."  S < pp Para enviar una se9al a un proceso, el nCcleo utiliza el bit asociado en el  S< @#campo de se9ales que toda entrada en la tabla de procesos posee . Si el proceso  @#est dormido con prioridad interrumpible el nCcleo lo despierta. El nCcleo s;lo  @#maneja interrupciones cuando retorna de modo sistema a modo usuario, as1 pues,  @#Xuna se9al tendr efecto instantaneo sobre un proceso s;lo cuando )ste se est)  @#0ejecutando en modo sistema. Si un proceso se est ejecutando en modo usuario,  @#y el nCcleo trata una interrupci;n, que implica el env1o de una se9al al proceso, el  @#xnCcleo reconocer y tratar la se9al cuando retorne del tratamiento de la  @#interrupci;n. Un proceso cuando recibe una se9al puede tratarla de diferentes maneras, )stas son: X- Acci;n por defecto." X- Ignorar la se9al." X- Realizar una acci;n determinada."  pp 8Los casos segundo y tercero se debern declarar pr)viamente. Cuando se  @#quiera realizar una acci;n determinada, entoces se deber especificar dicha acci;n  @#a trav)s de una funci;n, que se ejecutar despues de que el nCcleo haya realizado los siguientes pasos: X- El nCcleo accede a los registro de programa y de pila." X- Se resetea el campo de se9ales en el u_area."  pp X- El nCcelo crea una nueva entrada en la pila de usuario copiando los valores  pp de los registros de puntero a pila y contador de programa, y reserva ms espacio si es necesario."  pp X- El nCcleo cambia el contexto de registro; pone en el contador de programa  pp la diercci;n de la funci;n asociada y el puntero a pila se situa en la nueva posici;n."  pp Despues de retornar de modo sistema a modo usuario, el proceso ejecuta la  @#funci;n de tratamiento de la se9al; y cuando finaliza la funci;n, el proceso se  @#dseguir ejecutando en el punto donde se produjo la interrupci;n o la llamada al sistema."*"p-++x0"Ԍ S<ԙ Algoritmo: ` ` issig /* Test de recepci;n de se9ales */"`  S< Entrada: ` ` Ninguna "`  S< Salida: ` ` Verdadero si se trata de una se9al a no ignorar"` XX` ` falso en caso contrario"` "Mientras" (campo en la tabla de procesos no sea 0) "Hacer" XEncontrar un nCmero de se9al enviada al proceso ;" X"Si" ( se9al de muerte de un hijo) "Entonces"" XX` ` "Si" (ignorar se9al de muerte de hijo) "Entonces" "` XX` ` X ,Liberar entrada en la tabla de procesos (hijos zombies) " XX` ` "Si no""` XX` ` X ,return verdadero " XX` ` "Fin si""` X"Si no"" XX` ` "Si" (no ignorar se9al) "Entoces" retornar vardadero ;"` X"Fin si"" XDesactivar bit de la se9al recibida en tabla de procesos ;" "Fin mientras" Retornar falso ;  S< Algoritmo: ` ` pseg /* Trata a una se9al despues de reconocerla */"`  S< Entrada: ` ` ninguna"`  S< salida: ` ` ninguna"` Obtener el nCmero de se9al en la entrada de la tabla de procesos ; Resetear dicho nCmero en la entrada de la tabla de procesos ; "Si" (ignorar se9al) "Entonces" return ; "Si" (se especifica funci;n de tratamiento) "Entonces" XObtener los valores del contador de programa y de pila ;" XSe resetea campo de se9ales en la u_area ;" XSe crea nueva entrada en la pila ;" XCambio de contexto para ejecutar la funci;n de tratamiento ;" Xreturn ;" "Fin si" "Si" ( se9al de tipo dump) "Entonces" XSe crea un fichero llamado"core" en el directorio actual ;" XSe escribe el contexto del proceso en dicho fichero ;" "Fin si" Invocar Inmediatammente a exit ;  S:&0 Terminaci;n de procesos  pp Los procesos UNIX finalizan su ejecuci;n a trav)s de la llamada al sistema  S(< @#h exit . Un proceso que ejecuta un exit entra en el llamdo estado " zombie ", libera sus  @#recursos y se pierde su contexto excepto su entrada en la tabla de procesos. La sintaxis de la llamada es:"*#p-++`0"ԌXexit(status)"  S< pp \El valor de status es retornado al proceso padre que lo puede examinar y  @#actuar en funci;n del valor obtenido. Todo proceso invoca esta llamada expl1cita  @#<o impl1citamente cuando retorna de la funci;m main. El sistema no impone l1mites  S< @#de tiempo de ejecuci;n de procesos; as1 por ejemplo el proceso 0 , proceso de  @#$swapp, y el proceso 1, proceso init, existen durante toda la vida del sistema. Otros  @#lejemplos de procesos que se ejecutan mientras "viva el sistema" son los procesos  SH< @#< getty , que controla las l1neas de terminales, y los procesos de administraci;n del sistema (procesos de accounting).  S < Algoritmo: ` ` exit"`  S < entrada: ` ` Retorno para el proceso padre"`  S < Salida: ` ` Ninguna"` Ignorar todas las se9ales ; "Si" ( es proceso propietario del control de terminales) "Entonces" XEnviar se9al a los miembros del grupo ;" XResetear grupo de procesos ;" "Fin si" Liberar recursos ; Escribir registro de contabilidad (accounting) ; Poner el proceso en estado zombie Comunicar la muerte del proceso al proceso padre ;  S0 Espera por la finalizaci;n de un proceso  pp Un proceso puede sincronizar su ejecuci;n con la terminaci;n de uno de sus  Se< @#Hprocesos hijos a trav)s de la llamada al sistema wait . La sintaxis de esta llamada es : pid = wait(&status) ;  S < pp Siendo pid el identificador del proceso zombie hijo, y status contiene el c;digo de salida del proceso hijo.  S < Algoritmo: ` ` wait  S!< Entrada: ` ` Direcci;n de la variable que contendr c;digo de salida  S"< Salida: ` ` ID del proceso hijo XX` ` C;digo de salida"` "Si" (no posee procesos hijos) "Entonces" error ; "Mientras" (verdadero) "Hacer" X"Si" (existe proceso zombie) "Entonces"" XX` ` Tomar el proceso zombie ;"` XX` ` A9adir su uso de CPU al proceso padre ;"` XX` ` Liberar entrada en la tabla de procesos ;"` XX` ` Retornar PID y c;digo de salida ;"` "*$p-++`0"ԌX"Fin si"" Xsleep(evento: exit de proceso hijo) ;" "Fin mientras"  pp El nCcleo busca un proceso zombie y en caso de no tener hijos retorna un  @#error. Si encuentra un proceso hijo extrae su ID y su parmetro de salida para  @#lretornarlos. As1 pues, los procesos pueden comunicar las distinas condiciones que  @#dieron lugar a su finalizaci;n. El nCcleo a9ade el tiempo de CPU del proceso hijo al  @#proceso padre (se registra en el u_area) y finlmente libera la entrada en la tabla de  @#procesos asociada al preceso hijo que lanz; el exit; s;lo en este momento es  @#$cuando se puede utilizar esta entrada en la tabla de procesos para otro proceso a  S <crear.  pp <Como colof;n a la descripci;n de los distintos subsistemas descritos, se  @#muestra el diagrama de estados de un proceso gen)rico UNIX y los eventos que provocan sus transiciones  b a )p-bddestuni.wpg$ % ) :2jDFigura 11. Diagrama de estados de un proceso UNIXb $""y""ba"$  S 0 7. El Subsistema de E/S.  pp El Subsistema de E/S permite a los procesos comunicarse con los  @#dispositivos perif)ricos tales como impresoras, terminales, discos, etc. Los m;dulos  @#Hl;gicos que se encargan de controlar a estos dispositivos se denominan  SQ%< @# manejadores de dispositivos . Normalmente, existe una correspondencia una a una  S:&< @# entre tipo de dispositivo y manejador de dispositivo : Los sistemas pueden contener  @#4varias unidades de disco pero s;lo un manejador de disco, o tambi)n, un s;lo  @#manejador de terminal para controlar a todos los terminales. En el caso opuesto,  @#Xexisten instalaciones que poseen varias unidades de cintas cuyo control difiere  @#considerablemente, normalmente debido a que provienen de fabricantes diferentes,  S*< @#en estos casos se tendrn varios manejadores de cintas asociados cada uno a cadaX*%p-++8.3)"#a%l=)$ ext Format (RTF)=WPX tipo de unidad.  pp 4En esta secci;n examinaremos las interfases entre los procesos y el  S< @#psubsistema de E/S y Examinaremos tambi)n la estructura interna de los  S0manejadores de dispositivos.  S<  Sv0 7.1. Interfases de manejadores.  SH<El sistema UNIX distingue dos tipos de dispositivos:  S < @#Dispositivos de Bloque y Dispositivos de caracter . Los Dispositivos de Bloque son  @#aquellos que pueden transferir bloques de informaci;n ubicados en cualquier lugar  @#de un medio de alamacenamiento, ejemplos clsicos de este tipo de dispositivo son  S < @#las unidades de cintas y las unidades de disco. Los Dispositivos de Caracter son  @#aquellos que no poseen esta caracter1stica de acceso a la informaci;n. UNIX  @#Lsuministra una interfase uniforme entre usuarios y dispositivos; esta interfase la  @#suministra hace uso inicialmente de conceptos asociados al Sistema de Ficheros  Sy< @# de UNIX, y en ella se distinguen dos tipos: Interfase orientada a bloque e interfase  Sb< @#orientada a caracter , cada uno de estos tipos posee un conjunto de funciones y operaciones permitidas soportados por el Subsistema de E/S.  pp ap-bddf12unix.wpg &) :2lFigura 12. Estructura del sistema de entrada/salidanMPara un dispositivo de bloque se pude usar tanto una interfase de bloque  @#como de caracter, en cambio para un dispositivo de caracter s;lo se puede usar  @#una interfase de caracter. La uniformidad de tratatamiento de los dispositivos  @#(interfase uniforme) se logra de la siguiente manera: Cada dispositivo tiene un  @#nombre, al igual que un fichero, y el acceso a )l se hace de forma anloga a como  @#se hace en los ficheros. De cara al Sistema de Ficheros los dispositivos aparecen  S< @#como ficheros; por lo tanto todo dispositivo tiene asociado un i_node , a estos  S|< @#ficheros se les denomina ficheros especiales de dispositivo , y en )l se almacenaX|&p-++3"b1&l= ext Format (RTF)=WPX  @#el tipo de dispositivo (carcater o bloque) al que esta asociado. Si un dispositivo  @#bloque posee una interfase caracter y otra de bloque, entonces tendr asociado dos ficheros especiales.  S< pp Las llamadas al sistema para menejo de ficheros: open, read, write, close se  S< @#pueden utilizar tambi)n para los ficheros especiales asociados a dispositivos .  Sv< @#Concr)tamente, se podrn utilizar s;lo las que manejador de dispositivo soporte; que sern las utilizadas en el dise9o de )ste.  S10 7.2. Configuraci;n del sistema.  pp A trav)s del procedimiento de configuraci;n del sistema se especifican los  @#dparmetros que dependen de la instalaci;n. Algunos parmetros especifican la  @#configuraci;n de dispositivos, que le dicen al nCcleo que elementos f1sicos y l;gicos  S < @#|forman el sistema y en que "direcciones" se encuentran. Otros parmetros  @#Hespecifican los tama9os de las tablas de control del sistema, por ejemplo: tabla de  @#procesos, tabla de i_nodes, nCmero de buffers a ubicar en el pool de buffers del sistema.  SK< pp \El nucleo utiliza dos tablas, llamadas tabla de dispositivos de bloque y tabla  S4< @#de dispositivos de caracteres , en donde cada tipo de dispositivo posee una entrada  @#$que especifica que llamadas al sistema se pueden utilizar para operar con )l, o lo  @#@que es lo mismo, que funciones del sistema (open, read, write, ioctl, close, etc)  S< @#utiliza el manejador asociado al tipo de dispositivo. A trav)s del nCmero mayor que  @#el i_node asociado a un fichero especial de dispositivo tiene, el nCcleo sabe que  @#tipo de dispositivo representa, y a trav)s del nCmero menor el nCcleo sabe a que  S<unidad de dispositivo est asociado .  pp hLa interfase entre el hardware y los m;dulos manejadores de dispositivos la  @#configura el conjunto de instrucciones de E/S dependientes del procesador del  SN< @#sistema, las instrucciones de acceso a memoria, cuando se requiera "mapear  S7<dispositivos en reas de memoria espec1ficas , y los vectores de interrupci;n.  S 0 7.3. Llamadas al Sistema e interfase de dispositivo.  pp PVamos a describir a continuaci;n la interfase entre el nCcleo y los  @#manejadores de dispositivos. Por cada llamada al sistema que usa un descriptor de  @#fichero, el nCcleo accede a la tabla de descriptores de ficheros del proceso y  @#Tobtiene la direcci;n de la entrada asociada en la tabla de ficheros del sistema y de  @#)sta accede al i_node asociado. En este punto se comprueba que tipo de  @#<dispositivo es (carcter o bloque) y se obtiene el nCmero mayor para acceder a la  @#xtabla de dispositivo, en donde se especifican las llamadas al sistema permitidas. Si  @#la llamada es permitida, entonces se llama a la funci;n del driver que corresponda;  @#pasando como parmetro el nCmero menor para saber que dispositivo debe atender la petici;n.  S)0 Open "*'p-++0"Ԍ pp DLos pasos a seguir en la apertura de un dispositivo son los mismos que los  @#pasos que se siguen con los ficheros regulares. Se activa el i_node asociado, se  @#incrementa su contador de referncias y se asigna una entrada en la tabla de  @#descriptores de ficheros del proceso, y en la tabla de ficheros del sistema. El nCcleo  @#retorna un descriptor de fichero al procesos llamador (al igual que un open sobre  S < @#un fichero regular), pero el control se cede a la funci;n open contenida en el  S < @#manejdor de dispositivo . La direcci;n de esta funci;n se encuentra en la tabla de  @#`dispositivos de bloque (si es de tipo bloque) o en la tabla de dispositivo de carcter (si es de tipo carcter).  S< pp pEl procedimiento open espec1fico de cada manejador de dispositivo tiene por  @#objetivos establecer una v1nculo de uni;n entre un proceso y un dispositivo f1sico  @#,e inicializar las estructuras de datos de control propiedad del manejador de dispositivo.  S< Algoritmo: ` ` open /* Para manejadores de dispositivos */"`  S< Entradas: ` ` pathname"` XX` ` modo de apertura"`  S< Salidas: ` ` descriptor de fichero"` Convertir pathname a i_node ; Incrementar su contador de referncias ; Localizarle una entrada en la tabla de ficheros ; Localizarle una entrada en la tabla de descriptores ; Obtener el nCmero mayor y menor del i_node ; Salvar contexto (algoritmo setjmp) ; "Si" (dispositivo de bloque) "Entonces" XAcceder a la tabla de dispositivos de bloque ;" XLlamar a la funci;n open del manejador;" "Si no" XAcceder a la tabla de dispositivos de carcter ;" XLlamar a la funci;n de open del manejador ; " "Fin si" "Si" ( funci;n open del dispositivo falla ) "Entonces" XDecrementar contador de referencias en el i_node ;" Xliberar entrada en la tabla de ficheros ;" XLiberar entrada en la tabla de descriptores ;" XRetornar valor de error ;" "Fin si" Retornar Descriptor de ficheros ; "*(p-++`0"Ԍ pp ԙEl nCcleo debe salvar el contexto del proceso que realiza la apertura; ya que  @#es posible que )ste tenga que quedar suspendido temporlmente hasta recibir una  @#$se9al y )sta nunca se produzca, entonces el nCcleo debe suspender la operaci;n de apertura y reanudar la ejecuci;n del procesos detenido.  S0 close  S_< pp <La llamada al sistema close se utiliza para eliminar el v1nculo de uni;n  SH< @#Hexistente entre un proceso y un dispositivo. La funci;n close de un manejador de  S1< @#dispositivo es invocada por el nCcleo cuando un proceso efectua la llamada al  S < @#sistema close sobre un fichero especial de dispositivo y no hay ningCn proceso que  S < @#lest) haciendo uso del dispositivo (proceso que hizo un open y no ha realizado un  S < close ).  S < pp El algoritmo close para un dispositivo es similar al algoritmo close para un  S < @#fichero regular. Sin embargo, antes de que el sistema libere el i_node asociado al fichero especial de dispositivo, )ste realiza una serie de pasos espec1ficos: X1. Se asegura de que no hay procesos haciendo uso del dispositivo."  SK< pp X2. Para un dispositivo de tipo carcter, el nCcleo invoca a la funci;n close  S4< pp del dispositivo y luego retorna a modo usuario. En cambio para un  S< pp Ddispositivo de tipo bloque, el nCcleo debe comprobar primero que no existe  S<un Sistema de Ficheros montado sobre el dispositivo ." X3. Despues libera el i_node."  S< Algoritmo: ` ` close /* Para manejadores de dispositivos */"`  S< Entradas: ` ` descriptor de ficheros"`  S< Salidas: ` ` ninguna ;"` Realizar close para ficheros regulares ; "Si" ( contador de referncias no es 0 ) "Entonces" Goto FIN ; "Si" ( existe otro fichero abierto con igual nCmero Xmayor e igual nCmero menor ) "Entonces"" XGoto FIN ;" "Fin si" "Si" ( dispositivo carcter ) "Entonces" XAcceder a la tabla de dispositivos de carcter ;" XLlamar a close del manejador ;" "Fin si" "Si" ( dispositivo bloque ) "Entonces" X"Si" ( dispositivo montado ) "Entonces" Goto FIN ;" XTerminar de escribir datos del buffer ;" XAcceder a la tabla de dispsoitivos de bloque ;" XLlamar a la funcion close del manejador ;"  S (<XInvalidar datos pendientes que queden en el buffer ;" "Fin si" FIN: Liberar i_node ;  S*<"*)p-++`0"Ԍ S0ԙ Read y write  S< pp Los algoritmos read y write para manejadores de dispositivos son similares  @#a los empleados para ficheros regulares. Si un proceso est leyendo o escribiendo  S< @#psobre un dispositivo de tipo carcter, el nCcleo invocar a las funciones read y  S<write del manejador de dispositivo .  pp El m)todo utilizado para comunicara al manejador de dispositivo con el  SH< @#dispositivo depende del hardware. algunas mquinas proporcionan "E/S mapeada  S1< @#hsobre memoria , significando )sto que ciertas direcciones del espacio del nCcleo no  @#son localizaciones f1sicas de memoria principal, son direcciones de acceso a  S < @#xreg1stros de dispositivos. Otras mquinas poseen "E/S programada" ,  @#significandoque la mquina posee instrucciones de E/S que posibilitan el control de dispositivos.  S < Ioctl  Sy< pp La llamada al sistema ioctl proporciona una forma de ejecutar cualquier  @#funci;n contenida en el manejador de dispositivo. Esta llamada s;lo se puede realizar sobre ficheros especiales de dispositivos, su sintaxis es: ioctl( fd , comand , arg ) ;  S< @#Donde fd es un descriptor de ficheros, comand es un valor que especifica que  S< @#operaci;n se quiere realizar, y arg es una direcci;n que contiene los datos para realizar la operaci;n deseada.  Se0 Bibliograf1a: "The desing of the UNIX operating system" Maurice J. Bach Prentice Hall International Editions, 1986 "UNIX system architecture" Prabhat K. Andleigh Prentice Hall Inc., 1990  S#< "The Design and Implementation of the 4.3 BSD UNIX Operating System". S. Leffler, M. McKusick, M. Karels and J. Quarterman. ?XAddison Wesley, 1989.  S:&<