- 77
- 31 671
Professor Igor Gonzalez
Brazil
เข้าร่วมเมื่อ 28 ต.ค. 2020
Olá, sou o professor Igor. Tenho graduação, mestrado e doutorado pela Universidade Federal Fluminense e sou professor dos cursos de bacharelado em Ciência da Computação e Técnico em Informática do CEFET/RJ campus maracanã. Neste canal eu irei disponibilizar as aulas que ministro e outros vídeos relacionados ao mundo da computação.
วีดีโอ
Persistência: Dispositivos de Entrada e Saída
มุมมอง 179 ชั่วโมงที่ผ่านมา
Sumário 0:49 - Visão Geral da Arquitetura do Sistema 4:06 - Componentes de um Dispositivo de E/S genérico 11:57 - Interrupções 19:36 - DMA 26:06 - Comunicação entre o SO e os Dispositivos de E/S 40:21 - Hard Disk Drives (HDs) 1:09:00 - Escalonamento de Disco 1:35:13 - Solid State Disk (SSD)
Concorrencia/Sincronização - Parte 2
มุมมอง 612 ชั่วโมงที่ผ่านมา
Concorrencia/Sincronização - Parte 2
GerencIamento de Memória - Parte 3
มุมมอง 714 วันที่ผ่านมา
Nesta aula continuamos discutindo a tabela de páginas multinível. Em seguida estudamos a tabela de páginas invertida, os mecanismos de swapping e, por fim, os algoritmos de substituição de páginas.
Gerenciamento de Memória - Parte 2
มุมมอง 61หลายเดือนก่อน
Nessa aula discutimos os problemas inerentes à paginação, como a necessidade de acessar a memória duas vezes para cada acesso realizado e o tamanho elevado da tabela de páginas linear. Além dos problemas, também apresentamos algumas soluções, como a utilização da TLB, a utilização de uma técnica híbrida entre segmentação e paginação e as tabelas de páginas multinível.
Gerenciamento de Memória - Parte 1
มุมมอง 68หลายเดือนก่อน
Nesse vídeo discutimos o conceito de espaço de endereçamento virtual e algumas técnicas de virtualização de memória, como segmentação e paginação.
Escalonamento de CPU no Xv6
มุมมอง 27หลายเดือนก่อน
Nessa aula nós visitamos o código do sistema operacional Xv6 responsável pela troca de contexto de processos e pela política de escalonamento de CPU.
Escalonamento de CPU - Parte 2
มุมมอง 25หลายเดือนก่อน
Nessa aula discutimos a política de escalonamento Multi-Level Feedback Quee (MLFQ)
Escalonamento de CPU - Parte 1
มุมมอง 382 หลายเดือนก่อน
Nessa aula iniciamos a discução sobre políticas de escalonamento de CPU, incluindo FIFO, Shortest Job First (SJF), Shortest Time-to-Completion First (STCF) e Round Robin (RR)
Processos - Parte 2
มุมมอง 552 หลายเดือนก่อน
Sumário 1 - Execução direta limitada/Chamadas de sistema: 00:56 2 Nessa aula discutimos o mecanismo de execução direta limitada, que permite que os programas executem diretamente no hardware, mas ainda oferecendo controle para o sistema operacional. Também vimos como o Xv6 trata Traps, incluindo chamadas de sistema.
Processos - Parte 1
มุมมอง 1053 หลายเดือนก่อน
Sumário: 1 - Informações sobre o projeto prático : 00:00 2 - Processos e Virtualização da CPU: 11:19 3 - Estados de um processo: 01:08:32 4 - Process Control Block: 01:17:31 5 - API para gerenciamento de processos: 01:18:46 6 - Execução Direta Limitada: 02:02:56 Link para a página do curso: eic.cefet-rj.br/~iribeiro/sistemas-operacionais/
Projeto 1 xv6 - Adicionando uma system call
มุมมอง 2055 หลายเดือนก่อน
Neste vídeo introduzo o mecanismo de tratamento de chamadas de sistema implementado no XV6, assim como fornço instruções para realização do primeiro projeto: inclusão de uma nova chamada de sistema no xv6.
Configuração do Laboratório
มุมมอง 125ปีที่แล้ว
Configuração do ambiente utilizado no curso para realizar análises em malwares.
Aula 4 Escalonamento de Processos - Parte 1
มุมมอง 1253 ปีที่แล้ว
Nessa aula nós estudamos algumas políticas de escalonamento de processos considerando a existência de apenas um processador (core).
Aula 4 - Lógica Proposicional: Regras de Derivação
มุมมอง 3023 ปีที่แล้ว
Aula 4 - Lógica Proposicional: Regras de Derivação
Aula 1 - Introdução e Conceitos Básicos
มุมมอง 3233 ปีที่แล้ว
Aula 1 - Introdução e Conceitos Básicos
Assembly x86-64 - Introdução à Arquitetura
มุมมอง 6K3 ปีที่แล้ว
Assembly x86-64 - Introdução à Arquitetura
Muito bom professor, continue postando, suas aulas são sensacional
Voce utiliza o livro manual da intel? Tava lendo o 3.4.3 e decidi procurar pra entender melhor 3:48
Onde está a continuação?
Ótima didática parabéns
Sensacional professor!!! Faz uma aula falando de epool e como os drivers de io tiram proveito disso.
TOP
Campeão , qual o programa que possa converter ISO/MDS para ELF ? Obrigado
👋☝️Cadê seus Vídeos. Precisando de mais Assembly. Um Curso Completo 📌
👋☝️Cadê seus Vídeos. Precisando de mais Assembly. Um Curso Completo 📌
faz a da normal bivariada ai machão
Muito bom, parabéns!
Eu tive dúvidas do porquê "$0x108" ser igual a "0x108". Por ser uma constante (imediato), indicada pelo $, não acessamos o valor do endereço, que seria 0xAB, usamos diretamente o endereço na operação,. Ex.: movl $0x108, %eax. Em outras palavras, a diferença entre "$0x108" e "0x108" é que o "$" indica que estamos lidando com um valor imediato. Isso significa que não estamos acessando o conteúdo da memória no endereço 0x108, mas sim estamos usando o valor 0x108 diretamente na instrução. Portanto, a diferença principal entre "$0x108" e "0x108" no formato AT&T é que o primeiro representa um valor imediato enquanto o segundo representa um endereço de memória. Caso eu esteja errado, corrijam!
Correto.
Seria mt interessante disponibilizar o resto dos videos sobre analise de malware, se possivel. N eh tao simples achar conteudo de qualidade, inclusive em ingles.
oi professor igor, eu gostaria de estudar assembly para processadores qualcomm, você saberia lguma documentação ou algum site onde eu posso estudar ?
Excelente conteúdo. Tenho uma dúvida. Eu sou da velha guarda, programava em Assembler do 8086, 16bits, modo real. Nesse modo existiam limitações de uso de registradores quando operavamos com endereçamento indexado. Só podíamos usar os registradores bx e bp como registradores de base e si, di e sp como registradores de índice. Um mov word ptr [bx + si], ax era permitido mas um mov word ptr [cx + dx], ax, não era. Na arquitetura de 64 bits existe essa limitação de uso de registradores de índice e base?
Encontrei essa resposta, espero que ajude. Na arquitetura x86 de 64 bits (x86_64), a restrição que você mencionou não é aplicável da mesma forma que era nas arquiteturas mais antigas, como o modo real ou o modo protegido da arquitetura x86 de 16 bits. Na arquitetura x86 de 16 bits, as instruções como mov word ptr [bx + si], ax eram permitidas porque as instruções de endereçamento efetuavam um cálculo de endereço relativamente simples usando registradores de base (bx) e índice (si) dentro do escopo das limitações da arquitetura de 16 bits. No entanto, na arquitetura x86 de 64 bits (x86_64), o modelo de programação é muito mais flexível e os registradores de índice e base podem ser usados de maneiras mais variadas. Na verdade, os registradores de 64 bits, como %rax, %rbx, %rcx, %rdx, entre outros, podem ser usados livremente em várias combinações para endereçamento eficaz de memória. Portanto, na arquitetura x86_64, a instrução mov word ptr [cx + dx], ax (supondo que você esteja se referindo aos registradores de 64 bits %rcx e %rdx) seria perfeitamente válida, desde que esses registradores contenham valores válidos de endereço. Não há limitação especial em usar registradores de índice e base dessa maneira na arquitetura x86_64.
Obrigado pelo conhecimento
Eu to querendo programar assembly. Eu to com um i5 650, existe alguma coisa de diferente entre os processadores de uma mesma linha? Tipo, conseguo acha tudo nas documentação? A ideia minha é fazer programas super otimizados neles.
Oi Tulho. Os processadores intel i3, i5, i7, i9 e amd ryzen têm todos a mesma arquitetura, x86-64. A implementação dessa arquitetura, que chamamos de microarquitetura, é que são diferentes. Para o programador assembly o que importa é a arquitetura, então qualquer um desses processadores vai dar no mesmo. O SO que você utiliza também influencia, já que cada sistema tem sua próprima maneira de fazer chamadas de sistema. Além disso, existem assemblers diferentes que podem apresentar algumas diferenças na hora de escrever código assembly. Abc.
15:02 - Não sou youtuber, mas achei uns vídeos sobre "Complemento de 2" e salvei em uma playlist (chamada "ACA IT MATH" ) no meu canal. Dr. Igor, didática é fora do comum. Parabéns!
Você disse que esses vídeos são um dump do que você aprendeu, onde você ta aprendendo sobre esses assuntos?
Olá professor, estou com saudades das suas aulas no TH-cam;
parabens pelo canal. informacao muito util. Falta a parte 2 sobre operações artimeticas. É possivel disponibilizar?
tá escasso conteúdo em pt br sobre assembly x86, valeu ai s2
Valeu mestre, obrigado pelas explicações :-)
Obrigado!!! Muito esclarecedora a videoaula, estava tentando aprender somente com livros e estava difícil. Ainda bem que você esta aqui!!!
Olá professor estou aprendendo muito só que eu queria me tornar um programador assembly x64 . Poderia disponibilizar mais aulas em assembly.?.Serei aluno fiel.!!!
Parabéns professor, excelente aula !!!
Otimo conteúdo, sao poucos br q fazem video desse tipo, parabéns
"A intel tenta fazer todos os processadores ser retrocompativel", so esqueceu do IA-64
x86-64 = amd64
Parabéns! Boa transmissão de conhecimentos!
Não sei qm é mais bonito?! Ou ele, ou o cachorro!
Excelente conteúdo
A parte 2 já está disponível?
achou?
Boa Aula, vlw professor!
Senhores colegas, levem essa matéria a sério e mantenham regulares as consultas aos livros na ementa. Eu não fiz isso, mas também não me arrependo, nada melhor que virar o ano assistindo esse vídeo 🙏
Por algum motivo a minha fase de compilação não ficou igual. Para importar uma função externa eu não deveria usar: #include"swap.c" ? Mas quando uso o define, o meu hello.s adiciona o swap e acaba ficando sem o @plt. Onde eu posso ter errado ? meu hello.c: #include <stdio.h> #define FORMAT_STRING "%s" #define MESSAGE "Swapping numbers " int base = 5; void swap(int *, int *); void printData(){ printf(FORMAT_STRING, MESSAGE); } int main(int argc, char *argv[]){ int a = 10 + base; int b = 20; printData(); swap(&a, &b); return 0; }
Oi Diego. Na verdade não. A diretiva include é utilizada, nesse caso, para incluir em um arquivo de código (.c) as declarações das funções externas que esse arquivo de código utiliza e não a implementação dessas funções. Por exemplo, suponha que você tem dois arquivos: main.c e swap.c. O arquivo swap.c contém o seguinte código: void swap(int *a, int *b){ int tmp = *a; *a = *b; *b= tmp; } No arquivo main.c, você tem a função main da seguinte maneira: int main (int argc, char *argv[]){ int a = 10; int b = 20; swap(&a, &b); } Se você tentar compilar o arquivo main.c não vai funcionar, porque o compilador não tem ideia de quem é a função swap. Para funcionar, você precisa fazer duas coisas: 1 - Dizer para o compilador qual é o tipo de retorno da função e quantos são e quais os tipos de seus parâmetros. 2 - Dizer para o linker onde está a implementação da função swap Para a etapa 1 existem duas opções: ou você declara a função no próprio arquivo main.c ou você declara a função swap em um arquivo separado (normalmente com a extensão .h) e escreve uma diretiva include no arquivo main.c. Vamos seguir essa segunda abordagem, declarando a função swap no arquivo swap.h. Arquivo swap.h void swap(int * , int *); Agora colocamos um include no arquivo main.c. Arquivo main.c #include "swap.h" int main (int argc, char *argv[]){ int a = 10; int b = 20; swap(&a, &b); } Pronto, agora quando você fizer a etapa de pré-processamento o arquivo main.c vai se transformar em: void swap(int * , int *); int main (int argc, char *argv[]){ int a = 10; int b = 20; swap(&a, &b); } Quando main.c for compilado, o compilador saberá exatamente o que esperar da função swap. Entretanto, o arquivo main.c sozinho não gera um executável, pois o linker vai precisar saber onde encontrar a implementação da função swap, que está no arquivo swap.c. Para resolver esse último problema, basta passar tanto o arquivo main.c quanto o arquivo swap.c para o gcc e ele chama o linker (ld) apropriadamente. Espero que consiga entender. Abraço.
Muito bom professor Igor! Esse curso de shell script tem continuação?
Adorei o conteúdo, onde está a continuação ?
Meus parabéns pela aula, Igor!
professor, você poderia disponibilizar os slides para download?
poderia disponibilizar as resoluções da aula anterior pf?
Infelizmente não consegui fazer o programa.
Eu quero ver o curso de Assembly. Acho legal.
Mt bom o conteúdo
gostaria da continuação dos vídeos. Não achei nenhum vídeo com o mesmo assunto com essa riqueza de detalhes
Faça um exercício com uma só função, isto é, você resolve todos os itens de uma só função.
Mtoo bom
Eu tava precisando mesmo estudar ELF. Vlw pelos vídeos.
Muito legal o vídeo!
Excelente Igor!! Parabéns!
Vlw Renato!
Ótimo vídeo prof! 👏👏👏👏👏
Vlw! Saudades de você. Já mandei mensagem pelo face, mas você não responde. Vê se aparece pô. Grande abraço.