CP/M

Материал из MK90.ORG wiki
Перейти к:навигация, поиск

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, консольный командный процессор.


The BIOS and BDOS were memory-resident, while the CCP was memory-resident unless overwritten by an application, in which case it was automatically reloaded after the application finished running. A number of transient commands for standard utilities were also provided. The transient commands resided in files with the extension .COM on disk.

The BIOS directly controlled hardware components other than the CPU and main memory. It contained functions such as character input and output and the reading and writing of disk sectors. The BDOS implemented the CP/M file system and some input/output abstractions (such as redirection) on top of the BIOS. The CCP took user commands and either executed them directly (internal commands such as DIR to show a directory or ERA to delete a file) or loaded and started an executable file of the given name (transient commands such as PIP.COM to copy files or STAT.COM to show various file and system information). Third-party applications for CP/M were also essentially transient commands.

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.


Источники