Sistemas Operacionais - O Unix

Sistemas Operacionais: O UNIX
Olá a todos,
Para iniciar, disponibilizo abaixo, um texto (desconheço a fonte, para dar a devida referência, encontrei-o em um antigo backup, provavelmente não o desenvolvi 100%), um pouco sobre o UNIX....


Sistema Operacional UNIX

Um sistema operacional é um programa que gerencia os recursos de um computador. Sistemas operacionais enviam informações aos dispositivos de comunicação, gerenciam o espaço de armazenamento em dispositivos de armazenamento de massa, carregam informações na memória e assim por diante. Em sistemas de computadores que permitem várias pessoas utilizarem o sistema simultaneamente, o sistema operacional arbitra as várias solicitações para distribuir os recursos do computador justa e eficazmente.

O sistema UNIX é um sistema operacional moderadamente complexo. É muito mais simples do que os sistemas operacionais que rodam em maxicomputadores, mas possui mais capacidade do que a maioria dos sistemas operacionais que rodam em microcomputadores. Por exemplo, o sistema UNIX permite rodar vários programas simultaneamente.


Tempo Compartilhado
Tempo compartilhado é uma das técnicas que foram desenvolvidas para compartilhar o computador entre vários usuários. O objetivo do tempo compartilhado é dar a cada usuário a ilusão do uso exclusivo da máquina. O tempo compartilhado funciona porque os computadores modernos podem processar milhões de informações por segundo. Com esta taxa, um computador é capaz de destinar milhares de operações às suas tarefas, milhares aos seus vizinhos e outros milhares à função de coordenar tudo isto - tudo num único segundo.



Em alguns sistemas de computadores, espera-se até que o computador esteja pronto para executar os programas. Entretanto, em sistemas de computadores interativos, o computador sempre está aguardando para iniciar a execução de um programa. Quando pedimos ao computador para executar um programa ele começa a rodá-lo imediatamente; o computador trabalha diligentemente nele até que esteja terminado. O computador pode, neste momento, fazer algumas outras operações simultaneamente, mas, basicamente, seu programa começa tão logo você dá o comando e o computador continua progredindo.

O tempo compartilhado funciona dividindo-se cada unidade de tempo em um número de partes. Cada programa sendo executado recebe uma parte do tempo. Quando mais programas estão sendo executados, cada programa recebe uma parte menor do que quando somente uns poucos programas estão rodando. Considerando que os computadores são dispositivos rápidos, eles podem mudar rapidamente de uma tarefa para outra, dando a impressão de que o computador está desempenhando muitas tarefas simultaneamente. Na verdade, o computador está progredindo em uma tarefa e daí passando a outra e assim por diante.

Alguns sistemas de tempo compartilhado tornam-se muito ineficazes quando são sobrecarregados. A ineficiência aparece quando a demanda é tanta que o computador gasta todo o seu tempo mudando de programas e muito pouco tempo realmente executando-os.  



Acionadores de Dispositivos ( Device Drives)
Outro  componente da arquitetura UNIX é o acionador de  dispositivo. Um acionador de  dispositivo é um software que possibilita  a transmissão de dados entre um  dispositivo particular (ou classe  de dispositivo) e a memória do computador. Os  acionadores de  dispositivos são controlados pelo núcleo e, de fato, tornam-se  parte do núcleo durante a partida do sistema. Alguns acionadores  de dispositivo  podem ser acrescentados ao núcleo após o sistema  já estar rodando, e há até  mesmo outros que podem ser removidos  sem a necessidade de dar nova partida no  sistema.
Os  acionadores de dispositivo do DOS são equivalentes  aos acionadores de  dispositivos do UNIX, pelo menos conceitualmente.  A maneira como os acionadores  de dispositivos do UNIX são controlados  pelo núcleo e o modo como se comportam  são bem diferentes.


Comunicação Interprocesso no UNIX

Em  ambientes multitarefa em que vários processos rodam  concorrentemente, mais cedo  ou mais tarde tornam-se necessário  fazer com que se comuniquem, especialmente  quando múltiplos processos  executam todas partes importantes de uma tarefa  maior, trabalhando  juntos. O enfoque dos múltiplos processos concorrentes é mais  de se desejar do que o enfoque convencional de programas monolíticos  (usado no  alvorecer dos grandes computadores de grande porte).
Programas menores são mais facilmente escritos, mais facilmente  mantidos,  e mais facilmente depurados. Eles podem tornar-se altamente  especializados de  modo a reduzir ou eliminar a duplicidade entre  módulos. Um exemplo de processos  cooperativos é quando um processo  servidor se comunica com vários processos  clientes, como acontece  nas aplicações com X Windows.
Quando múltiplos  processos estão rodando e cooperando uns com os outros,  eles  precisam compartilhar dados. Por exemplo arquivos podem ser compartilhados  entre processos, mas isso pode ser ineficiente à medida que aumenta  a demanda  pelo arquivo. Por essa razão o UNIX system V provê  uma variedade de métodos de  comunicação interprocesso. Os mais  amplamente usados desses métodos são os  sinais e os dutos (também  chamados FIFOs).



O Núcleo

Certas funções de sistemas operacionais são necessárias muitas vezes a cada segundo. Por exemplo, a parte do sistema UNIX que se envolve na mudança de um programa para outro (tempo compartilhado) é solicitada muitas vezes a cada segundo. No sistema UNIX todas as fuunções que são necessárias de imediato são mantidas constantemente na memória. A parte residente na memória de um sistema operacional é chamada de núcleo.

A  arquitetura do sistema operacional do UNIX distribui  certas funcionalidades para  diferentes componentes. Como ambiente  DOS, o núcleo do UNIX é o coração do  sistema operacional.  Ele executa funções chaves como gerenciamento de memória e  de  processos, e também controla o sistema de arquivo hierárquico,  para mencionar  umas poucas.
O  núcleo  mantém consistência no sistema de arquivos tratando tudo como  arquivo. No  UNIX, o núcleo vê os arquivos como fluxos de bytes,  independentemente de sua  origem ou destino. (Os diretórios do  sistema de arquivo hierárquico são apenas  arquivos comuns que  contêm informações especiais).

Também a segurança, inexistente em sistema DOS (mesmo  no OS/2), é  controlada pelo núcleo. Usuários e processos somente  podem acessar dados de  acordo com um bem definido conjunto de  permissões e regras que o núcleo faz  vigorar. Essencialmente,  o núcleo é um tipo de motor do sistema UNIX.
As  principais  características do UNIX são:
*  Controlar  a execução dos programas ou softwares aplicativos;
*  Gerenciar o uso de um processador;
*  Gerenciar  a memória principal e a memória secundária, também chamada  SWAP;
*  Gerenciar o uso dos periféricos.

Muitas funções de sistemas operacionais são necessárias ocasionalmente, tal como a capacidade de transportar alguma informação de um dispositivo de armazenamento de massa para outro. Estes tipos de funções são fornecidos por utilitários, programas padrões os quais são solicitados de acordo com a demanda dos usuários. No sistema UNIX é fácil incrementar o estoque de utilitários simplesmente escrevendo um programa novo e útil.

Em muitos sistemas operacionais, o núcleo contém muitas características. O sistema UNIX tenta dotar o núcleo de características relativamente novas para que a maioria das funções dos sistemas operacionais possa ser fornecida por programas utilitários.




LINHA DO TEMPO DO UNIX e "devirados":


Programas

Um programa é uma sequência de instruções que o computador segue para alcançar um certo resultado. Quando um programa não está sendo executado, a sequência de instruções está armazenada num dispositivo de armazenamento de massa (normalmente um disco). Para rodar o programa, uma cópia das instruções deve estar carregada na memória.

Enquanto um programa estiver sendo executado no sistema UNIX, ele é chamado de processo. Se várias pessoas estiverem rodando o mesmo programa mais ou menos ao mesmo tempo, então haverá vários processos mas somente um programa.




Shell

O shell é um dos programas mais importantes do sistema UNIX. Ele é um programa interativo. Pode-se controlar o shell através de comandos que o shell interpreta (decodifica) e executa. Portanto, o nome técnico do shell é interpretador de comandos.

A função de um interpretador de comandos é executar os comandos que forem inseridos. Ou seja, ao ser inserido um nome de comando ou programa, o shell fará com que este seja executado pelo sistema UNIX.

Em muitos sistemas o interpretador de comandos é uma parte da estrutura interna do sistema operacional. No sistema UNIX, entretanto, o shell é somente um programa comum, semelhante a qualquer outro programa que rode no sistema UNIX. A única coisa que é especial sobre o shell é o fato de ele ser central à maioria das interações com o sistema UNIX. Se você for um usuário comum, então passará muito tempo inserindo comandos. O shell tem muitas características que podem ser usadas para aumentar sua eficácia.

O sistema UNIX é, na realidade, uma ferramenta para o gerenciamento de informações. O poder do sistema UNIX provém de sua capacidade de permitir que programas rodem juntos para produzirem a informação desejada. Na maioria dos computadores cada programa é considerado um mundo dentro dele mesmo. No sistema UNIX quase todos os programas são ferramentas simples que podem ser combinadas com outros programas para produzirem ferramentas mais poderosas.

Além de ser um interpretador de comandos, o shell também é uma linguagem de programação. Amaioria dos usuárioss ignora as características de linguagem de programação do shell, simplesmente porque não são programadores de computadores.


O  shell do UNIX é o contato principal  para desenvolvedores e usuários já que ele  fica ente eles e  as partes internas da máquina. O shell é uma parte integral do  sistema UNIX, projetada para permitir que usuários se comuniquem  com ele em  termos que possam entender. Ele é uma interface muito  flexível, poderosa e  programável projetada para executaras instruções  passadas pelo usuário. Essas  instruções podem vir ou de um  teclado de um terminal, de um roteiro do shell  rodando como um  processo, ou pode ser chamado através de uma chamada de sistema  de uma programação de aplicação executando como processo.


Variáveis do Ambiente
O  shell usa  um ambiente conceitualmente similar ao ambiente do shell do DOS.  O  ambiente é uma área da memória que contém uma lista de variáveis  do shell e seus  valores e que é criada para cada usuário quando  a sessão é aberta. Ela pode ser  usada pelo shell ou por processos  para obter os valores das variáveis do shell,  como o percurso  par o diretório base do usuário, informações par computar a  hora  a partir do GMT (Greenwich Mean Time), a ID de usuário de  alguém com sessão em  um terminal e muitas outras coisas.
Há  três tipos de variáveis de ambiente: variáveis de  usuários, variáveis do shell e  variáveis do shell de leitura  somente. Essas são as variáveis que podem ser  declaradas, inicializadas,  lidas e modificadas ou diretamente em uma linha de  comando ou  em um roteiro de shell. Essas variáveis são tradicionalmente vistas  como variáveis do ambiente pela maioria dos usuários, mas, para  ser mais  preciso, elas são variáveis do usuário.
As  variáveis do shell são aquelas declaradas pelo shell  do UNIX, mas que podem ser  acessadas pelo usuário para leitura  e modificação. As variáveis do tipo somente  leitura do shell  também são declaradas pelo shell e podem igualmente ser lidas  pelo usuário, mas não podem ser modificadas por ele.
Isso  não deve ser confundido com o recurso de tornar uma  variável do usuário somente  de leitura. Um usuário pode criar  uma variável de usuário, inicializá-lo com um  valor, torná-la  somente de leitura. Uma vez que a variável tenha sido declarada  somente de leitura, o usuário não pode mudar seu valor.
As  variáveis de ambiente podem ser acrescentadas ao ambiente  do shell do usuário a  qualquer momento, incluindo no arquivo  .profile do usuário, no qual os usuários  tradicionalmente executam  personalização de seu ambiente inicial.


O  Shell  é uma interface de comandos/programas do usuário com o núcleo  do Sistema  Operacional e o Hardware. O Linux possui diversos Shell's  os quais podem ser  trocados quando o usuário bem decidir (ou  tiver permissão para isto). Eles  permitem inclusive a execução  de programas remotos, possuem diferentes funções e  níveis de  segurança. Um dos Shell's padrão do Linux é o "bash" (um dos  mais  usados!). O Shell pode ser traduzido como um interpretador  de comandos. Linux e  Unix são Sistemas Operacionais multitarefa,  em que o usuário pode ter vários  comandos/programas rodando  em um console. O shell permite que comandos/programas  rodem tanto  em background (segundo plano) como em foreground (primeiro plano),  e  permite ainda a execução de consoles virtuais, ou seja, o  usuário pode chamar  quantos comandos/programas quiser que o shell  vai dar conta de interpretar todos  eles e tomar as devidas medidas  para a sua execução.Todos os Shells permitem que  você os programe,  crie arquivos de scripts com comandos do Sistema Operacional,  variáveis,  outros scrips e diversos outros recursos. A programação no Shell  do  Linux/Unix pode ser comparada com os seus programas limitados  de lote do DOS com  extensão .BAT.


Controlar  os periféricos de seu computador. Isto inclui controlar  tudo!  Quem controla os periféricos do computador é o Sistema Operacional,  portanto quando se está dentro de um editor de texto e clica  no botão  "imprimir", o programa passa o teu texto para o Sistema  Operacional e não faz  mais nada. O resto do serviço pesado é  com o Sistema Operacional, que determina  como serão formatados  os seus dados para um formato que o dispositivo de  impressão  entenda. O Linux pode controlar outras coisas, como seu fax/modem,  mouse, scanners, impressoras jato de tinta, laser, matriciais,  drives de CD-ROM  IDE e SCSI, placas SCSI, placas diversas e uma  grande quantidade de periféricos.  O Linux está sendo suportado  por grandes fabricantes de hardware/software, como  IBM, DELL,  Corel/Borland, Oracle e diversos outros, o que lhe permite cada  vez  mais suportar grandes quantidades de periféricos que antes  nem eram suportados  pelo próprio Unix! Se não fosse pelo Sistema  Operacional Linux, muitos  periféricos nunca seriam suportados  pelo Unix, pois foi o Linux que fez a  comunidade internacional  despertar novamente para o Unix.
Gerenciamento  eficiente de memória (RAM, Swap, cache, memória secundária,  etc.).
O  Linux nunca travou desde que foi instalado como servidor de arquivos  na rede da empresa que trabalho e isto já vai fazer um ano!!!.  Este  comportamento de "travar" por mal gerenciamento de memória  só acontece com os  outros sistemas, se não for gerenciada com  cuidado, os aplicativos podem invadir  a área dos outros sistemas.  A verdade é que todo Sistema Operacional está  sujeito a sofrer  erros com problemas de travamento de memória, que podem ser  causados  por falhas de software, hardware e até falhas humanas. Este assunto  é  bastante amplo e não vale a pena ficar defendendo um ou outro,  mas o Linux usa  esquemas de proteção de memória entre processos  que permitem aos programas  executarem sem incomodarem uns aos  outros. O administrador possui várias  ferramentas para monitorar  essas atividades, inclusive podendo matar processos  que estão  rodando com problemas. A quantidade de recursos que o Linux/Unix  possui para gerenciamento de memória (partições, swap, etc.)  é bastante grande.

Gerenciamento do sistema  de arquivos (ext, FAT, HPFS e outros bem  como pontos de montagens,  etc.). O Linux pode trabalhar com diversos tipos de  Sistemas de  Arquivos, como, por exemplo, a FAT e VFAT da Microsoft, HPFS do  OS/2  da IBM, o ext2 que é seu Sistema de arquivos nativo, e diversos  outros (mimix,  xenix, Netware, Venix, PC/IX, Amoeba...).

Gerencimento  de multitarefa de  forma eficiente.
O  Linux possui  um gerenciamento de multitarefa bastante eficiente. Por exemplo:  quando você formata um disquete, sua máquina não fica travada  e você pode estar  recebendo email e escrevendo um texto (como  este aqui!). O Linux tem a  capacidade de escalonar os processos  para a CPU de forma a não prejudicar  nenhum, sem contar que as  novas versões do Kernel do Linux suportam CPUs com  mais de um  processador, cluster e outros recursos que fazem da multitarefa  um  recurso que deve ser explorado com seriedade.

Controlar  processos órfãos,  o ciclo de vida dos processos. Isto tem a  ver com a característica anterior.  Quando um processo é iniciado  no Linux, um processo pai chamado init assume o  controle, controlando  todos os processos que estão rodando. Caso ocorra a morte  de  um processo, o init se encarrega de "enterrá-lo". Caso algum processo  chame  outro processo e o primeiro morra, para que o segundo não  fique órfão, o init se  encarrega de adotá-lo. Init é o pai  dos processos. Por exemplo, é ele o  responsável por enviar um  sinal de término de execução e morte a todos os  processos quando  o sistema entra em fase de desligamento, entre outras  atividades.

Controlar as funções de comunicação  (infra-estrutura de redes,  comunicações seriais e paralelas).  Uma das características mais importantes do  Linux é permitir  a conexão em rede com máquinas Windows. Isto é feito por meio  da suíte de programas Samba, a qual usa o protocolo NetBIOS sobre  TCP/IP. Também  está disponível no Linux um emulador de Netware,  que permite ao Linux se  conectar com redes que estão rodando o quase finado  IPX (o protocolo da Novell).



HISTÓRICO



Sistema operacional Unix foi desenvolvido em 1969 por Ken Thompson pela Bell Laboratories.

Baseado em Multics e escrito originalmente em linguagem simbólica

para o minicomputador PDP-7 DEC; foi rescrito em linguagem C em 1973 por Dennis Ritchie , podendo ser adaptado virtualmente para qualquer computador; Surgiu várias versões de UNIX, entre elas:

System V - AT & T

BSD 4.X - Berkeley Software Distribuition

SunOs - Sun MicroSystem

Ultrix - Dec Station

AIX - IBM, RISC/6000




Características

Sistema Operacional Complexo

Capacidade Multitarefa;

Mais de 200 comandos e programas

Capacidade Multiusuário;

Transportabilidade;

Ampla seleção de potentes programas;

Comunicação e correio eletrônico;

Biblioteca de Softwares explicativos;

Outras Características


Pode-se também construir banco de dados, fazer cálculos, sistemas de gerenciamento de arquivo, com base em poucos comandos sem usar compilador; existe o modo gráfico, chamado X-Windows que é uma espécie de interface com o mouse, tecnicamente semelhante ao Windows.


Estrutura

Kernel: Faz a interface com o hardware, gerencia a memória, a entrada/saída, planeja as tarefas e administra o armazenamento de dados;

Shell: Interface entre o usuário e a máquina, interpretador de comandos, executa programas;

Aplicativos: incorporam capacidades especiais ao sistema operacional


Shell’s


C Shell (CSH)
Versão BSD;
Processamento background e foreground;
History, alias;
Programação parecida com o C; - controle de processos; - prompt %

Bourne Shell (SH)
Padrão do Unix;
Possui as mesmas características do CSH sem a facilidade de history e controle de processos;
Prompt $.

Kernel Shell (KSH)
Comandos mais poderosos;
Prompt #



Sistema de Arquivos
Tudo no UNIX é um arquivo (programas, dados, diretórios, discos impressoras, teclado, mouse, etc.)
Os arquivos estão organizados em uma estrutura hierárquica (diretório e subdiretórios)
Diretórios importantes:

/                               -root
/boot                        -arquivos de boot
/unix ou v/munix      -Kernel
/bin ou /usr/bin        -executáveis principais
/dev                          -dispositivos, arquivos de I/Q
/etc                          -comandos para administração






Proteção de Arquivos

usuário: u, grupo: g, outro: o
permissões de leitura : r, escrita: w, execução: x, sem permissão: -;
Exemplo: -rwxr-xr-x 1 name_user nucc 10916 Jul 10 17:29 .history *
Permissão de leitura, escrita e execução para o proprietário.
Permissão de leitura e execução para grupo.
Permissão de leitura e execução para outros.


Iniciando uma Sessão
AIX Version 3
C Copyrights by IBM and by others 1982, 1993.
login : user_name (seu login)
user_name’s Password: ###### (sua senha)


Terminando uma Sessão
- exit ou logout





Comandos Básicos
- login: inicia uma sessão
- passwd: troca a senha do usuário
- ls: lista o conteúdo de um diretório
- cat: mostra o conteúdo de um arquivo/ une dois arquivos
- more: mostra o conteúdo de um arquivo pausadamente
- cp: copia arquivos
- rm: remove arquivos
- mv: move arquivos
- ln: cria links
- find: procura arquivos por nome 
- mkdir: cria diretórios
- rmdir: remove diretórios
- cd: muda de diretório
- pwd: mostra o diretório corrente
- ps: mostra os processos
- grep: procura strings dentro de arquivo
- compress: compactador padrão UNIX
- uncompress: descompactador padrão UNIX
- clear: limpa a tela
- man: help
- tar: cria backup’s
- df/du: mostra o espaço disponível em disco
- talk: comunicação direta entre dois usuários
- write: envia mensagem a usuário logado
- chmod: muda permissões de arquivos.


Algumas referências / Mais Informações / Links:

http://pt.wikipedia.org/wiki/Unix
http://www.faqs.org/docs/artu/historychapter.html
http://www.bell-labs.com/history/unix/
http://www.ugu.com/sui/ugu/warp.ugu
http://www.unix.com/
http://www.unix.org/

Mais vistos no mês:

As melhores distribuições Linux para 2017

TuxMath - Tux, do Comando da Matemática. Ensino e diversão a crianças.

Teste de Performance de Rede com Iperf

DHCP - Guia Completo

OPNsense - Firewall Open Source

Aula #14 - Os sistemas de arquivos ext2/ext3/ext4

Ophcrack: Descubra todas as senhas do Windows

SSD no linux

Oracle Linux 7.0 Server com Xfce - Instalação e configurações iniciais