arturwaquil / cthread Goto Github PK
View Code? Open in Web Editor NEWTrabalho prático 1 da disciplina de Sistemas Operacionais I — 2019/2
Trabalho prático 1 da disciplina de Sistemas Operacionais I — 2019/2
_RESULTADOS NO TERMINAL COM COMENTARIOS MEUS ASSIM
Inicializou semaforo binario sucesso
Eu sou a main ap�s a cria��o de ID1 e ID2, ocupando o recurso binario
+MAIN ocupou o semaforo binario
+MAIN Contagem semaforo: 0
+MAIN vai fazer CYIELD
Empty queue: nothing to pop (problema: isso n parece certo, devia ter duas threads id1 e id2 na fila nesse momento pra escalonar)
+MAIN Codigo retornado do csignal: -1. (problema: o csignal devia retornar 0 quando sucesso, e na linha abaixo a contagem do semaforo ta condizente com ter dado certo, pois voltou de zero para 1. Entao ta falhando só o retorno da csignal?? Investigar)
+MAIN Count semaforo atual: 1
-FUNC0 Eu sou a thread ID0 imprimindo 10
-FUNC0: vai tentar semaforo binario com atual count: 1
-FUNC0 entrou no semaforo! atual count: 0
-FUNC0 fazendo coisas de secao critica
Printing queue...
Item 1 : prio 0, TID 2, state 0, dormant -1
Item 2 : prio 80131269, TID 0, state 0, dormant -1
PRINT QUEUE: Reached endqueue.
-FUNC0 vai fazer um yield agora
(acho que essa parte do FUNC0 deu certo. a func0 é a primeira escalonada depois de main, count correto etc.)
(escalonamento para func1: correto, tid 2 com prioridade 0 )
--FUNC1 Eu sou a thread ID1 imprimindo 10
Printing queue...
Item 1 : prio 4065979, TID 1, state 0, dormant -1 (ok, func0 vem antes da main pq demorou menos)
Item 2 : prio 80131269, TID 0, state 0, dormant -1
PRINT QUEUE: Reached endqueue.
--FUNC1 tentando semaforo count = 0 (bloqueio correto porque func0 está com o semaforo)
-FUNC0: primeira instrucao após o cyield. ainda no semaforo, count: -1
Printing queue...
Item 1 : prio 80131269, TID 0, state 0, dormant -1 (correto, FUNC1 está bloqueada)
PRINT QUEUE: Reached endqueue.
-FUNC0 hora de liberar o semaforo...
Printing queue...
Item 1 : prio 4688695, TID 2, state 0, dormant -1 (ok, ao liberar semaforo, acordou a FUNC1)
Item 2 : prio 80131269, TID 0, state 0, dormant -1
PRINT QUEUE: Reached endqueue.
-FUNC0 fim.
(escalonou pra func1 de novo. oK)
--FUNC1 Eu sou a thread ID1 imprimindo 10 (PROBLEMA ENORME: Pq a FUNC1 tá recomeçando do inicio??? ela devia estar retomando na hora de entrar no semáforo na primeira vez! Isso parece um problema na hora de salvar o contexto da func ao transitar de exec para blocked - ou seja quando foi chamado o bloqueio para entrar na fila do semáforo - ou entao ao acordar de novo de blocked para apto e depois apto para exec. idk)
--FUNC1 tentando semaforo count = 0
(PROBLEMA: pq a FUNC1 nao entrou no semáforo agora? o count devia ser 1. bug no csignal chamado pela FUNC0? mas quando a main chamou o count subiu normal)
+MAIN retornou esse valor do cyield dela: -1217191948 (PROBLEMA DEVIA SER ZERO )
Empty queue: nothing to pop (acho que ok)
Did not select next thread ready->exec
Eu sou a main voltando para terminar o programa
(PROBLEMA? eu botei um cjoin depois dessa linha para ver se finalmente deixavam a FUNC1 rodar... o cjoin não esperou pela FUNC1, talvez pq deu interlock pq a FUNC1 tá bloqueada esperando um semáforo que está desocupado, e a Main iria se bloquear esperando FUNC1.. se resolver a questao anterior acho que isso progride)
aluno@alunovm-sisop:~/sisop-tp1$
How
Analisando o teste_vetor, estranhei uma coisa:
Sao criadas 10 threads de A a J.
Depois, MAIN chama join(A).
Nesse momento MAIN devia ser imediatamente bloqueada, e escalonar A.
A atribui 20 vezes, yield escalonaria B e assim por diante (tem melhor prioridade) enquanto main fica dormindo.
Depois que J termina, O ESCALONADOR TEM DUAS OPÇÕES: dar cpu para A ou para MAIN
Porém main provavelmente demora mais por causa dos ccreates! então deve voltar para mais 20 atribuições de A no vetor!! e depois B, C,... até concluir os 250 indices do vetor. Isso parece consistente com a descrição do algoritmo mas isso eh subjetivo.
Well, nosso código não faz isso, depois das threads de prioridade 0 (até J) ele volta para H depois G depois F, direção inversa do alfabeto e pulando letra i. Parece ser algum problema no calculo da prioridade ou na FCFS mas tem que averiguar
Nosso código:
aluno@alunovm-sisop:~/sisop-tp1$ ./exemplos/teste_vetor
inicializando cthread...
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cyield: 0 e 0
Retorno cjoin: 0 e 0
AAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJ
HHHHHHHHHHHHHHHHHHHH
GGGGGGGGGGGGGGGGGGGG
FFFFFFFFFF
Concluido vetor de letras...
Código do Lucas (tentem rodar ele, descobrir algo de diferente)
aluno@alunovm-sisop:~/cthread-master/exemplos$ ./teste_vetor
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
Error: can not wait for thread that has finished or does not exists
AAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDD
EEEEEEEEEEEEEEEEEEEE
FFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGGGG
HHHHHHHHHHHHHHHHHHHH
IIIIIIIIIIIIIIIIIIII
JJJJJJJJJJJJJJJJJJJJ
AAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBB
CCCCCCCCCC
Concluido vetor de letras...
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.