O MVS (Multiple Virtual Storage - Armazenamento Virtual Múltiplo) foi o sistema operacional mais utilizado nos mainframes IBM System/370 e System/390. Foi desenvolvido pela IBM, porém não possui vínculo com outros sistemas operacionais da empresa, como o VSE e VM.
Lançado inicialmente em 1974, o MVS passou por diversos novos lançamentos através de outros nomes, primeiramente como MVS/SE (System Extension - Extensão de Sistema), em seguida MVS/SP (System Product - Produto de Sistema) Versão 1, e então MVS/XA (eXtended Architecture - Arquitetura Estendida), MVS/ESA (Enterprise Systems Architecture - Arquitetura de Sistemas para Negócios), OS/390 e finalmente como z/OS (quando o suporte a 64-bits foi incluído nos modelos de servidores zSeries). No sistema MVS/SP V4.3 foi acrescentado suporte a Unix (originalmente nomeado OPEN EDITION), o qual rendeu à IBM as certificações Unix e POSIX em diversos níveis. No núcleo do MVS permanece essencialmente o mesmo sistema operacional. Devido ao seu projeto, os programas escritos para o MVS executam normalmente no z/OS, sem a necessidade de serem modificados.
A princípio a IBM descreveu o MVS como uma simples atualização para o OS/VS2, porém tornou-se de fato uma versão com muitas modificações. O sistema OS/VS2 release 1 foi uma atualização para o OS/360 MVT que preservou muito do código original e, como o MVT, foi escrito em sua maior parte em Assembly. O núcleo do MVS foi praticamente todo escrito em Assembly XF, apesar de alguns módulos terem sido escritos em PL/S, exceto os relacionados à performance do sistema, em particular o Supervisor de Entrada/Saída (IOS). A IBM ressaltou com o uso do OS/VS2 a compatibilidade ascendente: programas que executavam sob o MVT não necessitavam sequer de recompilação para serem executados também sob o MVS. Os mesmos arquivos JCL poderiam ser utilizados sem quaisquer modificações, e utilitários e outros recursos não relacionados ao núcleo do sistema como o TSO também poderiam ser utilizados sem alteração alguma. A IBM e os usuários quase que unanimamente denominaram o novo sistema como MVS desde o começo, e a IBM prosseguiu com o termo em seus novos lançamentos, como foi o caso do MVS/XA.
Evolução do MVS O sistema OS/360 MFT (Multitasking with a Fixed number of Tasks - Multitarefa com um número Fixo de Tarefas) proporcionou, como o nome sugere, multitarefa: diversas partições de memória, cada uma com um tamanho fixo, eram definidas quando o sistema operacional era instalado e quando o operador as configurava. Por exemplo, poderia haver uma partição pequena, duas medianas e uma extensa. Se houvesse dois programas extensos prontos para execução, um deles deveria aguardar até o término do outro para que a partição extensa fosse liberada.
O OS/360 MVT (Multitasking with a Variable number of Tasks - Multitarefa com um número variável de tarefas) foi um aperfeiçoamento que redefiniu profundamente o uso da memória. Ao invés de utilizar partições de memória de tamanho fixo, o MVT alocava memória em regiões para utilização dos job steps conforme necessário, provendo memória física contígua suficiente. Essa foi uma melhora bastante significativa em relação ao gerenciamento de memória do MFT, mas possuía algumas desvantagens: se um job alocasse memória dinamicamente (como grande parte dos programas e sistemas de gerenciamento de bancos de dados fazem) os programadores precisavam estimar a necessidade máxima de memória que o job iria utilizar e definí-la previamente para o MVT. Um job step que combinasse programas pequenos e extensos desperdiçaria memória enquanto os programas pequenos fossem executados. Um problema maior, a memória poderia se fragmentar como, por exemplo, na situação em que a memória não utilizada pelos jobs em um dado momento poderia se dividir, de modo que formasse pequenos intervalos entre as áreas dos jobs. A única solução seria aguardar até que um dos jobs finalizasse para se iniciar um outro.
No início da década de 70, a IBM procurou suavizar estes problemas adicionando o recurso de memória virtual (denominada pela IBM como Virtual Storage - Armazenamento Virtual), a qual permitiu que os programas solicitassem espaços de endereçamento maiores que a memória física disponível. As implementações originais possuíam um único espaço de endereçamento virtual, compartilhado por todos os jobs. Os sistemas OS/VS1 e OS/VS2 foram lançados com esse recurso e, apesar de apresentarem o mesmo problema que o OS/360 MVT, os impactos foram menores, pois os jobs agora poderiam exigir muito mais espaço de endereçamento, mesmo que o armazenamento físico fosse menor.
Espaços de endereçamento do MVS - visão geral MVS (parte compartilhada de todos os espaços de endereçamento) Aplicação 1 Aplicação 2 Aplicação 3 Área virtual compartilhada (controlada pelo MVS) Visão de uma aplicação MVS Aplicação 1 Área virtual compartilhada
Em meados de 1970, a IBM apresentou o MVS, que não apenas incluía suporte a armazenamento virtual maior que o armazenamento físico como o SVS, mas também permitiu que um número indefinido de aplicações fossem executadas em diferentes espaços de memória. Dois programas concorrentes podem tentar solicitar o mesmo endereço de memória virtual, porém o sistema de memória virtual irá redirecionar estas solicitações a espaços de memória física distintos. Cada um destes espaços de endereçamento consistem em três áreas: uma para o sistema operacional (uma instância compartilhada por todos os jobs), uma área de aplicação única para cada aplicação e uma área virtual compartilhada utilizada para diversos fins, incluindo a comunicação entre jobs. A IBM informou que cada área de aplicação sempre teria ao menos 8MB de espaço. Isso tornou o MVS a solução perfeita para problemas empresariais que resultaram da necessidade de se executar mais aplicações.
O MVS maximizou o potencial de processamento ao proporcionar capacidades de multiprogramação e multiprocessamento. Como seus predecessores MVT e OS/VS2 SVS, o MVS possuía suporte à multiprogramação: instruções de programa e os dados associados são agendados por um programa de controle e dados ciclos de processamento. Diferente de um sistema operacional monoprogramado, estes sistemas maximizam o potencial de processamento dividindo os ciclos de processamento entre as instruções associadas a diversos programas executando concorrentemente. Desta forma, o programa de controle não precisa aguardar a operação de E/S ser finalizada para proceder. Executando as instruções para múltiplos programas, o computador se torna apto a retomar e avançar entre programas ativos e inativos.
As primeiras versões do MVS (meados de 1970) estiveram entre as primeiras séries de sistemas operacionais da IBM com suporte à configurações de multiprocessamento, apesar de a variante M65MP do OS/360 executando sob os modelos 65 e 67 do System/360 possuir suporte limitado a este recurso. O System/360 modelo 67 também possuía suporte aos sistemas operacionais com suporte à multiprocessamento TSS/360, MTS e CP-67. Pelo fato destes tipos de sistemas conseguirem executar várias instruções simultaneamente, oferecem um poder de processamento maior que um sistema de monoprocessamento. Como resultado, o MVS poderia tratar os problemas das empresas trazidos pela necessidade de se processar grandes quantidades de dados.
Sistemas de multiprocessamento são tanto fracamente acoplados (cada computador possui acesso a uma workload comum) como fortemente acoplados (os computadores compartilham o mesmo armazenamento real e são controlados por uma única cópia do sistema operacional). O MVS manteve o multiprocessamento fracamente acoplado do Attached Support Processor (ASP) e também o multiprocessamento fortemente acoplado do OS/360 Modelo 65 Multiprocessing. Em sistemas fortemente acoplados, duas CPUs concorrentemente compartilhadas acessam a mesma memória (e a mesma cópia do sistema operacional) e periféricos, provendo um maior poder de processamento e grau de tolerância a falhas caso uma CPU falhasse. Em configurações fracamente acopladas, cada grupo de processadores (simples e/ou fortemente acoplados) possuem sua própria memória e seu próprio sistema operacional, mas periféricos compartilhados e o componente do sistema operacional JES3 permitia o gerenciamento de todo o grupo através de um único console. Isso proporcionou maior resiliência e permitiu que os operadores decidissem quais processadores deveriam executar cada job através de uma central de listagem de jobs. O MVS JES3 deu aos seus usuários a oportunidade de conectar em rede dois ou mais sistemas de processamento de dados via discos compartilhados e adaptadores Channel-to-Channel (CTCA's). Este recurso eventualmente se tornou disponível aos usuários do JES2 como um Spool de Multi-Acesso (MAS).
Originalmente o MVS suportava endereçamento de 24 bits (até 16MB). Com o progresso da tecnologia de hardware, o suporte passou para 31 bits (XA e ESA, até 2GB), e agora para endereçamento de 64 bits (z/OS). Os motivos mais significativos para a rápida atualização para 31 bits foram o crescimento das grandes redes de processamento de transações que executavam em único espaço de endereçamento, a maioria controlada por CICS, e o fato de o sistema de gerenciamento de bancos de dados relacional DB2 precisar de mais que 8 MB de espaço de endereçamento de aplicação para executar de forma eficiente (as versões iniciais eram configuradas em dois espaços de memória que se comunicavam por uma área virtual compartilhada, mas isto demandava um espaço significativo para a área de código do programa pois todas estas comunicações precisavam ser transmitidas através do sistema operacional).
As interfaces do usuário principal para o MVS são: Job Control Language (JCL), que foi originalmente desenvolvido para processamento em batch mas, a partir da década de 70, também passou a ser utilizado para iniciar e alocar recursos para jobs interativos de longa execução como o CICS; e o TSO (Time Sharing Option - Opção de Tempo Compartilhado), que foi principalmente utilizado para executar ferramentas de desenvolvimento e alguns sistemas de informação para usuários finais. O ISPF é uma aplicação do TSO para usuários de terminais das famílias 3270 (ou superiores, assim como para VM) que permitia ao usuário realizar as mesmas tarefas que poderiam ser executadas através da linha de comando do TSO, porém em uma interface orientada a menus e campos, e com um editor em tela cheia e navegador de arquivos. A interface básica do TSO é uma linha de comando, porém algumas facilidades foram sendo adicionadas posteriormente para melhor suporte às interfaces orientadas à formulários).
O MVS deu um passo além em relação à tolerância a falhas, construído a partir do inicial utilitário STAE, que a IBM denominou software recovery - recuperação do software. A IBM resolveu dar este passo após anos de experiência com o MVT no real mundo dos negócios. Falhas de sistema estavam agora gerando maiores impactos nos negócios dos clientes, e a IBM decidiu dar um pulo maior em relação ao projeto pois, apesar das melhores técnicas de desenvolvimento e teste de softwares, problemas IRIAM acontecer. Essa posição foi primordial para o desenvolvimento de uma grande quantidade de código com o objetivo de aumentar a tolerância a falhas do sistema. Informações estatísticas são difíceis de provar a eficiência destes recursos (como mensurar problemas prevenidos ou resolvidos?), porém a IBM, em várias dimensões, aperfeiçoou estes recursos de tolerância a falhas e recuperação de software.