0% acharam este documento útil (0 voto)
0 visualizações38 páginas

MANUAL DE LABORATÓRIO.docx

Este documento contém o manual do laboratório para o curso de Laboratório de Sistemas Operacionais no Departamento de Ciência da Computação da Universidade de Lahore Garrison. Ele descreve 15 laboratórios que cobrem tópicos como a instalação do Ubuntu em uma máquina virtual, exploração da interface gráfica do Linux, comandos básicos do Linux, compilação e execução de código C no Linux, processos e algoritmos de escalonamento. Cada laboratório inclui o objetivo, instruções detalhadas e, às vezes, exemplos de comandos.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
0 visualizações38 páginas

MANUAL DE LABORATÓRIO.docx

Este documento contém o manual do laboratório para o curso de Laboratório de Sistemas Operacionais no Departamento de Ciência da Computação da Universidade de Lahore Garrison. Ele descreve 15 laboratórios que cobrem tópicos como a instalação do Ubuntu em uma máquina virtual, exploração da interface gráfica do Linux, comandos básicos do Linux, compilação e execução de código C no Linux, processos e algoritmos de escalonamento. Cada laboratório inclui o objetivo, instruções detalhadas e, às vezes, exemplos de comandos.
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 38

MANUAL DE LABORATÓRIO

Laboratório de Sistemas Operacionais CSC 351

(IV Semestre BSSE)

Departamento de Ciência da Computação


Universidade do Garrison de Lahore
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU

TABLE OF CONTENTS
Laboratório 1 Revisão de Conceitos sobre Software, Hardware, Memória, Usuário e Sistema Operacional Tipos, Características, Usos
Funções......................................................................................................................................................................................... 3
Laboratório 2 Instalação de Máquina Virtual e Ubuntuu .................................................................................................................... 5
Laboratório 3 Explorando a GUI do Linux............................................................................................................................................................. 6
Laboratório 4 Comandos Básicos do Linux...................................................................................................................................................... 7

Laboratório 6 Compilando e executando código C no Linuxx ........................................................................................................................ 12

Laboratório 7 Criação e término de processos usando chamadas de sistemal .................................................................................................... 14


Laboratório 9 Implementando o algoritmo de escalonamento FCFS em C............................................................................................................. 26

Laboratório 10 Implementando o algoritmo de escalonamento Round Robin em C............................................................................................. 29

Lab 11 Implementing Banker’s Algorithm for Deadlock avoidance in C .............................................................................. 31


Laboratório 12: Tradução de Endereço Lógico para Físico em C.................................................................Erro! Marcador não definido.
Desempenho do Programa de Paginação em Demanda do Laboratório 13 em C.................................................................Erro! Marcador não definido.

Laboratório 14 Calculando a Sobrecarga do Bit Map na Gestão de Espaço Livre em Disco.....................Erro! Marcador não definido.
Laboratório 15 Demanda de Paging e Estrutura de Programa em C...............................................................Erro! Marcador não definido.

2 |P á g e
Manual do laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU

Sistemas Operacionais (CSC-351) Instructor: Miss. Afrozah Nadeem


Laboratório 1 Date: 4 Feb, 2019
Tempo Permitido: 120 min

Revisão de Conceitos do Lab 1 sobre Software, Hardware, Memória


Tipos de Usuários e Sistemas Operacionais, Características, Usos, Funções

O que é um Sistema Operacional?


Um programa que atua como um intermediário entre um usuário de um
computador e o hardware do computador
Objetivos do sistema operacional:
Executar programas do usuário e resolver problemas do usuário
mais fácil
Tornar o sistema de computador fácil de usar
Use o hardware do computador de maneira eficiente
Estrutura do Sistema Computacional
O sistema de computador pode ser dividido em quatro componentes:
Hardware – fornece recursos básicos de computação
CPU, memória, dispositivos de I/O
Sistema operacional
Controla e coordena o uso de hardware entre vários
aplicações e usuários
Programas de aplicação – definem as maneiras pelas quais o sistema

3 |P arecursos
ge são usados para resolver os problemas de computação do
usuários
3 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Processadores de texto, compiladores, navegadores da web, banco de dados

sistemas, videogames
Usuários
Pessoas, máquinas, outros computadores

Quais Sistemas Operacionais Fazem


Depende do ponto de vista. Os usuários querem conveniência, facilidade de uso e bom desempenho.
Não se preocupe com a utilização de recursos
Mas computadores compartilhados, como mainframes ou minicomputadores
deve manter todos os usuários felizes
Os usuários de sistemas dedicados, como estações de trabalho, têm dedicados

4 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

recursos, mas frequentemente usam recursos compartilhados de servidores


Computadores portáteis são escassos em recursos, otimizados para usabilidade e duração da bateria
Alguns computadores têm pouca ou nenhuma interface de usuário, como computadores embutidos em dispositivos e
automóveis

Sistemas Operacionais Instrutora: Srta. Afrozah Nadeem


Laboratório 2

Date: 11 Feb, 2019 Time Allowed :120 min

Laboratório 2 Instalação de Máquina Virtual e Ubuntu

Objetivo
Para informar os alunos sobre a instalação do Linux e de máquinas virtuais.

Lab Work:
Para praticar o código C em um ambiente Linux, você precisa instalar o Virtual Box e o Ubuntu.
sistema operacional em seus sistemas usando as diretrizes fornecidas abaixo.

Seguem as diretrizes e materiais de ajuda, incluindo o software necessário e suas instalações:

Passo Nº 1
Para instalar o Linux, primeiro você precisa instalar o software de virtualização Virtual Box no seu sistema de computador.

Passo Nº 2

5 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Baixe o Ubuntu Linux pelo seguinte link:


http://de.releases.ubuntu.com/16.10/ubuntu-16.10-desktop-i386.iso

Siga estes tutoriais para instalar o Ubuntu Linux em uma Máquina Virtual:
1 - https://vulms.vu.edu.pk/Courses/CS604/Downloads/CS604-Virtual%20Machine.mp4
2 - https://www.lifewire.com/executar-ubuntu-dentro-do-windows-virtualbox-2202098

Sistemas Operacionais Instructor: Miss. Afrozah Nadeem


Laboratório 3

Date: 18 Feb, 2019 Tempo Permitido: 120 min

Laboratório 3 Explorando a GUI do Linux

Interação com a GUI do Linux


Criar Diretórios,
Excluir Diretórios e
criar arquivos no Linux

6 |P a g e
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de Ciências da Computação, LGU

Sistemas Operacionais Instructor: Miss. Afrozah Nadeem


Laboratório 4

Date: 25 Feb, 2019 Tempo permitido: 120 min

Laboratório 4 Comandos Básicos do Linux


Objetivo
Executar alguns comandos básicos do Linux

Pratique os seguintes comandos Linux no Shell:


1. 01
2. Escreva um comando para mudar seu diretório atual para a área de trabalho.
3. Escreva um comando para criar uma estrutura de diretórios como: CS604/Arquivos/CArquivos
4. Escreva um comando para exibir o conteúdo da área de trabalho.
5. Escreva um comando para remover um diretório chamado CS604.

7 |P a g e
Manual de laboratório de sistemas operacionais para BSSE
Departamento de Ciência da Computação, LGU

1. Escreva um comando para mostrar seu diretório de trabalho atual.

2. Escreva um comando para mudar seu diretório atual para a área de trabalho.

3.Escreva um comando para criar uma estrutura de diretórios como: CS604/Arquivos/ArquivosC

4. Escreva um comando para exibir o conteúdo dos diretórios recém-criados.

8|Páge
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciências da Computação, LGU

6. Escreva um comando para remover um diretório chamado CS604.

9 |P a g e
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU

Sistemas Operacionais Instrutora: Srta. Afrozah Nadeem


Laboratório 5

Date: 1 Mar, 2019 Tempo Permitido: 120 min

Laboratório 5 Comandos Linux

• Ctrl + Alt + t
Abra a janela do terminal do Ubuntu, a interface de linha de comando. Este é um software pré-instalado que vem
com cada versão padrão do Ubuntu.
•pwd
imprimir diretório de trabalho: por exemplo, se você estiver no seu diretório inicial, então imprimirá algo como
/casa/<nome_do_usuário>
•ls
listar diretório: Este comando listará os itens de um diretório. Se você não especificar um diretório, então ele
listará o diretório de trabalho, o lugar onde você está atualmente.
•cd
change directory. It will change your work directly as you specify. You will have to specify a
diretório.g. cd /home mudará seu diretório de trabalho para /home, independentemente de onde você esteja.
•cd ..
change directory one level up.
•cd ~
mude para o diretório inicial. Suponha que seu nome de usuário seja tom, então cd ~ mudará seu trabalho
diretório para /home/tom.
•cp
Comando Copiar. Ele irá copiar um arquivo ou diretório. É semelhante ao Copiar-Colar na interface gráfica.
•mv
10 |P á g e
Manual do laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Mover ou renomear arquivos. É como renomear um arquivo ou recortar-colar em uma interface gráfica.

•rm
remover arquivo ou diretório.
•rmdir
remover diretório vazio. Isso não removerá o conteúdo do diretório, mas deletará um diretório se
está vazio.
•mkdirmake diretório. Ele criará um novo diretório. Precisaremos especificar um nome.
•Ctrl + c
Ele mata o processo com um sinalSIGINT. DonNão confunda com Ctrl+C no Windows ou Ctrl+Z. Ctrl+Z é usado
suspender um processo enquanto No Windows Ctrl+C é o comando de copiar.
•Ctrl + Shift + c
Este é um comando de cópia.
•Ctrl + Shift + v
Este é o comando de colar como Ctrl+v no Windows.
•nano <nome_do_arquivo>

nanoé um editor de texto de linha de comando. No terminal, ao executar o comando acima, você pode editar o arquivo
nomeado<nome_do_arquivo>.
•sudo nano <nome_do_arquivo>
Este é o mesmo comando que mencionamos anteriormente, exceto que ele editará o arquivo com o privilégio de superusuário.
•gedit <nome_do_arquivo>
gedit é um editor de texto GUI como o bloco de notas no Windows. Ele começará a editar o arquivo chamado <filename> no gedit
janela.
homem
O Ubuntu irá ajudá-lo instantaneamente e possui um manual embutido. Basta adicionar qualquer comando com man ou
tipo executa homem. ex: homem mkdir
•sudo
O sudo basicamente permite que um usuário padrão execute um comando com privilégios de root ou superusuário.

11 |P a g e
Manual do laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

•adicionarusuario <nome_de_usuario>

Como o nome sugere, ele adicionará outro usuário. Você também pode usar useradd, que é um pouco diferente.
do adduser.
•passwd <nome_de_usuário>
Este comando mudará a senha para um usuário chamado <username>. Privileges de root serão necessários.
enquanto altera a senha de outro usuário.
•time
O comando time no Ubuntu não mostrará na verdade a data ou hora atuais. Ele realmente irá executar e
mostra o resumo dos recursos do sistema Este comando mostrará a data e hora atuais de sua
sistema (incluindo fuso horário).

Sistemas Operacionais Instructor: Miss. Afrozah Nadeem


Laboratório 6 Max Marks: 10
Date: 7 March 2019 Tempo Permitido: 120 min

Laboratório 6 Compilando e executando código C no Linux


Aim
Escrever um programa em C e compilá-lo.

Escreva um programa em C que exibirá seu ID de estudante e nome como saída. Compile e execute seu
programa no Prompt de Comando para exibir a saída como mostrado abaixo.

12 |P a g e
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
printf("ID do Estudante: BC123456789\n"); // imprimindo o id do estudante
printf("Nome do Estudante: ABC\n"); // imprimindo o nome do aluno

sair(0);

Q2: Escreva um programa em C++ que exibirá a string “Classe” como saída. Compile e execute seu programa.
no Prompt de Comando para exibir a saída conforme mostrado abaixo.

13 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Tarefas de Laboratório: Faça em C e C++

Q1:Write a program to show the prime numbers from the range 1-50?
Q2: Escreva um programa para verificar se o número inserido é um ARMSTRONG ou não?
Q3: Escreva um programa para exibir a seguinte forma?
*
**
***
****

Sistemas Operacionais Instrutora: Srta.


Afrozah Nadeem
Laboratório 7

Date: Tempo Permitido: 120


min

Laboratório 7 Criação e término de processos usando chamada de sistema

14 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Objetivo: Escrever um programa em C para criar um processo filho usando a chamada de sistema fork().

A chamada de sistema é a forma programática pela qual um programa de computador solicita um serviço do núcleo do
o sistema operacional em que é executado. Uma chamada de sistema é uma maneira dos programas interagirem com o sistema operacional.
sistema. Um programa de computador faz uma chamada de sistema quando faz um pedido ao sistema operacional.
kernel. A chamada de sistema fornece os serviços do sistema operacional para os programas do usuário via Aplicação
Interface de Programação de Aplicações (API). Ela fornece uma interface entre um processo e o sistema operacional para permitir o nível de usuário.

processos para solicitar serviços do sistema operacional. Chamadas de sistema são os únicos pontos de entrada no núcleo
sistema. Todos os programas que precisam de recursos devem usar chamadas de sistema.
Serviços fornecidos por chamadas de sistema:
1. Criação e gestão de processos
2. Gerenciamento da memória principal
3. Acesso a Arquivos, Gerenciamento de Diretórios e Sistemas de Arquivos
4. Manipulação de dispositivos (I/O)

5. Proteção
6. Networking, etc.
Tipos de Chamadas de Sistema :
Existem 5 categorias diferentes de chamadas de sistema–
1. Controle de processo: fim, abortar, criar, terminar, alocar e liberar memória.
2.Gestão de arquivos: criar, abrir, fechar, excluir, ler arquivo etc.
3. Gerenciamento de dispositivos

4. Manutenção de informações
5. Comunicação
Exemplos de Chamadas de Sistema Windows e Unix–

JANELAS UNIX

15 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciências da Computação, LGU

CreateProcess() fork()
SairProcesso() sair()
Controle de Processos WaitForSingleObject() esperar()

CriarArquivo() abrir()
LerArquivo() ler()
EscreverArquivo() escrever()
Manipulação de Arquivos FecharMão() fechar()

SetConsoleMode() ioctl()
LerConsole() ler()
Manipulação de Dispositivos EscreverConsole() escrever()

GetCurrentProcessID() getpid()
Informação DefinirTemporizador() alarme()
Manutenção Dormir() dormir()

CriarTubo() tubo()
CriarMapaDeArquivo() shmget()
Comunicação MapViewOfFile() mmap()

DefinirSegurançaDoArquivo() chmod()
InicializarDescriptorDeSegurança() umask()
Proteção SetSecurityDescriptorGroup() chown()

Criação e terminação de processos usando as chamadas de sistema fork() e exit()


Escreva um programa em C para criar um processo filho usando a chamada de sistema fork(). Após a criação do processo, você deve
16 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

display the ids of a process and parent process in case of both parent and child processes. You also
precisa terminar processos. Compile e execute seu programa no prompt de comando para mostrar o
output as shown below.

17 |P a g e
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

#include <stdio.h>
principal()
{ int pid, status;
se((pid = fork()) == -1)

18 |P á g e
Manual do laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

{
perror("fork() falhou...");
sair(1);
}
senão
{
se (pid == 0) {
Processo Filho:
printf("ID do Processo do Filho: %i\t", getpid());
printf("ID do Pai do Filho: %i ", getppid());
sair(0);
}
senão{
esperar(&status);
Processo Pai:
printf("ID do Processo do Pai: %i\t", getpid());
printf("ID do Pai do Pai: %i\t", getppid());
sair(0);
}
}
} // fim do principal

Término de processo
é uma técnica na qual um processo é terminado e libera a CPU após concluir a execução. A maioria dos
OS usa a chamada de sistema exit( ) para terminar um processo. Principais causas de terminação do processo. Conclusão normal: O
o processo completa todas as tarefas e libera a CPU

Topic:
19 |P a g e
Manual do laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Comunicação entre processos usando PIPES

Escreva um programa em C para comunicação entre processos entre processos filho e pai. Você deve
use chamadas de sistema pipe() para criar um pipe entre processos pai e filho. O filho irá escrever o
O filho enviará a identificação do aluno através de um PIPE e o pai irá ler a identificação do aluno do PIPE e exibi-la na tela. O pai irá
espere pelo processo filho até que o filho escreva dados no pipe. Compile e execute seu programa no Comando
prompt para exibir a saída conforme mostrado abaixo.

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>

principal()
{
int pipefd[2], pid, n, rc, nr, status;
char id[20] ;

printf("Digite seu ID: ");


scanf("%s", &id);

rc = tubo (pipefd);

20 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

se (rc < 0) {
perror("Falha no pipe");

sair(1);
}

pid = fork();
se (pid < 0) {
perror("Falha no Fork");
sair(1);
}

se (pid == 0) { /* Código do Filho */


fechar(pipefd[0]);
escreva(pipefd[1], id, strlen(id));
fecha(pipefd[1]);
exit(0);
}

/* Código do Pai */

senão
{
esperar(&status);
fechar(pipefd[1]);
n = strlen(id);
21 |P á g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU

nr = ler(pipefd[0], id, n);

escreva(1, "ID do Estudante: ");


escrever(1, id, nr);
}

} // fim de main()

Sistemas Operacionais Instrutora: Srta.


Afrozah Nadeem
22 |P á g e
Manual do Laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Laboratório 8

Date: Tempo
Permitido: 120 min

Laboratório 8 Criação e término de threads

Escreva um programa em C que criará três threads chamadas Thread 1, Thread 2 e Thread 3. Você está
necessário executar essas threads de forma paralela e exibir o ID do Processo e os IDs das Threads de acordo com o
No final, todas as threads serão terminadas. Compile e execute o programa C no Linux
Sistema operacional.

#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void* meuThread(void* tmp)
23 |P á g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU

{
printf("ID da Thread: %u", (unsigned int)pthread_self());
printf(" e ID do Pai: %d", getpid());
printf (" criado e iniciado ");
dormir(1);
retornar NULL;
}
int main()
{

printf("\nID do Processo: %d\n", getpid());


int status;
pthread_t tid1, tid2, tid3;
pthread_create(&tid1,NULL, myThread, NULL);
sleep(1);
pthread_create(&tid2,NULL, myThread, NULL);
dormir(1);
pthread_create(&tid3,NULL, myThread, NULL);
pthread_join(tid1,NULL);
pthread_join(tid2,NULL);
pthread_join(tid3,NULL);

As threads vão ser terminadas uma a uma


Todas as Threads saíram com segurança...
pthread_exit(NULL);
}

24 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Tópico:
Comandos de gerenciamento de processos e pressionamentos de tecla

A seguir estão a sequência de ações que o usuário deve realizar para o gerenciamento de processos. Você é
obrigatório escrever os comandos do Linux para cada ação.

O usuário quer mover o job em segundo plano para o primeiro plano.


Então, por um certo motivo, ele/ela deseja suspender o processo em execução.
E então ele/ela coloca o trabalho suspenso em segundo plano.
Então ele/ela quer ver o status de todos os trabalhos suspensos e em segundo plano.
No final, ele/ela encerra aquele trabalho/processo.
fg
^Z
bg
trabalhos
matar

25 |P a g e
Manual de laboratório de sistemas operacionais para BSSE
Departamento de Ciência da Computação, LGU

Sistemas Operacionais Instructor: Miss. Afrozah


Nadeem
Laboratório 9

Date: Time Allowed


120 min

Laboratório 9 Implementando o algoritmo de escalonamento FCFS em C

Escreva um programa em C para implementar o algoritmo de escalonamento FCFS. Dada a lista de Processos e seu tempo de execução.
time, calculate waiting time for each process and average waiting time. For example, the list of processes
e seu tempo de burst da CPU é o seguinte:

Processos Burst Time


P0 10
P1 4
P2 6
P3 8
Assuma que todos os processos chegam no tempo 0 na sequência P0, P1, P2, P3

26 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU

#include <stdio.h>
int main(){ // calculando o tempo de burst para cada processo
int n = 4 ; // número de processos for(int i = 0; i<n; i++){
int bTime[4] ; tATime[i] = wTime[i]+bTime[i] ;
int wTime[4]; avgtATime = avgtATime + tATime[i] ;
int tATime[4]; }
bTime[0] = 10 ; avgWTime = avgWTime / n;
bTime[1] = 4 ; avgtATime = avgtATime / n ;
bTime[2] = 6 ; // exibindo o tempo de espera e os tempos de resposta
bTime[3] = 8 ; para (int i = 0; i < n; i++) {
int avgWTime = 0 ; printf("P%i: ",i) ;
int avgtATime = 0 ; printf("Tempo de Espera: %i\t", wTime[i]) ;
wTime[0] = 0 ; printf("Tempo de Resposta: %i\n", tATime[i]) ;
// calculando o tempo de espera para cada processo }
// exibindo o tempo médio de espera e o tempo médio de retorno
for(int i = 1; i<n; i++){ tempo

27 |P a g e
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU

wTime[i] = wTime[i-1]+bTime[i-1] ; Tempo Médio de Espera: %i


avgWTime = avgWTime + wTime[i] ; Tempo médio de espera: %i
} retornar 0;
}
// fim do main()

28 |P á g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciências da Computação, LGU

Sistemas Operacionais Instrutor:


Srta. Afrozah Nadeem
Laboratório 10

Date:
Tempo Permitido: 120 min

Laboratório 10 Implementando Round Robin


algoritmo de agendamento em C

Escreva um programa em C para implementar o algoritmo de escalonamento Round Robin. Dada a lista de
Processos e seu tempo de execução, exiba o gráfico de Gantt. Por exemplo, a lista de processos
e seu tempo de explosão de CPU é o seguinte:

Processos Burst Time


P0 10
P1 4
P2 6
P3 8

Assuma que todos os processos chegam ao tempo 0 na sequência P0, P1, P2 P3. O tempo de fatia para
cada processo é 5.

29 |P a g e

#include <stdio.h> int bandeira ;


int main(){ printf("Gráfico de Gantt para os processos dados e tempo de CPU")
int n = 4 ; times:\n\n");
int timeSlice= 5 ; faça {
int tSlice[4] ; flag = 0 ;
int bTime[4]; para ( int i = 0 ; i<n; i++ ) {
bTime[0] = 10 ; para (int j = 0 ; j<tSlice[i]; j++ ){
bTime[1] = 4 ; printf("P%d", i );
bTime[2] = 6 ; bTime[i]-- ;
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

bTime[3] = 8 ; }
para (int i = 0 ; i<n ; i++ ){ tSlice[i] = bTime[i];
se (bTime[i] < timeSlice ||
bTime[i] == 0) }
{
tSlice[i] = bTime[i]; para ( int i = 0 ; i<n; i++ ){
} se (bTime[i] != 0)
senão {
{ flag = 1 ;
tSlice[i] = timeSlice ; }
} }
} }enquanto (flag != 0);
retornar 0;
}
// fim do main()

30 |P a g e
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

Sistemas Operacionais Instructor:


Srta. Afrozah Nadeem
Laboratório 11

Date: Tempo
Permitido: 120 min

Laboratório 11 Implementando o Algoritmo do Banqueiro para

Evitando Deadlock em C

Neste algoritmo, quando um novo processo entra no sistema, ele deve declarar o máximo
número de instâncias de cada tipo de recurso que pode precisar, ou seja, cada processo deve um
a priori reivindicar o uso máximo de vários recursos do sistema. Esse número não pode exceder o
número total de instâncias de recursos no sistema, e pode haver múltiplas
31 |P a gdee recursos. Quando um processo solicita um conjunto de recursos, o sistema deve
instâncias
determinar se a alocação desses recursos deixará o sistema em um estado seguro.
If it will, the resources are allocated; otherwise the process must wait until some other
o processo libera recursos suficientes. Dizemos que um sistema está em um estado seguro se todos os
os processos no sistema podem ser executados até a terminação em uma certa ordem; a ordem de
a terminação do processo é chamada de sequência segura. Quando um processo obtém todos os seus recursos, ele
deve usá-los e devolvê-los em uma quantidade finita de tempo. Seja n o número de
processos no sistema e m ser o número de tipos de recurso. Precisamos do seguinte
estruturas de dados no algoritmo do banqueiro:

Disponível: Um vetor de comprimento m. Ele mostra o número de recursos disponíveis de cada tipo. Se
Available[i] = k, então k instâncias do recurso Ri estão disponíveis.
Max: Uma matriz n×m que contém a demanda máxima de cada processo. Se Max[i,j] = k, então
o processo Pi pode solicitar um máximo de k instâncias do tipo de recurso Rj.
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU
Alocação: Uma matriz n×m que contém o número de recursos de cada tipo atualmente
alocado a cada processo. Se Alocação[i,j] = k, então Pi está atualmente alocado k instâncias
do tipo de recurso Rj.
Need: An n×m matrix that shows the remaining resource need of each process. If
Se Need[i,j] = k, então o processo Pi pode precisar de k instâncias a mais do tipo de recurso Rj para
complete a tarefa.

A saída do programa é como mostrado abaixo:

32 |P a g e
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

33 |P a g e
Manual do laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

#include<stdlib.h>
#include <stdio.h>
int atual[5][5], reivindicação_máxima[5][5], disponível[5];
int alocacao[5] = {0, 0, 0, 0, 0};
int maxres[5], running[5], safe = 0;
int contador = 0, i, j, exec, recursos, processos, k = 1;
34 |P á g e

int main()
{
Digite o número de processos:
scanf("%d", &processos);

para (i = 0; i < processos; i++)


{
running[i] = 1;
counter++;
}

Digite o número de recursos:


Manual do Laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

scanf("%d", &resources);

Digite o Vetor de Reivindicação:


para (i = 0; i < recursos; i++)
{
scanf("%d", &maxres[i]);
}

Digite a Tabela de Recursos Alocados:


para (i = 0; i < processos; i++)
{
for(j = 0; j < recursos; j++)
{
scanf("%d", &current[i][j]);
}
}

Digite a tabela de reclamações máxima:


para (i = 0; i < processos; i++)
{
for(j = 0; j < recursos; j++)
{
scanf("%d", &maximum_claim[i][j]);
}
35 |P á g e
}

O Vetor de Reivindicação é:
para (i = 0; i < recursos; i++)
{
printf("\t%d", maxres[i]);
}

A Tabela de Recursos Alocados:


para (i = 0; i < processos; i++)
{
para (j = 0; j < recursos; j++)
{
%d
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de CS, LGU
}
\n
}

A Tabela de Reivindicações Máximas:


para (i = 0; i < processos; i++)
{

para (j = 0; j < recursos; j++)

{
printf("\t%d", maximum_claim[i][j]);
}

para (i = 0; i < processos; i++)


{
para (j = 0; j < recursos; j++)
{
allocation[j] += current[i][j];
}
}
36 |P a g e

Recursos alocados:
para (i = 0; i < recursos; i++)
{
%d
}

para (i = 0; i < recursos; i++)


{
disponível[i] = maxres[i] - alocação[i];
}

Recursos disponíveis:
para (i = 0; i < recursos; i++)
Manual de Laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

{
%d
}

enquanto (contador != 0)
{
safe = 0;
para (i = 0; i < processos; i++)
{
se (executando[i])
{
exec = 1;
para (j = 0; j < recursos; j++)
{
se (reivindicação_máxima[i][j] - atual[i][j] > disponível[j])
{
exec = 0;
quebrar;
}
}
se (exec)
{
printf("\nProcesso%d está executando\n", i + 1);
running[i] = 0;
37 |P a g e
contador--;
safe = 1;

para (j = 0; j < recursos; j++)

{
available[j] += current[i][j];
}
quebrar;
} }
}
se (!seguro)
{
printf("\nThe processes are in unsafe state.\n");
Manual de laboratório de Sistemas Operacionais para BSSE
Departamento de Ciência da Computação, LGU

quebrar;
} senão {
O processo está em estado seguro
Vetor disponível:

para (i = 0; i < recursos; i++)


{
printf("\t%d", disponível[i]);
}

}
}
sistema("pausa");}

38 |P á g e

Você também pode gostar