CP/M

Материал из MK90.ORG wiki
Версия от 15:40, 22 января 2018; Id (обсуждение | вклад) (Компоненты ОС)
Перейти к:навигация, поиск

CP/M (сокращение от Control Programs for Microcomputers) — широко распространенная операционная система для процессоров Intel 8080/8085, первоначально предназначенная для 8-разрядных процессоров в однозадачном режиме и не более чем 64К памяти, позднее - для 16-разрядных процессоров и многопользовательского режима. Написана в 1973 году программистом Гэри Килдаллом из Digital Research на языке программирования PL/M (Programming Language for Microcomputers) [1]. Была вытеснена MS-DOS после того, как в 1981 была презентована платформа IBM PC.

Аппаратная модель

Минимальные требования к 8-битной системе с CP/M :

  • компьютерный терминал, поддерживающий набор символов ASCII;
  • микропроцессор Intel 8080 (позднее 8085) или Zilog Z80;
  • минимум 16 килобайт RAM (начиная с адреса 0)
  • A means to bootstrap the first sector of the diskette
  • минимум один накопитель на floppy-дисках;

Единственной поддерживаемой аппаратной платформой, распространяемой Digital Research, была MDS-800 - инструментальная среда разработки для Intel для платформы 8080. Производители совместимых с CP/M систем должны были кастомизировать части операционной системы под установленный размер памяти, тип и количество дисковых накопителей, консольные устройства. CP/M совместима с процессором Zilog Z80, в силу преемственности по объектному коду. В поставляемом Digital Research ядре CP/M (BDOS, CCP и основные загружаемые команды) не использовались инструкции Z80, однако это не мешало их использовать в специфичном для конкретной машине BIOS и загружаемых приложениях.

Обычно бутстрап выполнялся небольшим загрузчиком в ПЗУ, в сочетании с переключением банков памяти или подстановкой кода на шину (поскольку 8080 после сброса начинал выполнение программы с нулевого адреса, а для нормальной работы CP/M там должна располагаться RAM); для других этот бутстрап должен был вводиться в память с помощью элементов управления передней панели при каждом запуске системы.

CP/M использует 7-битный набор ASCII, использование остальных 128 символов не определено. В зависимости от конкретной системы, старший бит может использоваться произвольно - от кодирования национальных алфавитов до определения признака подчеркивания или окончания слова. Обычно интернациональные реализации используют стандарт ISO 646 norm для локальных сиволов, заменяя отдельные ASCII-символы, вместо того, чтобы располагать их за 7-битной границей.

Компоненты ОС

Загруженная в память CP/M на 8-битных системах содержит три основных компонента:

  • BIOS - Basic Input/Output System, базовая подсистема ввода-вывода;
  • BDOS - Basic Disk Operating System, базовая дисковая подсистема;
  • CCP - Console Command Processor, консольный командный процессор.

BIOS и BDOS находятся в памяти резидентно, в то время как CCP при необходимости может быть затерт программой, автоматически восстанавливаясь после завершения работы приложения. На системном диске в комплекте идет набор загружаемых команд для стандартных утилит, в виде файлов с расширением .COM.

BIOS непосредственно управляет аппаратными компонентами, отличными от центрального процессора и основной памяти: содержит функции ввода и вывода символов, а также чтения и записи секторов на диске. BDOS реализует файловую систему CP/M и некоторые абстракции ввода/вывода (например, перенаправление) поверх BIOS. CCP принимает пользовательские команды и либо выполняет их напрямую (внутренние команды, такие как DIR или ERA), либо загружает и запускает исполняемый файл с заданным именем (загружаемые команды, такие как PIP.COM или STAT.COM). Сторонние приложения для CP/M также являются загружаемыми командами.

The BDOS, CCP and standard transient commands were (ideally) the same in all installations of a particular revision of CP/M, but the BIOS portion was always adapted to the particular hardware. Adding memory to a computer, for example, meant that the CP/M system had to be reinstalled with an updated BIOS capable of addressing the additional memory. A utility was provided to patch the supplied BIOS, BDOS and CCP to allow them to be run from higher memory. Once installed, the operating system (BIOS, BDOS and CCP) was stored in reserved areas at the beginning of any disk which would be used to boot the system. On start-up, the bootloader (usually contained in a ROM firmware chip) would load the operating system from the disk in drive A:.

By modern standards CP/M was primitive, owing to the extreme constraints on program size. With version 1.0 there was no provision for detecting a changed disk. If a user changed disks without manually rereading the disk directory the system would write on the new disk using the old disk's directory information, ruining the data stored on the disk. From version 1.1 or 1.2 onwards, changing a disk then trying to write to it before its directory was read would cause a fatal error to be signalled. This avoided overwriting the disk but required a reboot and loss of the data that was to be stored on disk.

The majority of the complexity in CP/M was isolated in the BDOS, and to a lesser extent, the CCP and transient commands. This meant that by porting the limited number of simple routines in the BIOS to a particular hardware platform, the entire OS would work. This significantly reduced the development time needed to support new machines, and was one of the main reasons for CP/M's widespread use. Today this sort of abstraction is common to most OSs (a hardware abstraction layer), but at the time of CP/M's birth, OSs were typically intended to run on only one machine platform, and multilayer designs were considered unnecessary.

Источники