Brian  Kerhningham  es  profesor  de  ciencia  del  cómputo,   e
       specialista de C, y uno de los hackers encargados de desarrollar
       UNIX.

       En una de las entrevistas da un pequeño raconto del proceso
       creativo que llevó a tal sistema operativo.


-----


       Creo  que en cierto punto de la conversación mencioné  el  hecho
       que  la gente que trabajaba en MULTICS - una especie de  segunda
       versión de un  sistema de tiempo compartido CTSS elaborado en el
       MIT,  en  colaboración  con  General  Electric  y  Bell  Labs  -
       arribaron a la conclusión que se había convertido en un  Sistema
       muy  grande  para  proveer   la   utilidad   de   computo   para
       programadores originalmente propuesta.   MULTICS estaba de hecho
       escrito en lenguajes de alto nivel.   Comenzaron con PL/1 que no
       fue  una buena elección,  y luego  cambiaron  a  BCPL,  lenguaje
       desarrollado  por entonces por Mark Richards,  de Cambridge.  La
       gente  que escribían MULTICS que  estaban  en  Bell  Labs  -  en
       particular  Ken Thompson y Dennis Ritchie - se hicieron  con  la
       idea  que podría ser posible  escribir  software  similar  a  un
       sistema operativo interesante - junto a las herramientas que  le
       dieran soporte - recurriendo a lenguajes uevons de alto nivel en
       lugar de hacerlo en mero ensamblador.

       De  modo que al mismo tiempo que se  orientaron  a  UNICS-  esta
       versión mucho más pequeña y acotada escrita en los  Laboratorios
       Bell - investigaban el uso de lenguajes de alto nivel.   Existía
       una variedad de estos: existía un lenguaje llamado B, que fue el
       primer  intento realizado por Ken Thompson  (se  trataba  de  un
       lenguaje  muy simple,  y supongo que podría decirse que era  una
       versión acotada de BCPL) - una pobre convención de nombres...

       Con  B podías hacer ciertas cosas  interesantes  pero  noera  lo
       suficientemente potente.   En particular, su limitación radicaba
       en  que  se  trataba  de  un  lenguaje  interpretado,   no   era
       compilable.   Esto significa que no generaba código máquina para
       una computadora en particular, sino que interpretaba las órdenes
       de  programación y las traducía a lenguaje ensamblador  de  bajo
       nivel,  lo  que  además  quiere  decier  que  corría  de  manera
       relativamente lenta.

       La  otra cosa fue que el lenguaje B no tenía  ni  siquiera  cons
       ideraba  soportar las arquitecturas de las máquinas  nuevas  que
       estaban  apareciendo por entonces,  en particular la DEC PDP-11.
       Estas  nuevas máquinas,  en lugar de concentrarse en un s istema
       con  arquitecturas de un mismo tamaño de palabra (por ejempo  16
       bits  o algo así)  podían hacer  caso  a  distintos  tamaños  de
       palabras   que   el   sistema   podría   manipular   natural   o
       eficientemente:  podría ser 8 bits,  16, tal vez  32  bits.   El
       lenguaje B no reflejaba eso,  por lo que Dennis Ritchie se abocó
       a  diseñar una versión de B más rica en  funcionalidades  y  que
       contase  además con mecanismos de lenguaje  que  dieran  cuenta:
       "esto  es una cifra de 8  bits,  esta  es  de  16  bits"...   en
       definitiva,  que las comprendiese y las manipulasen, e incorporó
       esta característica a una versión distintiva llamada C.

       Escribió  un compilador para C,  y con el compilador en  mano  e
       mpezó a escribir el sistema operativo en sí.   Tardó un tiempo -
       por  supuesto, escribió otro software crítico  en  lenguajes  de
       alto nivel en lugar de ensamblador.  Probablemente le llevó seis
       meses para tenerlo funcionando,  y contó entonces con un sistema
       operativo  portable, y esto es fundamental por  varias  razones.
       En  primer lugar,  facilitaba  que  gran  cantidad  de  personas
       comprendiesen  lo  que  hace  el  código,   pues   no   requiere
       programadores  de experiencia crítica al  estar  escrito  en  un
       lenguaje de alto nivel [N.de.T.  los lenguajes de alto nivel son
       mas sencillos que los ensambladores de bajo nivel, cuyo problema
       principal  es ser muy específicos para una  familia  de  CPU  en
       particular].   Y otro punto era su portabilidad,  en el  sentido
       que  si  alguien  realizaba  un  compilador  de   C   para   una
       arquitectura de máquina diferente, entonces podías recompilar tu
       programa  - cualquiera fuese - para esa nueva arquitectura y  de
       esta manera mudar tu programa a la otra máquina.

       Esta fue siempre la ventaja fundamental de los lenguajes de alto
       nivel,  pero ahora esta ventaja recaía en el  sistema  operativo
       mismo,  y ello implicaba ahora que el sistema  operativo  al  co
       mpleto  - para entonces conocido como  UNIX  -  ya  no  quedaría
       anclado  en la  PDP-11  sino  que  podría  utilizarse  en  otras
       máquinas posteriores.

       Aún  así, la dificultad de  escribir  un  sistema  operativo  en
       lenguajes de alto nivel para utilizarlo en muchas  arquitecturas
       diferentes radica en los detalles que restan por pulir;  existen
       ciertas excrecencias que los lenguajes de alto nivel simplemente
       son incapaces de alisar, de modo que siempre restan por resolver
       ciertos  detalles menores del portado asistiéndose con  lenguaje
       ensamblador  del procesador al cual está destinado.   Es  el  pr
       oblema del huevo y la gallina: cómo compilar el compilador, como
       el  compilador de C fue escrito  en  B,  la  idea  de  un  huevo
       haciendo una gallina es - metafóricamente - la idea correcta.

       Lo que se hacía por entonces era escribir código fuente en B  en
       una  hoja de papel,  y luego se traducía eso mentalmente en algo
       que  fuese capaz de procesar un poco más  de  código  C,  y  que
       permitiese luego iniciar el siguiente proceso.   Esta es la idea
       básica cuando no existe aún el compilador automático (que es  la
       forma  que conocemos.   De modo que se trató de  un  proceso  de
       incubadora mental - el cual nunca hice yo mismo.

       En  algún momento a comienzos de dicho  proceso,  cuando  hab{ia
       mucha  gente escribiendo programas interesantes,  me interesé en
       el  proceso de cómo explicarle esto  a  demás,  para  que  otros
       pudiesen  aprender B.   Esto fue porque Ken  Thompson  y  Dennis
       Ritchie no se ocuparon demasiado en redactar documentación.  Así
       que yo mismo escribí un tutorial de B que vino bien cuando salió
       C,  y mas adelante redacté otro un tutorial sobre C.  Y para ese
       entonces  ya eran dos libritos de esto,  y pareció entonces  que
       había  ya un "mercado" para el lenguaje C.   Así  que  tuve  que
       torcerle el brazo a Dennis Ritchie para que escribiese el  libro
       conmigo.   Y es una las cosas más inteligentes que hice en  toda
       mi vida, sin ambiguedades.

       Así que tomamos mi tutorial, mas  bien  una  parte de él, y una
       gran  parte de su manual de referencia - que es  excelente  -  y
       luego  rellenamos con material en el  medio  para  explicar  las
       varias  partes del lenguaje,  y lo publicamos.  Lo escribimos en
       el  77 y lo publicamos a principios del 78,  y por supuesto  fue
       hecho  con todas las herramientas de preparación  de  documentos
       que  estuvimos haciendo durante todos esos años.   De  modo  que
       tenía  expresiones matemáticas usando NQN,  tenía tablas  usando
       operadores,  tenía mis programas C/PL,  la primera  versión  fue
       anterior  al formato PIC,  no tenía imágenes,  pero  la  segunda
       edición ya las incorporaba.

       ¿Es  esto un incesto o es escribir lo que la gente hizo?  No sé
       pero  fue algo así.   Y recuerdo hablar al aeditor  de  Prentice
       Hall,  donde  el  editor  era  Carl  Carlston,  y  recuerdo  una
       discusión  con él donde me  preguntaba  cuantas  copias  pensaba
       vender  del libro,  y le dije que no tenía idea,  tal  vez  unas
       2.000.   Y ha hecho mejor que eso (Nota:  C Programming de Brian
        Kerningham  es un libro clásico de programación,  con más de 20
       millones de copias y 32 ediciones).

       Lo pueden encontrar en castellano aquí:

https://frrq.cvg.utn.edu.ar/pluginfile.php/13741/mod_resource/content/0/El-lenguaje-de-programacion-C-2-ed-kernighan-amp-ritchie.pdf








       UNIX  ss el Sistema Operativo que se desarrolló a principios  de
       la  década de los setenta por el personal de la  BILL  TELEPHONE
       LABORATORIES (Nueva Jersey,  EEUU), pertenecientes a la compañía
       AT&T.

       Estos  laboratorios  se  estableciereon  en  1925  y  se  pueden
       considerar  como  uno  de  los   más   importantes   grupos   de
       investigación  del mundo.   En definitiva, se dedican a realizar
       investigaciones  dentro del mundo científico,  y como pueden ser
       las  comunicaciones, las matemáticas,  la fística y - de  manera
       especial  -  la  informática  (diseño  asistido  por  ordenador,
       técnicas de compilación, redes de datos, etc).

       Durante  el trasncurso de 1969,  el Departamento de Ciencias del
       Cómputo  de los Laboratorios Bell utilizó un  ordenador  General
       Electric  GE-645 con un sistema  operativo  denominado  MULTICS.
       MULTICS  se puede considerar como uno de los  primeros  sistemas
       interactivos MULTIUSUARIO,  es decir, que permite la utilización
       simultánea del computador por varios usuarios y que además -  al
       ser  interactivo - ofrece una  respuesta  casi  inmediata  a  la
       solicitud  de  una  determinada orden.

       Con  anterioridad  el  método  de  trabajo  era  sustancialmente
       distinto, por supuesto que los sistemas operativos implementados
       funcionaban  por LOTES.   El usuario mecanografiaba las  órdenes
       destinadas al computador en fichas perforadas,  éste las leía, y
       algún  tiempo despuçes (que podían ser varios minutos  o  varias
       horas)  de obtenían los resultados en papel  impreso.   Dada  la
       lentitud  del proceso,  el MULTICS supuso un importante  avance;
       sin  embargo, este sistema operativo carecía de  funcionalidades
       importantes para los programadores.

       En  1969 KEN THOMPSON y DENNIS  RITCHIE  crearon  un  sistema  o
       perativo  con el fin de paliar algunos problemas de  complejidad
       que  se derivaban de la utilización de grandes  ordenadores.   A
       este  sistema se le llamó UNIX,  y supuso la simplificación  del
       diálogo entre el hombre y la máquina.

       Thompson  y  Ritchie  consideraron  que  la  mayor   parte   del
       desarrollo  de programas (mas del  50%)  se  empleaba  en  crear
       código fuente y compilarlo.   Para tales tareas no se necesitaba
       la  utilización de enorme potencia de cálculo,  sino que bastaba
       con  un ordenador pequeño que dispusiera  de  gran  cantidad  de
       memoria  en periféricos donde almacenar los ficheros  de  código
       fuente.

       Aspeco importante a considerar es que el programador disponga de
       un  método sencillo para la creación,  actualización y manejo de
       los ficheros; esta es una de las características escenciales del
       UNIX:  un sistema de ficheros con estructura jerárquica en forma
       de  árbol.  Esta herramienta permite la creación de  un  fichero
       sin  necesidad  de  definir  parámetros  del  mismo  (extensión,
       formato,  etcétera); se puede localizar  -  además  -  de  forma
       automática  cualquier  fichero  en  cualquier   directorio   del
       sistema.

       Una  vez que se  ha  creado  el  fichero  de  código  fuente  es
       necesario  compilarlo, y para tal tarea tampoco se  requiere  un
       gran  ordenador, que únicamente será  necesario  a  la  hora  de
       ejecutar  grandes programas.   Se desarrollaron,  por tanto,  en
       Bell  Labs una serie de programas  de  computadora  utilitarios,
       concebidos para facilitar las comunicaciones entre los grandes y
       pequeños  ordenadores.   Estos  utilitarios  forman  parte   del
       sistema UNIX y son accesibles para todos sus usuarios.  Permiten
       la traducción del código interno utilizado por los pequeños PDP-
       11  de  Digital,  al  código  EBCDIC  en  uso  por  los  grandes
       mainframes de IBM.

       Concluyendo,  con el UNIX se logró dotar a máquinas pequeñas  de
       un sistema interactivo comparable al de los grandes  ordenadores
       de la época.

DESAROLLO DEL SISTEMA

       La  primera versión del UNIX se realizó durante los  años  1967-
       1970 en las minicomputadoras PDP-7 y PDP-9 de Digital  Equipment
       Corporation.   Esta versión,  escrita en  lenguaje  Ensamblador,
       contenía  los principales  conceptos  de  sistemas  multiusuario
       tales como CTTS,  TENEX, MULTICS.  En un principio sólo permitía
       la utilización del ordenador en monousuario y el desarrollo  del
       software  fundamental (ensabladores,  compiladores, editores  de
       texto y sistema) supuso cerca de cinco años-hombre en labores de
       programación.

       En  1971  se  desarrolló  la  segunda  versión  del  UNIX.    Se
       utilizaron para ellos la DEC PDP-11/40 y la PDP-11/45.   En esta
       nueva versión se introdujo como característica más importante la
       explotación del UNIX en modo multiprogramación.

       Thompson desarrolló un lenguaje interpretado  basado en el BCPL,
       con  la finalidad que fuese portable y lo denominó  LENGUAJE  B.
       En  el mismo  año  1971  Ritchie  lo  modificó  para  que  fuese
       compilable y el nuevo resultado se llamó LENGUAJE C. El Lenguaje
       C  se ha utilizado tanto para  la  escritura  de  sistema  y  de
       software  básico  cómo  para aplicaciones de usuario.

       La re-escritura en el lenguaje C del sistema UNIX se realizó en
       1972  para algunas versiones de la gama PDP-11,  añadiéndose así
       nuevas  funciones al sistema.   En 1974 se escribió una  versión
       simplificada del UNIX para el microordenador LSI-11/03.

       Como  mencionamos  anteriormente,  el  software  incluye  muchos
       programas  desarrollados  en  lenguaje  C.    Algunos   se   han
       incorporado  como nuevas órdenes del  sistema  para  usuarios  o
       técnicos  de sistemas,  mientras que  otros  ejecutan  funciones
       específicas.   Por ejemplo,  un programa actualiza una  base  de
       datos  en  un  entorno  de  tiempo  real,  mientras   que   otro
       proporciona posibilidades de edición de textos.   Los profesores
       y  estudiantes universitarios han escrito numerosos programas  C
       compatibles con el software de UNIX.   La Western Electric vende
       licencias  para  el  sistema  UNIX   con   aproximadamente   250
       diferentes.

       Hasta el nacimiento de la versión 6 de UNIX,  su uso era interno
       y restringido a los Laboratorios Bell.  Estaba extendido por los
       distintos   deparatamentos,   que   le    fueron    incorporando
       modificaciones de acuerdo con sus respectivas necesidades (MERT,
       PWD/UNIX).

       En  1975  el  sistema  UNIX  comienza  a  ser   difundido.    Su
       comercialización se limita al envío de una cinta magnética y  un
       emeplar de cada manual.  Los laboratrios Bell no garantizaba por
       entonces ni la instalación, ni el mantenimiento del sistema.  El
       PWD  ("Programmer's Workbench")  se desarrolló a la vez  que  la
       versión  7 de UNIX para un equipo  diferente  al  utilizado  por
       Thompson y Ritchie.  Se utilizó para centros de cómputo donde el
       desarrollo se hacía con PWD/UNIX en minicomputadoras PDP11, y la
       ejecución  se realizaba en sistemas IBM 370 y UNIVAC 1100.   Las
       innovaciones que conlleva el PWD con respecto a la Versión 6  de
       UNIX son:

       * Modificaciones en las funciones de organización de usuarios en
         proyectos de gran envergadura;

       * Creación de utilizades para gestión de las fuentes ("SCCS")  y
         el envío de trabajos a distancia;

       En  los  Laboratorios  Bell  el  sistema  PDW/UNIX  se  puso   a
       disposición del servicio BISP,  que posee una red de PDP-11/45 y
       PDP-11/70  conectados con IBM 370/168,  XDS Sigmas y UNIVAC 1100
       utilizados  por gran cantidad de usuarios.

       La  Versión 7 supuso un cambio importante con respecto a  la  6,
       introduciendo una serie de modificaciones que se pueden  resumir
       en:

       *  Superación  de  las  limitaciones  en  cuanto  al  tamaño  de
       ficheros;

       * intento de portabilidad con el fin de portar UNIX a distintas
         máquinas;

       * desarollo de nuevos utilitarios

       Hasta entonces UNIX sólo se había instalado en máquinas  PDP-11,
       sin embargo se llega a la conclusión que es necesario portarlo a
       otras máquinas.   El primer transporte se realizó en el año 1977
       sobre  un mainframe InterData  8/32.   El  hecho  de  que  fuera
       necesaria  la portabilidad supuso llevar a  cabo  una  serie  de
       modificaciones.

       *  A nivel del lenguaje C se realizaron  los  cambios  oportunos
       para  que los programas se independizaran en  la  medida  de  lo
       posible de las características físicas de la máquina;

       *  A  nivel  del  compilador  se   introdujeron   técnicas   que
       falicitaban la adaptación del mismo a distintas máquinas;

       *  A nivel del sistema,  se pretendió aislar los componentes más
       dependientes de la arquitectura de cómputo del resto.

       Debido  al  aumento  de  la  potencia  computacional  y  al   ab
       aratamiento  del  coste  de  las  minicomputadoras,  el  sistema
       operativo  UNIX se volvió rápidamente popular en  ellas.   Estas
        máquinas  se han utilizado inmediatamente para  el  control  de
       experimentos  de laboratorio,  soporte de  diseño  asistido  por
       computadora,  supervisión  de  redes  de  telecomunicaciones   y
       ejecución  de  funciones  comerciales.   El  desarrollo  de   un
       software  que cumpliera estas aplicaciones específicas supuso  a
       los  programadores un nuevo reto y el sistema  UNIX  se  ofrecía
       como  una herramienta efectiva para conseguirlo.   Hacia en 1978
       estaban    funcionando    en    universidades,     departamentos
       gubernamentales  y  en  los  laboratorios  Bell,  más   de   500
       instalaciones del sistema UNIX.

       Con  las modificaciones descritas anteriomente surge en 1978  la
       séptima versión del UNIX (UNUX/v7) para las computadoras DEC PDP-
       11,  y el UNIX/v32 para la DEC VAX-11/780.   El UNIX System III,
       que aparece en 1982, incluye además:

       * utilitarios del PWB/UNIX;

       *  una distribución para máquinas de la gama  Digital  Equipment
       (la PDP-11/23 y la VAX-11/780);

* mecanismos de comunicación interprocesos.

       El UNIX System V que surge en 1983 ofrece también la licencia de
       instalación, mantenimiento  y  actualizaciones  de sistema.   En
       la  actualidad  es   importante   destacar   el   sistema   UNIX
       desarrollado   por la  Universidad  de   Berkeley  (versión  4.1
       BSD)  que gestiona memoria virtual.   Estos programas  han  sido
       adoptados por los laboratorios Bell y se incluyen en las  nuevas
       versiones  de UNIX.   Una de estas importantes contribuciones es
       el editor de textos VI.

       En definitiva, hay dos opciones posibles en la elección del UNIX
       como herramienta de trabajo:

       * Los sistemas que trabajan  con  el  UNIX  portado a una
       máquina en particular.  En este caso es necesario el pago de una
       licencia y  de un canon a los Laboratorios Bell;

       *  Los sistemas que poseen los mismos servicios que el UNIX pero
       que han sido lo suficientemente modificados como para que se los
       considere ajenos a los laboratorios Bell.


## Los programas UNIX

       Los programas del sistema UNIX están funcionalmente clasificados
       de la siguiente forma:

       * EL NUCLEO que planifica tareas y gestiona el almacenamiento de
       datos.

       * LA SHELL es un programa que relaciona e interpreta las órdenes
       tecleqadas por un usuario del sistema.  Interpreta peticiones de
       usuarios,  llama a programas de la memoria  y  los  ejecuita  al
       mismo  tiempo  o  en  una  serie  de   canalizaciones   llamadas
       "tuberías" ("Pipes").

       * LOS PROGRAMAS UTILITARIOS ejecutan una variedad de  subrutinas
       y unas funciones especiales de mantenimiento de sistema.


       El sistema UNIX se puede complementar o modificar por todo aquel
       que disponga  de  LICENCIA DE ACCESO a los códigos fuente del
       mismo.  Un elevado número  de  programadores  han  ido
       incorporando al sistema programas incluyendo los de la
       Universidad  de  California.   Estos programas,  y  los  que
       irán  apareciendo,  incrementarán la amplia biblioteca de
       software existene para UNIX.

## El Usuario frente al sistema UNIX

       Cuando se pretende acceder al  sistema operativo UNIX lo primero
       que debemos hacer es presentarnos al mismo.  Esto  se  consigue
       con  un IDENTIFICADOR  que  permite  al  sistema  comprobar si
       se poseen los derechos propios de  acceso,,identificador  que
       es  asignado por el administrador del sistema.  También  es
       necesario  disponer  de  un terminal  de  tipo  conversacional
       conectado  al sistema para poder efectuar esa tarea de
       presentación al sistema.

       Estos procedimientos se  denominan  LOGIN,  y  pueden ser
       efectuados mediante   el   comando   LOGIN   <nombre   de
       usuario>   o   bien automátifacmente después del enganche y
       conexión  del  terminal  al sistema.   Explicaremos  la
       utilización del teclado del terminal con sus caracteres
       especiales y  simularemos  una sesión de trabajo UNIX para ir
       profundizando y desarrollando  algunos  comandos  básicos  y
       fundamentales.

###Terminales y su utilización

       La comunicación entre el sistema operativo UNIX y el usuario  se
       realiza  fundamentalmente a través  de  un  TERMINAL  o  CONSOLA
       (entrada/salida).   El  sistema  UNIX   trabaja   en   modo   de
       transmisión FULL DUPLEX, es decir, los caracteres que se digitan
       en  la  consola  son  enviados  al  sistema,  y  este   responde
       reenviándolos  de  vuelta  a  la  pantalla,  con  lo  cual   son
       visualizados por el operador.   En casos concretos y especiales,
       como  puede  ser  la  digitación  de  una  palabra  secreta   de
       contraseña  o acceso  al  sistema,  este  "eco"  a  pantalla  es
       omitido.

       Muchos  de los caracteres que se puden digitar son  directamente
       visualizados en pantalla, pero existen caracteres especiales que
       poseen  otra interpretación y significado para el sistema.   Uno
       de  los más importantes es el caracter generado por la tecla  de
       RETORNO DE CARRO.   Este caracter indica al sistema el fin de la
       línea  de entrada,  moviento el cursor al principio de la  línea
       siguiente.  El caracter RETURN debe ser enviado al sistema antes
       de  que este  interprete  la  secuencia  de  caracteres  enviada
        previamente.   Como podemos observar,  es uno de los CARACTERES
       DE  CONTROL ("invisibles")  que PRODUCEN UNA  SERIE  DE  EFECTOS
       ESPECIALES  EN  EL  TERMINAL.    Este   caracter   RETURN   está
       implementado  directamente en el teclado de la  mayoría  de  los
       terminales.   Otros caracters de  control  deben  ser  generados
       presionando  una tecla especial  denominada  CTRL,  CTL  o  CTNL
       combinado  con otro caracter,  que  normalmente  suele  ser  una
       letra.   El caracter RETURN es esquivalente a presionar la tecla
       CTRL  seguida de una M.   Existe otra  serie  de  caracteres  de
       control que definiremos a continuación:

Ctrl+d

       Indica al proceso que se ha finalizado la entrada de caracteres.
       No hay mas caracteres en la entrada.

       Ctrl+h  Caractere BACKSPACE.   Se utiliza para la corrección  de
       errores de tecleo.

       Ctrl+i  Tabulador. Avanza el cursor  de  la  pantalla  hasta  el
       próximo tabulador definido (TAB STOP).   En UNIX la distancia de
       tabulador se considera de 8 espacios.

       Ctrl+C  DELETE, RUBOUT.   En muchos sistemas UNIX este  caracter
       produce la finalización de un proceso sin esperar a su término.

       BREAK.   Esta  tecla,  dependiendo  de  como  esté  definido  el
       terminal, produce efectos similares a DELETE o RUBOUT.