Você está na página 1de 6

LISTA DE EXERCICIOS 3 – INTRODUÇÃO

À (SO) E MULTIPROGRAMAÇÃO

1. O que é um sistema operacional (definição e objetivo)?


Um sistema operacional é um software que atua como uma camada intermediária entre
o hardware de um computador e os programas e aplicativos que são executados pelo
usuário. Seu objetivo principal é gerenciar os recursos de hardware do computador,
como memória, processador, dispositivos de entrada/saída, arquivos e rede, de forma a
garantir que eles sejam utilizados de maneira eficiente e que as aplicações tenham
acesso a esses recursos de maneira organizada e segura. O sistema operacional
também fornece uma interface para o usuário interagir com o computador e controlar
o funcionamento dos programas e dispositivos conectados.

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:

1. Gerenciamento de recursos - oferecer uma interface para gerenciar e


alocar recursos de hardware e software do sistema de forma eficiente.
2. Abstração de hardware - oferecer uma camada de abstração entre o
software e o hardware, permitindo que os programas sejam escritos de
forma independente do hardware subjacente.
3. Conveniência ao usuário - fornecer um ambiente de computação fácil de
usar e interagir, com recursos de gerenciamento de arquivos, rede e
segurança

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.

4. Existe diferenças entre chaveamento de modos de execução e chaveamento de contexto ou esses


conceitos são equivalentes? Sim ou Não? Caso exista diferenças, EXPLIQUE quais são e em que
situações um ou outro tipo de chaveamento é empregado.
Sim, existem diferenças entre chaveamento de modos de execução e
chaveamento de contexto. O chaveamento de modos de execução
envolve a mudança entre diferentes modos de operação do
processador, como do modo usuário para o modo kernel ou do modo
real para o modo protegido. Já o chaveamento de contexto envolve a
troca de contexto de execução entre processos ou threads no mesmo
modo de operação, onde o estado atual do processo ou thread em
execução é salvo e o estado do próximo processo ou thread a ser
executado é carregado.

O chaveamento de modos de execução é utilizado em situações em


que é necessário acessar recursos protegidos ou executar instruções
privilegiadas, enquanto o chaveamento de contexto é empregado para
permitir que múltiplos processos ou threads sejam executados de
forma concorrente em um único processador. Em outras palavras, o
chaveamento de modos é utilizado para controlar o acesso a recursos
privilegiados, enquanto o chaveamento de contexto é usado para
permitir que vários processos ou threads compartilhem o tempo de
processamento do processador.
Regenerate response
5. O que a multiprogramação e o time-sharing (tempo compartilhado) tem em comum? Quais são as
diferenças entre esses coceitos? É possível existir multiprogramação sem interrupções? E time-sharing?
Que tipo de interrupções, se for o caso, deve existir para haver suporte a multiprogramação e ao time
sharing? EXPLIQUE.
A multiprogramação e o time-sharing são conceitos relacionados à execução
simultânea de múltiplos processos em um sistema operacional.

Ambas as técnicas permitem que diversos programas sejam executados ao


mesmo tempo, compartilhando os recursos do sistema, como processador e
memória.

A diferença entre elas é que a multiprogramação permite a execução simultânea


de vários processos em um único processador, enquanto o time-sharing
permite que múltiplos usuários utilizem o mesmo computador, com cada
usuário tendo a impressão de que está tendo acesso exclusivo a um sistema.

É possível existir multiprogramação sem interrupções, mas é necessário ter


algum mecanismo para que o sistema operacional possa alternar a execução
dos processos em execução. Normalmente, esse mecanismo é uma interrupção
de timer, que gera uma interrupção periódica que faz com que o sistema
operacional interrompa o processo em execução e execute outro.

Já o time-sharing depende do suporte a interrupções para alternar a execução


dos processos. Quando um usuário está executando um comando, por exemplo,
e digita uma tecla ou um comando de interrupção, o sistema operacional
precisa interromper a execução desse usuário e alternar para outro usuário. Essa
interrupção é geralmente gerenciada pelo sistema operacional através de
rotinas de tratamento de interrupção.
6. Que tipo de características devem ser incluídas no projeto de um processador para dar suporte a
sistemas operacionais multitarefa? Forneça pelo menos DUAS características e EXPLIQUE qual o seu
emprego (uso) na concepção de um sistema operacional multitarefa.
1. Interrupções: o processador deve suportar interrupções de hardware e
software para permitir que o sistema operacional controle o fluxo de
execução das tarefas e possa alternar entre elas de maneira eficiente. As
interrupções de hardware permitem que o sistema operacional possa
lidar com eventos externos como dispositivos de entrada e saída,
enquanto as interrupções de software permitem que o sistema
operacional possa trocar entre as tarefas.
2. Modos de execução: o processador deve ter pelo menos dois modos de
execução, o modo usuário e o modo kernel (ou supervisor). O modo
usuário é o modo padrão de execução para aplicativos e programas
comuns, enquanto o modo kernel é o modo privilegiado que permite
que o sistema operacional execute operações de sistema, como
gerenciamento de memória e operações de entrada e saída.

Essas características são importantes para garantir que o sistema operacional


possa controlar a execução de tarefas, alternando entre elas de forma segura e
eficiente. As interrupções permitem que o sistema operacional responda a
eventos externos e possa trocar entre tarefas de maneira rápida e eficiente,
enquanto os modos de execução permitem que o sistema operacional execute
operações críticas de sistema sem comprometer a segurança e a integridade do
sistema.

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.

Em resumo, as chamadas de função de biblioteca e a chamada a um


procedimento do próprio programa são chamadas de nível de usuário e são
limitadas em termos de recursos que podem acessar. Já a chamada de sistema é
realizada em nível de kernel e permite acesso direto aos recursos do sistema
operacional.

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.

Assim, uma abordagem mais adequada seria alocar memória dinamicamente,


mas com cuidado para minimizar a quantidade de alocações necessárias. Por
exemplo, o programa poderia alocar um bloco grande de memória no início,
mas dividi-lo em áreas menores conforme a necessidade. Ou ainda, o programa
poderia estimar a quantidade de memória necessária com base em dados
históricos ou em padrões de uso, e alocar uma quantidade suficiente, mas não
excessiva, de memória.
10. Qual é a diferença, se existir, entre realizar troca de contexto, entre processos ou threads, e troca de
modo de execução, onde um processo (ou thread) passa a executar código do núcleo?
Sim, existe uma diferença entre a troca de contexto e a troca de modo de
execução.

A troca de contexto ocorre quando um sistema operacional interrompe a


execução de um processo ou thread para permitir que outro processo ou thread
execute. Isso é feito para permitir que vários processos ou threads
compartilhem o processador de forma eficiente. Durante a troca de contexto, o
sistema operacional salva o contexto atual do processo ou thread, que inclui o
estado do registrador da CPU, ponteiro de instrução, ponteiro de pilha, etc. e
restaura o contexto salvo do próximo processo ou thread que será executado. A
troca de contexto é um mecanismo importante para a multiprogramação e o
time-sharing.

Já a troca de modo de execução ocorre quando um processo ou thread passa


do modo de usuário para o modo de kernel (modo privilegiado), onde ele pode
acessar recursos do sistema que normalmente não estariam disponíveis no
modo de usuário, como realizar chamadas de sistema, acessar hardware e
interromper outros processos. A troca de modo de execução é necessária para
que o sistema operacional possa controlar o acesso a recursos críticos e
proteger o sistema contra comportamentos maliciosos ou incorretos dos
processos ou threads.

Em resumo, a troca de contexto é usada para permitir que vários processos ou


threads compartilhem o processador de forma eficiente, enquanto a troca de
modo de execução é usada para proteger o sistema contra comportamentos
maliciosos ou incorretos dos processos ou threads e para controlar o acesso a
recursos críticos.

Você também pode gostar