Mostrar mensagens com a etiqueta Linux. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Linux. Mostrar todas as mensagens

Comandos Linux

$ ls -la `which ps`
# Mostra a listagem longa do ficheiro do comando ps.

$ id `whoami`
# Mostra a informação sobre o utilizador que efectuou o login.



$ comando1 $(comando2 [-opções])
O comando2 é executado e é o parâmetro de entrada do comando1.

Exemplos:
$ ls -la $(which ps)
# Mostra a listagem longa do ficheiro do comando ps. $ id $(whoami)
# Mostra a informação sobre o utilizador que efectuou o login.



-Cut
Comandos de manipulação de texto





$ cut ficheiro
Permite cortar partes de um ficheiro.
Opções:
[-f] [-d] [-c]
especifica os campos a devolver; especifica o delimitador de campo (por omissão é o TAB); caracteres a devolver.

Exemplo:
$ cut –f1 –d: /etc/passwd
# Mostrar todos os logins registados na máquina (campo número 1)



-Paste
$ paste ficheiro1 ficheiro2 ficheiro3 ...
Junta o conteúdo de ficheiros (pega na 1-a linha de ficheiro1, na 1-a linha de ficheiro2, ..., na 1-a linha de ficheiro n e junta-as numa só, com os campos separados por TAB.

Opções:
[-d]            especifica o delimitador de campo (por omissão é o TAB); [-s]            processa ficheiros de forma sequencial (e não em paralelo).


-
Translate(tr)
$ tr conjunto1 conjunto2
O comando tr (translate) permite a conversão de caracteres do “conjunto1” para o “conjunto2”. Dado que, por omissão, o tr manipula o stdin e o stdout, torna-se necessário recorrer a redireccionamento de entrada/saída caso se pretenda efectuar a operação em ficheiros.

Opções:
[-d]            (delete) apaga caracteres em vez de proceder à substituição; [-s]            (squeeze) elimina repetições.

Exemplos:
$ tr ‘a’ ‘A’ < input.txt > output.txt
# Converte todos os ‘a’ em “A”

 $ tr [a-z] [A-Z] < input.txt > output.txt
# Converte todos as minúsculas em maiúsculas




-Grep
Comandos de extracção de texto
$ grep [opt] [] Procura expressões (palavras, etc.) num ficheiro.

Opções:
[-i]            ignora maiúsculas e minúsculas; [-c]            número de linhas que verificam a condição; [-n]            devolve os números das linhas (bem como as próprias linhas) que verificam a condição; [-v]            inverte a pesquisa, exibindo apenas as linhas que não verificam a condição.

Exemplos:
$ ps aux | grep root
# devolve as linhas de “ps” que contém a palavra “root”

$ ps aux | grep $(whoami)
# devolve as linhas de “ps” que contém o login de quem executa o comando



- Expressões regulares básicas
Em Unix (e em muitos outros ambientes), as expressões regulares (muitas vezes designadas por “regex” na literatura anglo-saxónica) são uma forma poderosa de definir padrões. Iremos de seguida abordar o mecanismo simples de “âncoras”.
Âncoras: permitem indicar que o padrão a pesquisar se encontra no início ou no fim.
O grep (e outros comandos com suporte para regex) suporta as seguintes âncoras:

Opções:
[^]            início de linha; [$]            fim de linha.
Exemplos:
$ ps aux | grep ^root
# devolve as linhas do “ps aux” que **comecem** por “root”

$ seq 100 | grep 0$
# devolve os números de 0 a 99 que **terminam** em 0




Comandos de “message digest”
A designação “message digest” (algoritmos de hash) refere-se à criação de um identificador unívoco (muitas vezes em formato hexadecimal) para a representação do conteúdo de um ficheiro. Existem vários algoritmos de hash, desde o MD5 (Message Digest) e o SHA (Secure Hash Algorithm). Para além da aplicação em criptografia, os messages digests podem ser empregues para a detecção de ficheiros idênticos. No Linux existem os seguintes utilitários para o cálculo de message digests:
md5sum •            sha1sum (e outros tais como “sha224sum”, “sha256sum”)

Exemplos:
$ who > who.txt $ md5sum who.txt
# calcula o “md5sum” de “who.txt”~

$ md5sum $(ls)
# calcula o md5sum de todos os ficheiros do directório corrente

$ ps aux | sha1sum
# calcula o sha1sum da saída produzida pelo comando “ps aux”



Extracção de conteúdos em páginas “html”
Muitas vezes torna-se necessário a extracção de conteúdos em páginas online que se encontram em formato HTML. A extracção da informação pretendida faz-se muitas vezes com recurso a heurísticas.

- Utilitáriowget
$ wget [opt] url
# descarrega (download) conteúdos online via http, ftp ou https O utilitário wget permite o acesso a conteúdos online (através de http, https e ftp).

Opções:
[-c]            continua operação de descarregamento (anteriormente interrompida); [-O ] grava conteúdo para “ficheiro”.

Exemplos:
# Obtém e grava o conteúdo da página inicial de http://informatictips.blogspot.com/

$ wget http://tinyurl.com/ –O osstats.html
# Obtém e grava para “osstats.html” o conteúdo do URL http://tinyurl.com/
Read More... Comandos Linux

Linux Comands 2

1. Visualize, página a página, o conteúdo do ficheiro passwd, existente na directoria /etc.

[user@pc etc]$ more passwd

2. Divida o ficheiro anterior em blocos de 10 linhas, utilizando bdusers- para o nome base do
ficheiro que conterá cada bloco. Certifique-se que todos os ficheiros gerados têm 10 linhas.

[user@pc ~]$ split -l10 /etc/passwd bdusers-

3. Liste o conteúdo de um desses ficheiros e, em seguida, o de todos eles.

[user@pc ~]$ cat bdusers-aa
[user@pc ~]$ cat bdusers-*x

4. Construa, no seu directório, o ficheiro passwd, a partir dos blocos criados anteriormente.

[user@pc ~]$ cat bdusers-* > passwd

5. Liste todas a linhas do ficheiro passwd construido, correspondentes a pessoas que façam
parte do grupo dei99, guardando essa informação num ficheiro de nome so-users.

[user@pc ~]$ ls -la /home | grep dei99 > so-users
[user@pc ~]$ cat passwd | grep 504 > so-users

6. Mostre o 3', 4' e 5' caracteres de todas as linhas so-users e de seguida os 8 primeiros
caracteres.

[user@pc ~]$ cut -c3,4,5 so-users
[user@pc ~]$ cut -c1-8 so-users

7. Mostre a coluna correspondente aos logins, no ficheiro so-users.

[user@pc ~]$ cut -f1 -d: so-users

8. Visualize o conteúdo do ficheiro so-users, de forma a mostrar apenas o login e o nome
completo de cada user.

[user@pc ~]$ cut -f1,5 -d: so-users

9. Repita o exemplo anterior, mas utilize o caracter tab como separador.
Experimente com outros separadores.

[user@pc ~]$ cut -f1 -d\t so-users

10. Redíreccione o output do exemplo 9 para um ficheiro designado pessoas.

[user@pc ~]$ cut -f1,5 -d: so-users > pessoas

11. Vlsualize o ficheiro pessoas, ordenado alfabeticamente pelo login.

[user@pc ~]$ sort +0 -t: pessoas

12. Apresente o ficheiro so-users ordenado pelo UID e em seguida pelo nome
completo do utilizador.

[user@pc ~]$ sort +2n +4 -t: so-users

13. Mostre todas as linhas do ficheiro pessoas que contenham a palavra "Manuel" e em seguida
visualize também o número da linha em que elas se encontram.

[user@pc ~]$ grep -n Manuel pessoas

14. Visualize todas as linhas que contenham um "9" seguido do caracter "4" ou "5".

[user@pc ~]$ cat so-users | grep -wc '9*[4,5]'

15. Liste todas as pessoas cujo login comece por a ou b.

[user@pc ~]$ grep ^[a,b] pessoas

16. Liste todos os nomes completos existentes no ficheiro so-users que contenham a palavra
"Joao" e de seguida aqueles cujo primeiro nome seja "Joao".

[user@pc ~]$ cut -f 5 -d: so-users | grep -i ^joao

17. Liste todos os nomes completos existentes no ficheiro so-users que contenham a palavra
"Santos" e de seguida aqueles cujo último nome seja "Santos".

[user@pc ~]$ cut -f 5 -d: so-users | grep -i Santos

18. Mostre todos os logins do ficheiro so_users que tenham:
- exactamente 4 caracteres
- entre 3 e 4 caracteres
- pelo menos 8 caracteres

[user@pc ~]$ cut -f 1 -d: so-users | cut -b 1-4
[user@pc ~]$ cut -f 1 -d: so-users | cut -b 1-3,1-4
[user@pc ~]$ cut -f 1 -d: so-users | cut -b 1,1-2,1-3,1-4,1-5,1-6,1-7,1-8




Read More... Linux Comands 2

Linux Comands 1

1. Liste os ficheiros da directoria corrente

[user@pc~]$ ls

2.Liste os ficheiros da directoria corrente incluindo os ficheiros começados por ponto(.).

[user@pc ~]$ ls -a

3.Apresente uma listagem detalhada acerca da informação presente na directoria

corrente.
[user@pc ~]$ ls -la

4.Exiba o conteúdo do ficheiro profíle.

[user@pc ~]$ more .bash_profile

5.Liste o conteúdo da directoria /etc, sem sair do directório corrente.

[user@pc ~]$ ls /etc

6.Faça com que o directório /etc passe a ser o directório corrente.

[user@pc ~]$ cd /etc

7.Certifique-se que se encontra no directório /etc e liste os seus ficheiros página a página.

[user@pc etc]$ pwd
[user@pc etc]$ ls | more

8.Liste todos os ficheiros cujo nome comece por p.

[user@pc etc]$ ls p*

9.Liste todos os ficheiros cujo 3º caracter seja um s.

[user@pc etc]$ ls ??s*

10.Liste os ficheiros da directoria home e das subdirectorias que se encontram dentro da mesma,
de uma forma recursiva. Esta informação deve ser colocada num ficheiro de nome lshome.

[user@pc etc]$ ls -R /home

11.Liste os ficheiros da directoria home que comecem por letra maiúscula.

[user@pc etc]$ ls -d /home/[A-Z]*

12.Volte ao seu directório de trabalho

[user@pc /]$ cd /home/user

13.Crie um ficheiro, designado dados_pessoais, onde constem os seus dados pessoais
nomeadamente-. nome, curso, ano do curso, B,I., morada, código postal, telefone, etc.

[user@pc ~]$ cat > dados_pessoais


14.Crie a seguinte árvore de directorias, dentro do seu directório de trabalho sem sair do
directório corrente
./privado
./sala/aulal
./sala/aula2
./local/locall
./local/local2
./local/local3
./lixo


[user@pc ~]$ mkdir ./privado
[user@pc ~]$ mkdir ./sala
[user@pc ~]$ mkdir ./sala/sala1
[user@pc ~]$ mkdir ./sala/sala2
[user@pc ~]$ mkdir ./local
[user@pc ~]$ mkdir ./local/local1
[user@pc ~]$ mkdir ./local/local2
[user@pc ~]$ mkdir ./local/local3
[user@pc ~]$ mkdir ./lixo

15.Faça com que não seja permitido qualquer tipo de acesso (leitura, escrita ou execução), por
outros utilizadores, às directorias privada e local.

[user@pc ~]$ chmod go-rwx ./privado
[user@pc ~]$ chmod go-rwx ./local

16.Faça com que à sub-árvore sala apenas o dono tenha acesso completo e o grupo acesso de
leitura e execução.

[user@pc ~]$ chmod u+rwx ./sala
[user@pc ~]$ chmod g-w+rx ./sala

17.Copie o ficheiro dados_pessoais para a directoria lixo e em seguida remova-o do directório
actual.

[user@pc ~]$ cp dados_pessoais ./lixo
[user@pc ~]$ rm dados_pessoais

18.Mova o ficheiro dados_pessoais da directoria lixo para a directoria privado.
Efectue esta operação com um único comando.

[user@pc ~]$ mv ./lixo/dados_pessoais ./privado/

19.Altere o nome do ficheiro dados_pessoaís para inf_pessoal.

[user@pc ~]$ mv ./privado/dados_pessoais ./privado/inf_pessoal

20.Acrescente a linha "laboratórios x" (sendo x a designação do seu laboratório), ao
ficheiro inf_pessoal, sem recorrer a qualquer editor de texto.

[user@pc ~]$ cat >> ./privado/inf_pessoal
laboratórios i153

21.Efectue a contagem do número de linhas, palavras e caracteres do ficheiro anterior

[user@pc ~]$ wc ./privado/inf_pessoal

22.Mostre as duas primeiras linhas do ficheiro anterior e de seguida as duas últimas.

[user@pc ~]$ head -n2 ./privado/inf_pessoal
[user@pc ~]$ tail -n2 ./privado/inf_pessoal

23.Mostre a 3ª, 4ª e 5ª linha do mesmo ficheiro

[user@pc ~]$ head -n5 ./privado/inf_pessoal | tail -n3

24.Copie a sub-árvore local para a directoria lixo.

[user@pc ~]$ cp -r ./local ./lixo/

25.Remova agora a directoria lixo.

[user@pc ~]$ rm -r ./lixo

26.Crie a directoria lixo e dentro desta um ficheiro começado por '*', que contenha a frase
"Cuidado com o asterisco!". Tente visualizá-lo e depois apagá-lo.

[user@pc ~]$ mkdir lixo
[user@pc ~]$ cat > ./lixo/*
Cuidado com o asterisco!
[user@pc ~]$ more ./lixo/*
[user@pc ~]$ rm ./lixo/*

27.Crie no directório lixo uma ligação para o ficheiro inf_pessoal, com nome my_inf.
Acrescente a este ficheiro a frase "Fim de ficheiro". Mostre o conteúdo do ficheiro inf_pessoal.

[user@pc ~]$ link ./privado/inf_pessoal ./lixo/my_inf
[user@pc ~]$ nano ./lixo/my_inf
[user@pc ~]$ more ./privado/inf_pessoal

28. Verifique o número de ligações que o ficheiro inf_pessoal possui

[user@pc ~]$ stat ./privado/inf_pessoal

29.Copie o ficheiro inf_pessoal para a directoria salal. Crie no seu directório base e
no directório lixo ligações simbólicas, de nome my_inf, para o ficheiro inf_pessoal
existente no directório aulal.

[user@pc ~]$ cp ./privado/inf_pessoal ./sala/sala1
[user@pc ~]$ link ./sala/sala1/inf_pessoal ./my_inf
[user@pc ~]$ link ./sala/sala1/inf_pessoal ./lixo/my_inf

30.Justifique a diferença de tamanhos nas duas ligações simbólicas criadas.

As ligações têm o mesmo tamanho, 119 bytes.

31.Visualize o conteúdo dos ficheiros my_inf. Remova o ficheiro inf_ pessoal existente na
directoria aula1. Tente visualizar novamente o conteúdo de um dos ficheiros anteriores.
O que aconteceu?

[user@pc ~]$ more ./my_inf
[user@pc ~]$ rm sala/sala1/inf_pessoal
[user@pc ~]$ cat my_inf

Nao acontece nada, o ficheiro mantem-se igual

32.Conte o número de ficheiros que existe na directoria /etc, utilizando para isso comandos
Unix.

[user@pc etc]$ ls -a /etc | wc


Read More... Linux Comands 1


Quais os objectivos da multiprogramação em
sistemas operativos? Que implicação tem a multiprogramação na unidade de gestão
de memória?


Principal
objectivo: utilização máxima do processador.


Esta solução torna os sistemas
multiprogramados permitindo que diversos programas estejam simultaneamente
activos, os diversos programas necessitam de estar na memória central para
facilmente se mudar de contexto


 


 


Processos


A comunicação entre processos permite a
partilha de informação entre processos. Que mecanismos existem para conseguir
essa comunicação? O que é comunicação síncrona e assincrona?


Para conseguir a comunicação
entre processos são usados mecanismos como os pipes e a memória partilhada.


Na comunicação sincrona ambos
os processos têm de se encontrar, quando um processo envia uma mensagem é
suspenso até o destinatário a receber. È muito vantajoso pois é de
implementação simples, e é de baixo overhead. Como desvantagem obriga a
execução sincrona mesmo quando esta não é desejada.


Na comunicação assincrona o emissor
não é bloqueado quando não existe nenhum receptor em espera, aumenta o grau de
concorrencia.


O que é um processo e como se caracterizam?
Explique o funcionamento do mecanismo de escalonamento de um sistema
preemptivo.


Um processo é um programa em
execução, tem associado, dados de entrada e de saida, e este encontra-se num
determinado estado.


A gestão de recursos de CPU é
conhecido por escalonamento. A politica de escalonamento define a forma como o
tempo de CPU é repartido pelos vários processos e a ordem com que esta partilha
é reservada.


 


Algoritmos preemptivos (com
preempção) são projectados com base na noção de prioridade. O processo com
maior prioridade na fila de processo READY deverá sempre ser escalonado para a
CPU. Se um processo está em execução na CPU e um novo processo, de maior
prioridade, entra na fila então o processo que ocupa a CPU será retirado.


Os algoritmos com preempção
estão associados com sistemas que utilizam interrupções para forçar a partilha
da CPU. Interrupção involuntária da execução do processo.


Em regra, todos os processos têm obrigação de
libertar explicitamente, antes determinar, todos os recursos que requisitaram
durante a sua execução. Por exemplo, se abriram um ficheiro, têm obrigação de o
fechar de novo, antes de terminarem. Para que servirá então anotar no Process
Control Block (PCB) todos os recursos que o processo vai adquirindo ?


Bloco de Controlo de
Processos(PCB) armazena:


Estado do processo


Contador de programa


Registos do CPU


Informações do despacho do
CPU(escalonador)


Informação de gestão da
memória


Contabilização de utilização
de recursos


Estado dos recursos de I/O


 


A anotação de todos os
recursos que o processo vai adquirindo serve para no caso de o processo não
terminarde forma normal, este não ficar a bçoquear a execução de outros.


Condições que terminam
processos:


Saída normal (voluntaria)


Saída por erro (voluntaria)


Erro fatal (involuntaria)


Killed por outro processo
(involuntaria)


O que é a mudança de contexto entre
processos? Como funciona? Os sistemas operativos multiprogramados necessitam
destes mecanismos?


A partilha do processador
requer um mecanismo de comutação de processos, a que se dá o nome de comutação
de contexto.


Comutação entre dois processos
faz-se através da:


·        
salvaguarda do estado do processo que perde a CPU;


·        
restauração do estado do processo que ganha a CPU.


Comutação deve ser frequente,
mas não exagerada, tem um custo overhead para o sistema.


 


A mudança de contexto entre
processos é realizada por uma parte do escalonador (“context switcher”) que
realiza a multiplexagem da CPU.


A multiplexagem pode ser
executada de forma voluntária pelo processo em execução. Nesse caso o processo “larga” a CPU porque pediu um recurso, podendo a CPU ser
utilizada por outros processos. Requisita o recurso ao gestor de recursos
(Scheduler) e passa ao estado READY (passa ao estado BLOCKED de o recurso não
está disponível). Uma lista de processos nesses estados é criada.


Os procesos podem ser
retirados involuntariamente da CPU porque:


Esgotou o tempo permitido


Existe preempção da CPU por um
processo mais prioritário.


 


Os sistemas operativos
multiprogramadados necessitam destes mecanismos porque executam vários
programas  deforma concorrente, que são mantidos em memória simultaneamente e o
CPU é multiplexado entre eles.


Na avaliação das estratégias
de selecção, os sitemas multiprogramados (“timesharing”) a medida mais comum é
o “response time”


O que é o pseudoparalelismo? Explique o
funcionamento do mecanismo de mudança de contexto entre processos num sistema
preemptivo?


Pseudoparalelismo:


·        
Numa máquina monoprocessador, o
paralelismo não pode ser entendido no sentido estrito:


·        
Em cada instante, apenas um
processo é executado, contudo considerando um intervalo de tempo
suficientemante largo vários processos executaram e progrediram.


·        
Conceptualmente cada processo
possui um CPU virtual.


·        
A mutiplexagem do processador é
feita a nível interno, de acordo com critérios especificados á priori
(multiprogramação).


·        
Sistemas com multiplas actividades
paralelas são designados por sistemas concorrentes.


Algoritmos preemptivos (com
preempção) são projectados com base na noção de prioridade. O processo com
maior prioridade na fila de processo READY deverá sempre ser escalonado para a
CPU. Se um processo está em execução na CPU e um novo processo, de maior
prioridade, entra na fila então o processo que ocupa a CPU será retirado.


Os algoritmos com preempção
estão associados com sistemas que utilizam interrupções para forçar a partilha
da CPU. Interrupção involuntária da execução do processo.


O que é o pseudoparalelismo? Idendifique os
vários estados de um processo e indique as razões pela qual se anota no Process
Block Control
todos os recursos que um processo vai alocando?


Pseudoparalelismo:


·        
Numa máquina monoprocessador, o
paralelismo não pode ser entendido no sentido estrito:


·        
Em cada instante, apenas um
processo é executado, contudo considerando um intervalo de tempo
suficientemante largo vários processos executaram e progrediram.


·        
Conceptualmente cada processo
possui um CPU virtual.


·        
A mutiplexagem do processador é
feita a nível interno, de acordo com critérios especificados á priori
(multiprogramação).


·        
Sistemas com multiplas actividades
paralelas são designados por sistemas concorrentes.


 


Estados de um processo:


RUNNING


BLOCKED


READY


 


Bloco de Controlo de
Processos(PCB) armazena:


Estado do processo


Contador de programa


Registos do CPU


Informações do despacho do
CPU(escalonador)


Informação de gestão da
memória


Contabilização de utilização
de recursos


Estado dos recursos de I/O


A anotação de todos os
recursos que o processo vai adquirindo serve para no caso de o processo não
terminarde forma normal, este não ficar a bçoquear a execução de outros.


Condições que terminam
processos:


Saída normal (voluntaria)


Saída por erro (voluntaria)


Erro fatal (involuntaria)


Killed por outro processo
(involuntaria)


Existem duas variantes do Windows NT: a
server e a workstation. A primeira mais vocacionada para servidora de ficheiros
e de aplicações (server computer) e a segunda orientada para estações de
trabalho pessoais (desktop computer). Sendo este um sistema preemptivo
acha que o timeslice nas duas variantes deverá ser diferente? Justifique


Algoritmos preemptivos (com
preempção) são projectados com base na noção de prioridade. O processo com
maior prioridade na fila de processo READY deverá sempre ser escalonado para a
CPU. Se um processo está em execução na CPU e um novo processo, de maior
prioridade, entra na fila então o processo que ocupa a CPU será retirado.


Os algoritmos com preempção
estão associados com sistemas que utilizam interrupções para forçar a partilha
da CPU. Interrupção involuntária da execução do processo.


 


Sem sistemas que utilizam
interrupções para forçar o abandono da CPU, é dado mais um grau de liberdade na
estratégia de escalonamento.


Neste caso um temporizador
define um intervalo de tempo (“time quantum” ou ”time slice”) que é o tempo de
CPU disponível e correspondente ao intervalo entre interrupções do
temporizador.


Note-se que existindo uma fila
de processos no estado READY e prontos a executar, é possível definir um
escalonamento que optimiza um determinado critério.


 


Sim o timeslice deverá ser
diferente, porque na workstation o utilizador precisa que os processos
respondam mais rapidamente para poder mudar de programa ou aplicação em
execução, no server não será necessário esta rapidez de resposta porque o
utilizador não vai estar a trabalhar directamente na maquina.


Um sistema operativo multi-utilizador deverá
ser preemptivo ou não preemptivo? Justifique.


Um sistema Operativo deverá
ser preemptivo, para possibilitar a interrupção de processos em execução na CPU
para poder ser executado outro processo.


Se um sistema operativo fosse não-preemptivo,
durante a execução de um processo no CPU, este não puderia ser liberado a outro
processo, originando assim que as máquinas ficassem mais lentas.


O acessso directo à memória (DMA) tem
vantagens em operações de transferências de dados de entradas/saídas. Num
sistema operativo preemptivo, que tarefas podem usufruir deste mecanismo?


O sistema de DMA – direct memory access:


-permite a
transferência de grandes quantidades de dados de um modo eficiente


-os dados são
transferidos directamente do buffer do controller para a memória central não
envolve intervenção do CPU


-quando transferência
termina, o CPU recebe interrupção


 


Tarefas de um Sistema
Operativo:


Execução
de Programas
: É necessário realizar um
conjunto de tarefas para a execução de um programa. Instruções e dados têm de
ser carregados em memória, dispositivos de


I/O(Entrada/Saída) e ficheiros
têm de ser inicializados. Mecanismos de partilha prontos.


Acesso
a dispositivos de Entrada/Saída
: Cada
dispositivo de I/O tem o seu conjunto de


instruções, sinais de controlo
e operação. O SO torna transparentes as particularidades dos vários periféricos.


Acesso
controlado a ficheiros
: No caso dos
ficheiros, para além da natureza do dispositivo de I/O, o SO deve permitir ler
ficheiros em vários formatos e protege-los de acordo com o tipo de acesso
permitido aos vários utilizadores.


Criação
de Programas
: O SO disponibiliza
facilidades e serviços, como editores e debuggers, que se encontram na forma de
utilitários que não fazem verdadeiramente parte do SO.


Acesso
ao sistema
: No caso de um sistema
partilhado, deve ser controlado o acesso ao sistema como um todo e
especificamente a cada recurso.


Detecção
de erros e resposta
: O sistema deve
dar resposta a uma grande variedade de erros que podem acontecer tanto no
hardware como no software.


Registo
de parâmetros
: Um bom SO permite
registar estatísticas relativas a vários recursos e monitorizar parâmetros de
desempenho. Esta informação permite o ajuste do sistema aumentando o seu
desempenho.


 


Semáforos


Quando um programa pretende
utilizar um recurso de forma exclusiva (por exemplo, alterar uma determinada
secção de uma base de dados, com a garantia de que mais nenhum outro processo
lê ou altera essa mesma secção), deve assinalar com um semáforo que mais
ninguém deve executar operações sobre esse recurso. Quando o programa termina a
utilização do recurso, deve libertá-lo, apagando o semáforo. O sistema
operativo disponibiliza e verifica os semáforos, garantindo a
exclusão mútua de processos na região crítica.


Quais as vantagens dos semáforos face à
utilização de trincos lógicos? Como funcionam e para que servem? Quais os
problemas que se colocam na utilização de semáforos no tratamento de
acontecimentos assíncronos?



Semaforo


Trinco lógico


Mecanismo de sincronização
que não requer espera activa.

-Baseia-se em duas
primiticas wait e signal que operam sobre uma variavel de forma indivisivel.


-As soluções apresentadas
são complexas para um programador

Desvantagens:

-Um processo que perdeu o
CPU enquanto estava na região crítica deixa o trinco fechado.

-Quando um processo tem que
ficar a espera, ele irá ficar em ciclo a testar a variavel trinco – Espera
Activa


 


Deadlock


O que é um deadlock? Que condições devem ser
prevenidas de forma a evita-lo?


Deadlock caracteriza uma situação
em que ocorre um impasse, ficando dois ou mais processos impedidos de continuar
as suas execuções, ou seja, ficam bloqueados.


Uma maneira de evitar
deadlocks é impedir que ao menos uma das condições para sua existência ocorra:


                Exclusão
mútua: impossível de evitar em geral.


                Aquisição
gradativa de recursos: impossível de evitar.


                Sem preempção:
Evitável.


                Adquirir todos
os recursos antes de começar a executar.


                Se algum
recurso não estiver disponível, liberar todos os recursos que já foram
adquiridos.


                Ineficiente.


 


Modulos


Qual o papel do sistema operativo num sistema
computacional? Enumere os principais módulos que compõem um sistema operativo
moderno justificando.


 


Quais as principais funções (módulos) de um
sistema operativo moderno?


Para
tornar os sistemas operacionais mais fáceis de serem escritos, eles são
construídos como uma série de módulos, cada módulo sendo responsável por uma
função. Os módulos típicos num  SO multiutilizador moderno geralmente são

                Núcleo (Kernel em inglês - também conhecido como
"executivo")

                Gerenciador de processo

                Escalonador (Scheduler, em inglês)

                Gerenciador de arquivo


 


A estrutura dos sistemas operativos tem
evoluído ao longo dos tempos. Qual a estrutura que lhe parece mais adequada no
presente cenário computacional. Justifique explicando a função do kernel e dos
vários módulos.


Função do Kernel:


                chaveamento entre programas

                controle e programação de dispositivo de hardware

                gerenciamento de memória

                gerenciamento de processos

                escalonamento de tarefas

                comunicação entre processos

                processamento de exceções e de interrupção


Função dos Módulos:


Memória/ Endereçamentos


O que é a alocação dinâmica de memória?
Enuncie e explique alguns dos algoritmos utilizados a alocação dinâmica de
memória.


Alocação dinâmica de memória é
uma técnica de gestão de memória, num sistema que suporta alocação dinâmica de
memória, necessita-se de saber quais os blocos livres e os seus tamanhos


Algoritmos utilizados:


First-Fit – pesquisa a lista e
devolve o primeiro bloco livre com dimensão suficiente para satisfazer o pedido


Next-Fit – pequena variação do
first-fit, na qual a pesquisa começa no ponto onde terminou a anterior.


Best-Fit – pesquisa na lista e
selecciona o bloco livre de dimensão mais aproximada da requerida. Mantem uma
lista ordenada pela dimensao de blocos livres.


Worst-Fit – procura na lista o
maior bloco livre, com a intenção de deixar livre um bloco de dimensão
considerável. Mantem uma lista ordenada pela dimensão dos blocos livres.


Quick-Fit – Mantem listas
separadas com os tamanhos requisitados.


O que é endereçamento virtual baseados em
segmentação e quais as razões da sua utilização? Explique o seu funcionamento
recorrendo a gráficos.


Ao segmentarmos o nosso
endereçamento, estamos a dividir funcionalmente os nossos programas em
segmentos lógicos.


O endereçamento virtual cria
um espaço de endereçamento independente e maior que a memória disponivel. Acaba
com a limitação do tamanho dos programas.


A segmentaçao deve ser uosada
para fazer uma Relocação dinâmica, através da tabela de segmentos; Partilha: de
segmentos partilhados; Locação: fragmentação externa; Protecção


 


 


Explique a diferença entre endereçamento real
e endereçamento virtual.


No endereçamento Real os
endereços são gerados pelos programas correspondem directamente aos programas
acedidos na memória.


                Dimensão dos
programas é limitada pela memória fisica.


                Programa só
funciona nos endereços físicos para os quais foram escritos


                Dificulta a
multiprogramação; não é possivel executar simultaneamente dois                                      programas
preparados para correr nos mesmo endereços.


No endereçamento Virtual os
endereços são gerados pelos programas e são convertidos em tempo de execução,
em endereços físicos.


 


É possível optimizar o mecanismo de traduções
de um sistema de endereçamento virtual baseado em segmentação?


É, para evitar a duplicação de
acessos á memoria, são guardados em registos o descritor do segmento em uso,
optimizando o mecanismo de traduções.


Comente a afirmação: “Nos sistemas de
endereçamento virtual baseados em paginação gera-se fragmentação interna”


A fragmentação interna é
gerada quando o bloco lógico do programa corresponde a um conjunt de páginas,
resultando uma fragmentação interna na última página.


 


 


O que é a paginação e quais as razões da sua
utilização? Explique o seu funcionamento. (recorra a gráficos legendados para
melhor elucidar).


Paginação cria um espaço de
endereçamento maior que a dimensão da memória física.


O espaço lógico do
endereçamentonão precisa de ser continuo.


As páginas (blocos) são de
tamanho fixo.


Ao criarmos a paginação
estamos a fazer um endereçamento virtual o que possibilita uma optimização do
mecanismo de traduçoes e a partilha de memória entre processos.


 


 


Varias


A concepção de sistemas operativos pressupõem
uma determinada estrutura. Quais as vantagens e desvantagens dos sistemas
monolíticos, por camadas e cliente/servidor.


Sistemas monolíticos (“The
Big Mess”)


·        
Não existe strutura. SO escrito
como uma colecção de procedimentos, cada um dos quais pode chamar qualquer
outro.


·        
Cada procedimento obedece a uma
espicificação bem definida no que respeita aos parâmetros e resultado.


·        
Não há código escondido. Cada
procedimento é visível por todos os outros, não possuindo uma estrutura
modular.


 


Estrutura Básica


·        
Um programa principal que chama
funções de serviço.


·        
Um conjunto de funções de serviço
que sustentam as chamadas ao SO (system call).


·        
Um conjunto de funções auxiliares
(apoio as funções de serviço).


 


Sistema dividido em camadas


·        
O sistema é estruturado em camadas
hierárquicas.


·        
A modularidade pressupõe que cada
camada apenas use funções e serviços de camadas de níveis inferiores


 


Primeiro exemplo desta
abordagem: THE – Technish Hogeschool Eidhoven


Camada
5: Processos do operador do sistema.


Camada
4: programa do utilizador.


Camada
3: gestão de I/O. Proporciona dispositivos de I/O transparentes e simples ás
camadas superiores.


Camada
2: comunicação entre processos.


Camada
1: gestão da memória.


Camada
0: escalonamento do processador. Comutar entre processos quando correm
interrupções ou timer expira.


 


Sistema cliente/servidor


Tendência dos sistemas
operativos actuais é de mover o máximo de código possível para camadas
superiores.


Remover código ao SO por forma
a simplificar o kernel.


Para obter um serviço (ex.:
leitura de um bloco de um ficheiro) o processo cliente envia um pedido ao
processo servidor.


O kernel encarrega-se das
comunicações entre os clientes e os servidores.


 


Divisão lógica do SO, em
unidades pequenas e de fácil utilização.


O kernel gere as comunicações.


Os servidores correm em modo
utilizador evitando um crash total do sistema na eventualidade de um erro
interno ao servidor.


Vocacionados para sistemas
distribuidos (em rede).



Read More...