LINUX.ORG.RU

understanding linux


0

1

Привет всем, после некоторого «экскурса» (в интернете) в linux, rtos, embedded, system programming, начал понимать :) , что необходимо изучать linux c азов. спасибо всем, кто сделал замечания по моим темам.

по существу: читаю B.Molay «Understanding UNIX/LINUX ...». пункт 1.2.4 - «ядро дает доступ пользовательским программам к внешним устройствам компьютера, что рассматривается как отдельные службы (сервисы)». Вопрос - что такое «службы (сервисы)» ? необходимо ли понимать данный термин как «программы» или нечто другое ? и что означает «рассматривается как службы» ? (со своей стороны понимаю, что kernal (or operating system) - это более общая программа-код, связывающая пользовательские программы с внешними устройствами).

данный вопрос наверное относится к терминологии, используемой в Linux и os developing community.

буду благодарен, если на форуме смогут объяснить данные и подобные азы Линукса. Спасибо.


Давай я расскажу свое понимание всего этого.

Программа - это описание алгоритма. То есть 1) открыть холодильник 2) засунуть бегемота в холодильник 3) закрыть холодильник - это тоже программа, которая, по всему, должна выполняться человеком. Компьютерная программа - компьютером (грубо - центральным процессором).

Программы классифицируют. Я бы разделил на библиотеки и не-библиотеки. Дело в том, что куски программ очень часто повторяются. Ну, например, посмотри на эту страницу и посчитай сколько здесь нарисовано букв «е», а ведь каждую нужно нарисовать и там свой кусок алгоритма, кусок программы. Зачем десять раз переписывать одно и то же. Куски программ, которые часто повторяются запихивают в т. н. функции (подпрограммы), и чтобы их выполнить достаточно сказать процессору «выполни функцию Х» (которая где-то существует) и будет сделано то, что нужно. Функции, как правило, это часть прогамм. Но если есть функции, которые одинаковы в разных программах, создаются отдельные библиотеки. Библиотека сама по себе ничего не делает, но она нужна для других программ по причинам, которые я описал выше. Билиотека - это библиотека функций.

Не-библиотеки я бы разделил на прикладные программы и сервисы. Прикладная программа взаимодействует с человеком - ты видишь ее интерфейс и говоришь ей что делать с помощью мышки, клавиатуры и т. п. Сервисы, они же службы (как правило в Windows), они же в Unix демоны (daemons - обрати внимание на написание - deamons это не demons) взаимодействуют с другими програмами или оборудованием. Ну, например, ты вставляешь флешку, она монтируется. Пользователь ничего не видит, но сервис все сам сделал. Или антивирус - он ведь может быть без графического интерфейса, будет на фоне чего-то себе делать. Или WEB сервер - у него нет графического интерфейса, он получает из сети запрос, выплевывает HTML страницу, а вот уже браузер - это приложение. Кстати, как по мне, сервер - это демон которые работает с сетью.

Теперь ближе к делу. Ядро - это 90% библиотека. Не-библиотечного там только реакция на события от оборудования (абсолютно всего оборудования компьютера). BIOS - это 99% библиотека. Х-сервер - ну ты понял - сервер, демон, служба. А вот KDE, Gnome - это приложения.

Да, тут немного выбиваются, на первый взгляд всякие загрузочные скрипты и всякая инициализирующая лабудень. Я бы отнес это к библиотекам - все же они вызыватся другими программами, после того как завершили свою функцию - останавливаются. Демоны завершили работу - висят в памяти «слушают» события. Приложения - висят в памяти, ждут комманд от пользователя.

Это мое понимание всего этого.

Kroz ★★★★★
()

Вопрос - что такое «службы (сервисы)» ? необходимо ли понимать данный термин как «программы» или нечто другое ?

Сие есть демоны непотребные. Ознакомся,со свитком мудрости, юноша, дабы впитал разум твой знания.

AlexCones ★★★
()
Ответ на: комментарий от Kroz

Странное у вас какое-то разделение...

Я бы так сказал: ядро - это программа, распределяющая ресурсы компа а также обеспечивающая взаимодействие других программ и распределение прав. Драйверы реальных и вспомогательных виртуальных устройств и объектов крепятся как модули ядра, реже - просто предоставляют интерфейс для драйвера, раелизованного деамоном. Но все равно, сигналы от устройств сперва попадают в ядро.

Деамоны - это нечто среднее между приложениями и ядром. Они реализуют сервисы, которые не привязаны к какому-либо конкретному устройству (хотя, повторюсь, бывают и драйверы в виде демонов), а выполняют некую утилитарную работу (настройка сети, обслуживание удаленных запросов, обработка очереди печати, микширование звука, распределение потоков видео и т.д.). Многие демоны предоставляют интерфейсы приложениям. Не как альтернатива библиотекам, ведь библиотека - это набор доп. функций (не знаю, зачем вы их упомянули), а как система массового обслуживания и контроля и ограничения доступа к некоторому привелегированному ресурсу. Например, нельзя позволить всем приложения одновременно давать команды принтеру, необходима служба, которая принимает задания от приложений и выполняет по очереди.

Третье - это приложения, программы, с которыми непосредственно взаимодействует пользователь, будь то графический или консольный, непосредственный либо удаленный доступ. Такие программы легко охарактеризовываются тем, что за ними закреплено имя пользователя, который их запустил. Демоны же работают от имени системы. Сюда стоит отнести и так называемые фронт-енды к деамонам - программы, единственной целью которых есть передача запросов пользователя деамонам и ответов в обратную сторону.

Что касается скриптов загрузки и завершения работы - их лучше никуда из вышеперечисленного не определять. Как и скрипты установки ОС и программ. Это «обслуживание» системы.

segfault ★★★★★
()
Ответ на: комментарий от segfault

Да, кстати, фоновые и автозапускаемые приложения - муз. плееры, почтовые клиенты в режиме ожидания почты, скринсейверы, окружение рабочего стола и др. все равно закреплены за пользователем и запускается лишь после его логина.

segfault ★★★★★
()
Ответ на: комментарий от segfault

2 goldov
Читай все ответы не зацикливайся на моем или не segfault. У всех есть своя доля истины, но все немного упрощают. Потому как на самом деле там 1000+1 ньюанс. Идеальное объяснение (модель) - то, которое позволит тебе объяснит все, что ты видишь и работать с этим - в данном случае Линукс.

2 segfault

хотя, повторюсь, бывают и драйверы в виде демонов

В Линукс? Драйверы устройств? Приведи пример драйвера в виде демона!
Драйверы - это кусочки ядра. Это объясняет:
1) Почему почти все драйверы «настраиваются» при конфигурации ядра.
2) В случае сторонних драйверов, например nVidia - почему их нужно перекомпилировать когда устанавливаешь новое ядро.

Такие программы легко охарактеризовываются тем, что за ними закреплено имя пользователя, который их запустил.

Все запущено от имени какого-то пользователя!

Демоны же работают от имени системы

От имени пользовтеля root. Хотя, зачастую (не всегда, правда) ничего не мешает запустить какой-то демон от другого пользователя. Там где это возможно это даже рекомендуется с точки зрения безопасности.

Есть большая разница между библиотеками и демонами.

1. Библиотека загружается операционной системой по требованию программы абсолютно прозрачно для пользователя. Демон запускается пользователем или ставится в автозагрузку.

2. Да, многие программы используют функции демонов. Но для этого:
а) демон должен быть запущен на момент востребованости функции
б) используются специальные интерфейсы, а именно: TCP/IP (ip sockets), unix sockets, файлы;
в) программа и демон работают одновременно, программа ждет (или выполняет что-то паралельно) пока демон не ответит.

Библиотека же
а) необязательно изначально должна быть в памяти (она загрузится системой если программа потребует).
б) Для использования функций используется прямая передача управления функции, ее адрес в памяти находится в системых таблицах, а параметры передаются через стек
в) как уже сказано, программа передает управление функции, то есть процесс последовательный.

3. Библиотека - как бы продолжение программы. Это объясняет 2 вещи.
а) почему программа и билиотека должны быть скомпилированы одним компилятором и одной версией. Конечно, это не обсолютное требование, но настоятельная рекомендация для стабильности работы. Или с точки зрения практики - почему когда ты меняешь (апгрейдишь) компилятор и начинаешь им компилировать новые программы или библиотеки, нужно перекомпилировать всю систему (актуально для Gentoo, гуглить по ключевым словам «gcc upgrade guide gentoo»)
б) Как понять сколько программа занимает памяти, какой именно размер выдает top и почему размер некоторых программ в памяти прилично превышает из размер в файлах. Более детально например здесь: http://www.linuxcenter.ru/lib/articles/system/ps_mm.phtml
Демон - самостоятельная программа. Например, ты можешь скомпилировать различными версиями компилятора прграмму и демон, даже запустить на разных ОС - и они будут нормально взаимодействовать.

Так что разница между демоном и библиотекой большая.

Kroz ★★★★★
()

Прям заставили порадоваться меня, давно не видел человека с энтузиазмом. (лег спать в хорошом настроение и с верой в светлое...)

deterok ★★★★★
()
Ответ на: комментарий от deterok

Спасибо всем за сообщения-пояснения. 1) Правильно ли понял, что службы (daemons) - это небиблиотечные программы, которые в принципе «не общаются» и «не связываются» с пользователем (user-ом или просто программистом), а скорее «устанавливают связи» между различными процессами (исполняемыми или работающими программами), или между процессом (работающей программой) и внешним оборудованием (hardware) ? 2) также правильно ли понял из книги B.Molay «Understandin Linux ...», что службы (daemons) принадлежат ядру (kernal) ? 3)то есть daemon - это все таки не пользовательская программа, а программа присущая ядру ? 4) также правильно ли понял, что службу (daemon-программу) пишут-кодируют на ... с/c++ или assembler для какой либо определенной цели операционной системы (kernal) (например, драйверы) ?

Спасибо.

goldov
() автор топика
Ответ на: комментарий от goldov

Какую-то ерунду пишешь.

Служба/сервис как понятие — некоторая сущность, которая предоставляет доступ к определенным возможностям системы. Например, подсистемы ядра (файловая, сетевая) можно рассматривать как службы.

Но всё же чаще всего под службами понимают не части ядра, к конкретные программы, работающие в фоновом режиме. Такие программы-службы в терминологии юникса принято знать демонами.

Правильно ли понял, что службы (daemons) - это небиблиотечные программы

Хз, что ты имел ввиду.

которые в принципе «не общаются» и «не связываются» с пользователем

Да.

что службы (daemons) принадлежат ядру (kernal)

Нет.

daemon - это все таки не пользовательская программа,

Да.

а программа присущая ядру

Нет.

для какой либо определенной цели операционной системы (kernal) (например, драйверы)

Например, вот демоны, установленные у меня в системе:

$ ls /etc/rc.d | grep -v 'function'
adsl
alsa
avahi-daemon
avahi-dnsconfd
bluetooth
crond
cupsd
dbus
distccd
dnsmasq
esd
fancontrol
git-daemon
gpm
healthd
httpd
hwclock
ip6tables
iptables
irexecd
krb5-kadmind
krb5-kdc
lircd
lircmd
lxdm
mdadm
mysqld
netfs
network
nscd
openntpd
ppp
preload
rpcbind
rsyncd
samba
sensord
sensors
slpd
smbnetfs
sshd
svnserve
syslog-ng
sysstat
vde
verynice

А вот их описания:

$ ls /etc/rc.d | grep -v 'function' | (while read n ; do pacman -Qo /etc/rc.d/$n ; done) | awk '{print $3}' | sort | uniq | xargs pacman -Qi | egrep '^Название|^Описание'
Название              : alsa-utils
Описание              : An alternative implementation of Linux sound support
Название              : apache
Описание              : A high performance Unix-based HTTP server
Название              : avahi
Описание              : A multicast/unicast DNS-SD framework
Название              : bluez
Описание              : Libraries and tools for the Bluetooth protocol stack
Название              : cups
Описание              : The CUPS Printing System - deamon package
Название              : dbus-core
Описание              : Freedesktop.org message bus system
Название              : dcron
Описание              : dillon's lightweight cron daemon
Название              : distcc
Описание              : A distributed C, C++, Obj C compiler
Название              : dnsmasq
Описание              : Lightweight, easy to configure DNS forwarder and DHCP server
Название              : esound
Описание              : Enlightened Sound Daemon
Название              : git
Описание              : the fast distributed version control system
Название              : glibc
Описание              : GNU C Library
Название              : gpm
Описание              : A mouse server for the console and xterm
Название              : initscripts
Описание              : System initialization/bootup scripts
Название              : iptables
Описание              : A Linux kernel packet control tool
Название              : krb5
Описание              : The Kerberos network authentication system
Название              : lirc-utils
Описание              : Linux Infrared Remote Control utils
Название              : lm_sensors
Описание              : Collection of user space tools for general SMBus access and hardware monitoring
Название              : lxdm-git
Описание              : Lightweight Display Manager (part of LXDE)
Название              : mdadm
Описание              : A tool for managing/monitoring Linux md device arrays, also known as Software RAID
Название              : mysql
Описание              : A fast SQL database server
Название              : openntpd
Описание              : Free, easy to use implementation of the Network Time Protocol.
Название              : openslp
Описание              : Open-source implementation of Service Location Protocol
Название              : openssh
Описание              : Free version of the SSH connectivity tools
Название              : ppp
Описание              : A daemon which implements the Point-to-Point Protocol for dial-up networking
Название              : preload
Описание              : Makes applications run faster by prefetching binaries and shared objects
Название              : rpcbind
Описание              : portmap replacement which supports RPC over various protocols
Название              : rp-pppoe
Описание              : Roaring Penguin's Point-to-Point Protocol over Ethernet client
Название              : rsync
Описание              : A file transfer program to keep remote files in sync
Название              : samba
Описание              : Tools to access a server's filespace and printers via SMB
Название              : smbnetfs
Описание              : small C program that mounts Microsoft network neighborhood in single directory.
Название              : subversion
Описание              : A Modern Concurrent Version Control System
Название              : syslog-ng
Описание              : Next-generation syslogd with advanced networking and filtering capabilities
Название              : sysstat
Описание              : a collection of performance monitoring tools (iostat,isag,mpstat,pidstat,sadf,sar)
Название              : vde2
Описание              : Virtual Distributed Ethernet for emulators like qemu
Название              : verynice
Описание              : A tool for dynamically adjusting the nice level of processes under UNIX-like operating systems.

geekless ★★
()
Ответ на: комментарий от geekless

> daemon - это все таки не пользовательская программа, Да. И почему? Вполне себе может быть «пользовательская»

chi
()
Ответ на: комментарий от Kroz

> daemons - обрати внимание на написание - deamons это не demons

daemons.......deamons

deamons

=D

Crow
()
Ответ на: комментарий от chi

> И почему? Вполне себе может быть «пользовательская»

Ок, пусть будет так:

> daemon - это все таки не пользовательская программа

Чаще всего, да.

geekless ★★
()
Ответ на: комментарий от Kroz

> В Линукс? Драйверы устройств? Приведи пример драйвера в виде демона!

Легко! Xorg-server - один большой мультидрайвер, заодно и графическая подсистема и система ввода. Драйверы не некоторые сканеры также идут в виде деамонов. Драйвер андроид-телефонов - тоже деамон.

Все запущено от имени какого-то пользователя!

Ядро вообще подобных флагов не имеет. Деамоны, как правило, запущены от таких учетных записей, которые не соответствуют никакому пользователю.

Демоны же работают от имени системы

От имени пользовтеля root.

У кого как... у меня, как у нормальных людей, root=сисетма, а для пользователей заведены другие учетные записи.

Есть большая разница между библиотеками и демонами.

Между тапком и рассветом тоже большая разница. И это не повод упоминать тапок, когда речь идет о явлениях природы. Говоря прямо, ТС ничего не спрашивал про библиотеки.

segfault ★★★★★
()
Ответ на: комментарий от segfault

> Легко! Xorg-server - один большой мультидрайвер, заодно и графическая подсистема и система ввода.
Ни в коем случае. В самом названии сказано: xorg-server

> Драйверы не некоторые сканеры также идут в виде деамонов. Драйвер андроид-телефонов - тоже деамон.
Ты путаешь драйвер и сервер. Драйвер - это тот, кто непосредственно работает с устройством. Сервер (сканеров, принтеров и т. п.) служит для распределния ресурса, чтобы много программ имели доступ к одному устройству. В твоем первом посте про принтер был очень правильный пример. Но сервер - это демон.
Драйвера - это модули ядра, демоны - отдельные программы, которые запускаются после старта ядра.

> Деамоны, как правило, запущены от таких учетных записей, которые не соответствуют никакому пользователю.
Да ладно! А ну запусти комманду top или htop и посмотри от кого запущены syslog, squid, dhcpcd... Они запущены от рута, вполне определенного пользователя. Более того, такие процессы как kworker, flush, reiserfs, ksoftirqd, которые по факту являются процессами ядра, также работают от имени пользователя root.

> У кого как... у меня, как у нормальных людей, root=сисетма, а для пользователей заведены другие учетные записи.
Ок, давай определимся с понятием «пользователь». В моем понимании все пользователи системы перечислены в файле /etc/passwd .

Говоря прямо, ТС ничего не спрашивал про библиотеки.
ТС справшивал являются ли службы - программой. Я в своем посте расписал что такое программа и какие программы бывают, чтобы было понимание.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

> Ты путаешь драйвер и сервер. Драйвер - это тот, кто непосредственно работает с устройством.

Ну... можно и так сказать... только почему-то «драйвер» предоставляет интерфейс сырого USB, а логика общения с устройством заложена в «сервере». Но если на это закрыть глаза, то да, ты прав.

Они запущены от рута, вполне определенного пользователя.
В моем понимании все пользователи системы перечислены в файле /etc/passwd .

Но не все, что перечислено в /etc/passwd, является учетками пользователей. На моем личном ноуте один пользователь (я), и зовусь я не «root», а в /etc/passwd аж 37 записей. Под ними обычно работают деамоны.

ТС справшивал являются ли службы - программой. Я в своем посте расписал что такое программа и какие программы бывают

Но библиотеки же != программы. Зачем было их упоминать?

segfault ★★★★★
()
Ответ на: комментарий от segfault

В одной умной книге было сказано, что 99% споров и недопониманий между людьми состоит в том, что они говоря одинаковые слова, понимают под ними разные вещи. Данный тред - тому подтверждение.

Вроде сошлись на том, что понимание у нас одно, «словарь терминов» немного разный.

Kroz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.