Отложенное и регулярное выполнение заданий

Ниже приведены общие команды, используемые с Process Management — bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice.

Datasheet

Datasheet содержит в себе информацию о наличии определенной периферии в конкретном МК, цоколевке, электрических характеристиках и маркировке чипов для STM32F103x8 и STM32F103xB, то есть для вот этих, которые обведены красным прямоугольником:

Некисло, один даташит на 8 микроконтроллеров.

Datasheet

Основное в Datasheet-е

В первую очередь нужно обратить внимание на раздел 7. Ordering information scheme, в котором указано, то обозначает каждый символ в маркировке. Например, для STM32F103C8T6: корпус  LQFP-48, 64Кб flash-а, температурный диапазон –40 to 85 °C.

Далее 2.1 Device overview. В нем есть таблица, в которой сказано, какая периферия есть в конкретном микроконтроллере и в каком количестве:

Datasheet

Основное различие между микроконтроллерами из разных колонок в количестве ножек и объеме флеша, остальное все одинаково. Небольшое исключение составляет первая колонка версий Tx: в этих микроконтроллерах поменьше модулей SPI, I2C и USART-ов. Нумерация периферии идет с единицы: то есть, если в STM32F103Cx у нас 2 SPI, то они имеют имена SPI1 и SPI2, а в STM32F103Tx у нас только SPI1. Так как Datasheet у нас на микроконтроллеры STM32F103x8 и STM32F103xB, то эта таблица справедлива только для этих моделей. К примеру STM32F103C8 или STM32F103CB соответствуют этой таблице, а STM32F103C6 нет, для него есть отдельный даташит.

В разделе 2.2 Full compatibility throughout the family говорится о том, что устройства STM32F103xx являются программно, функционально и pin-to-pin (для одинаковых корпусов) совместимыми.

В reference manual-е есть разделение на следующие «виды» микроконтроллеров: STM32F103x4 и STM32F103x6 обозначены как low-density devices, STM32F103x8 и STM32F103xB как medium-density devices, STM32F103xC, STM32F103xD и STM32F103xE как high-density devices. В устройствах Low-density devices меньше Flash и RAM памяти, таймеров и периферийных устройств. High-density devices имеют больший объем Flash и RAM памяти, а так же имеют дополнительную периферию, такую как SDIO, FSMC, I2S и DAC, при этом оставаясь полностью совместимыми с другими представителями семейства STM32F103xx. То есть, если на каком-то этапе разработки стало ясно, что выбранного микроконтроллера не хватает для реализации всех возможностей, то можно безболезненно выбрать более навороченный камень без необходимости переписывать весь существующий софт, при этом, если новый камень будет в том же корпусе, то отпадает необходимость заново разводить печатную плату.

Datasheet

Процессы, сигналы и приоритеты

  • Узнать имя файла устройства того терминала, на котором вы вошли в сеанс. tty
  • Вывести список запущенных в текущем терминале процессов. ps
  • Вывести список всех процессов, в виде таблицы с колонками ID процесса, ID родительского процесса, имя процесса. ps -A
  • Выведите список процессов, запущенных пользователями, вошедшими в сеанс. w
  • Получите список всех процессов, связанных с терминалами. ps -t
  • Выведите PID процессов, связанных с каталогом /usr. ps -C /usr
  • Выведите список процессов, содержащих «man» в имени. ps -f | grep man
  • Получите иерархический список процессов с помощью команды ps (не pstree). ps axjf
  • Вывести id текущей оболочки bash. echo $$
  • Найдите пустые файлы в каталоге linux_lab2 в фоновом режиме. find d1/ -empty &
  • Подтвердите тип содержимого двух из найденных файлов? file pusto-1
  • Запустить в фоновом режиме команду sleep 1000 и sleep 2000. Вывести информацию о запущенных задачах. sleep 1000 & sleep 2000 & jobs
  • Убить одной командой все запущенные задачи sleep. pkill sleep
  • Проверить, как задача sleep 1000, запущенная в фоновом режиме, реагируют на сигналы HUP, INT, QUIT, TRAP, KILL, TERM. hup — Обрыв терминальной линии int — Прерывание quit — Выход trap — Ловушка трассировки/останова kill — убито TERM — Завершено
  • Запрограммировать оболочку bash таким образом, чтобы при получении ей сигнала HUP она выводила список всех запущенных процессов в файл, содержащий в названии id текущей оболочки bash. trap » ps > file-$(echo $$)» HUP
  • Запустите команду sleep 10000 в фоновом режиме с приоритетом 10. nice -n 10 sleep 10000 &
  • Увеличьте приоритет предыдущей команды на 6 пунктов. renise 16 3541[id]
  • Уменьшите приоритет предыдущей команды на 10 пунктов. Приоритет изменился? Как изменить приоритет? renise 6 3541[id] (Приоритет не изменился, отказано в доступе. Можно изменить от root.)
  • От имени суперпользователя запустить команду индексирования базы данных поиска в следующем виде: sudo time nice -n 19 updatedb. Затем выполните такую же команду, в которой значение nice number для updatedb будет 5. Сравнить полученные результаты. Ответ: при запуске одинаковых команд с разными приоритетами время выполнение тоже будет разное.
  • От имени обычного пользователя попытайтесь запустить оболочку bash со значением nice number, равным -1. Какое сообщение выводится? nice: невозможно установить значение nice: Отказано в доступе.
  • Для непрерывного просмотра запущенных в системе процессов установите время обновления 10 сек. Какое время установлено по умолчанию? top -d 10 6 сек по умолчанию
  • Просмотрите список запущенных вами процессов в непрерывном режиме. top -u nikiqq
  • Организуйте завершение команды top после десяти обновлений. top -n 10
  • Использование семейства системных функций exec

    Семейство функций exec предназначено для замены образа вызывающего процесса образом нового процесса. При вызове функции fork () создается новый процесс, который является точной копией родительского процесса, а функция exec () заменяет образ «скопированного» процесса образом копии. Образ нового процесса представляет собой обычный выполняемый файл, который немедленно запускается на выполнение. Этот файл можно задать с помощью имени и пути доступа к нему. Функции семейства exec могут передать новому процессу аргументы командной строки, а также установить переменные среды. Если функция выполнилась успешно, она не возвращает никакого значения, поскольку образ процесса, который содержал обращение к функции exec, уже перезаписан. В случае неудачи вызывающему процессу возвращается число -1. Все функции exec () могут иметь неудачный исход при следующих условиях:

    Читайте также:  Настраиваем Linux Mint

      разрешения не признаны; разрешение на поиск отвергается для каталога выполняемых файлов; разрешение на выполнение отвергается для выполняемого файла;

      файлы не существуют, выполняемый файл не существует; каталог не существует;

      файл невозможно выполнить; файл невозможно выполнить, поскольку он открыт для записи другим процессом; файл не является выполняемым;

    пр облемы с символическими ссылками; при анализе пути к исполняемому файлу символические ссылки образуют циклы; символические ссылки делают путь к исполняемому файлу слишком длинным.

    Функции семейства exec используются совместно с функцией fork (). Функция fork () создает и инициализирует сыновний процесс «по образу и подобию» родительского. Образ сыновнего процесса затем заменяет образ своего предка посредством вызова функции exec (). Пример использования функций fork() и exec() показан в листинге 3.2.

    //Лис тинг 3.2. Использование системных функций fork() и exec()

    RtValue = fork();

    if(RtValue == 0){

    execl(«/path/direct»,«direct»,».»);

    В листинге 3.2 демонстрируется вызов функции fork(). Значение, которое она возвращает, сохраняется в переменной RtValue. Если значение RtValue равно 0, значит, это — сыновний процесс, и в нем вызывается функция execl() с параметрами. Первый параметр содержит путь к выполняемому модулю, второй — инструкцию для выполнения, а третий — аргумент. Второй параметр, direct, представляет собой имя утилиты, которая перечисляет все каталоги и подкаталоги из данного каталога. Всего существует шесть версий функций exec, предназначенных для использования различных соглашений о вызовах.

    kill — завершение работы процесса по его ID

    Коммнада kill предназначена для завершения работы процесса, по его ID. ID процесса вы можете получить выполнив комманды ps -A, top, или pgrep. На самом деле, команда kill отправляет сигнал процессу, ID которого указан в качестве параметра. По умолчанию, процессу отправляется сигнал TERM (15), в качестве параметра могут быть отправлены сигналы, которые не завершают работу процесса, например HUP (1). Иногда процесс так крепко зависает, что не удается убить коммандой «kill имя_процесса», в таком случае можно отправить процессу сигнал KILL (9), который точно убьет процесс, но это средство следует использовать в крайнем случае.

    Читайте также:  Как установить Linux: подробнейшая инструкция

    Back to top