Операционная система Линукс! Начинается! ! !

Операционная система Linux

Эта статья в основном познакомит вас с операционной системой Linux, включая саму Linux, с тем, как использовать Linux и как работают системные вызовы и Linux.

Введение в Linux

UNIX — это интерактивная система для одновременного управления несколькими процессами и несколькими пользователями в сети. Почему я говорю UNIX, потому что Linux разработан из UNIX, UNIX разработан программистами, и его основные сервисные объекты тоже программисты. Linux наследует цели разработки UNIX. От смартфонов до автомобилей, суперкомпьютеров и бытовой техники, от домашних компьютеров до корпоративных серверов — операционная система Linux везде.

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

ls A*

означает только список всех файлов, начинающихся с A, тогда команда

rm A*

Вы должны удалить все файлы, которые начинаются с буквы A, а не удалять только имя файла.A*документ. Эта функция также最小吃惊原则(principle of least surprise)

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

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

Многим не нравится избыточность.Зачем использовать текст, когда можно описать, что вы хотите сделать в cp? Это пустая трата драгоценногоhacking time. Чтобы извлечь все содержащие строки из файлаardстроку, программист Linux должен ввести

grep ard f

Линукс интерфейс

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

Приложение инициирует системный вызов для помещения параметров в регистры (иногда в стек) и выдаетtrapСистема поймана на инструкции переключиться из пользовательского режима в режим ядра. Поскольку инструкции trap не могут быть написаны непосредственно на C, C предоставляет библиотеку, функции которой соответствуют системным вызовам. Некоторые функции написаны на ассемблере, но их можно вызывать из C. Каждая функция сначала помещает параметры в соответствующие места, а затем выполняет инструкцию системного вызова. Поэтому, если вы хотите выполнить системный вызов read, программа C вызовет библиотеку чтения для его выполнения. Здесь, кстати, интерфейс библиотеки, указанный POSIX, а не интерфейс системного вызова. То есть POSIX сообщает стандартной системе, какие библиотечные процедуры должны быть предоставлены, каковы их аргументы, что они должны делать и какие результаты должны возвращать.

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

в LinuxGUI(Graphical User Interface)Как и в UNIX, этот графический интерфейс создает среду рабочего стола, которая включает в себя окна, объекты и папки, панели инструментов и функции перетаскивания файлов. Полный графический интерфейс также включает оконный менеджер и различные приложения.

Графический интерфейс в Linux поддерживается окном X, а основными компонентами являются X-сервер, управляющий клавиатурой, мышью, монитором и т. д. При использовании графического интерфейса в Linux пользователи могут запускать программы или открывать файлы с помощью щелчков мыши, копировать файлы путем перетаскивания и т. д.

Компоненты Linux

Фактически операционная система Linux может состоять из следующих частей.

  • 引导程序(Bootloader): загрузчик — это программное обеспечение, которое управляет процессом запуска компьютера.Для большинства пользователей это просто всплывающее окно, но внутренняя операционная система делает много вещей
  • 内核(Kernel): ядро ​​является ядром операционной системы и отвечает за управление ЦП, памятью, периферийными устройствами и т. д.
  • 初始化系统(Init System): это подсистема, которая загружает пространство пользователя и отвечает за управление демоном. Как только начальная загрузка передается от загрузчика, именно система инициализации управляет процессом загрузки.
  • 后台进程(Daemon): Фоновые процессы, как следует из названия, — это программы, работающие в фоновом режиме, такие как печать, звук, планирование и т. д. Их можно запустить во время процесса загрузки или после входа на рабочий стол.
  • 图形服务器(Graphical server): это подсистема, которая отображает графику на мониторе. Его часто называют X-сервером или X.
  • 桌面环境(Desktop environment): это часть, с которой на самом деле взаимодействует пользователь, существует множество сред рабочего стола на выбор, каждая со встроенными приложениями, такими как файловые менеджеры, веб-браузеры, игры и т. д.
  • 应用程序(Applications): среда рабочего стола не предлагает полных приложений, как Windows и macOS, Linux предлагает тысячи высококачественных программ, которые можно легко найти и установить.

Shell

Хотя приложения Linux имеют графический интерфейс, большинство программистов предпочитают использовать命令行(command-line interface), Известный какshell. Пользователь обычно запускает окно оболочки в графическом интерфейсе, а затем работает в окне оболочки.

Командная строка оболочки быстрее, мощнее и легко расширяема без необходимости肢体重复性劳损(RSI).

Некоторые из простейших оболочек bash описаны ниже. Когда оболочка запускается, она сначала инициализируется, печатая提示符(prompt), обычно знак процента или доллара, ожидающий ввода пользователя

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

cp src dest

вызовет приложение cp с двумя аргументамиsrcиdest. Программа интерпретирует первый аргумент как имя существующего файла и создает копию этого файла с именем dest.

Не все параметры являются именами файлов, например следующие

head -20 file

Первый параметр, -20, указывает головному приложению напечатать первые 20 строк файла вместо 10 строк по умолчанию. Параметры, управляющие командными операциями или задающие необязательные значения, называются标志(flag), по соглашению следует использовать флаги-Представлять. Это обозначение необходимо, например.

head 20 file

— вполне законная команда, которая сообщает головной программе вывести первые 10 строк файла с именем 20, а затем первые 10 строк файла с именем file. Операционные системы Linux могут принимать один или несколько аргументов.

Чтобы упростить указание нескольких имен файлов, оболочка поддерживает魔法字符(magic character), также называется通配符(wild cards). Например,*Вы можете сопоставить одну или несколько возможных строк

ls *.c

сообщает ls перечислить все имена файлов, начинающиеся с.cконечный файл. Если одновременно существует несколько файлов, они будут объединены позже.

Еще один подстановочный знак — это вопросительный знак, который соответствует любому символу. Группа символов в скобках может представлять любой из них, поэтому

ls [abc]*

перечислит всеa,bилиcНачало документа.

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

Стандартный вывод вводится с клавиатуры, стандартный вывод или стандартная ошибка выводятся на дисплей. Многие программы Linux по умолчанию являются вводом из стандартного ввода и выводом из стандартного вывода. Например

sort	

Вызывается программа сортировки, данные считываются с терминала (до конца нажатия пользователем ctrl-d), сортируются по алфавиту, и результат выводится на экран.

Обычно вы также можете перенаправить стандартный ввод и стандартный вывод, перенаправляя стандартный ввод с помощью<за которым следует имя файла. Стандартный вывод может передавать знак больше>перенаправить. Позволяет перенаправить стандартный ввод и вывод внутри команды. например команда

sort <in >out

Заставляет sort принимать входные данные из файла и выводить результат в выходной файл. Поскольку стандартная ошибка не перенаправляется, сообщения об ошибках выводятся прямо на экран. Программа, которая читает со стандартного ввода, обрабатывает его и записывает на стандартный вывод, называется过滤器.

Рассмотрим три отдельных инструкции, выполненные следующим составом

sort <in >temp;head -30 <temp;rm temp

Сначала вызывается приложение сортировки, которое считывает стандартный ввод и передает стандартный вывод в temp. Когда программа завершит работу, оболочка запустится и скажет ей напечатать первые 30 строк, которые будут напечатаны на стандартном выводе (терминал по умолчанию). Наконец, временный файл удаляется.Аккуратно уходишь, рукавом машешь, не взяв с собой облака.

Первая программа в командной строке обычно производит выходные данные, а в приведенном выше примере ни один из созданных выходных данных не принимается временным файлом. Однако Linux также предоставляет для этого простую команду, например следующую:

sort <in | head -30

выше|Называемый символом вертикальной черты, он означает, что вывод сортировки из приложения сортировки отображается непосредственно как ввод без необходимости создавать, использовать и удалять временные файлы. Набор команд, соединенных символом вертикальной черты, называется管道(pipeline). Например, следующим образом

grep cxuan *.c | sort | head -30 | tail -5 >f00

для любого.tФайл в конце содержитcxuanСтроки записываются в стандартный вывод, а затем сортируются. Первые 30 строк этого содержимого берутся из головы и передаются в хвост, который, в свою очередь, передает последние 5 строк в foo. В этом примере представлен конвейер для соединения нескольких команд вместе.

Вы можете поместить ряд команд оболочки в файл и запустить этот файл в качестве входных данных. Оболочка обрабатывает их по порядку, точно так же, как ввод команд на клавиатуре. Файл, содержащий команды оболочки, называетсяshell 脚本(shell scripts).

Рекомендуемый сайт для изучения команд оболочки:www.shellscript.sh/

сценарий оболочки на самом деле является программой, сценарий оболочки может быть назначен переменным, также содержит оператор управления циклом, такой какесли, для, покаПодождите, оболочка была спроектирована так, чтобы выглядеть как C (Нет сомнений, что C — это отец). Поскольку оболочка также является пользовательской программой, пользователь может выбрать другую оболочку.

Linux-приложение

Командная строка Linux, также известная как оболочка, состоит из большого количества стандартных приложений. Эти приложения в основном включают следующие шесть

  • Команды управления файлами и каталогами
  • фильтр
  • текстовая программа
  • Управление системой
  • Инструменты разработки программ, такие как редакторы и компиляторы
  • разное

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

В приведенных выше примерах мы видели несколько приложений Linux, таких как sort, cp, ls, head, давайте взглянем на другие приложения Linux.

Начнем с нескольких примеров, таких как

cp a b

состоит в том, чтобы сделать копию a как b , и

mv a b

это переместить a в b , но удалить исходный файл.

Между приведенными выше двумя командами есть некоторые различия.cpЧтобы скопировать файл, будут два файла A и B после завершения копии; иmvЭто эквивалентно перемещению файлов.После завершения перемещения файла больше нет.catКоманда может объединять содержимое нескольких файлов. использоватьrmФайлы можно удалять; используйтеchmodВладельцу может быть разрешено изменять права доступа, создание и удаление файловых каталогов может осуществляться с помощьюmkdirиrmdirкоманда; использоватьlsВы можете просматривать файлы каталогов, ls может отображать множество атрибутов, таких как размер, пользователь, дата создания и т. д.; сортировка определяет порядок отображения файлов

Приложение для Linux также включает фильтр grep,grepИзвлечение строк, специфичных для шаблона, из стандартного ввода или из одного или нескольких входных файлов;sortСортировка ввода и вывода в стандартный вывод;headИзвлеките первые несколько строк ввода; tail извлеките несколько последних строк ввода; другие фильтрыcutиpaste, что позволяет вырезать и копировать строки текста;odконвертировать ввод в ASCII;trРеализовать преобразование регистра символов;prДля форматирования распечаток и т. д.

Использование инструментов компиляции программgcc;

makeКоманда используется для автоматической компиляции. Это очень мощная команда. Она используется для поддержки большой программы. Часто исходный код такой программы состоит из множества файлов. Как правило, некоторыеheader files 头文件, исходные файлы обычно используютincludeДиректива содержит эти файлы, а роль make — отследить, какие файлы принадлежат заголовочным файлам, а затем организовать процесс автоматической компиляции.

Стандартные приложения для POSIX перечислены ниже.

программа применение
ls список каталогов
cp копировать файл
head Показать первые несколько строк файла
make Скомпилируйте файлы для создания двоичных файлов
cd переключить каталог
mkdir Создать каталог
chmod Изменить права доступа к файлам
ps Список файлового процесса
pr форматированная печать
rm удалить файл
rmdir удалить каталог файлов
tail Извлечь последние несколько строк файла
tr преобразование набора символов
grep группировка
cat Печать нескольких файлов на STDOUT
od Отображать файлы в восьмеричном
cut вырезать из файла
paste Вставить из файла

Структура ядра Linux

Выше мы видели общую структуру Linux, давайте взглянем на структуру ядра Linux с общей точки зрения.

Ядро находится непосредственно на оборудовании, и основная роль ядра — взаимодействие ввода-вывода, управление памятью и контроль доступа к процессору. Также включены в изображение выше中断и调度器Прерывания являются основным способом взаимодействия с устройством. Планировщик вступает в игру, когда происходит прерывание. Низкоуровневой код здесь останавливает рабочий процесс, сохраняет его состояние в структуре процесса ядра и запускает драйвер. Планирование процессов также происходит, когда ядро ​​завершает некоторые операции и запускает пользовательские процессы. Планировщик на рисунке является диспетчером.

Обратите внимание, что планировщик здесьdispatcherвместоscheduler, между ними есть разница

И планировщик, и диспетчер — это понятия, связанные с планированием процессов, разница в том, что планировщик случайным образом выбирает процесс из нескольких процессов, а диспетчер выделяет ЦП процессу, выбранному планировщиком.

Затем мы делим систему ядра на три части.

  • Раздел ввода-вывода отвечает за все части ядра, которые взаимодействуют с устройствами и выполняют операции ввода-вывода в сети и хранилище.

Как видно из рисунка соотношение между уровнями ввода/вывода, самый высокий уровень – это虚拟文件系统, то есть независимо от того, поступает ли файл из памяти или с диска, он проходит через виртуальную файловую систему. Внизу все драйверы являются драйверами символов или драйверами блочных устройств. Основное различие между ними заключается в том, разрешен ли произвольный доступ. Сетевое дисковое устройство не является независимым дисковым устройством, на самом деле это символьное устройство, но метод обработки сетевого устройства отличается от метода обработки символьного устройства.

В приведенном выше драйвере устройства код ядра отличается для каждого типа устройства. Есть два способа использования устройства символов, есть一键式Такие как vi или emacs, каждый требует ввода с клавиатуры. Другие, такие как оболочка, - это необходимость ввести строку и нажать Enter, чтобы отправить программу редактирования строки.

Сетевое программное обеспечение обычно является модульным и поддерживается различными устройствами и протоколами. Большинство систем Linux включают в себя полную функциональность аппаратного маршрутизатора в ядре, но его нельзя сравнивать с внешним маршрутизатором, который协议栈, включая протокол TCP/IP, интерфейс сокета находится в стеке протоколов, а сокет отвечает за связь с внешним миром и действует как шлюз.

Над дисководом находится планировщик ввода-вывода, который отвечает за сортировку и распределение операций чтения и записи с диска, чтобы свести к минимуму бесполезные движения головки.

  • Правая сторона ввода/вывода — это компонент памяти.Программа загружается в память и выполняется ЦП.Это будет включать компоненты виртуальной памяти, то, как страницы загружаются и выгружаются, а также замена поврежденных страниц и часто используемые страницы будут кэшированы.

  • Модуль процесса отвечает за создание и завершение процессов, а также за планирование процессов.Linux рассматривает процессы и потоки как исполняемые объекты и использует унифицированную стратегию планирования для планирования.

На верхнем уровне ядра находится интерфейс системных вызовов. Через него проходят все системные вызовы. Системный вызов вызовет ловушку для перевода системы из пользовательского режима в режим ядра, а затем передаст управление вышеперечисленным компонентам ядра.