Escolar Documentos
Profissional Documentos
Cultura Documentos
À (SO) E MULTIPROGRAMAÇÃO
2. Quais são os três principais objetivos de um sistema operacional? Descreva com UMA FRASE o quê
cada um desses objetivos, isoladamente, buscam oferecer?
Os três principais objetivos de um sistema operacional são:
3. Qual a finalidade de existir chamadas de sistema em um sistema operacional? Elas são implementadas
baseadas em que?
As chamadas de sistema são interfaces disponibilizadas pelo sistema operacional para
que as aplicações possam solicitar serviços e recursos do sistema, como acesso a
arquivos, comunicação com dispositivos de entrada e saída, gerenciamento de
memória, entre outros. Elas são implementadas baseadas nas interrupções do
processador, que permitem que o sistema operacional assuma o controle da execução
para atender as solicitações das aplicações.
7. O sistema operacional MS-DOS é um sistema monotarefa e monousuário, isso é, ele não oferece
nenhum suporte a multiprogramação. Suponha que você quisesse transformá-lo em um sistema
multitarefa, mas ainda monousuário. Liste TRÊS fatores de complexidade adicional que essa
transformação provocaria no projeto do sistema operacional. Escolha, a seu livre critério, UM dos TRES
fatores listados para DETALHAR como esse fator escolhido impactaria no projeto do sistema operacional
e a complexidade envolvida.
1. Gerenciamento de memória: o MS-DOS foi projetado para gerenciar a
memória de forma bastante simples, sem levar em consideração o
compartilhamento de memória entre processos. Para permitir a execução
de múltiplos processos em memória, seria necessário implementar um
esquema de gerenciamento de memória mais sofisticado, que permitisse
a alocação e desalocação dinâmica de memória para os processos e
garantisse a proteção da memória de um processo contra a escrita ou
leitura por parte de outro processo.
2. Gerenciamento de processos: o MS-DOS não tem suporte a processos e
nem a múltiplas tarefas em execução simultânea. Para tornar o sistema
operacional multitarefa, seria necessário adicionar um gerenciador de
processos, que permitisse a criação, o término e a troca de contexto
entre processos. Além disso, seria necessário implementar um esquema
de escalonamento de processos para determinar qual processo deve ser
executado em cada momento.
3. Interrupções: o MS-DOS não possui um esquema de interrupções
sofisticado, que permita ao sistema operacional lidar com eventos
externos e controlar o acesso aos dispositivos de entrada e saída. Para
tornar o sistema multitarefa, seria necessário implementar uma rotina de
tratamento de interrupções que permitisse ao sistema operacional lidar
com eventos externos e sincronizar o acesso aos dispositivos de entrada
e saída.
Um dos fatores listados acima que tem grande impacto no projeto do sistema
operacional é o gerenciamento de memória. Para permitir a execução de
múltiplos processos em memória, seria necessário implementar um esquema de
gerenciamento de memória mais sofisticado, que permitisse a alocação e
desalocação dinâmica de memória para os processos e garantisse a proteção da
memória de um processo contra a escrita ou leitura por parte de outro
processo. Isso envolveria a implementação de um esquema de paginação ou
segmentação, ou mesmo uma combinação de ambos. Esse esquema seria
responsável por dividir a memória em blocos e garantir que cada processo
tenha acesso apenas aos blocos de memória alocados a ele, prevenindo assim
que um processo interfira no espaço de memória de outro processo. Além
disso, seria necessário implementar rotinas para alocação e desalocação de
memória dinamicamente, bem como mecanismos de proteção de memória,
como a proteção de acesso em nível de página ou segmento. Tudo isso seria
uma complexidade adicional ao projeto do sistema operacional MS-DOS
original.
8. Quais são as diferenças entre uma aplicação de usuário efetuar uma chamada de função de uma
biblioteca, uma chamada a um procedimento do próprio programa (sub-rotina ou função) e uma chamada
de sistema?
1. Chamada de função de uma biblioteca:
• É uma chamada realizada por uma aplicação de usuário a uma
biblioteca de funções previamente compilada e que oferece uma
interface para que a aplicação possa realizar determinadas tarefas.
• A biblioteca pode ser estática, ou seja, seu código é incorporado
ao código da aplicação, ou dinâmica, onde a biblioteca é
carregada em tempo de execução.
• Essa chamada é realizada em nível de usuário, ou seja, a aplicação
não tem acesso direto a recursos do sistema operacional.
2. Chamada a um procedimento do próprio programa:
• É uma chamada realizada por uma aplicação a um trecho de
código específico que está contido no próprio programa.
• Essa chamada também é realizada em nível de usuário.
3. Chamada de sistema:
• É uma chamada realizada por uma aplicação para requisitar
serviços do sistema operacional, como criar um novo processo,
acessar um arquivo ou realizar operações de entrada/saída.
• Essa chamada é realizada em nível de kernel, ou seja, em um nível
mais privilegiado, pois permite acesso direto a recursos do sistema
operacional.
• A chamada de sistema pode ser realizada por meio de
interrupções de hardware ou por meio de instruções específicas
da CPU.
9. Um sistema operacional hipotético disponibiliza uma chamada de sistema para realizar alocação
dinâmica de memória. Um aluno de INF01142 dá o seguinte conselho a seus colegas: "se o programa
realiza muitas requisições diferentes de alocação dinâmica de memória, por questões de desempenho, é
melhor que se requisite toda a memória necessária, de uma única vez, no início do programa. Depois, o
programa usa a memória dessa área pré-alocada de acordo com as suas necessidades." O conselho está
correto? JUSTIFIQUE. (Obs.: considere que há memória RAM suficiente).
O conselho do aluno está parcialmente correto. De fato, a alocação dinâmica de
memória pode ser uma operação relativamente custosa em termos de
desempenho. Isso ocorre porque, ao alocar memória dinamicamente, o sistema
operacional precisa buscar por um espaço livre na memória que possa
acomodar o tamanho requisitado e, em seguida, marcar esse espaço como
ocupado. Essa busca pode ser demorada e, em sistemas muito carregados,
pode haver até mesmo fragmentação de memória, o que torna a busca ainda
mais difícil.
Por outro lado, a alocação de toda a memória necessária de uma única vez
pode ser um desperdício de recursos se nem toda a memória for utilizada pelo
programa. Além disso, se o programa requisitar mais memória do que alocou,
ele pode acabar falhando ou desperdiçando ainda mais tempo ao realizar novas
alocações dinâmicas.