обрабатывать процессы процессора и памяти системными вызовами ядра?

Если я прав, обрабатывает устройства доступа по системным вызовам ядра.

Процессор и память также являются устройствами.

  1. когда процесс начинает работать, получает ли он CPU и память системными вызовами ядра?
  2. Когда процесс выполняется одновременно с другими процессами, ядро ​​планирует их запуск чередованием. Вызывает ли процесс также системные вызовы ядра, когда он отказывается от процессора и памяти для другого процесса и когда он возвращает их обратно?
  3. когда процесс завершается, он освобождает процессор и память также системными вызовами ядра?

2 Solutions collect form web for “обрабатывать процессы процессора и памяти системными вызовами ядра?”

Он не столько «получает» процессор, сколько работает на нем. Ядро решает, на каком ядре и когда и на какой срок выполняется процесс. Он расписывает задачи так, чтобы каждый процесс получал свои временные фрагменты в CPU: он выполняется некоторое время, затем либо после истечения времени ожидания, либо происходит системный вызов, контекст переключается на другой процесс. Состояние программы сохраняется перед коммутатором и восстанавливается, когда ядро ​​решает, что оно заслуживает другого кусочка времени, так что оно даже не замечает временной промежуток. Планирование может меняться – он может иметь фиксированный таймер (обычно миллисекунды), или он может быть без отметки … ядро ​​также управляет планированием в соответствии с приоритетом процесса ( nice ). Процесс может быть заблокирован на определенных ядрах ( taskset ). Для многопоточной программы потоки получают свои срезы независимо и могут выполняться одновременно. Ядро может полностью приостановить программу и возобновить ее позднее (с помощью SIGSTOP и SIGCONT).

Память виртуализирована. Указатели, которые вы видите на ваших языках программирования, не являются физическими блоками памяти, а виртуальные адреса переназначены на физический уровень. Ядро обслуживает RAM на страницах (например, 4kB) и даже перемещает их по битам (страница может быть заменена на жесткий диск и восстанавливаться только в ОЗУ при ее доступе). mmap – это один из способов сопоставить новую страницу с каким-либо адресом (где страницы могут ссылаться на файл с жесткого диска, отображаемый в память). Однако, когда вы динамически выделяете память ( malloc и другие распределители), что делать с распределителем. Обычно он вызывает sbrk syscall, чтобы запросить больше места для своего пула памяти, или mmap для более крупных блоков – реализации могут различаться.

Итак, подытожим: приоритет процесса и аффинность процессора могут быть установлены, но планировщик заботится о том, как и когда запускается программа, не нужно каким-либо образом взаимодействовать с ядром. Память подается на страницах и запрашивается через системные вызовы. Как только вы выделили память, вы получите доступ к ней без вмешательства ядра, просто через виртуальное адресное пространство.

ЦПУ

Процесс может снизить приоритет процессора (но не уменьшить его, man 2 setpriority ). Кроме того, он может спать в течение определенного времени. Но он не может решить, как экономится время, которое он сохраняет, и другие процессы.

Для ситуации с потоками см. Комментарий psusi.

memory Новый процесс получает начальный объем оперативной памяти (я не знаю, хотя это значение ядра по умолчанию или задано в данных заголовка двоичного файла). Если требуется больше ОЗУ, процесс запрашивает ядро ​​для большего количества (см. man 2 mmap ).

Как и при процессорном времени, процесс не может решить, какой процесс получит больше памяти, если он выпустит некоторые.

выход из процесса

Если процесс завершается (либо по собственному решению, либо путем его уничтожения), то ядро ​​автоматически освобождает его ресурсы. Процесс может высвободить «все» его ОЗУ до выхода, но для этого нет оснований. Вместо этого это просто вызовы _exit или exit_group .

  • Разница между syscalls и событиями raw_syscalls?
  • Способы вызова системного вызова в новом ядре
  • Как найти номера системных вызовов?
  • Получить устройство с большим номером 0 (bbffs subvolume)
  • Псевдотерминалы против пары труб
  • что такое ядро?
  • Как работает работа на дому?
  • Как вы можете изменить имя процесса Wing IDE с питона на что-то более описательное
  • Как узнать, какие регистры используются для системных вызовов?
  • Системные вызовы Ext3 во время создания и изменения файла
  • Прерывание системных вызовов при попадании сигнала
  • Результат от ядра вернулся к какому процессу?
  • Interesting Posts

    Внешняя команда для принудительного сброса потока

    Где и как я могу получить и установить сертификаты на новую установку OpenSSL?

    Удаление программных пакетов без удаления загруженного .deb в apt-cache?

    Как включить слияние дисков в fio в AWS Ubuntu 1604?

    Как я могу заставить udev принимать массовое хранение и отвергать все остальное?

    cp скрытые файлы с шаблонами glob

    Безопасно ли использовать & и перенаправление вывода вместо nohup?

    Разница между systemd и программой запуска терминала

    Удаление непустого каталога с помощью smbclient

    Как передать каталог с экранированным пространством в переменную?

    Не работает ThinkPad Helix DisplayPort

    Пути трубопроводов с различными типами котировок для замены косой черты

    скрипт задает вывод команды переменной

    Как читать содержимое локального DNS-кэша?

    Получать текстовый вывод из команд сценария оболочки на экране во время выполнения

    Linux и Unix - лучшая ОС в мире.