====== Programação UNIX Avançada ====== Prof. Carlos Maziero, Dr\\ Prof. Luiz Lima Jr, Dr\\ PPGIA/PUCPR ===== Conteúdo ===== - **[[unix:|Revisão de UNIX]]** - **[[unix:Desenvolvimento em Linux]]**: edição e compilação; bibliotecas (uso, criação) e chamadas de sistema; execução e depuração; tratamento de erros; documentação online. - **Processos**: modelo de processos UNIX, criação de processos (''fork'', ''wait'', ''clone'', ''exec*''); variáveis de ambiente; argumentos de linha de comando; processos em //background// & //foreground//; manipulação de contextos (''ucontext''). - **Comunicação entre processos**: IPC System V e IPC Posix; //Pipes//, //named pipes//; filas de mensagens; memória compartilhada; semáforos. - **Threads**: //threads// de usuários e //threads// de núcleo; modelos de //threads//; Posix //threads//: criação, sincronização; //user-level threads//. - **Sinais**: tipos de sinais; geração, espera, Interceptação e tratamento; mascaramento de sinais. - **[[Sistema de arquivos]]**: hierarquia de diretórios; arquivos padrão (''stdin'', ''stdout'', ''stderr''); I/O em arquivos; manipulação de arquivos; permissões de acesso; manipulação e navegação em diretórios; hard & symbolic links; concorrência de acesso: advisory/mandatory locking; shared/exclusive locks. - **[[Comunicação em Rede]]**: tipos de sockets; domínios de comunicação; aplicações cliente/servidor com //sockets//; daemons; RPC. - **[[Gerência de Tempo]]**: referências de tempo; temporizadores. - **[[Gerência de Memória]]**: modelo de memória; ''malloc'', ''calloc'', ''free'', ''realloc''; arquivos mapeados em memória. - **[[Acesso a Dispositivos]]**: drivers de dispositivos em Linux; major & minor numbers; os sistemas ''/dev'' e ''/proc''; chamada ''ioctl''. ===== Cronograma ===== Este curso está dimensionado para uma duração de 40 horas-aula. ===== Bibliografia recomendada ===== * Notas de aula fornecidas pelos professores * Advanced UNIX Programming, 2nd ed, M. Rochkind. Ed. Addison-Wesley, 2004. * UNIX Systems Programming. Kay Robbins, Steve Robbins, Prentice-Hall, 2003. * UNIX Network Programming, vols 1 & 2. Richard Stevens, Ed. Prentice-Hall, 1998. * Linux Device Drivers, 2nd ed. Rubini & Corbet. Ed. O’Reilly, 2001. * [[http://espec.ppgia.pucpr.br/doc|Documentação complementar]]