0. Введение
В центре архитектуры unix находится ядро, оно взаимодействует с аппаратной частью компьютера, изолируя прикладные программы от особенностей архитектуры
Ядро предоставляет прикладным программам услуги с помощью системных вызовов. Например работа с файлами, создание процессов и управление ими, межпроцессное взаимодействие итд
Вокруг ядра, используя его возможности, работают приложения
Процесс запрашивает услугу с помощью системного вызова (внешне похожего на обычный вызов библиотечной функции), ядро от имени процесса выполняет запрос и возвращает процессу результат
Вот тут видно как открывается файл, читается и закрывается:
root@mars:/var/tmp/test/test# cat test.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main() {
int fd;
char buf[80];
fd = open("file", O_RDONLY);
read(fd, buf, sizeof(buf));
close(fd);
}
root@mars:/var/tmp/test/test# strace ./a.out |& tail -5
openat(AT_FDCWD, "file", O_RDONLY) = 3
read(3, "Mar 19 17:05:24 mars sshd[29845]"..., 80) = 80
close(3) = 0
exit_group(0) = ?
+++ exited with 0 +++
root@mars:/var/tmp/test/test#
Ядро состоит из трех основных систем:
- Файловая подсистема
- Подсистема управления процессами и памятью
- Подсистема ввода-вывода
Файловая подсистема дает унифицированный доступ к данным и переферийным устройствам. Также она контролирует права, выполняет размещение/удаление/запись/чтение
Большая часть прикладных функций выполняется через интерфейс ФС (в том числе доступ к периферийным устройствам), поэтому права на файлы определяют привилегии пользователя в системе
Подсистема управления процессами. Запущенные программы порождают процессы, эта подсистема контролирует и управляет ими, а также распределяет ресурсы между ними
Специальная задача ядра - scheduler, разрешает конфликты процессов в конкуренции за системные ресурсы
Модуль управления памятью обеспечивает размещение памяти для прикладных задач
Модуль межпроцессного взаимодействия уведомляет процессы о каких-либо событиях в системе и позволяет передавать данные между разными процессами
Подсистема ввода-вывода выполняет запросы двух предыдущих подсистем к периферийным устройствам. Она обеспечивает буферизацию и взаимодействует с драйверами
Драйверы это модули ядра которые обслуживают внешние устройства
No Comments