UNIX: Diferenzas entre revisións

Contido eliminado Contido engadido
Lameiro (conversa | contribucións)
corrixo *alguns e outros
m Arranxos varios
Liña 26:
 
== 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|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 [[computador]]es); 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 ambicioso, 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 1970|anos 70]] e [[anos 1980|80]] desenvolvéronse as primeiras distribucións de gran dimensión, como os sistemas [[BSD]] (na [[Universidade de Berkeley]] na [[California]]) e, máis tarde, os [[System III]] e [[System V]] (nos [[Bell Labs]] ).
 
En [[1977]], a AT&T comezou a fornecer o UNIX para institucións comerciais. A abertura do mercado comercial para o 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 o UNIX para o computador [[Interdata 8/32]] para [[ambiente 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 o UNIX era vendíbel e encoraxou 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 [[código fonte|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: [[Berkeley Software Distribution|BSD]] ([[FreeBSD]], [[OpenBSD]] e [[NetBSD]] ), [[Solaris (sistema operativo)|Solaris]] (anteriormente coñecido por [[SunOS]]), [[IRIX]], [[Advanced Interactive eXecutive|AIX]], [[HP-UX]], [[Tru64]], [[Linux]] (nas súas centenas de distribucións), [[Mac OS X]] (baseado nun [[kernel Mach]] [[Berkeley Software Distribution|BSD]] chamado [[Darwin (sistema operativo)|Darwin]] ). Existen máis de corenta sistemas operativos *nix, desde celulares a [[supercomputador]]es, de reloxos de pulso a sistemas [[mainframe]].
Liña 46:
=== 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 escalona 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 preemptiva. 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 de 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 permisións sobre arquivos. Calquera arquivos modificados polo usuario conservarán eses dereitos. Programas executados por un usuario común estarán limitados en termos de a cales arquivos poderán acceder.
 
O sistema UNIX posúe dous tipos de usuarios: o usuario root (tamén coñecido como superusuario), que posúe a misión de administrar o sistema, podendo manipular todos os 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 <tt>login</tt>, p.ex., autentica o usuario verificando unha base de dados, normalmente gardada no arquivo <tt>/etc/passwd</tt>); (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 ==
[[Ficheiro:unix-kernel.png|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 [[chamada ao sistema|chamadas ao sistema]], que son funcións fornecidas polo kernel; esas funcións son dispoñibilizadas 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)
* '''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:
 
::* '''Shell''' - un ambiente que permite que o usuario dixite comandos.
::* '''Conxunto de bibliotecas C''' (LibC)
 
::* '''Programas utilitarios diversos''' - son programas usados para manipular arquivos, controlar procesos etc.
::* '''Shell''' - un ambiente que permite que o usuario dixite comandos.
 
::* '''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.
::* '''Programas utilitarios diversos''' - son programas usados para manipular arquivos, controlar procesos etc.
 
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.
::* '''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: <tt>fork</tt>, <tt>exec</tt>, <tt>exit</tt> e <tt>wait</tt>. <tt>fork</tt> é usada para criar un novo proceso, que irá executar o mesmo código (programa) do programa chamador (proceso-pai); <tt>exec</tt> irá determinar o código a ser executado polo proceso chamado (proceso-fillo); <tt>exit</tt> termina o proceso; <tt>wait</tt> fai a sincronización entre a finalización do proceso-fillo e o proceso-pai.
Liña 92 ⟶ 91:
=== 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 <tt>mount</tt>. 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:
 
:<code>'''/'''</code> — Directorio raiz - este é o directorio principal do sistema. Dentro del están todos os directorios do sistema.
 
:<code>'''/bin'''</code> — Contén arquivos programas do sistema que son usados con frecuencia polos usuarios.
 
:<code>'''/boot'''</code> — Contén arquivos necesarios para a inicialización do sistema.
 
:<code>'''/dev'''</code> — Contén arquivos usados para accesar dispositivos (periféricos) existentes no computador.
 
:<code>'''/etc'''</code> — Arquivos de configuración de seu computador local.
 
:<code>'''/home'''</code> — Directorios contendo os arquivos dos usuarios.
 
:<code>'''/lib'''</code> — Bibliotecas compartidas polos programas do sistema e módulos do kernel.
 
:<code>'''/mnt'''</code> — Directorio de montaxe de dispositivos.
 
:<code>'''/mnt/cdron'''</code> — Subdirectorio onde son montados os CD. Após a montaxe, o contido do CD se encontrará dentro deste directorio.
 
:<code>'''/mnt/floopy'''</code> — Subdirectorio onde son montados os disquetes. Após a montaxe, o contido do disquete se encontrará dentro deste directorio.
 
:<code>'''/proc'''</code> — Sistema de arquivos do kernel. Este directorio non existe, é colocado aquí polo kernel e usado por diversos programas.
 
:<code>'''/root'''</code> — Directorio do usuario root.
 
:<code>'''/sbin'''</code> — Directorio de programas usados polo superusuario (root) para administración e control do funcionamento do sistema.
 
:<code>'''/tmp'''</code> — Directorio para almacenamento de arquivos temporais criados por programas.
 
:<code>'''/usr'''</code> — Contén a meirande parte dos programas. Normalmente accesíbel soamente como lectura.
 
:<code>'''/var'''</code> — Contén a meirande parte dos arquivos que son gravados con frecuencia polos programas do sistema.
Liña 144 ⟶ 143:
== 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
Liña 151 ⟶ 150:
* 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
Liña 159 ⟶ 158:
* 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 de outras máquinas remotas, mesmo con sistemas operativos distintos.
 
Para última, o UNIX ofrece un ambiente integrado e amigábel, voltado para a xestión automatizada de escritorio, con servizos que atenderán ás seguintes áreas:
 
* arquivo electrónico de informacións
Liña 167 ⟶ 166:
* 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 seus comandos, inclúen o [[X Window System]] que, grazas ao xestor de exhibición e ao [[xestor de xanela]]s, posúe unha interface atraente e intuitiva que aumenta en moito a produtividade do usuario.
 
Desenvolvido no [[Massachusetts Institute of Technology|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.