Какие данные хранятся в микросхеме памяти cmos
«Блог системного администратора» рассмотрел сведения о BIOS и CMOS, которые нужны каждому пользователю и для исправления неполадок и для кругозора.
Вторая . Зачастую называют также часами реального времени (RTC) или энергонезависимой оперативной памятью — NVRAM.
Третья . В материнских платах компьютеров Apple ее роль выполняет PRAM.
Четвертая . Микросхема состоит из миллионов транзисторов.
Пятая . Изобретена в 1963 году Фрэнком Ванлассом, а запатентована в 1967. Первые схемы были изготовлены в 1968.
Шестая . Технология применяется также в микропроцессорах, статической RAM (SRAM), сенсорах изображений цифровых камер, других цифровых логических схемах. Применяют и в таких аналоговых схемах, как трансиверы с высокой степенью интеграции и преобразователи данных.
Седьмая . Является другой, отличной от CMOS, микросхемой. Так называют и саму микросхему и базовую систему ввода-вывода, которая в ней хранится.
Восьмая . Микросхему как аппаратный компонент также называют ROM. Энергонезависима, поэтому данные сохраняются даже при выключении компьютера.
Девятая . После включения устройства запускает самотестирование. Еще до запуска компонентов компьютера узнает о том, нет ли ошибок. Затем находит ОС и, если все работает корректно, передает ей управление устройством.
Десятая . Проверяет доступные драйвера и отвечает за выход девайса из режимов сна и гибернации.
CMOS Registers
The most updated CMOS register map, showing all of the conflicting register definitions between the various BIOSes, is in RBIL in the file called CMOS.LST.
Готовые работы на аналогичную тему
Для хранения подобных данных используется энергонезависимая $CMOS$-память. От оперативной памяти она отличается тем, что ее содержимое не удаляется после выключения ПК, а от ПЗУ – тем, что данные в нее можно заносить и изменять самостоятельно, в соответствии с тем, какое оборудование входит в состав системы. Микросхема $CMOS$-памяти питается от батарейки, которая расположена на системной плате. Заряда батарейки достаточно для того, чтобы микросхема не теряла данные даже в случае, если ПК не будут включать несколько лет.
Рисунок 2. Расположение батарейки CMOS-памяти
$CMOS$ используется для хранения информации о конфигурации, составе оборудования ПК и его параметрах, таких как данные о дисковых накопителях, о ЦП, тип видеоадаптера, наличие сопроцессора и других данных, а также о режимах его работы и информации, необходимой при запуске ПК (например, о порядке загрузки ПК). Микросхема $CMOS$-памяти также содержит электронные часы, которые указывают текущую дату и время.
Содержимое $CMOS$-памяти изменяется специальной программой $SETUP$, находящейся в $BIOS$. Тот факт, что ПК четко отслеживает время и дату (даже при выключенном питании), тоже связан с тем, что показания системных часов постоянно хранятся (и изменяются) в $CMOS$.
Обслуживание CMOS
$CMOS$-память – это небольшой, но очень важный элемент системы $BIOS$, от правильного функционирования которого зависит бесперебойная работа всего компьютера.
Несмотря на то, что $CMOS$-память потребляет мало энергии, тем не менее она все же в ней нуждается. Для питания памяти $BIOS$ в периоды времени, когда ПК отключен от сети, служит специальная литиевая батарейка. Ресурсы батарейки рассчитаны на несколько лет, но все же рано или поздно они подходят к концу и батарейку необходимо заменять.
На старых материнских платах батарейка в виде синего бочонка припаивалась к плате.
Существуют внешние батарейки для ПК, которые помещены в пластмассовые корпуса с проводами подключения. Этот корпус с помощью «липучки» закрепляют в удобном месте.
Литиевые батарейки нельзя заряжать, т.к. при зарядке они взрываются и могут повредить внутренности ПК.
На современных системных платах чаще применяется батарейка в форме таблетки в специальном держателе (рис. 3), которая легко заменяется.
Рисунок 3. Батарейка CMOS-памяти
Бывают случаи, когда нужно очистить $CMOS$-память, не прибегая к помощи программы $BIOS$. Такая ситуация может возникнуть в случае, если, например, утерян пароль для входа в ПК или в саму программу $BIOS$. Для обнуления $CMOS$ в большинстве ПК используется специальная перемычка, расположенная, как правило, в непосредственной близости от круглой литиевой батарейки. Однако лучше предварительно изучить документацию к системной плате.
Обычно для этого достаточно при выключенном ПК на несколько минут переставить перемычку в другое положение (рис. 4в).
Рисунок 4. Варианты подключения и обнуление CMOS: а – работа от внутренней батарейки, б – подключение внешней батарейки, в – обнуление CMOS
Иногда для сброса пароля предназначен отдельный переключатель (джампер). В этом случае, поменяв положение переключателя, ПК необходимо включить – только тогда пароль будет сброшен, после чего переключатель необходимо вернуть в исходное состояние.
Не стоит забывать, что при обнулении памяти $CMOS$ данные, хранящиеся в ней, будут утеряны. Поэтому могут стать неработоспособными лицензионные программы, установленные на ПК, которые привязывают свою лицензию к ключу, хранящемуся в $CMOS$-памяти.
Для страховки от подобных неприятностей после установки подобных защищенных продуктов используется специальное программное обеспечение, которое дает возможность сохранять в отдельном файле содержимое $CMOS$.
"CMOS" is a tiny bit of very low power static memory that lives on the same chip as the Real-Time Clock (RTC). It was introduced to IBM PC AT in 1984 which used Motorola MC146818A RTC.
CMOS (and the Real-Time Clock) can only be accessed through IO Ports 0x70 and 0x71. The function of the CMOS memory is to store 50 (or 114) bytes of "Setup" information for the BIOS while the computer is turned off -- because there is a separate battery that keeps the Clock and the CMOS information active.
CMOS values are accessed a byte at a time, and each byte is individually addressable. Each CMOS address is traditionally called a "register". The first 14 CMOS registers access and control the Real-Time Clock. In fact, the only truly useful registers remaining in CMOS are the Real-Time Clock registers, and register 0x10. All other registers in CMOS are almost entirely obsolete (or are not standardized), and are therefore useless.
Memory Size Registers
There are several CMOS registers that are standardized, and that seem to report useful information about the total memory on the system. However, each of them is lacking vital information that your OS will need. It is always better to use a BIOS function call to get information about memory than to use the information in CMOS. See Detecting Memory (x86).
The Real-Time Clock
The RTC keeps track of the date and time, even when the computer's power is off. The only other way that a computer used to be able to do this was to ask a human for the date/time on every bootup. Now, if the computer has an internet connection, an OS has another (arguably better) way to get the same information.
The RTC also can generate clock ticks on IRQ8 (similarly to what the PIT does on IRQ0). The highest feasible clock frequency is 8KHz. Using the RTC clock this way may actually generate more stable clock pulses than the PIT can generate. It also frees up the PIT for timing events that really need near-microsecond accuracy. Additionally, the RTC can generate an IRQ8 at a particular time of day. See the RTC article for more detailed information about using RTC interrupts.
Хранение информации в CMOS
Мы сказали, что BIOS - это аппаратно прошитый набор программ, который нельзя "просто так" изменить. Но, при помощи программы BIOS Setup можно производить настройки BIOS. Как же так? С одной стороны нельзя ничего менять, с другой - можно производить настройки? Все дело в том, что сама BIOS действительно содержит набор программ, который остается неизменным, а вот "настройки БИОС" - это не что иное, как данные для этих самых программ, которые хранятся не в микросхеме BIOS и их-то мы и можем менять во время работы с BIOS Setup.
Чтобы проще можно было понять, приведем аналогию с телевизором. В современных телевизорах есть много настроек разных параметров: яркость, контрастность, цветность…, которые изменить пользователь не может. Он может изменять только ЗНАЧЕНИЯ этих параметров, тем самым влиять на качество изображения и работу телевизора в целом.
Вот эти самые ЗНАЧЕНИЯ, изменять которые можно в BIOS Setup, хранятся в специальной микросхеме динамической памяти, которая называется CMOS (название технологии, по которой производится микросхема: Complementary Metal-Oxide-Semiconductor - комплементарный металлооксидный полупроводник или КМОП). Кроме настроек BIOS в CMOS хранятся параметры конфигурации компьютера. Суммарный объем памяти CMOS составляет всего 256 байт и потребляет она очень мало энергии. Стандартная батарейка, расположенная на материнской плате питает CMOS в течение 5-6 лет, после чего необходимо производить ее замену.
При включении компьютера происходит тестирование оборудования, в процессе которого сравнивается его текущая конфигурация с данными в CMOS-памяти. Если обнаруживаются отличия, то происходит автоматическое обновление CMOS-памяти, либо вызывается BIOS Setup.
После замены батарейки при первом включении компьютера заводские настройки, хранящиеся в BIOS, будут "сброшены" в CMOS-память. Это, кстати, один из способов устранить неисправность, если вы "перемудрили" с настройками BIOS. Для этого надо выключить компьютер, вынуть на 30 секунд батарейку из материнской платы, установить ее назад, и заводские настройки BIOS будут восстановлены, а компьютер снова заработает.
Батарейку обнаружить на материнской плате не составит большого труда, т.к. она довольно крупная. Как правило, рядом с ней располагается и микросхема CMOS. А вот BIOS-микросхема может находиться совершенно в другом месте платы - надо будет посмотреть паспорт на материнскую плату, там эта информация указана.
В общем смысле энергонезависимой памятью является любое устройство памяти ПК или его часть, которое может хранить данные не зависимо от подачи электропитания.
Условно энергонезависимой памятью можно считать энергозависимую память, которая имеет внешнее питание (от батарейки или аккумулятора). Например, часы на системной плате ПК и память для хранения настроек $BIOS$ питаются от батарейки, которая закреплена на плате.
Память $CMOS$ ($Complementary \ Metal \ Oxide \ Semiconductor$) или КМОП (Комплементарные пары Металл-Оксид-Полупроводник) – память со средним быстродействием и низким энергопотреблением, поэтому может хранить данные в течение длительного времени.
Рисунок 1. Образец CMOS-памяти
Hard Disk Registers
There are many CMOS registers in various locations, used by various ancient BIOSes, to store a "hard disk type" or other hard disk information. Any such information is strictly for use on obsolete CHS-based disk drives. Better information can always be obtained via BIOS function INT13h AH=8, or by sending an ATA 'Identify' command to the disk in ATA PIO Mode.
История технологии $CMOS$
Технология $CMOS$ известна давно. Память типа $CMOS \ RAM$ впервые была разработана в $1963$ г. в то время она была дорогой, но имела немало преимуществ. Не смотря на то, что у такой памяти ниже быстродействие, чем у обычной оперативной памяти, но для ее работы нужно меньше электроэнергии и она выделяет меньше тепловой энергии во время работы.
Для хранения данных $BIOS$ не нужно высокое быстродействие, однако желательно, чтобы количество энергии, которая используется при выполнении этой задачи, было как можно меньшим, поэтому память $CMOS$ в таком случае подходит больше всего.
Со времени открытия технологии $СМОS$ она была значительно усовершенствована. В современных ПК микросхемы $CMOS \ RAM$ применяются в большинстве элементов, даже в самом ЦП. Более того, технология $CMOS$ используется не только в ПК. Микросхемы, изготовленные по технологии $CMOS$, широко применяются не только в ПК, но и в фоточувствительных элементах (матрицах) сканеров и цифровых фотоаппаратов.
Типы биоса
Одиннадцатая . Устаревший. Применяется в относительно старых компьютерах. Загружается с помощью микропрограммы. Интерфейс пользователя в стиле «синих окон», которые почти забыты. Их помнят в основном те, кто работал с файловыми менеджерами для DOS.
Двенадцатая . UEFI BIOS. Функционал безопасности более продвинутый. С точки зрения пользователя отличается удобным интерфейсом, подобным тому, который характерен для актуальных приложений. Обычно загружается быстрее.
Accessing CMOS Registers
Accessing CMOS is extremely simple, but you always need to take into account how you want to handle NMI. You "select" a CMOS register (for reading or writing) by sending the register number to IO Port 0x70. Since the 0x80 bit of Port 0x70 controls NMI, you always end up setting that, too. So your CMOS controller always needs to know whether your OS wants NMI to be enabled or not. Selecting a CMOS register is done as follows:
Once a register is selected, you either read the value of that register on Port 0x71 (with inb or an equivalent function), or you write a new value to that register -- also on Port 0x71 (with outb, for example):
Note1: Reading or writing Port 0x71 seems to default the "selected register" back to 0xD. So you need to reselect the register every single time you want to access a CMOS register.
Note2: It is probably a good idea to have a reasonable delay after selecting a CMOS register on Port 0x70, before reading/writing the value on Port 0x71.
Checksums
The proper functioning of the BIOS during bootup depends on the values in CMOS. So the values are protected against random changes with checksums. It is very unwise ever to write a value into any of the CMOS registers (except for the RTC) -- because when you change a value you also have to go fix a BIOS-specific checksum in a different register -- or else the next boot will crash with an "invalid checksum" error. And since the checksum is located at a proprietary BIOS-specific register number, good luck finding it.
Обслуживание КМОП
Но вернемся к CMOS-памяти BIOS. Хотя эта память потребляет мало энергии, тем не менее, она все же ей нужна. В частности, для питания памяти BIOS в те промежутки времени, когда компьютер выключен из сети, служит специальная литиевая батарейка. Однако рано или поздно ресурсы батарейки подходят к концу, и для того, чтобы не потерять содержимое памяти, батарейку следует заменить.
Предположим, что у нас появилась необходимость очистить CMOS память, не прибегая к интерфейсу программы BIOS Setup. Подобная задача может потребоваться, например, в том случае, если утерян пароль для входа в компьютер или в саму программу BIOS Setup. Для обнуления КМОП в большинстве компьютеров используется специальная перемычка, расположенная, как правило, в непосредственной близости от элемента питания – круглой литиевой батарейки. Однако в каждом конкретном случае лучше всего посмотреть документацию к системной плате. Следует учесть, к тому же, что многие лицензионные программы, установленные на компьютере, привязывают свою лицензию к ключу, хранящемся в CMOS-памяти, поэтому после ее сброса они могут потерять работоспособность.
CMOS-память
Однако долго работать лишь только со стандартными устройствами компьютер не может. Ему пора бы узнать о том, что у него есть на самом деле. Истинная информация об устройствах компьютера записана на жестком диске, но и его еще надо научиться читать. У каждого человека может быть свой уникальный жесткий диск, не похожий на другие. Спрашивается, откуда программы BIOS узнают, как работать именно с вашим жестким диском?
Для этого на материнской плате есть еще одна микросхема — CMOS-память. В ней сохраняются настройки, необходимые для работы программ BIOS. В частности, здесь хранятся текущая дата и время, параметры жестких дисков и некоторых других устройств. Эта память не может быть ни оперативной (иначе она стиралась бы), ни постоянной (иначе в нее нельзя было бы вводить данные с клавиатуры). Она сделана энергонезависимой и постоянно подпитывается от небольшой аккумуляторной батарейки, тоже размещенной на материнской плате. Заряда этой батарейки хватает, чтобы компьютер не потерял настройки, даже если его не включать несколько лет.
Настройки CMOS, в частности, необходимы для задания системной даты и системного времени, при установке или замене жестких дисков, а также при выходе из большинства аварийных ситуаций. Настройкой BIOS можно, например, задать пароль, благодаря которому посторонний человек не сможет запустить компьютер. Впрочем, эта защита эффективна только от очень маленьких детей.
Contents
Getting Current Date and Time from RTC
To get each of the following date/time values from the RTC, you should first ensure that you won't be effected by an update (see below). Then select the associated "CMOS register" in the usual way, and read the value from Port 0x71.
Назначение энергонезависимой памяти CMOS
Микропрограммы в $BIOS$ считывают данные об оборудовании ПК из микросхемы $BIOS$, после чего они выполняют обращение к жесткому или гибкому диску и передают управление тем программам, которые там записаны.
Набор микропрограмм, которые составляют $BIOS$, хранятся в постоянной памяти ПК, которая располагается на системной плате. Параметры $BIOS$ зашиты компанией-разработчиком, но пользователи при надобности могут вносить необходимые изменения в эти параметры. Для этого служит связанная с $BIOS \ CMOS$-память, которая хранит настройки системы, в частности, вводимые пользователем через программу $BIOS \ Setup.$ Общий объем $CMOS$-памяти составляет всего $256$ байт.
К примеру, изготовители $BIOS$ не могут ничего знать о параметрах установленных на определенный ПК жестких или гибких дисков. Для обеспечения работы с таким оборудованием программы, которые входят в состав $BIOS$, должны знать, где можно найти нужные параметры. Но по известным причинам их нельзя хранить ни в оперативной памяти, ни в постоянном запоминающем устройстве (ПЗУ).
Register 0x10
This register contains the only CMOS value that an OS might ever find to be useful. It describes the "type" of each of the two floppy drives that may be attached to the system. The high nibble describes the "master" floppy drive on the primary bus, and the low nibble has an identical description for the "slave" floppy drive.
Value of each 4 bit nibble, and associated floppy drive type:
Bits 0 to 3 = slave floppy type, bits 4 to 7 = master floppy type
RTC Update In Progress
When the chip updates the time and date (once per second) it increases "seconds" and checks if it rolled over. If "seconds" did roll over it increases "minutes" and checks if that rolled over. This can continue through all the time and date registers (e.g. all the way up to "if year rolled over, increase century"). However, the RTC circuitry is typically relatively slow. This means that it's entirely possible to read the time and date while an update is in progress and get dodgy/inconsistent values (for example, at 9:00 o'clock you might read 8:59, or 8:60, or 8:00, or 9:00).
To help guard against this problem the RTC has an "Update in progress" flag (bit 7 of Status Register A). To read the time and date properly you have to wait until the "Update in progress" flag goes from "set" to "clear". This is not the same as checking that the "Update in progress" flag is clear.
For example, if code does "while(update_in_progress_flag != clear)" and then starts reading all the time and date registers, then the update could begin immediately after the "Update in progress" flag was checked and the code could still read dodgy/inconsistent values. To avoid this, code should wait until the flag becomes set and then wait until the flag becomes clear. That way there's almost 1 second of time to read all of the registers correctly.
Unfortunately, doing it correctly (waiting until the "Update in progress" flag becomes set and then waiting until it becomes clear) is very slow - it may take an entire second of waiting/polling before you can read the registers. There are 2 alternatives.
The first alternative is to rely on the "update interrupt". When the RTC finishes an update it generates an "update interrupt" (if it's enabled), and the IRQ handler can safely read the time and date registers without worrying about the update at all (and without checking the "Update in progress" flag); as long as the IRQ handler doesn't take almost a full second to do it. In this case you're not wasting up to 1 second of CPU time waiting/polling, but it may still take a full second before the time and date has been read. Despite this it can be a useful technique during OS boot - e.g. setup the "update interrupt" and its IRQ handler as early as you can and then do other things (e.g. loading files from disk), in the hope that the IRQ occurs before you need the time and date.
The second alternative is to be prepared for dodgy/inconsistent values and cope with them if they occur. To do this, make sure the "Update in progress" flag is clear (e.g. "while(update_in_progress_flag != clear)") then read all the time and date registers; then make sure the "Update in progress" flag is clear again (e.g. "while(update_in_progress_flag != clear)") and read all the time and date registers again. If the values that were read the first time are the same as the value that were read the second time then the values must be correct. If any of the values are different you need to do it again, and keep doing it again until the newest values are the same as the previous values.
Century Register
Originally the RTC didn't have a century register at all. In the 1990s (as the year 2000 got closer) hardware manufacturers started realising that this might become a problem; so they starting adding century registers to their RTC. Unfortunately, because there was no official standard to follow, different manufacturers used different registers.
This meant that software didn't know if there was a century register, and (if there is) which register it might be. To fix that problem the ACPI specification included a "RTC century register" field at offset 108 in its "Fixed ACPI Description Table". If this field contains zero then the RTC doesn't have a century register, and if the field is non-zero then it contains the number of the RTC register to use for century.
If there is no century register then software can guess. For example, a piece of software written in 1990 can use the (2 digit) year register to determine the most likely century - if the RTC year register is higher than or equal to 90 then the year is probably be "19YY" and if the RTC year register is less than 90 than the year must be "20YY". In this way, software can correctly determine the century for up to 99 years after the software is written.
Century Register As Time and Date Sanity Check
If the CMOS/RTC has a century register, your software was released 2014, and the CMOS/RTC says the century and year are 2008; then obviously the CMOS/RTC must be wrong.
Similarly, people tend to update their OS occasionally. If the CMOS/RTC has a century register, your software was released 2014, and the CMOS/RTC says the century and year are 2154; then it's unlikely that the OS hasn't been updated for 140 years, and far more likely that the CMOS/RTC is wrong.
Essentially; the method (described above) for guessing the century when there is no century register is much more reliable than the CMOS/RTC century register (if it exists). This means that the century register (if/when present) can be used in reverse, as a way to check if the CMOS/RTC time and date are sane (or if the CMOS/RTC has a flat battery or something).
Basically, you'd guess the century (based on the software's release date and RTC's year), then check if the CMOS/RTC century is the same as your guess and if it's not then assume all CMOS/RTC time and date fields are invalid.
Заключение
CMOS-память — это небольшой, но очень важный элемент системы BIOS, от правильного функционирования которого зависит бесперебойная работа всего компьютера. Как следствие, рекомендуем работать с ней аккуратно.
Weekday Register
The RTC chip is able to keep track of the current day of the week. All it does is increment its "Weekday" register at midnight and reset it to 1 if the incremented value would go above 7[1]. Unfortunately there is no guarantee that this register was ever set correctly by anything (including when the user changes the time and date using the BIOS configuration screen). It is entirely unreliable and should not be used.
The correct way to determine the current day of the week is to calculate it from the date (see the article on Wikipedia for details of this calculation).
Format of Bytes
There are 4 formats possible for the date/time RTC bytes:
- Binary or BCD Mode
- Hours in 12 hour format or 24 hour format
The format is controlled by Status Register B. On some CMOS/RTC chips, the format bits in Status Reg B cannot be changed. So your code needs to be able to handle all four possibilities, and it should not try to modify Status Register B's settings. So you always need to read Status Register B first, to find out what format your date/time bytes will arrive in.
- Status Register B, Bit 1 (value = 2): Enables 24 hour format if set
- Status Register B, Bit 2 (value = 4): Enables Binary mode if set
Binary mode is exactly what you would expect the value to be. If the time is 1:59:48 AM, then the value of hours would be 1, minutes would be 59 = 0x3b, and seconds would be 48 = 0x30.
In BCD mode, each of the two hex nibbles of the byte is modified to "display" a decimal number. So 1:59:48 has hours = 1, minutes = 0x59 = 89, seconds = 0x48 = 72. To convert BCD back into a "good" binary value, use: binary = ((bcd / 16) * 10) + (bcd & 0xf) [Optimised: binary = ( (bcd & 0xF0) >> 1) + ( (bcd & 0xF0) >> 3) + (bcd & 0xf)].
24 hour time is exactly what you would expect. Hour 0 is midnight to 1am, hour 23 is 11pm.
12 hour time is annoying to convert back to 24 hour time. If the hour is pm, then the 0x80 bit is set on the hour byte. So you need to mask that off. (This is true for both binary and BCD modes.) Then, midnight is 12, 1am is 1, etc. Note that carefully: midnight is not 0 -- it is 12 -- this needs to be handled as a special case in the calculation from 12 hour format to 24 hour format (by setting 12 back to 0)!
For the weekday format: Sunday = 1, Saturday = 7.
Взаимодействие
Тринадцатая . Сделанные пользователем в биосе настройки железа, в том числе скорость охлаждающего процессор вентилятора, время, дату, последовательность загрузки хранятся в микросхеме CMOS. Настройки требуют непрерывной подачи питания для сохранения. Поэтому важно периодически менять батарею. Продержится 5—6 лет, но лучше через 3 года заменить. На практике быстрее сменять железо.
Четырнадцатая . Чтобы узнать, устаревший у вас или UEFI введите msinfo32 в строке «Выполнить» и подтвердите запуск отображения сведений о системе.
Сразу после включения компьютера начинают «тикать» электронные «часы» основной шины. Их импульсы расталкивают заспавшийся процессор, и тот может начинать работу. Но для работы процессора нужны команды. Точнее говоря, нужны программы, потому что программы — это и есть упорядоченные наборы команд. Таким образом, где-то в компьютере должна быть заранее заготовлена пусковая программа, а процессор в момент пробуждения должен твердо знать, где она лежит.
Хранить эту программу на каких-либо носителях информации нельзя, потому что в момент включения процессор ничего не знает ни о каких устройствах. Чтобы он о них узнал, ему тоже нужна какая-то программа, и мы возвращаемся к тому, с чего начали. Хранить ее в оперативной памяти тоже нельзя, потому что в ней в обесточенном состоянии ничего не хранится.
Выход здесь существует один-единственный. Такую программу надо создать аппаратными средствами. Для этого на материнской плате имеется специальная микросхема, которая называется постоянным запоминающим устройством — ПЗУ. Еще при производстве в нее «зашили» стандартный комплекс программ, с которых процессор должен начинать работу. Этот комплекс программ называется базовой системой ввода-вывода (по-русски — Биос, а по-английски — BIOS).
По конструкции микросхема ПЗУ отличается от микросхем оперативной памяти, но логически это те же самые ячейки, в которых записаны какие-то числа, разве что не стираемые при выключении питания. Каждая ячейка имеет свой адрес.
После запуска процессор обращается по фиксированному адресу (всегда одному и тому же), который указывает именно на ПЗУ. Отсюда и поступают первые данные и команды. Так начинается работа процессора, а вместе с ним и компьютера. На экране в этот момент мы видим белые символы на черном фоне.
Одной из первых исполняется подпрограмма, выполняющая самотестирование компьютера. Она так и называется: Тест при включении (по-английски — POST — Power-On SelfTest). В ходе ее работы проверяется многое, но на экране мы видим только, как мелькают цифры, соответствующие проверенным ячейкам оперативной памяти.
Технология и ее история
Чем же отличается CMOS память от прочих видов памяти? Аббревиатура CMOS расшифровывается как Complementary metal oxide semiconductor. На русском эта технология пишется как КМОП (комплементарные пары металл-оксид-полупроводник). Эта память отличается низким энергопотреблением и поэтому может хранить данные в течение долгого времени.
Технология CMOS имеет давнюю историю. Память типа CMOS RAM впервые была изготовлена еще в 1963 г. Она была относительной дорогой, но имела немало преимуществ. Хотя память подобного типа обладает меньшим быстродействием, чем обычная оперативная память, но при этом она меньше потребляет электрической энергии и меньше выделяет тепловой энергии при работе.
Для хранения данных BIOS и не требуется большое быстродействие, однако количество энергии, потребляемой при реализации этой задачи, должно быть в идеале как можно меньшим, поэтому память, изготовленная по технологии CMOS, в данном случае подходит больше всего.
За полвека со времени своего открытия технология СМОS была значительно усовершенствована. Теперь микросхемы CMOS RAM применяются в большинстве элементов компьютера, даже в самом процессоре. Более того, технология КМОП используется не только в компьютерах. Микросхемы типа CMOS, например, широко применяются также в фоточувствительных элементах (матрицах) таких устройств, как сканеры и цифровые фотоаппараты.
Interpreting RTC Values
On the surface, these values from the RTC seem extremely obvious. The main difficulty comes in deciding which timezone the values represent. The two possibilities are usually UTC, or the system's timezone, including Daylight Savings. See the Time And Date article for a much more complete discussion of how to handle this issue.
Скорее всего, вы уже знаете, что такое BIOS, и для чего она служит в компьютере или ноутбуке. Однако BIOS сама по себе – это всего лишь набор микропрограмм, хранящихся в постоянной памяти компьютера (ROM), расположенной на материнской плате. Однако если бы BIOS располагала только постоянной памятью, то ее возможности были бы ограничены параметрами, зашитыми при производстве чипа BIOS, а сами пользователи не могли бы вносить изменения в параметры BIOS.
Согласитесь, что такая ситуация порождала бы массу неудобств. Для того, чтобы решить эту проблему и существует связанная с BIOS память CMOS, в которой хранятся настройки системы, в частности, вводимые пользователем через интерфейс BIOS Setup. При этом общий объем CMOS-памяти BIOS чрезвычайно мал – всего-навсего 256 байт!
Non-Maskable Interrupts
For frugality in the olden days, many functions were merged together on chips where there was "room" -- even if they did not belong together. An example is putting the A20 address enable on the PS2 keyboard controller. In the same way, the "NMI disable" control was put together with the CMOS controller and the Real-Time Clock.
NMI is meant to communicate a "panic" status from the hardware to the CPU in a way that the CPU cannot ignore. It is typically used to signal memory errors. For more information about NMI, see the NMI article.
Whenever you send a byte to IO port 0x70, the high order bit tells the hardware whether to disable NMIs from reaching the CPU. If the bit is on, NMI is disabled (until the next time you send a byte to Port 0x70). The low order 7 bits of any byte sent to Port 0x70 are used to address CMOS registers.
Читайте также: