Команды для работы с текстовыми файлами

Основные команды OC UNIX.

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

Классификация команд. 1.команды для работы с файловой системой 2. команды для работы с текстовыми файлами 3. тестирующие команды

1.Для работы с файловой системой используются команды:

· cd смена директории

· pwd выдать текущую директорию

· mkdir создать директорию

· cp копирование файла

· mv перенос (переименование) файла

· rm удалить файл

rm –r рекурсивное удаление

rm-i спрашивает разрешение на удаление

rm-f удалять не спрашивая

$ rm-f *.b

· rmdir удалить директорию

· ls выдать содержимое директории, по умолчанию выдаётся содержимое текущего каталога, но каталог можно и задавать

–R рекурсивный список

-l выдать файлы в длинном формате

-a выдача всех файлов, включая скрытые (т.е. начинающиеся с точки)

cd переход в домашний каталог пользователя

-t сортировка по времени создания

-r соритровка в обратном порядке

· chmod изменение права доступа к файлу или директории

· find поиск файла по файловой системе

-name файл - заставляет команду find искать указанный файл;

-print - выводит имена найденных файлов.

· cpio копирование больших объемов файлов; создание архива и извлечение из него

· tar создание архива

$ tar cvf ar.tar /tmp

Команды для работы с текстовыми файлами

· cat выдать содержание файла на стандартный выход.

· split разбивает файлы на части

· less постраничная выдача текстового файла

· more постраничная выдача текстового файла (менее функционально)

· wc выводит число строк, слов и символов в файле

- с символы

- w слова

- l строки

$ ls –l | wc –l выдаёт сколько файлов в текущем каталоге

· grep ищет строку с заданной подстрокой во входном потоке

· vi Экранный текстовый редактор редактор

работает в 2-х режимах: режим набора текста и режим редоктирования

:wq выход с записью

:q выход без записи

· ed строчный текстовый редактор

· sed потоковый редактор

· diff сравнить текстовые файлы

· man выдача помощи по командам

Тестирующие команды и работы с переменными

· echo выдать строку на стандартный выход

$ echo “Hello”

-n не выдавать возврат коретки после строчки

-e разрешить служебные символы внутри строки

· date команда работы с датами, формат выдачи можно задавать

· cal календарь

· expr вычислить выражение

$ expr 2 + 3

· eval выполнить выражение (shell команду)

$ str=”cat f1”

$ eval $str

· set выдать переменные среды

· who выдаёт пользователей, работающих в системе

· ps показывает список выполняющихся процессов

· kill убить процесс

kill <№ процесса> убить навсегда

kill all <Название процесса> убить процесс по имени

· file выдаёт тип файла

· type Выдаёт тип

$ type ls

Ответ: /bin/ls

· test выполняет проверку условий

Вызов команд

<команда> [ключи] -- <аргументы >

Все аргументы разделяются пробелами. Шаблоны и переменные интерпретируются shell, команде передаются реальные значения.

$ ls|grep “.txt” выдают файлы txt в каталоге

$ \ переход на другую строку в конвейере

Для вызова собственных команд необходимо указать путь:

/home/stud/имякоманды

./имякоманды

Получение справки по команде. команда –help или команда -?

man команда

man №раздела команда

Выполнение команды с помощью функций exec:

execl (путь, аргумент1, аргумент2, … , 0)

execlp (файл, аргумент1, аргумент2, … , 0)

execle (путь, аргументы, среда)

execv (путь, двумерный массив аргументов)

execvp (файл, двумерный массив аргументов)

Поддержка многонитевого программирования.

Нити

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

Что создаётся с помощью fork() – это тяжёлые процессы.

Минусы:

- Затрудненное совместное использование данных;

- Проблемы синхронизации ;

- Порождение процесса ресурсоёмкое ;

- Накладные расходы на переключение процессов.

Для решения проблем fork() используется нити. Они выполняются в том же адресном пространстве что и породивший процесс, имеют отдельные: программный сигнал, стек, маску обработки сигналов, errno – номер ошибки.

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

Нити иногда называют облегченными процессами или мини-процессами. Каждая нить выполняется строго последовательно и имеет свой собственный программный счетчик и стек. Нити, как и процессы, могут, например, порождать нити-потомки, могут переходить из состояния в состояние. Подобно традиционным процессам (то есть процессам, состоящим из одной нити), нити могут находится в одном из следующих состояний: ВЫПОЛНЕНИЕ, ОЖИДАНИЕ и ГОТОВНОСТЬ. Пока одна нить заблокирована, другая нить того же процесса может выполняться. Нити разделяют процессор так, как это делают процессы, в соответствии с различными вариантами планирования.

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

Schedule – планировщик.

Pth – библиотека для нитей. Использует clone, она эмулирует API POSIX.1c.

Состояния нити:

Команды для работы с текстовыми файлами - student2.ru

Основные функции работы с нитями:

Pth_init() инициализирует библиотеку;

Pth_kill() убивает библиотеку;

Pth_ctrl(запрос, аргументы) информация о нитях : число нитей, приоритет, имя.

Pth_attr_init(атрибуты) инициализирует атрибуты

Pth_attr_set(атрибуты, поле, значение)

Нить = Pth_spaw (атрибуты, функции, аргументы ) создание нити;

Pth_suspend() зарезервировать нить

Pth_resume() задействовать ранее зарезервированную нить

Pth_yield() передает управление нити или планировщику

Pth_exit(значение) завершение нити.

Управление вводом-выводом

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

Устройства ввода-вывода делятся на два типа: блок-ориентированные устройства и байт-ориентированные устройства. Блок-ориентированные устройства хранят информацию в блоках фиксированного размера, каждый из которых имеет свой собственный адрес. Самое распространенное блок-ориентированное устройство - диск. Байт-ориентированные устройства не адресуемы и не позволяют производить операцию поиска, они генерируют или потребляют последовательность байтов. Примерами являются терминалы, строчные принтеры, сетевые адаптеры. Однако некоторые внешние устройства не относятся ни к одному классу, например, часы, которые, с одной стороны, не адресуемы, а с другой стороны, не порождают потока байтов. Это устройство только выдает сигнал прерывания в некоторые моменты времени.

Команды для работы с текстовыми файлами - student2.ru Организация программного обеспечения ввода-вывода

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

Ключевым принципом является независимость от устройств.

Вид программы не должен зависеть от того, читает ли она данные с гибкого диска или с жесткого диска.

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

Для решения поставленных проблем целесообразно разделить программное обеспечение ввода-вывода на четыре слоя: 1. Обработка прерываний, 2. Драйверы устройств, 3. Независимый от устройств слой операционной системы, 4. Пользовательский слой программного обеспечения.

Обработка прерываний

Прерывания должны быть скрыты как можно глубже в недрах операционной системы, чтобы как можно меньшая часть ОС имела с ними дело. Наилучший способ состоит в разрешении процессу, инициировавшему операцию ввода-вывода, блокировать себя до завершения операции и наступления прерывания. Процесс может блокировать себя, используя, например, вызов DOWN для семафора, или вызов WAIT для переменной условия, или вызов RECEIVE для ожидания сообщения. При наступлении прерывания процедура обработки прерывания выполняет разблокирование процесса, инициировавшего операцию ввода-вывода, используя вызовы UP, SIGNAL или посылая процессу сообщение. В любом случае эффект от прерывания будет состоять в том, что ранее заблокированный процесс теперь продолжит свое выполнение.

Драйверы устройств

Весь зависимый от устройства код помещается в драйвер устройства. Драйвер устройства принимает запрос от устройств программного слоя и решает, как его выполнить. Типичным запросом является чтение n блоков данных. Если драйвер был свободен во время поступления запроса, то он начинает выполнять запрос немедленно. Если же он был занят обслуживанием другого запроса, то вновь поступивший запрос присоединяется к очереди уже имеющихся запросов, и он будет выполнен, когда наступит его очередь.

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

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

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

5. Диспетчеризация процессов. Алгоритмы планирования.

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

Дисциплины диспетчеризации

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

Некоторые основные дисциплины диспетчеризации: дисциплина FCFS (first come — first served), задачи обслуживаются «в порядке очереди» Образуются две очереди: одна образуется из новых задач, а вторая— из ранее выполнявшихся, но попавших в состояние ожидание.

Дисциплина SJN (shortest job next) требует, чтобы для каждого задания была известна оценка в потребностях машинного времени. предполагает, что имеется только одна очередь заданий, готовых к выполнению. И задания, которые в процессе своего исполнения были временно заблокированы, вновь попадают в конец очереди. Это приводит к тому, что задания, которым требуется очень немного времени для своего завершения, вынуждены ожидать процессор наравне с длительными работами, что не всегда хорошо.Для устранения этого недостатка предложена дисциплина SRT (shortest remaining time, следующее задание требует меньше всего времени для своего завершения).

дисциплина RR (round robin, круговая, карусельная) и приоритетные методы обслуживания предполагает, что каждая задача получает процессорное время порциями (говорят: квантами времени, q). После окончания кванта времени q задача снимается с процессора и он передается следующей задаче. Снятая задача ставится в конец очереди задач, готовых к выполнению

Диспетчеризация без перераспределения процессорного времени, то есть невытесняющая многозадачность (non-preemptive multitasking) — это такой способ диспетчеризации процессов, при котором активный процесс выполняется до тех пор, пока он сам не отдаст управление диспетчеру задач для выбора из очереди другого, готового к выполнению процесса или треда. Дисциплины обслуживания FCFS, SJN, SRT относятся к не вытесняющим.

Диспетчеризация с перераспределением процессорного времени между задачами, то есть вытесняющая многозадачность (preemptive multitasking) — это такой способ, при котором решение о переключении процессора с выполнения одного процесса на выполнение другого процесса принимается диспетчером задач, а не самой активной задачей. При вытесняющей многозадачности механизм диспетчеризации задач целиком сосредоточен в операционной системе. Дисциплина RR и многие другие, построенные на ее основе, относятся к вытесняющим.

Доступ любой задачи к центральному процессу осуществляется через системные программы планировщика, диспетчера. Планирование это организация процессов в некоторую последовательность. Планировщик – программа ответственная за постановку процессов в очередь. Диспетчер – это программа, которая выбирает процесс из очереди, переводит его в активное состояние.

Планирование процессов включает в себя решение следующих основных задач:

1) Определение момента времени для смены определяемого процесса;

2) Вывод процесса на выполнения из очереди готовых процессов;

3) Переключение контекстов в процессы;

Первые две задачи решаются программными средствами, последняя – незначительной степени аппарата. Существует множество различных алгоритмов планирования процессов, рассмотрим подробнее две группы, наиболее чаще встречающихся алгоритмов:

1) Алгоритмы, основанные на квантование;

2) Алгоритмы, основанные на приоритетах.

В соответствие с алгоритмами основанные на квантование, смена активного процесса происходит если:

1) Исчерпан квант процессорного времени;

2) Процесс завершился и покинул систему;

3) Процесс перешел в состояние ожидания;

4) Произошла ошибка.

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

Сообщения

С сообщениями работают четыре системных функции: msgget, которая возвращает (и в некоторых случаях создает) дескриптор сообщения, определяющий очередь сообщений и используемый другими системными функциями, msgctl, которая устанавливает и возвращает связанные с дескриптором сообщений параметры или удаляет дескрипторы, msgsnd, которая посылает сообщение, и msgrcv, которая получает сообщение.

Синтаксис вызова системной функции msgget:

msgqid = msgget(key,flag);

где msgqid - возвращаемый функцией дескриптор, а key и flag имеют ту же семантику, что и в системной функции типа "get".

Для посылки сообщения процесс использует системную функцию msgsnd:

msgsnd(msgqid,msg,count,flag);

где msgqid - дескриптор очереди сообщений, обычно возвращаемый функцией msgget, msg - указатель на структуру, состоящую из типа в виде назначаемого пользователем целого числа и массива символов, count - размер информационного массива, flag - действие, предпринимаемое ядром в случае переполнения внутреннего буферного пространства.

Сокеты – универсальные методы взаимодействия процессов на основе использования многоуровневых сетевых протоколов. Сокеты предназначены для работы по сети: блокируют драйверы, для удобства выполнения локальных подпрограмм.

Сокеты можно разбить на 2 типа:

1. Виртуальный канал - обеспечивает надежную доставку данных с сохранением исходной последовательности.

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

Файловая система FAT

дисковое пространство любого логического диска делится на две области: системную область и область данных.

Системная область создается и инициализируется при форматировании, а впоследствии обновляется при манипулировании файловой структурой.

Системная область состоит из следующих компонентов:

· загрузочного сектора, содержащего загрузочную запись (boot record);

· зарезервированных секторов (их может и не быть);

· таблицы размещения файлов (FAT, File Allocation Table);

· корневого каталога (Root directory, ROOT).

Файловая система HPFS

HPFS (High Performance File System) — высокопроизводительная файловая система.

HPFS впервые появилась в OS/2 1.2 и LAN Manager.

Перечислимосновные особенности HPFS.

· Главное отличие - базовые принципы размещения файлов на диске и принципы хранения информации о местоположении файлов.

· Дисковое пространство в HPFS выделяется блоками. В современной реализации размер блока взят равным одному сектору, но в принципе он мог бы быть и иного размера.

· Система HPFS стремится расположить файл в смежных блоках, или, если такой возможности нет, разместить его на диске таким образом, чтобы экстенты (фрагменты) файла физически были как можно ближе друг к другу.

· Используется метод сбалансированных двоичных деревьев для хранения и поиска информации о местонахождении файлов.

· В HPFS предусмотрены специальные расширенные атрибуты файлов, позволяющие управлять доступом к файлам и каталогам.

Файловая система ОС UNIX

В мире UNIX существует несколько разных видов файловых систем со своей структурой внешней памяти. Корневой каталог в UNIX состоит из следующих каталогов: bin Двоичные коды наиболее важных команд, boot Статические файлы загрузчика boot, dev Файлы устройств, etc Файлы настройки конфигурации системы, home Домашние каталоги пользователей, lib Разделяемые библиотеки, mnt Точка монтирования временно подключаемых систем, proc Псевдо-файловая система с информацией о процессах, root Домашний каталог (пользователя) root, sbin Наиболее важные системные двоичные коды, tmp Временные файлы, usr Вторая главная иерархия, var Переменные данные

Наиболее известны традиционная файловая система UNIX System V (s5) и файловая система семейства UNIX BSD (ufs). Рассмотрим s5.

Файл имеет такую структуру, которую налагает на него пользователь.

Файловая система имеет древовидную структуру. Вершинами (промежуточными узлами) дерева являются каталоги со ссылками на другие каталоги или файлы. Листья дерева соответствуют файлам или пустым каталогам.

Структура диска

Диск разделен на блоки. Размер блока данных определяется при форматировании файловой системы командой mkfs и может быть установлен 512, 1024, 2048, 4096 или 8192 байтов.

Считаем по 512 байт (размер сектора).

Дисковое пространство делится на следующие области (см. рис.):

· загрузочный блок;

· управляющий суперблок;

· массив i-узлов;

· область для хранения содержимого (данных) файлов;

· совокупность свободных блоков (связанных в список);

Блок начальной загрузки содержит программу раскрутки, которая служит для первоначального запуска ОС UNIX. В файловых системах s5 реально используется boot-блок только корневой файловой системы. В дополнительных файловых системах эта область присутствует, но не используется.

Суперблок содержит оперативную информацию о состоянии файловой системы, а также данные о параметрах настройки файловой системы.

Список свободных i-узлов. Это буфер, состоящий из 100 элементов. В нем находится информация о 100 номерах i-узлов, которые свободны в данный момент.

Компиляторы

СС Cи Компилятор

$ cc t.c файл с программой

$ ./a.out результат вышенаписанного – созданный исполняемый файл

$ cc -о t t.c t-имя исполняемого файла

$ ./t

-l<библиотека> подключить библиотеку

-L<пусто> путь, где хранится библиотека

-I<пусто> указываются каталоги для поиска файлов, заданных #include <Ф.h>

-D name [=def ] задается макрос

-g добавить отладочную информацию

gdb отладчик

strip чистит отладочную информацию

-с сделать только объектный файл

-О задать уровень оптимизации

-shared подключает разделяемые библиотеки

-static подключает статические библиотеки

-fPIC генерируется позиционно-независимый код (для создания разделяемых библиотек)

Отладка программ

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

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

ОтладчикФункции отладчика: • пошаговое выполнение программы • выдача значений переменных • запуск программы • установка точек прерывания • продолжение выполнения

Отладчик gdb

cc –g …

gdb <имя исполняемого кода>

Далее функционирует отладчик в режиме командной строки.

help - помощь

run – запуск программы

break – установка точек прерывания

break <№строки исх. кода>

break <имя функции>

break main отладка с самого начала

continue – продолжить выполнение до следующей точки прерывания или до конца

step – пошаговое выполнение с заходом в функции

next – пошаговое выполнение без захода в функции

print <имя переменной> - выдача значений переменнох

Отладка готового кода

strace – трассирует системные вызовы программ

strace <имя исполняемого кода>

strace –p <№ процесса>

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

ptrace(<действие>, <№процесса>, <адрес>, <данные>)

Действия:

PTRACE_ATTACH подцепиться к процессу

PTRACE_DETACH отцепиться

PTRACE_TRACEME

PTRACE_KILL уничтожение

PTRACE_PEEKTEXT вернуть данные, записанные в адресе в области текста

PTRACE_PEEKDATA вернуть данные, записанные в адресе в области данных

PTRACE_CONT продолжить выполнение

PTRACE_SINGLSTEP

PTRACE_SYSCALL

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

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

В операционной системе UNIX весь ввод и вывод осуществляется посредством чтения файлов или их записи, потому что все периферийные устройства, включая даже терминал пользователя, являются файлами определенной файловой системы. Это означает, что один однородный интерфейс управляет всеми связями между программой и периферийными устройствами. Когда интерпретатор команд ("shell") прогоняет программу, он открывает три файла, называемые стандартным вводом, стандартным выводом и стандартным выводом ошибок, которые имеют соответственно числа 0, 1 и 2 в качестве дескрипторов этих файлов. В нормальном состоянии все они связаны с терминалом, так что если программа читает с дескриптором файла 0 и пишет с дескрипторами файлов 1 и 2, то она может осуществлять ввод и вывод с помощью терминала, не заботясь об открытии соответствующих файлов.

Пользователь программы может перенаправлять ввод и вывод на файлы, используя операции командного интерпретатора shell "<" и ">" : prog <infile>outfile

API для работы с файлами (open, access, write, read, close, chmod, chown, link, unlink,lseek, fcntl).

open – открывает файл или устройство

access –rwx <имя файла> - устанавливает права доступа к файлу

close – функция, закрывающая описатель файла

chmod – изменяет права доступа к файлу

chown – измняет владельца и группу-владельца файла

link <oldpath> <newpath>–создает новое имя файла (жесткая ссылка)

unlink <имя>– удаляет имя и файл, на который оно ссылается

lseek <descriptor><offset><whence>– устанавливает позицию чтения/записи информации в файле

write(fd,buf,count) выполняет запись указанного в count количества байт данных, начиная с адреса buf, в файл с дескриптором fd.

fcntl – функция для работы с файловыми описателями.

fcntl(fildes,cmd,arg)

int fildes,cmd,arg;

Функция fcntl обеспечивает выполнение набора разнообразных операций по отношению к открытым файлам, идентифицируемым с помощью дескриптора fildes. Параметры cmd и arg интерпретируются следующим образом (определение буквенных констант хранится в файле "/usr/include/fcntl.h"):

F_DUPFD вернуть наименьшее значение дескриптора, большее или равное значению arg

F_SETFD установить флаг "close-on-exec" в младшем разряде arg (файл будет закрыт функцией exec)

F_GETFD вернуть состояние флага "close-on-exec"

F_SETFL установить флаги, управляющие состоянием файла (O_NDELAY - не приостанавливаться в ожидании завершения ввода-вывода, O_APPEND - записываемые данные добавлять в конец файла)

F_GETFL получить значения флагов, управляющих состоянием файла

struct flock

short l_type; /* F_RDLCK - блокировка чтения,

F_WRLCK - блокировка записи,

F_UNLCK - снятие блокировки */

short l_whence; /* адрес начала блокируемого участка дается в виде смещения относительно начала файла (0), относительно текущей позиции указателя (1), относительно конца файла (2) */

long l_start; /* смещение в байтах, интерпретируемое в соответствии со значением l_whence */

long l_len; /* длина блокируемого участка в байтах. Если указан 0, блокируется участок от l_start до конца

файла */

long l_pid; /* идентификатор процесса, блокирующего файл */

long l_sysid; /* системный идентификатор процесса, блокирующего файл */

F_GETLK прочитать первый код блокировки, мешающей использовать значение arg и затирать его. Если блокировка отсутствует, поменять значение l_type в arg на F_UNLCK

F_SETLK установить или снять блокировку файла в зависимости от значения arg. В случае невозможности установить блокировку вернуть -1

F_SETLKW установить или снять блокировку содержащихся в файле данных в зависимости от значения arg. В случае невозможности установить блокировку приостановить выполнение

Программирование

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

• expr используется для вычисления арифметических выражений.

• test используется для сравнения чисел и строк, а также для определения атрибутов файлов.

• sed, tr, awk, head, tail, cut и др. — для работы с текстами.

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

Некоторые оболочки представляют собой интерпретаторы собственных языков программирования.

В операционные системы MS-DOS и Windows 9x включён командный интерпретатор command.com, в Windows NT включён cmd.exe. В большом семействе командных оболочек UNIX популярны bash, csh, ksh и другие.

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

Интерпрета́тор(языка программирования) — программа для непосредственного исполнения программ (производства вычислений, предписываемых этими программами) из исходного кода на определённом языке.

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

Более сложные интерпретаторы (называемые интерпретаторами компилирующего типа) перед выполнением производят компиляцию исходного кода программы в машинный или некий «промежуточный код», и только после этого приступают к выполнению. И поэтому все синтаксические ошибки обнаруживаются до выполнения. Такие интерпретаторы быстрее выполняют большие и циклические программы, так как не занимаются анализом исходного кода (в т.ч. избыточным, например, в циклах) в реальном времени, но могут быть сложны для начинающих.

Некоторые интерпретаторы для начинающих могут работать в режиме диалога, добавляя вводимую строку команд в программу (в памяти) или выполняя команды непосредственно.

Контекст процесса

Системные данные, используемые при выполнении процесса (когда его образ загружен в RAM), составляют контекст процесса. Контекст процесса формально описан структурой struct user в файле /usr/include/sys/user.h. Эта структура включает следующие основные поля:

• u_procp - адрес дескриптора процесса в таблице процессов;

• u_ofile - адрес таблицы открытых файлов процесса;

• u_signal - адрес таблицы сигналов;

• u_pcb - блок управления процессом;

• u_cdir - текущий каталог процесса;

• u_rdir - корневой каталог процесса;

• u_textvaddr - виртуальный адрес процедурного сегмента;

• u_datavaddr - виртуальный адрес сегмента инициализированных данных;

• u_bssvaddr - виртуальный адрес сегмента неинициализированных данных.

Область контекста процесса имеет фиксированный размер и не входит в виртуальное адресное пространство процесса. В пространстве физических адресов контекст процесса располагается перед процедурным сегментом или перед сегментом данных в случае разделяемого процедурного сегмента. Контекст текущего процесса отображается в область текущего процесса виртуального адресного пространства ядра. Адрес этой области сохраняет системная переменная u, через которую поля контекста текущего процесса доступны подпрограммам ядра. Доступ к полям контекста процесса на уровне пользователя реализован через системные вызовы ядра, например, chdir, chroot, signal, ulimit.

СВОПИНГ

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

Устройство выгрузки является устройством блочного типа, которое представляет собой конфигурируемый раздел диска. Тогда как обычно ядро выделяет место для файлов по одному блоку за одну операцию, на устройстве выгрузки пространство выделяется группами смежных блоков. Пространство, выделяемое для файлов, используется статическим образом; поскольку схема назначения пространства под файлы действует в течение длительного периода времени, ее гибкость понимается в смысле сокращения числа случаев фрагментации и объемов неиспользуемого пространства в файловой системе.

Ядро выгружает процесс, если испытывает потребность в свободной памяти, которая может возникнуть в следующих случаях:

1. Произведено обращение к системной функции fork, которая должна выделить место в памяти для процесса-потомка.

2. Произведено обращение к системной функции brk, увеличивающей размер процесса.

3. Размер процесса увеличился в результате естественного увеличения стека процесса.

4. Ядру нужно освободить в памяти место для подкачки ранее выгруженных процессов.

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

ПОДКАЧКА ПО ЗАПРОСУ

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

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

Основные команды OC UNIX.

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

Классификация команд. 1.команды для работы с файловой системой 2. команды для работы с текстовыми файлами 3. тестирующие команды

1.Для работы с файловой системой используются команды:

· cd смена директории

· pwd выдать текущую директорию

· mkdir создать директорию

· cp копирование файла

· mv перенос (переименование) файла

· rm удалить файл

rm –r рекурсивное удаление

rm-i спрашивает разрешение на удаление

rm-f удалять не спрашивая

$ rm-f *.b

· rmdir удалить директорию

· ls выдать содержимое директории, по умолчанию выдаётся содержимое текущего каталога, но каталог можно и задавать

–R рекурсивный список

-l выдать файлы в длинном формате

-a выдача всех файлов, включая скрытые (т.е. начинающиеся с точки)

cd п

Наши рекомендации