действительно ли процессы получают доступ к CPU и памяти системными вызовами ядра?

Ответ Антона объясняет, что делает на. Используя WMCTRL , чтобы изменить размер или переместить окно после того, как факт будет проблематичным, хотя; Вам нужно полагаться на таймера, поэтому окно появится в неправильном положении, затем переместить (или, если машина действительно медленная, окно не будет двигаться, потому что WMCTRL работает слишком рано ). Кроме того, у вас может быть еще одно окно с тем же названием (если вы не генерируете гарантированные-уникальные названия, например со случайной строкой или временем метки).

К счастью XFCE4-терминал имеет возможность установить его начальную позицию и размер. Следует стандартным синтаксисом геометрии X11 . Используйте его вместо звонка WMCTRL . Обратите внимание, что размер выражены в клетках символов, а не в пикселях.

xfce4-terminal --geometry 80x40+10+10 --hide-menubar --hide-borders --hide-toolbars --title=dt

0
12.01.2015, 10:30
2 ответа

CPU

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

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

память Новый процесс получает начальное количество оперативной памяти (хотя я не знаю, хотя это значение по умолчанию для по умолчанию или приведено в заголовке данных двоичных данных). Если требуется больше оперативной памяти, то процесс задает ядро ​​больше (см. MAN 2 MMAP ).

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

Выход процесса

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

1
28.01.2020, 02:28

Это не так много «получить» процессор, так как он просто работает на нем. Ядро решает, на каком ядро ​​и когда и для того, как долго работает процесс. Он расплачивает задачи, чтобы каждый процесс получил дольки времени на CPU: он работает некоторое время, затем истекает срок действия срока времени, либо происходит системный вызов, контекст включен в другой процесс. Состояние программы хранится до переключателя и восстановлена, когда ядро ​​решает, что это заслуживает другого куска времени, так что он даже не замечает время пробела. Планирование может варьироваться в зависимости от - у него может быть фиксированный таймер (миллисекунды обычно), или он может быть безмолвным ... ядро ​​также управляет планированием в соответствии с приоритетом процесса (, приятно ). Процесс может быть заблокирован на определенные сердечники ( задача ). Для многопоточной программы темы самостоятельно получают свои кусочки и могут работать одновременно. Ядро может полностью приостановить программу и возобновить его позже (срабатывает Sigstop и Sigcont).

Память виртуализируется. Указатели, которые вы видите на ваших языках программирования, не являются физическими блоками памяти, но виртуальные адреса, перенесенные на физический уровень. Ядро обслуживает оперативную память на страницах (например, 4 КБ), и даже едят их немного (страница может поменяться на жесткий диск и восстанавливаться только в ОЗУ при доступе к нему). MMAP - это один из способов отображения новой страницы для некоторого адреса (где страницы могут ссылаться на файл с жесткого диска, сопоставлен в память). Однако, когда вы динамически выделяете память ( MALLOC и другие распределители), он зависит от распределения, что делать. Обычно он звонит SBRK SESCALL SESCALL, чтобы запросить больше места для своего пула памяти, или MMAP для больших чанков - реализации могут варьироваться.

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

2
28.01.2020, 02:28

Теги

Похожие вопросы