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.