Category: sistemas operativos 1

SO1 – Escalonamento – Conceitos e Algoritmos

Escalonamento – Conceitos e Algoritmos

a multiprogramação simples consegue-se com:
dispositivos de memoria secundária e rápida;
boa gestão de E/S por parte do SO
mecanismo de gestão e partilha de memória
mecanismos no SO para partilhar e gerir recursos partilhados na maquina, entre todos os programas que estão em execução

a multiprogramação simples (não preemptiva: que prevê ou antecipa situações),
baseia-se na cedência voluntária (que pode ou não acontecer) do CPU, por parte do programa que está a ser executado

a multiprogramação preemptiva (ou “interactiva” ou “de tempo partilhado”),
o sistema força a cedência do CPU por parte do programa actualmente em execução, passado a CPU a outro programa e posteriormente voltando ao programa inicial

exemplo de algortimos preemptivos:
fim de quantum (interrupção do relógio, tempo partilhado)
processo mais prioritário
processo mais curto

objetivos do escalonamento preemptivo:
permitir que processos prioritários possam reagir rapidamente a um acontecimento
exemplo: windows NT, já o MSDOS é não preemptivo

exemplo de algortimos nao preemptivos:
o programa que terminou
o programa pediu acesso a um semáforo que estava fechado
o programa requisitou uma operação de E/S demorada

assim a preempção pode ser baseada em:
_intervalos de tempo fixo (um bocado de tempo à vez de todos)
_prioridade (o mais importante primeiro)
_critérios de performance (o mais pequeno/rápido primeiro)

o escalonamento multiprogramado simples:
consegue aproveitar esses tempo de E/S sem garantia que um programa impede outros de serem executados
aproveita melhor o CPU do que o monoprocessamento

o escalonamento multiprogramado:
o sistema consegue aproveitar os tempos de I/O de um programa para executar instruções de outros programas
existe a cedência do CPU

mas se existir um escalonamento preemptivo, baseado em intervalo de tempo, o utilizador obtém a garantia que todos os programas têm oportunidade de execução concorrente

Evolução dos sistemas operativos e do escalonamento
processamento em série (eniac)
processamento em lote on-line (uso de cartões perfurados junto do CPU, só existe um processo em cada instante)
processamento em lote off-line (uso de computadores auxiliares para ler os cartões perfurados, falhas na sincronização entre estes e o CPU, só existe um processo em cada instante)
processamento em lote o spooling (uso de mecanismos de interrupção, uso de discos)
multiprogramação (são sistemas de lote multi-programados ou concorrentes) e interactividade (são sistemas de tempo partilhado/time-sharing, com rotatividade de processos. Existe a pseudo execução em paralelo dos processos)

Parte 3 – conceitos de multiprogramação
o pseudo-paralelismo, consiste em ter várias actividades a decorrer ao mesmo tempo (em sistemas multiprogramados)
(existe um tempo de vista pelos processos e o que é a real desdestruição do processador)

Monoprocessamento vs multiprogramação simples

com esta acção de mutilprogramação simples o tempo total de execução diminui

Tempo não partilhado vs tempo partilhado (ou muliprogramação simples VS multiprogramação preemptiva)

resultados visíveis são errados, já que apesar do tempo de execução no tempo não partilhado (multiprogramação simples) ser menor que no tempo partilhado (multiprogramação preemptiva) o tempo apenas é explicado pelo aumento do numero de trocas entre os processos

Resumo das figuras:
sistemas multi-programados: optimização do processador
sistemas de tempo partilhado: optimizar a interactividade

As prioridades
surgem nos algoritmos de escalonamento e permite ao processo ser atendido que não fazendo uso do FIFO

As prioridades podem ser:
prioridades fixas (tem em conta o tipo de processo, associadas à importância dos acontecimentos. por exemplo: processo paginador)
prioridades dinâmicas (têm em conta o comportamento do processo, com o objectivo de ser justo, evitar a monopolização ou starvation. Neste caso são dadas prioridades aos processo que melhor se encaixam nos critérios de optimização global da máquina)

Os escalonadores
Os escalonadores podem ser:
escalonador de longo prazo (responsável por admitir um processo a execução. quantos mais processo maior a latência da máquina)
escalonador de médio prazo (através de um algoritmo determina quando e qual o processo, no estado de executável, que deve obter o processador)
escalonador de curto prazo (ou despacho, comuta os processos, após decisão do escalonado de médio prazo). O tempo de latência do despacho = tempo de parar um processo + tempo de recomeçar um processo

Quando se comuta de processo temos que ter em conta várias actividades:
invocação do despacho
salvaguarda do contexto do processo que estava a ser executado
recuperação do contexto para colocar o novo processo em execução
saltar para a localização do processo

Parte 4 – conceito de estado de processos

Modelo de dois estados:
faz uso do algoritmo de escalonamento, para determinar qual de dois processos que fica com o processo primeiro

Modelo de três estados:
surge o estado “novo” – serve para manter a informação acerca do processo, cuja criação foi pedida mas não foi admitido a execução
surge o estado “terminado” – serve para manter a informação acerca do processo, já terminado mas ainda não foi aproveitado
surge o estado de “suspenso” – pedido pelo próprio processo ou de outro processo

Modelo completo:

Parte 5 – conceitos usados em escalonamento

os diferentes algoritmos de escalonamento estão relacionados com respostas diferentes à forma como a gestão do processador tem que ser feita (desempenho, suporte, fiabilidade, robustez..).
qualquer algoritmo de escalonamento tem que manter todos os recursos do sistema. igualmente ocupados (para evitar picos de utilização)

aquando da gestão do processador tem que ter em conta os seguintes conceitos:
previsibilidade,
equilíbrio dos recursos,
justiça e starvation,
processos I/O bound e CPU bound

Existem dois tipos de processos/threads:
processos/threads I/O bound (que fazem muitas operações de E/S, bloqueando-se frequentemente)
processos/threads CPU bound (utilizam intensivamente o processador, quase nunca se bloqueando)

a Justiça
todos os processos/threads devem ter a mesma utilização dos recursos do sistema

a starvation
Surge quando o processo/thread nunca obtém o recurso pretendido, ou porque o recurso esta bloqueado ou porque o próprio processo/thread esta bloequeado
solução do starvation:
uso de prioridades dinâmicas (aumentar a prioridade para processos que estão à mais tempo à espera)

Parte 6 – indicadores de desempenho

este tipo de indicadores permitem que se verifique como está a eficiência com que o sistema gere a informação

exemplos de métricas/indicadores:
utilização do processador (importante para sistemas multiprogramados),
throughput (quantidade de processos concluídos por unidade de tempo)
tournaround (tempo de execução/conclusão. Desde a criação do processo/thread até à sua conclusão)
prazos (aplica-se em sistemas de tempo real). Exemplo:
três processos com um prazo de 15 minutos e outros com 3 com um prazo e 120 minutos
algoritmoA: todos os prazos são cumpridos à tangente
algoritmoB: os prazos dos processos de 15 minutos são ligeiramente excedidos enquanto os de 120 minutos são cumpridos com grande margem. Aparentemente o algortimo B seria melhor pois, em média, o throughput e o turnaround são melhores, mas a percentagem de prazos cumpridos é pior, pelo que o algortimo A é melhor

latência (tempo de resposta. Só se aplica a sistemas multiprogramados interactivos. É mais significado em sistemas interactivos que o throughut)
razão de penalização (é a razão entre o tempo total do processo e o tempo que demoraria se não tivesse outros processos)
exemplo:

tempo de espera (tempo total que um processo passou para o estado de executável)
previsibilidade (medida qualitativa do que quantitativa, e de implementação complexa, já que deve sempre necessitar do mesmo tempo para se executar independentemente da carga)

O escalonador tem que ser capaz de:
minimizar a latência,
maximizar o throughput,
maximizar o equilibro de uso dos periféricos,
justiça

Mas podem surgir problemas por via de:
dispositivos de E/S
optimização levar à starvation.
ocorrência de deadlocks

Parte 7 – algoritmos de escalonamento
Os algortimos de escalonamento podem ser:
preemptivos (round robin e SRT e Feedback)
não preemptivos (FCFS, SPN e HRRN) -> não servem para sistemas multiprogramados de tempo partilhado

algoritmo FCFS – Firts Come First Served
em que:
favorece o CPU Bound bloqueando os processos I/O Bound
não optimiza a utilização de dispositivos
para processos/threads nao interactivas, que têm o mesmo tempo de execução
tempo de conclusão não é importante

algoritmo RoundRobin
em que:
tem por base um quantum (intervalo de tempo)
força a interrupção de uma thread ao fim de um tempo
tempo partilhado em sistemas multiprogramados
é justo, independentemente do tamanho dos processos todos são atendidos da mesma forma
não surge o starvation
tournaround e tempo de espera melhors que o FCFS, quando a duração dos processos varia

Exemplo1 de FCFS e RoundRobin em que:
três processos do tipo CPU bound
existem um quantum
a duração do processo A=12q, do B=3q e do C=3q
ordem de chegada: A, instante 0; B, instante 1; C, instante 2

Exemplo2 de FCFS e RoundRobin em que:
duração dos processo igual para todos = 6q

algoritmo SPN, Shortest Process Next
em que:
o próximo processo a ser executado é o que se espera que demore menos tempo;
não é preemptivo, não serve para sistemas multiprogramados,
situação de starvation dos processos longos face aos curtos
tem um melhor tournaround

algoritmo SRT, Shortest Remaining Time
em que:
o próximo processo/thread a ser executada é aquele cujo tempo restante de processamento é menor,
preemptivo (se um processo que estava bloqueado passar a executável e tiver tempo restante de processamento menor do que actualmente em execução, ocorre a preempção),
não é baseado em quantum
dificuldade: e qt tempo demoram os processos

algoritmo HRRN, Highest response Ratio Next
em que:
eliminar a starvation dos processos longos
valoriza o tempo esperado e a idade do processo no sistema
escolhe sempre o processo que tiver maior response ratio

RR (response ratio) = tempo de espera (w) + tempo de execução esperado (s) / tempo de execução esperado (s)

algoritmo de Feedback
em que:
quando quando não é possivel estimar o tempo de processamento
faz-se uso de uma análise na máquina no passado, para prever o que vai acontecer
faz uso de prioridades dinâmicas: a prioridade vai diminuindo ao longo da idade do processo
faz uso de quantum variável: atribui um quantum maior ao processo que esteja a ser penalizado e vice-versa

A escalabilidade:
uma solução em engenharia é escalável, se o custo for proporcional à dimensão do problema
um algoritmo de escalonamento é escalável se o seu overhead de execução for proporcional ao numero de processo em execução

Para evitar que o escalonamento se torne não escalável usamos a técnica de escalonamento multi-lista: agrupando os processos executáveis em conjuntos, promovendo os que estão mais perto do que está a ser analisado (primeiro nível e despromovendo para o nível mais baixo os que estão no primeiro nível.

coisas maybe importantes:
descrever o que é um quantum
o que é a preempção
conceito de justiça
o que é o CPU bound e i/o bound
o que é o tempo de espera, throughput, penalty ratio, conceito de justiça,
descrever o modo de funcionamento de cada um dos algoritmos estudados,
objectivos do escalonamento e duas principais dificuldades na obtenção de uma gestão óptima absoluta
explicar a influencia da preempção ou ausência dela num sistema
comparar dois algoritmos, para um cenário, e explicar qual o melhor e porquê
descrever a influencia da optimização de alguns indicadores de desempenho sobre os outros..
calcular tempos e indicadores..

Tags :

Sistemas operativos – o inicio (SO1)

Instalar o software:
VirtualBox-5.2.18-124319-Win (LINK)
e o Oracle_VM_VirtualBox_Extension_Pack-5.2.18 (LINK)

de seguida criar uma virtualização do sistema operativo debian-9.5.0-i386-xfce-CD-1 (LINK) ou o torrent (LINK)

Aquando da instalação do VirtualBox em Windows ter em atenção:
desligar primeiro o sistema Hyper-V do windows;
e durante a instalação do VirtualBox solicitar/aceitar a instalação das extensões.

A configuração da máquina virtual deve ser feita tendo em conta os seguintes aspectos:
reservar/verificar 10 gigas de espaço em disco;
colocar a imagem do disto numa pasta perto do root (sem caracteres complexos);
instalar na maquina virtual um SSH server;
sistema de caracteres de UTF8;

já depois de instalado é necessário fazer:
sudo pico /etc/apt/sources.list e comentar o cdrom com #
apt install sudo
adduser username sudo
sudo apt update
sudo apt upgrade

Na interface do VirtualBox fazer clique em devices e escolher insert guest aditions..  e depois na janela de terminal fazer:
cd /media/cdrom
sudo sh ./VboxLinuxAdditions.run

instalar ferramentas de desenvolvimento:
sudo apt-get install build-essential module-assitant dkms
e
sudo m-a prepare

instalação de software adicional na máquina virtual:
1. (netbeans)
na máquina virtual fazer o download do ficheiro e na linha de comandos escrever sudo sh netbeans-8.2-cpp-linux-x86.sh

2. (cliente dropbox)
para instalar o dropbox (32 bits)no debian fiz o seguinte:
cd ~ && wget -O – “https://www.dropbox.com/download?plat=lnx.x86” | tar xzf –
e para correr
~/.dropbox-dist/dropboxd
ou
activar o autostart dropbox autostart y

se for de 64 bits é fazer:
cd ~ && wget -O – “https://www.dropbox.com/download?plat=lnx.x86_64” | tar xzf –

3.( SSH server)
para instalar o SSH server fiz o seguinte:
sudo apt-get install openssh-server
e para correr
sudo systemctl status ssh
ou
sudo systemctl start ssh
e para parar
sudo systemctl stop ssh
e retirar a sua inicialização
sudo systemctl disable ssh

4.(instalar o ncurses):
sudo apt-get install libncurses5-dev libncursesw5-dev
não esquecer que para compilar com o ncurses é necessário fazer:
gcc E1.c -o E1 -lncurses

e Coisas importantes a rever:
sistemas de ficheiros em disco, particionamento, processo de arranque da máquina, sectores MBR e sector boot
Sistema de ficheiros unix, Partições: /, /boot, /home, /etc, /dev, /opt
Comando básicos Unix para navegação no sistema de ficheiros
Gestão de software com apt / apt-get
Noção iniciais de atributos de utilizadores e de segurança em ficheiros Unix. Comando sudo

 

Tags : ,

[s01] colocar os guest additions do virtual box a funcionar

Tenho instalado o lubuntu (na virtualbox) e não estava a conseguir partilhar (copy+paste) infos entre o lubuntu e o windows. Depois de várias tentativas verifiquei que não é só apenas fazer o share biderecional nos settings do virtual box é necessário também fazer o download da ISO dos (VBoxGuestAdditions_5.1.8.iso) e de seguida associar essa ISO à máquina virtual. Então os passos que fiz foram

  1. fazer o download da guest additions, no meu caso VBoxGuestAdditions_5.1.8.iso
  2. associar esta ISO à máquina virtual indo aos settings e de seguida storage, clicar na optical drive do controller IDE e fazer clique no icone com um CD e choose virtual optical disk file
  3. entrar no sistema lubuntu na maquina virtual e abrir a pasta do “CD”
  4. abrir uma janela de terminal e correr o ficheiro com “sudo VBoxLinuxAdditions.run”
  5. esperar… esperar e de seguida vai surgir uma mensagem a indicar que devemos reiniciar
  6. reiniciar a maquina virtual e já está :) até o folder partilhado apareceu :P
  7. já podemos voltar aos settings -> storage e remover a ISO..

e é tudo :)

+infos(VBox): LINK 

Tags : ,

exercicios de SO – Exemplo Teste Bash

usando apenas uma linha de comandos, crie um ficheiro pessoas.txt que contenha os nomes completos dos utilizadores dos sistema cujo nome começa por uma vogal e têm como apelido “Silva”. A informação deverá ser apresentada por ordem alfabética

usando apenas uma linha de comandos, crie um ficheiro tamanho.txt que contenha o nome dos ficheiros regulares (não deve incluir pastas e atalhos) da directoria corrente, ordenados por ordem decrescente do tamanho ocupado em disco

Tags : , ,

exercicios de SO – ficha 3

1. Utilizando programação em Bourne Shell, construa o comando compara que recebe 2 inteiros e mostra qual a relação existente (igual, maior, menor) entre eles. O resultado do
comando deverá seguir o seguinte formato:
f1_tab5

2. Construa o comando tipo que identifica o tipo do ficheiro dado como argumento (“directoria” ou “ficheiro”) e a propriedade de “executável”. Deve-se-á prever o caso em que o ficheiro não existe. O resultado do comando deverá seguir o seguinte formato:

f1_tab6

 

 

3. Construa o comando pot2, que apresenta as potências de 2 ate 10. O resultado do comando
deverá seguir o seguinte formato:

f1_tab7

4. Crie um script em Bourne Shell que permita calcular o factorial de um número. Para esse
efeito, deverá receber da linha de comandos o número cujo factorial se pretende calcular e
apresentar no monitor o valor do factorial.

f1_tab8

5. Construa o comando utilizadores, que permita visualizar todos os utilizadores do sistema
ordenados pelo grupo primário a que pertencem. O resultado do comando deverá seguir o
seguinte formato:

f1_tab9

6. Construa um script em Bourne Shell denominado executa que receba como argumento o
comando a executar e apresente, separadamente, no ecrã os seguintes dados: comando,
resultados e erros. O resultado do script deverá seguir o seguinte formato:

f1_tab10

7-i. Analise o comportamento dos seguintes shell scripts, descrevendo o que está a ser
executado em cada linha:

f1_tab11

7-ii.

f1_tab12

7-iii.

f1_tab13

Tags : , ,

exercicios de SO – ficha 2

1. crie um ficheiro de nome “info.txt” com o seguinte conteúdo:
Coimbra, 1 de Abril de 2014
Hoje e dia de festa.
Fim do ficheiro

2. adicione os seguintes grupos ao sistema
Grupo
so
Coimbra

3. adicione os seguintes utilizadores ao sistema:
f1_tab4

4. visualize, página a página, o conteúdo do ficheiro ‘passwd’, existente na directoria /etc

ou

5. mostre o login, o numero do grupo, nome completo e pasta pessoal dos utilizadores dos sistema que tenham com o grupo primário ‘so’,

5b. guardando essa informação num ficheiro de nome ‘alunos_so’

6. mostre o 3º, 4º e 5º caracteres de todas as linhas de ‘alunos_so1’.

6b. Mostre de seguida os 8 primeiro caracteres

7. mostre a coluna correspondente aos logins, no ficheiro ‘alunos_so’

8. visualize o conteúdo do ficheiro ‘alunos_so’ de forma a mostrar apenas o login e o nome completo de cada utilizador

9. repita o exercício anterior, mas utilize o carácter tab como separador. experimente com outros separadores

10.  redireccione o output do exercício 6 para um ficheiro designado ‘pessoas’

ou

11. visualize o ficheiro ‘alunos_so’, ordenado alfabeticamente pelo login

ou

12. mostre todas as linhas do ficheiro ‘pessoas’ que contenham a palavra “Manuel”

12b. e em seguida visualize também o numero da linha em que elas se encontram

13. visualize todas as linhas do ficheiro ‘alunos_so’ que contenham um “0” seguido do carácter “1” ou “2”

14. liste a informação de todos utilizadores existentes no ficheiro ‘alunos_so’ cujo login comece por “a” ou “b”

ou

15. liste todos os nomes completos existentes no ficheiro ‘alunos_so’ que contenham a palavra “Antonio”

15b. e de seguida aqueles cujo primeiro nome seja “Antonio”

16 crie um ficheiro com o nome completo dos utilizadores do sistema que tenham como apelido “santos” ou “Santos”. Este ficheiro devera estar ordenado por ordem alfabética

17. mostre o numero total de palavras existentes na penúltima linha do ficheiro ‘info.txt’

18. mostre todos os grupos existentes no sistema e receptivo GID, separados pro um espaço. Esta informação deverá estar ordenada pelo nome do grupo.

19. mostre todas as entradas do sistema de ficheiros cujo nome contém a terceira palavra da linha número 2 do ficheiro ‘info.txt’

20 que linha de comandos retorna o numero actual de vezes que o utilizador “ana” esta logado no sistema?

 

Tags : , ,

exercicios de SO – ficha 1

1. verifique o caminho da sua directoria pessoal. qual o resultado do comando id? vá até a directoria raiz, e tente ver que subdirectoras aí existem.

2. criar um ficheiro de nome ‘resposta.txt’ com as respostas da ficha

3. crie uma estrutura de subdirectorias na sua directoria pessoal

3b. listar recursivamente a sua directoria pessoal

4. desloque a directoria ‘pdfs’ para a sua directoria pessoal

4b. remova a directoria ‘material’

5. liste os ficheiros da directoria ‘/home’ e das subdirectorias que se encontram dentro da mesma, de uma forma recursiva

6. encontrar o comando pwd que encontra-se numa directoria de nome ‘bin’. tente encontrá-lo utilizando os comandos ‘cd’ e ‘ls’

7. volte novamente para a sua directoria. uma vez aí, crie uma subdirectoria de nome ‘teste’

8. crie dentro da directoria ‘teste’ outras directorias, de forma a obter o caminho seguinte: ‘~/teste/so/labs/

9. remova estas directorias todas, deixando apenas a directoria ‘teste’

10. crie um fcheiro de nome ‘dados.pessoais’ com os seus dados pessoais (nome, morada, telefone, código postal, curo, ano do curso, data de nascimento, Bi, etc).

10b. Acrescente mais 30 linhas ao ficheiro

11. visualize o conteúdo do ficheiro ‘dados.pessoais’ com pausas

12. mude o nome de ‘dados.pessoais’ para ‘dados.txt’ e coloque-o na directoria ‘teste’

13.acrescente a frase ‘Fim de fichero’ no fim do ficheiro ‘dados.txt’, sem usar qualquer editor de texto

14.como deve ter reparado ao resolver o exercício 5, em algumas directorias não foi possível a sua listagem. Isto deve-se ao facto de as mesmas se encontrarem protegidas. Desta forma o sistema responde com uma mensagem de erro. Resolva novamente este problema, mas desta vez redireccionando estes erros para um ficheiro de nome ‘erros’

15. crie uma directoria de nome ‘bin’ na sua pasta de trabalho em que não é permitido aos outros utilizadores, escrever, ler ou executar algum comando dentro dela.

16. utilize a linha de comandos para criar as seguintes directorias

f1_tab1

16b. assumindo que a sua mascara de criação é 022 e todos os ficheiros “fich.txt” não tiveram as suas permissões alteradas desde a sua criação, assinale com um ‘X’, todas as operações que um utilizador do seu grupo poderá realizar:

f1_tab2

16c. inicie uma sessão na maquina virtual com outro utilizador (login) que pertença ao grupo ‘so1’, e verifique se o resultado está correcto

17. conte o numero de ficheiros que existem na sua directoria, utilizando para comandos em UNIX

18. crie na sua directoria pessoal uma outra directoria de nome ‘direct’. Dentro desta crie outra de nome ‘dir’, por ultimo esta deve conter um ficheiro de nome ‘fich’.

18b. Utilizando apenas um comando do UNIX, tente copiar a directoria ‘dir’ e o respectivo ficheiro ‘fich’, para a sua directoria corrente.

18c. Utilizando novamente só um comando, tente apagar as directorias e o ficheiro criado.

19. utilizando comandos UNIX, crie um ficheiro de nome ‘grupos.txt’ que contém os nomes de todos os grupos a que pertencem os ficheiros da directoria ‘/etc’. Neste ficheiro ‘grupos.txt’ não deve haver repetição de palavras.

20. apresente no visor a primeira linha do ficheiro ‘grupos.txt’

20b. apresente agora as primeiras 5 linhas do ficheiro ‘/etc/passwd’

20c. da mesma forma visualize as linhas compreendidas entre a linha 8 e o fim do ficheiro ‘/etc/passwd’.

21. coloque num ficheiro de nome ‘resto.txt’, as ultimas 13 linhas do ficheiro ‘etc/passwd’

22. tente encontrar o ficheiro de nome ‘group’ nas directorias do sistema, utilizando para isso um só comando do UNIX. Envie os erros para um ficheiro de nomes ‘erros’

23. estabeleça uma ligação simbólica para o ficheiro ‘grupos.txt’, utilizando um outro ficheiro de nome ‘grupos.ligacao’, em que o caminho (path) para o ficheiro ‘grupos.txt’ se inicia na raiz

24. visualize o conteúdo do ficheiro ‘grupos.ligacao’. remova o ficheiro ‘grupos.txt’. Tente visualizar novamente o conteúdo do ficheiro ‘grupos.ligacao’. O que é que aconteceu?

25. suponha que o resultado do comando ‘ls’ é o seguinte

f1_tab3

25-i. qual o resultado da execuação do comando echo “teste…” >> dados.bak por outro utilizador do sistema?

25-ii. qual o comando a executar de forma a permitir o acesso (letirua e escrita) ao ficheiro temp.txt pelos utilizadores do grupo users

25.iii identifique os diferentes tipos de ficheiros listados em cima.

 

 

 

 

 

Tags : ,