UNIX

**UNIX** é un sistema operativo portábel, multitarefa e multiusuario orixinalmente desenvolvido por Ken Thompson, que traballaba nos Laboratorios Bell (Bell Labs) da AT&T. A marca UNIX é unha propiedade do The Open Group, un consorcio formado por empresas de informática.

UNIX foi moi importante, sobre todo no mundo empresarial, debido principalmente á súa fiabilidade e á seguridade que achega cando se traballa nun contorno de rede.

## Historia 
En 1965 formouse un grupo de programadores, incluíndo Ken Thompson, Dennis Ritchie, Douglas McIlroy e Peter Weiner, nun esforzo conxunto da AT&T (Laboratorios Bell), da General Electric (GE) e do MIT (Massachusetts Institute of Technology) para o desenvolvemento dun sistema operativo chamado Multics.

O Multics tería que ser un sistema de tempo compartido para unha grande comunidade de usuarios. Non obstante, os recursos computacionais dispoñíbeis na época, particularmente os do computador utilizado, un GE 645, reveláronse insuficientes para as pretensións do proxecto. En 1969, a Bell retirouse do proxecto, citando dúas razóns principais: a primeira, que tres institucións con obxectivos dispares dificilmente acadarían unha solución satisfactoria para cada unha delas (o MIT facía investigación, AT&T monopolizaba os servizos de telefonía americanos e a GE quería vender computadores); a segunda razón citada era que os participantes sufrían da "síndrome do segundo proxecto" e, por iso, querían incluír no Multics todo aquilo que fora excluído dos sistemas experimentais ata entón desenvolvidos.

Con todo, en 1969, Ken Thompson, usando un computador PDP-7 ocioso, comezou a reescribir o Multics cun concepto menos cobizoso, ao que chamou Unics, usando linguaxe ensambladora (*assembly*). Máis tarde, Brian Kernighan mudou o nome do novo sistema para *UNIX*.

Un marco importante foi estabelecido en 1973, cando Dennis Ritchie e Ken Thompson reescribiron o UNIX usando a linguaxe de programación C para un computador PDP-11. A linguaxe C fora desenvolvida por Ritchie para substituír e superar as limitacións da linguaxe de programación B, desenvolvida por Thompson. O seu uso é considerado como unha das principais razóns para a rápida difusión do UNIX.

Ao longo dos anos 70 e 80 desenvolvéronse as primeiras distribucións de gran dimensión, como os sistemas BSD (na Universidade de Berkeley en California) e, máis tarde, os System III e System V (nos Bell Labs).

En 1977, a AT&T comezou a fornecer UNIX para institucións comerciais. A abertura do mercado comercial para UNIX debe moito a Peter Weiner - científico de Yale e fundador da *Interactive System Corporation*. Weiner conseguiu da AT&T, entón xa espida do seu monopolio nas comunicacións e libre para actuar no mercado de software, licenza para migrar e comercializar UNIX para o computador Interdata 8/32 para contorno de escritorio. O UNIX saía da liña das máquinas PDP, da Digital Equipment Corporation (DEC), demostrando a relativa facilidade de migración (transporte) para outros computadores, e que, en parte, debeuse ao uso da linguaxe C. O éxito da Interactive de Weiner co seu produto probou que UNIX era vendíbel e encoraxou a outros fabricantes a seguiren o mesmo curso. Iniciábase a abertura do chamado mercado UNIX.

Coa crecente oferta de microcomputadores, outras empresas migraron o UNIX para novas máquinas. Debido á dispoñibilidade das fontes do UNIX e á súa simplicidade, moitos fabricantes alteraron o sistema, xerando variantes personalizadas a partir do UNIX básico licenciado pola AT&T. De 1977 a 1981, a AT&T integrou moitas variantes no primeiro sistema UNIX comercial chamado System III. En 1983, após engadir varios melloramentos ao System III, a AT&T presentaba o novo UNIX comercial, agora chamado System V. Hoxe en día, o UNIX System V é o padrón internacional de feito no mercado UNIX, constando das licitacións de compra de equipamentos de grandes clientes na América, Europa e Asia.

Actualmente, UNIX (ou *nix) é o nome dado a unha grande familia de Sistemas Operativos que comparten moitos dos conceptos dos Sistemas UNIX orixinais, sendo todos eles desenvolvidos consonte a padróns como o POSIX (Portable Operating System Interface) e outros. Algúns dos sistemas operativos derivados do UNIX son: BSD (FreeBSD, OpenBSD e NetBSD ), Solaris (anteriormente coñecido por SunOS), IRIX, AIX, HP-UX, Tru64, Linux (nas súas centenas de distribucións), Mac OS X (baseado nun kernel Mach BSD chamado Darwin ). Existen máis de corenta sistemas operativos *nix, desde celulares a supercomputadores, de reloxos de pulso a sistemas mainframe.

## Características 
### Sistema operativo multitarefa 
Multitarefa significa executar unha ou máis tarefas ou procesos simultaneamente. En verdade, ter varios procesos en execución significa dicir que son executados secuencialmente de forma tan rápida que todos eles parecen estar sendo executados simultaneamente. O UNIX escala a execución deles e resérvalles recursos do computador (intervalo de tempo de procesamento, espazo en memoria RAM e un espazo no disco ríxido).

O UNIX é un sistema operativo de multitarefa preventiva. Iso significa que, cando se esgota un determinado intervalo de tempo (chamado cuanto), o UNIX suspende a execución do proceso, salva o seu contexto (informacións necesarias para a execución do proceso) para que poida ser retomado posteriormente, e coloca en execución o próximo proceso da fila de espera. O UNIX tamén determina cando será executado cada proceso, a duración da súa execución e a súa prioridade sobre os outros.

A multitarefa fai non só que o conxunto de tarefas sexa executado máis rapidamente, mais tamén que o usuario e o computador fiquen libres para realizaren outras tarefas co tempo economizado.

### Sistema operativo multiusuario 
Unha característica importante do UNIX é ser multiusuario. Bovet e Cesatí definen un sistema multiusuario como "aquel capaz de executar, concorrente e independentemente, varias aplicacións pertencentes a dous ou máis usuarios". O UNIX posibilita que varios usuarios usen un mesmo computador simultaneamente, xeralmente por medio de terminais. Cada terminal componse dun monitor, un teclado e, eventualmente, un rato. Varios terminais poden ser conectados ao mesmo computador nun sistema UNIX. Hai algúns anos eran usadas conexións serie, pero actualmente é máis común o uso de redes locais, principalmente para o uso de terminais gráficos (ou terminais X), usando o protocolo XDMCP.

O UNIX xestiona os pedidos que os usuarios fan, evitando que un interfira con outros. Cada usuario posúe dereitos de propiedade e permisos sobre ficheiros. Calquera ficheiro modificado polo usuario conservarán eses dereitos. Programas executados por un usuario común estarán limitados en termos de a cales ficheiros poderán acceder.

O sistema UNIX posúe dous tipos de usuarios: o usuario root (tamén coñecido como superusuario, ou admin), que posúe a misión de administrar o sistema, podendo manipular tódolos recursos do sistema operativo; e os usuarios comúns, que posúen dereitos limitados.

Para que o sistema opere adecuadamente en modo multiusuario, existen algúns mecanismos: (i) un sistema de autenticación para identificación de cada usuario (o programa login, p.ex., autentica o usuario verificando unha base de dados, normalmente gardada no arquivo /etc/passwd); (ii) sistema de arquivos con permisións e propiedades sobre arquivos (os dereitos anteriormente citados); (iii) protección de memoria, impedindo que un proceso de usuario acceda a dados ou interfira con outro proceso. Ese último mecanismo é implementado coa axuda do hardware, que consiste na división do ambiente de procesamento e memoria en modo supervisor (ou modo kernel) e **modo usuario**.

## Estrutura 
miniatura| 
Un sistema UNIX consiste, basicamente, en dúas partes:

* **kernel ** - o núcleo do sistema operativo, a parte que se relaciona directamente co hardware, e que se executa nun espazo de memoria privilexiado. Axenda procesos, xestiona a memoria, controla o acceso a arquivos e a dispositivos de hardware (estes, por medio dos controladores de dispositivo - *drivers* - e interrupcións). O acceso ao kernel, polas aplicacións, é feita por chamadas ao sistema, que son funcións fornecidas polo kernel; esas funcións son acesas polas bibliotecas de sistema (LibC).
* **programas de sistema** - son aplicacións, que se executan en espazos de memoria non privilexiados, e que fan a interface entre o usuario e o kernel. Consisten, principalmente, en:

::* **Conxunto de bibliotecas C** (LibC)

::* **Shell** - un ambiente que permite que o usuario dixite comandos.

::* **Programas utilitarios diversos** - son programas usados para manipular ficheiros, controlar procesos etc.

::* **Ambiente gráfico** (GUI) *graphics user interface* - eventualmente utilízase tamén un ambiente gráfico para facilitar a interacción do usuario co sistema.

Nun sistema UNIX, o espazo de memoria utilizado polo kernel é denominado espazo do kernel ou supervisor (*kernel space*); a área de memoria para os outros programas é denominada espazo do usuario (*user space*). Esa separación é un mecanismo de protección que impide que programas comúns interfiron co sistema operativo.

### Procesos 
Un proceso, na visión máis simple, é unha instancia dun programa en execución. Un programa, para ser executado, debe ser cargado en memoria; a área de memoria utilizada é dividida en tres partes: código (*text*), dados inicializados (*data*) e pila (*stack*).

Por ser un sistema multitarefa, o UNIX utiliza unha estrutura chamada táboa de procesos, que contén informacións sobre cada proceso, tales como: identificación do proceso (PID), dono, área de memoria utilizada, estado (*status*). Apenas un proceso pode ocupar o procesador en cada instante - o proceso encóntrase no estado "executando" (*running*). Os outros procesos poden estar "prontos" (*ready*), agardando na fila de procesos, ou entón están "durmindo" (*asleep*), esperando algunha condición que permita a súa execución.

Un proceso en execución pode ser retirado do procesador por dúas razóns: (i) necesita accesar algún recurso, facendo unha chamada ao sistema - neste caso, após a súa retirada do procesador, o seu estado será alterado para "durmindo", ata que o recurso sexa liberado polo kernel; (ii) o kernel pode interromper o proceso (preempción) - neste caso, o proceso irá para a fila de procesos (estado "pronto"), agardando nova oportunidade para executar - ben porque a porción de tempo esgotouse, ben porque o kernel necesita realizar algunha tarefa.

Existen catro chamadas ao sistema principais asociadas a procesos: fork, exec, exit e wait. fork é usada para criar un novo proceso, que irá executar o mesmo código (programa) do programa chamador (proceso-pai); exec irá determinar o código a ser executado polo proceso chamado (proceso-fillo); exit termina o proceso; wait fai a sincronización entre a finalización do proceso-fillo e o proceso-pai.

### Sistema de arquivos 
Sistema de arquivos é unha estrutura lóxica que posibilita o almacenamento e recuperación de arquivos. No UNIX, os arquivos son contidos en directorios (ou cartafoles), os cales son conectados nunha árbore que comeza no directorio raíz (designado por */*). Mesmo os arquivos que se encontran en dispositivos de almacenamento diferentes (discos ríxidos, disquetes, CDs, DVDs, sistemas de arquivos en rede) precisan ser conectados á árbore para que o seu contido poida ser accesado. Cada dispositivo de almacenamento posúe a súa propia árbore de directorios.

O proceso de conectar a árbore de directorios dun dispositivo de almacenamento á árbore de directorios raíz é chamado "montar dispositivo de almacenamento" (montaxe) e é realizado por medio do comando mount. A montaxe asocia o dispositivo a un subdirectorio.

#### Estrutura de directorios 
A árbore de directorios do UNIX é dividida en varias ramificacións menores e pode variar dunha versión a outra. Os directorios máis comúns son os seguintes:

:`**/**` — Directorio raíz - este é o directorio principal do sistema. Dentro del están todos os directorios do sistema.

:`**/bin**` — Contén arquivos programas do sistema que son usados con frecuencia polos usuarios.

:`**/boot**` — Contén arquivos necesarios para a inicialización do sistema.

:`**/dev**` — Contén arquivos usados para accesar dispositivos (periféricos) existentes no computador.

:`**/etc**` — Arquivos de configuración de seu computador local.

:`**/home**` — Directorios contendo os arquivos dos usuarios.

:`**/lib**` — Bibliotecas compartidas polos programas do sistema e módulos do kernel.

:`**/mnt**` — Directorio de montaxe de dispositivos.

:`**/mnt/cdron**` — Subdirectorio onde son montados os CD. Após a montaxe, o contido do CD se encontrará dentro deste directorio.

:`**/mnt/floopy**` — Subdirectorio onde son montados os disquetes. Após a montaxe, o contido do disquete se encontrará dentro deste directorio.

:`**/proc**` — Sistema de arquivos do kernel. Este directorio non existe, é colocado aquí polo kernel e usado por diversos programas.

:`**/root**` — Directorio do usuario root.

:`**/sbin**` — Directorio de programas usados polo superusuario (root) para administración e control do funcionamento do sistema.

:`**/tmp**` — Directorio para almacenamento de arquivos temporais criados por programas.

:`**/usr**` — Contén a meirande parte dos programas. Normalmente accesíbel soamente como lectura.

:`**/var**` — Contén a meirande parte dos arquivos que son gravados con frecuencia polos programas do sistema.

## Particularidades 
Un sistema UNIX é orientado a arquivos, case todo nel é arquivo. Os seus comandos son en verdade arquivos executábeis, que son encontrados en lugares previsíbeis na súa árbore de directorios, e ata mesmo a comunicación entre entidades e procesos é feita por estruturas parecidas con arquivos. O acceso a arquivos é organizado a través de propiedades e proteccións. Toda a seguranza do sistema depende, en gran parte, da combinación entre as propiedades e proteccións definidas nos seus arquivos e as súas contas de usuarios.

### O problema do ano 2038 
UNIX conta o valor do tempo do sistema como o número de segundos a partir da media noite do 1 de xaneiro de 1970 (a "UNIX Epoch"). Este valor de tempo é almacenado en variables de tipo `time t`, que se definiu como "enteiro con signo, de 32 bits". O 19 de xaneiro de 2038, este valor de tempo acadará o valor binario dun 1 seguido de 31 ceros (`10000000000000000000000000000000`), o que implicará o reseteo do tempo ao ano 1901 ou ao 1970, dependendo de como trate a implementación o bit de signo (o 1 máis á esquerda). Xa que moitas aplicacións utilizan as bibliotecas do sistema operativo para o cálculo de datas futuras, o impacto disto pódese notar moito máis cedo que 2038; así, existe o risco de que as hipotecas a 30 anos se calculen de forma incorrecta a partir do ano 2008.

Posto que as datas anteriores a 1970 moi raramente se representan en tempo UNIX, unha posible solución que é compatible co formato de 32 bits existente sería redefinir o `time_t` como "enteiro **sen** signo, de 32 bits", aínda que isto soamente pospoñería o problema ata o 7 de febreiro do 2106, e implicaría a revisión de todas as implementacións do tratamento de valores de time_t.
Algunhas versións de UNIX xa tratan isto. Por exemplo, en Solaris de 64-bits, o `time_t` usa 64 bits, permitindo chegar a 292.000 millóns de anos.

## Aplicacións 
O UNIX permite a execución de paquetes de software de aplicación para apoio das diversas actividades empresariais. Entre estes paquetes destácanse:

* xeradores gráficos 
* planillas electrónicas 
* procesadores de textos 
* xeradores de aplicacións 
* linguaxes de 4° xeración 
* bases de dado

O UNIX posúe recursos de apoio á comunicación de dados, que proporcionan a súa integración con outros sistemas UNIX, e ata con outros sistemas operativos distintos. A integración con sistemas heteroxéneos permite as seguintes facilidades:

* compartimento de recursos e informacións 
* transferencia de informacións 
* comunicación entre usuarios remotos 
* submisión de programas para seren executados en computadores remotos 
* utilización dos terminais dunha máquina UNIX como terminais doutras máquinas remotas, mesmo con sistemas operativos distintos.

Para última, o UNIX ofrece un ambiente integrado e amigábel, orientado á xestión automatizada de escritorio, con servizos que atenderán ás seguintes áreas:

* arquivo electrónico de informacións 
* procesador de documentos 
* axenda e calendario 
* calculadora 
* correo electrónico

## Ambiente gráfico do UNIX 
### X Window System 
Alén do *shell *, o UNIX soporta interface gráfica de usuario. Nas primeiras versións do UNIX as interfaces do usuario eran baseadas apenas en caracteres (modo texto) e o sistema compúñase apenas do *kernel*, de bibliotecas de sistema, do *shell* e dalgunhas outras aplicacións. As versións máis recentes do UNIX, alén de manteren o *shell* e os seus comandos, inclúen o X Window System que, grazas ao xestor de exhibición e ao xestor de xanelas, posúe unha interface atrainte e intuitiva que aumenta en moito a produtividade do usuario.

Desenvolvido no MIT (Massachusetts Institute of Technology), o X Window System (tamén pode ser chamado X-window) tornouse o sistema gráfico do UNIX. O X-window funciona como xestor de exhibición e por si só, non fai moita cousa. Para termos un ambiente gráfico produtivo e completo, precisamos tamén dun xestor de xanelas.

O xestor de xanelas proporciona ao ambiente gráfico a aparencia e as funcionalidades esperadas incluíndo as bordas das xanelas, botóns, truques de *rato*, menús etc. Como no sistema UNIX o xestor de exhibición (X Window System) está separado do xestor de xanelas, dicimos que o seu ambiente gráfico é do tipo cliente-servidor. O X-window funciona como servidor e interactúa directamente co *rato*, o teclado e o vídeo. O xestor de xanelas funciona como cliente e aprovéitase dos recursos dispoñibilizados polo X-window.

Debido a que en UNIX o xestor de exhibición (X-window) está separado do xestor de xanelas, isto tornou posíbel o xurdimento de decenas de xestores de xanelas diferentes. Os xestores de xanelas máis comúns no mundo UNIX son o Motif, Open Look, e o CDE. Tamén existen outros xestores de xanelas que son bastante utilizados no UNIX, principalmente nos sistemas Unix-like (clons do UNIX sen posuír a marca UNIX®). Son: KDE, Gnome, FVWM, BlackBox, Enlightenment, Window Maker etc.

## Notas
## Véxase tamén 
### Outros artigos 
* Linux
* Solaris
* Unix-like

### Ligazóns externas 
* Historia UNIX Árbore e cronoloxía das familias UNIX
* The UNIX Guru Universe 
* The UNIX Heritage Society
* The Creation of the UNIX Operating System
* The Open Group UNIX System Homepage
* The UNIX Acronym List
* SDF Public Access UNIX System
* Unix and Linux Forums
* UNIX Power