Носители информации. сигналы, знаки, символы.
Носители информации
Информация – вещь нематериальная. Это сведения, которые зафиксированы (записаны) тем или иным расположением (состоянием) материального носителя, например, порядком расположения букв на странице или величиной намагниченности ленты.
Носителем информации может быть любой материальный объект. И наоборот – любой материальный объект всегда несёт на себе некую информацию (которая, однако, далеко не всегда имеет для нас значение). Например, книга как совокупность переплёта, бумажных листов, и типографской краски на них является типичным носителем информации.
Хотя любой материальный объект – носитель информации, но люди используют в качестве таковых специальные объекты, с которых информацию удобнее считывать.
Традиционно используемым носителем информации является бумага с нанесёнными на ней тем или иным способом изображениями.
Поскольку в наше время основным средством обработки информации является компьютер, то и для хранения информации используются в основном машинно-читаемые носители. Ниже приводится полный список известных типов машинных носителей с их качественными характеристиками.
Жёсткий магнитный диск, ЖМД, НЖМД (hard disk, HD). Применяется как основной стационарный носитель информации в компьютерах. Большая ёмкость, высокая скорость доступа. Иногда встречаются модели со съёмным диском, который можно вынуть из компьютера и спрятать с сейф.
Гибкий магнитный диск, ГМД (floppy disk, FD) или дискета (diskette). Основной сменный носитель для персональных компьютеров. Небольшая ёмкость, низкая скорость доступа, но и стоимость тоже низкая. Основное преимущество – транспортабельность.
Лазерный компакт-диск (CD, CD-ROM). Большая ёмкость, средняя скорость доступа, но отсутствует возможность записи информации. Запись производится на специальном оборудовании.
Перезаписываемый лазерный компакт-диск (CD-R, CD-RW). В одних случаях возможна только запись (без перезаписи), в других — также ограниченное число циклов перезаписи данных. Те же характеристики, что и для обычного компакт-диска.
DVD-диск. Аналогичен CD-ROM, но имеет более высокую плотность записи (в 5-20 раз). Имеются устройства как только для считывания, так и для записи (перезаписи) DVD.
Сменный магнитный диск типа ZIP или JAZZ. Похож на дискету, но обладает значительно большей ёмкостью.
Магнитооптический или т.н. флоптический диск. Сменный носитель большой ёмкости.
Кассета с магнитной лентой – сменный носитель для стримера (streamer) – прибора, специально предназначенного для хранения больших объёмов данных. Некоторые модели компьютеров приспособлены для записи информации на обычные магнитофонные кассеты. Кассета имеет большую ёмкость и высокую скорость записи-считывания, но медленный доступ к произвольной точке ленты.
Перфокарты – в настоящее время почти не используются.
Кассеты и микросхемы ПЗУ (read-only memory, ROM). Характеризуются невозможностью или сложностью перезаписи, небольшой ёмкостью, относительно высокой скоростью доступа, а также большой устойчивостью к внешним воздействиям. Обычно применяются в компьютерах и других электронных устройствах специализированного назначения, таких как игровые приставки, управляющие модули различных приборов, принтеры и т.д.
Магнитные карты (полоски). Маленькая ёмкость, транспортабельность, возможность сочетания машинно-читаемой и обычной текстовой информации. Кредитные карточки, пропуска, удостоверения и т.п.
Существует большое количество специализированных носителей, применяемых в различных малораспространённых приборах. Например, магнитная проволока, голограмма.
Кроме того, носителем информации является оперативная память компьютера, ОЗУ (RAM), но она не пригодна для долговременного хранения информации, поскольку данные в ней не сохраняются при отключении питания.
Сигналы, знаки, символы.
Знак и сигнал – форма передачи информации. Передача сигнала – физический процесс, имеющий информационное значение.
Символ – это знак или сигнал, наполненный смыслом. Сигнал может быть непрерывным (аналоговым) или дискретным. Аналоговый сигнал – сигнал, непрерывно изменяющийся по амплитуде и во времени. Сигнал называется дискретным, если он может принимать лишь конечное число значений. Аналоговый сигнал может быть представлен в дискретном виде, например, в виде последовательности чисел.
Процесс представления какой-либо величины в виде последовательного ряда ее отдельных (дискретных) значений называют дискретизацией.
Сигнал не может принимать менее двух различных значений. Сигналы, передаваемые в электрической форме (носитель – электромагнитные волны), обладают множеством достоинств:
1) они не требуют движущихся механических устройств, медленных и подверженных поломкам;
2) скорость передачи электрических сигналов приближается к максимально возможной скорости – скорости света;
3) электрические сигналы легко обрабатывать, сравнивать и преобразовывать с помощью электронных устройств, отличающихся чрезвычайно высоким быстродействием.
В последнее время все более широкое распространение получают системы передачи и обработки сигналов, в которых поступающие на вход аналоговые сигналы преобразуются в цифровую форму, полученные цифровые сигналы передаются, хранятся, обрабатываются, и если это необходимо производится обратное преобразование сигналов из цифровой в аналоговую форму.
Статьи к прочтению:
- Новые открытия из старого опыта — подведение итогов
- Нулевой уровень опасности. предварительный анализ
ВАЖНЫЕ СИГНАЛЫ И ПРЕДУПРЕЖДЕНИЯ ВАШЕГО АНГЕЛА-ХРАНИТЕЛЯ
Похожие статьи:
- Носители информации и технические средства
Для хранения данных Персональные компьютеры имеют четыре иерархических уровня памяти: — микропроцессорная память (МПП); — регистровая кэш-память; -…
- Современные носители, методы записи информации на носители
Гибкий диск, дискета — устройство для хранения небольших объёмов информации, представляющее собой гибкий пластиковый диск в защитной оболочке….
Практика работы с сигналами
Хочу запечатлеть небольшой опыт работы с сигналами в Linux. Ниже будут представлены примеры использования наиболее значимых конструкций в этой области. Постараюсь разложить все по отдельным полочкам, чтобы всегда было легко глянуть и вспомнить, что и как использовать. Важные факты о сигналах:
- Сигналы в Linux играют роль некоего средства межпроцессного взаимодействия (а так же и межпоточного)
- Каждый процесс имеет маску сигналов (сигналов, получение которых он игнорирует)
- Каждая нить (thread), так же как и процесс, имеет свою маску сигналов
- При получении сигнала(если он не блокируется) процесс/нить прерывается, управление передается в функцию обработчик сигнала, и если эта функция не приводит к завершению процесса/нити, то управление передается в точку на которой процесс/нить была прервана
- Можно установить свою функцию обработчик сигнала, но только для процесса. Данный обработчик будет вызываться и для каждой нити порожденной из этого процесса
Я не буду углубляться в теорию сигналов, что откуда зачем и куда. Меня в первую очередь интересует сам механизм работы с ними. Поэтому в качестве используемых сигналов будут выступать SIGUSR1 и SIGUSR2, это два единственных сигнала отданных в полное распоряжение пользователя. А так же я постараюсь уделить больше внимание именно межпоточному взаимодействию сигналов. Итак, поехали. Данная функция вызывается, когда процесс (или нить) получает неблокируемый сигнал. Дефолтный обработчик завершает наш процесс (нить). Но мы можем сами определить обработчики для интересующих нас сигналов. Следует очень осторожно относится к написанию обработчика сигналов, это не просто функция, выполняющаяся по коллбеку, происходит прерывание текущего потока выполнения без какой либо подготовительной работы, таким образом глобальные объекты могут находится в неконсистентном состоянии. Автор не берется приводить свод правил, так как сам их не знает, и призывает последовать совету Kobolog (надеюсь он не против, что я ссылаюсь на него) и изучить хотя бы вот этот материал FAQ. void hdl(int sig) { exit = true; } Установить новый обработчик сигнала можно двумя функциями sighandler_t signal(int signum, sighandler_t handler); Которая принимает номер сигнала, указатель на функцию обработчик (или же SIG_IGN (игнорировать сигнал) или SIG_DFL (дефолтный обработчик)), и возвращает старый обработчик. Сигналы SIGKILL и SIGSTOP не могут быть «перехвачены» или проигнорированы. Использование этой функции крайне не приветствуется, потому что:
- функция не блокирует получение других сигналов пока выполняется текущий обработчик, он будет прерван и начнет выполняться новый обработчик
- после первого получения сигнала (для которого мы установили свой обработчик), его обработчик будет сброшен на SIG_DFL
Этих недостатков лишена функция int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); Которая также принимает номер сигнала (кроме SIGKILL и SIGSTOP). Второй аргумент это новое описание для сигнала, через третий возвращается старое значение. Структура struct sigaction имеет следующие интересующие нас поля
- sa_handler — аналогичен sighandler_t в функции signal
- sa_mask — маска сигналов который будут блокированы пока выполняется наш обработчик. + по дефолту блокируется и сам полученный сигнал
- sa_flags — позволяет задать дополнительные действия при обработке сигнала о которых лучше почитать тут
Использование данной функции выглядит совсем просто struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_handler = hdl; sigset_t set; sigemptyset(&set); sigaddset(&set, SIGUSR1); sigaddset(&set, SIGUSR2); act.sa_mask = set; sigaction(SIGUSR1, &act, 0); sigaction(SIGUSR2, &act, 0); Здесь мы установили наш обработчик для сигналов SIGUSR1 и SUGUSR2, а также указали, что необходимо блокировать эти же сигналы пока выполняется обработчик. С обработчиком сигналов есть один не очень удобный момент, он устанавливается на весь процесс и все порожденные нити сразу. Мы не имеет возможность для каждой нити установить свой обработчик сигналов. Но при этом следует понимать что когда сигнал адресуется процессу, обработчик вызывается именно для главной нити (представляющей процесс). Если же сигнал адресуется для нити, то обработчик вызывается из контекста этой нити. См пример 1. Для того, чтобы заблокировать некоторый сигналы для процесса, необходимо добавить их в маску сигналов данного процесса. Для этого используется функция int sigprocmask(int how, const sigset_t *set, sigset_t *oldset); Мы можем к уже существующей маске сигналов добавить новые сигналы (SIG_BLOCK), можем из этой маски убрать часть сигналов (SIG_UNBLOCK), а так же установить полностью нашу маску сигналов (SIG_SETMASK). Для работы с маской сигналов внутри нити используется функция int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset); которая позволяет сделать все тоже, но уже для каждой нити в отдельности. Невозможно заблокировать сигналы SIGKILL или SIGSTOP при помощи этих функций. Попытки это сделать будут игнорироваться. Данная функция позволяет приостановить выполнении процесса (или нити) до получения нужного сигнала (или одного из маски сигналов). Особенностью этой функции является то, что при получении сигнала не будет вызвана функции обработчик сигнала. См. пример 2. Для того, чтобы послать сигнал процессу можно использовать две функции int kill(pid_t pid, int sig); int raise(int sig); С первой все понятно. Вторая нужна для того, чтобы послать сигнал самому себе, и по сути равносильна kill(getpid(), signal). Функция getpid() возвращает PID текущего процесса. Для того, чтобы послать сигнал отдельной нити, используется функция int pthread_kill(pthread_t thread, int sig); Все, что я описал выше, не дает ответа на вопрос «Зачем мне использовать сигналы». Теперь я хотел бы привести реальный пример использования сигналов и где без них попросту не обойтись. Представьте, что вы хотите читать или писать какие-то данные в какое то устройство, но это может привести к блокированию. Ну например, чтение в случае работы с сокетами. Или может быть запись в пайп. Вы можете вынести это в отдельный поток, чтобы не блокировать основную работу. Но что делать когда вам нужно завершить приложение? Как корректно прервать блокирующую операцию IO? Можно было бы задавать таймаут, но это не очень хорошее решение. Для этого есть более удобные средства: функции pselect и ppoll. Разница между ними исключительно в юзабельности, поведение у них одинаковое. В первую очередь эти функции нужны для мультиплексирования работы с IO (select/poll). Префикс ‘p’ в начале функции указывает на то, что данная функция может быть корректно прервана сигналом. Итак, сформулируем требование: Необходимо разработать приложение, открывающее сокет (для простоты UDP) и выполняющее в потоке операцию чтения. Данное приложение должно корректно без задержек завершаться по требованию пользователя. Функция треда выглядит вот так
void* blocking_read(void* arg) { if(stop) { // не успели стартовать, а нас уже прикрыли ? std::cout << «Thread was aborted\n»; pthread_exit((void *)0); } // Блокируем сигнал SIGINT sigset_t set, orig; sigemptyset(&set); sigaddset(&set, SIGINT); sigemptyset(&orig); pthread_sigmask(SIG_BLOCK, &set, &orig); if(stop) { // пока мы устанавливали блокировку сигнала он уже произошол // возвращаем все как было и выходим std::cout << «Thread was aborted\n»; pthread_sigmask(SIG_SETMASK, &orig, 0); pthread_exit((void *)0); } // Здесь нас не могут прервать сигналом SIGINT std::cout << «Start thread to blocking read\n»; // … // создаем, настраиваем сокет, подготавливаем структуру для ppoll ppoll((struct pollfd*) &clients, 1, NULL, &orig); if(stop) { // получили сигнал о завершении работы std::cout << «Thread was aborted\n»; close(sockfd); pthread_sigmask(SIG_SETMASK, &orig, 0); // сдесь сигнал SIGINT все еще заблокирован } // Мы либо считали данные, либо произошла какаято ошибка. Но мы не получали // сигнала о завершении работы и продолжаем работать «по плану» close(sockfd); pthread_exit((void *)0); }
stop
это глобальный булев флаг который устанавливается в
true
нашим обработчиком, что сообщает потоку о необходимости завершиться. Логика работы такая:
- проверяем, что пока стартовал тред его еще не пожелали завершить
- блокируем завершающий сигнал
- проверяем, что пока блокировали, нас не пожелали завершить
- вызываем ppoll передавая в качестве последнего параметра маску сигналов по которой ждется сигнал
- после выхода из ppoll проверяем что вышли не из за сигнала о завершении
Вот так выглядит главная функция int main() { … struct sigaction act; memset(&act, 0, sizeof(act)); act.sa_handler = hdl; sigemptyset(&act.sa_mask); sigaddset(&act.sa_mask, SIGINT); sigaction(SIGINT, &act, 0); … pthread_kill(th1, SIGINT); … } Устанавливаем наш обработчик для SIGINT, и когда нужно завершить дочерний поток шлем ему этот сигнал. Полный листинг см. пример 3.
На мой взгляд, недостатком данного способа является то, что в случае нескольких потоков мы можем завершить их только все сразу. Нет возможности устанавливать свой обработчик сигналов для каждого треда. Таким образом, нет возможности реализовать полноценное межпоточное взаимодействие через сигналы. Linux way это не предусматривает.
PS. Исходные коды разместил на сервисе PasteBin (ссылку не даю, а то еще за рекламу посчитают). PPS. Прошу простить за обилие ошибок. Язык, слабая моя сторона. Спасибо, всем кто помог их исправить.
Данная статья не претендует на полное (и глубокое) описание работы с сигналами и нацелена в первую очередь на тех, кто до этого момента не сталкивались с понятием «сигнал». Для более глубоко понимания работы сигналов автор призывает обратиться в более компетентные источники и ознакомиться с конструктивной критикой в комментариях.
Приложение 2: Таблица звуковых сигналов
К ст. 34
| |||
ТАБЛИЦА ЗВУКОВЫХ СИГНАЛОВ |
Порядок отбития склянок на надводных кораблях 1 и 2 ранга
Название сигнала | Сигнал на горне | Сигнал сиреной, ревуном, звонком | |
характер | Порядок передачи | ||
1 | 2 | 3 | 4 |
“Боевая тревога” | № 1 | Один непрерывный сигнал — на кораблях и судах обеспечения звонком ………. — на подводных лодках ревуном —————- | Передается один раз |
“Учебная тревога” | № 13 и 1 | Три коротких и один непрерывный сигнал звонком … ___________ | Передается один раз |
“Аварийная тревога” | Не играется | 25−30 коротких сигналов звонком …………. | Передается один раз. На подводных лодках одновременно с сигналом “Аварийная тревога” включаются ходовые огни и аварийно-сигнальный буй на мигание |
“Химическая тревога” | Не играется | Четыре коротких и один продолжительный сигнал звонком …. _________ | Повторяется три раза с промежутком в 2 секунды. |
“Радиационная опасность” | Не играется | Один короткий и два продолжительных сигнала: . ___ ___. ___ ___ ревуном – на подводных лодках звонком – на надводных кораблях | Повторяется три раза с промежутком в 2 секунды. |
“Большой сбор” | № 2 | Один короткий и один продолжительный сигнал звонком . ___ . ___. ___ | Повторяется 12−15 раз без промежутков |
“Малый сбор” | № 3 | Три коротких сигнала звонком … … | Повторяется два раза с промежутком в 1секунду |
“Аврал” | Не играется | Один короткий и один продолжительный сигнал звонком . __. __. __ | Повторяется 10−15 раз без промежутков |
“Корабль к бою и походу приготовить” | Не играется | два коротких сигнала звонком …….. | Повторяется три раза с промежутком в 2 секунды. |
“Срочное погружение” | Не играется | Не менее десяти коротких сигналов ревуном …………… | Передается один раз |
“Открыть (Закрыть) клапана вентиляции концевых групп ЦГБ” | Не играется | Один короткий сигнал ревуном . | Передается один раз |
“Открыть (Закрыть) клапана вентиляции средней группы ЦГБ” | Не играется | Два коротких сигнала ревуном .. | Передается один раз |
“Открыть (Закрыть) аварийные захлопки ЦГБ” | Не играется | Три коротких сигнала ревуном … | Передается один раз |
“Открыть (Закрыть) кингстоны концевых групп ЦГБ” | Не играется | Один короткий сигнал звонком . | Передается один раз |
“Открыть (Закрыть) кингстоны средних групп ЦГБ” | Два коротких сигнала звонком … | Передается один раз | |
“Заклинены кормовые (большие кормовые) горизонтальные рули” | Один непрерывный сигнал звонком ————— | Продолжительность звука 25−30 секунд. | |
“Вышла из строя громкоговорящая связь” | Четыре продолжительных сигнала звонком и ревуном одновременно __ __ __ __ __ __ __ __ | Передается один раз | |
“Проверка сигнализации и аварийного освещения” | Четыре продолжительных сигнала звонком и ревуном поочередно __ __ __ __ __ __ __ __ | Передается один раз | |
(Слушайте все) После передачи сигнала голосом (по трансляции) передается нужное приказание” | № 4 | Три коротких- сигнала звонком … … | Повторяется два раза с промежутком в 2 секунды. |
Проверка звонков во время осмотра и проверки механизмов | Три коротких- сигнала звонком … | Передается один раз | |
“Отбой тревоги” (или окончание объявленного действия) | № 21 | Три продолжительных сигнала звонком ____ ____ ____ | Передается один раз |
Начало, перерыв и продолжение занятий и работ | Не играется | Один продолжительный сигнала звонком ____________________ | Передается один раз |
ПОРЯДОК ОТБИТИЯ СКЛЯНОК НА НАДВОДНЫХ КОРАБЛЯХ 1 И 2 РАНГА
08.00 — отбивают 8 склянок (четыре * сдвоенных удара в корабельный колокол)
08.30 — отбивают 1 склянку (один удар)
09.00 — отбивают 2 склянки (один сдвоенный удар)
09.30 — отбивают 3 склянки (один сдвоенный удар и один удар) и так далее до 12.00.
12.00 — бьют “рынду” ** (3 троекратных удара в корабельный колокол).
Со следующего получаса, т. е. с 12.30 начинается новый счет склянок до 16.00,
с 16.00 до 20.00 и с 20.00 до 23.00, т. е. до отбоя.
В 23.00 отбивают 6 склянок.
Командиры кораблей своими приказами определяют, кому из состава дежурной и вахтенной служб отбивать склянки.
* — Сдвоенный удар производится в оба края корабельного колокола
** — “Рында” — особый бой обозначающий полдень.
Примечание:
1. На надводных кораблях и судах, не имеющих устройства для подачи сигнала с изменяющемся тоном звучания, сигнал “Боевая тревога” подается звонком (колоколом громкого боя).
2. Сигналы тревог, кроме боевой и учебной, объявляемые с учебными целями, в отличии от сигналов фактических тревог предворяются звонком или ревуном – сигналом “Слушайте все” (№ 10 – один раз) и голосом по трансляции – словом “Учебная”.
3. Длительность звуков:
Непрерывного или — 25−30 сек.
Продолжительного — 2 сек.
Короткого — 0,5 – 0,7 сек.
Длительность промежутков между звуками сигналов — 0,2 – 0,5 сек 4. В случае неисправности звонковой цепи сигнал аварийной тревоги может быть дан корабельным колоколом (ряд частых ударов).
- Главная /
- Документы /
- Корабельный устав ВМФ /
- Приложение 2: Таблица звуковых сигналов