Por dentro do CORBA File System for Linux
O Serviço de Nomes O serviço de nomes é um serviço especificado
no CORBA, e disponibilizado pela maioria das implementações.
A hierarquia dos nomes é bastante parecida com a hierarquia de sistemas
de arquivos do Unix. Os nomes podem ser associados a contextos (análogo
a diretórios) ou a objetos (análogo a arquivos). A estrutura
forma uma árvore, inicada por uma raiz (no caso do serviço de
nomes, um contexto inicial é inicializado com um nome dado pela linha
de comando).
O Servidor CORBAcfs.exports, no espaço
de nomes. é responsável também por responder às
chamadas remotas de métodos dos seus serventes. Para cada diretório
exportado, é criado um servente do tipo Superblock . A
interface Superblock, definida no CFS.idl, define os métodos
que um objeto deve implementar para funcionar como um dado em disco. São
métodos para leitura, escrita, criação de ligações,
criação e remoção de diretórios, listagem
de diretórios, etc. O servidor CORBA (ServerCFS.cc) utiliza
a classe DiskSB, que realiza as operações em
disco localmente, permitindo assim o acesso remoto dos clientes ao diretório
ou arquivo local exportado.
Cada servente é então colocado no espaço de
nomes na sua posição correspondente de exportação,
em que os nomes do caminho são procurados como contextos. Se não
houver na árvore os contextos necessários para o caminho dos
objetos Superblock alocados, então o servidor se encarregará
de criá-los. Para a recepção de requisições aos serventes
dos objetos, o servidor, após a configuração, criação
dos objetos e registro dos mesmos no serviço de nomes, inicia o POA,
através do ORB. A partir daí, todas as operações
são realizadas pelos métodos públicos disponíveis
nos objetos que representam os arquivos e diretórios em disco, exportados
para o espaço de nomes. O servidor só termina quando solicitado
pelos sinais TERM, KILL, ou ABORT. Os objetos são retirados do serviço
de nomes, no caso de uma finalização correta do servidor.
O Cliente (daemon)O cliente é um daemon que realiza a comunicação do módulo com o servidor CORBA. O funcionamento básico do cliente é verificar (polling) algum dos dispositivos criados pelo módulo cfs (no diretório /dev, o módulo cria o diretório cfs e cinco dispositivos nele, de 0 a 4, utilizando-se o sistema de dispositivos devfs) e tratar as requisições pedidas (upcalls) e enviar as respostas recebidas (downcalls). A comunicação entre o espaço de usuário e de núcleo é feita portanto atravaés de dispositivos de caracteres. Entre a requisição e a resposta, o cliente acessa
o espaço de nomes em busca do caminho pedido, e tenta pegar uma referência
para um objeto Superblock. No caso de ser um contexto, ele cria um ContextSB,
que é uma implementação da interface Superblock,
e realiza a operação pedida de forma um pouco diferente da
que conhecemos quando acessamos um sistema de arquivos real: ele realiza
as operações de um diretório, mas no espaço de
nomes. Pode-se criar novos diretórios (que serão novos contextos),
listar o conteúdo de um contexto, e até criar arquivos. No
caso da criação de arquivos, um objeto da classe VirtualSB
é criado, que funciona como um arquivo, mas na memória do daemon
local. Esse objeto pode responder a acessos remotos, de outros clientes,
se o ORB no cliente estiver executando e aceitando requisições. Os objetos VirtualSB também são
criados para representar objetos no espaço de nomes que não
implementam a interface Superblock. Nesse caso, o objeto
apenas responde a leituras, com a IOR do objeto encapsulado. O Módulo O módulo tem a responsabilidade de interpretar os pedidos
feitos pelo sistema operacional para o sistema de arquivos. O módulo trata os pedidos realizados pelo sistema operacional
e os coloca numa fila. Essa fila tem seus elementos removidos e tratados pelo
daemon, que os lê através de um dispositivo especial, instalado
no O módulo também lê desse dispositivo, a fim de obter as respostas retornadas dos pedidos. Cada resposta é colocada numa outra fila, que é lida pelo próprio módulo para dar uma resposta à chamada de sistema que estiver aguardando.
Chamadas de sistema implementadasOs processos dos usuários realizam chamadas de sistema no kernel que são retransmitidas ao módulo do CFS. De todas as chamadas existentes no VFS que poderiam ser implementadas, foram implementadas somente as mais importantes, que seguem.
Navegação no espaço de nomesA representação da hierarquia de diretórios do CFS é feita usando-se contextos do espaço de nomes e diretórios dos sistemas de arquivos remotos exportados. Dessa forma é possível acessar tanto os diretórios
reais do sistema de arquivos remoto (acessando através do caminho informado
pelo segundo argumento do arquivo Assim, com os comandos comuns do Unix, como ls, cd, cat, mkdir, etc, podemos navegar pelo espaço de nomes CORBA, criar e remover contextos, e até imprimir a IOR de objetos que não estejam representando arquivos ou diretórios exportados por servidores CFS.
Autores:
Last modified: Thu Jun 6 00:31:45 EST 2002 |