
- •Файловая система ос unix
- •1). На системном уровне интерпретируется как последовательность блоков внешней памяти фиксированного разряда (обычно кратен двум).
- •Обозначение файлов и каталогов
- •Тип и код защиты файлов
- •Системы счисления.
- •Перевод целых чисел из в .
- •Перевод бесконечной периодической дроби в системе p в обыкновенную.
Введение в предмет информатики
Информатика - комплексная общенаучная дисциплина, изучающая вопросы компьютерной обработки информации. Термин "информатика" впервые был предложен французской Академией наук в середине 60-х гг XX столетия (informatique). Информатика в других языках: informatik (немецкий), computer science (английский).
Хотя информатика - относительно нова дисциплина, она имеет глубокие исторические корни. Можно сказать, что информатика появилась тогда, когда люди попытались автоматизировать мыслительную деятельность человека в операциях счисления (например, абак/счеты появился ещё до н.э.). Принято считать, что этим вопросом впервые начал заниматься Готфрид Лейбниц (1646-1716), однако, и до него существовали немаловажные изобретения (например, в 1642г. была создана Паскалина, суммирующая машина, Блезом Паскалем). Он (Лейбниц) разработал двоичную арифметику и в общих чертах создал проект вычислительной машины (1674 - счётная машина, умевшая складывать, вычитать, умножать и делить), работавшей в двоичной системе счисления, как современные компьютеры. Также Лейбницу принадлежит идея программирования алгоритмических процессов, объектами которых являюся абстрактные понятия (например, символы, высказывания, логические связки и т.д.). Он предложил идею создания системы("машины") умозаключений. В этой идее заключается сущность информатики: свести решение любой проблемы к двоичному вычислению. "Тогда при возникновении спорных вопросов не будет надобности в научных дискуссиях, достаточно будет сказать "давайте посчитаем" своему оппоненту." (Г.Лейбниц, около 1680г.). Поэтому именно Лейбница принято считать основателем информатики.
На сегодняшний день нельзя сказать, что существует универсальная наука, способная решить любую задачу.
Современная информатика включает в себя комплекс самостоятельных дисциплин:
1) Программные компьютерной обработки информации (операционные системы и программные продукты)
2) Компьютерная математика (в т.ч. компьютерная арифметика и алгебра)
3) Построение и анализ алгоритмов вычислительной обработки данных (алгоритмы сортировки и поиска информации)
4) Изучение абстрактных структур данных: массив, стек, очередь (в т.ч. и DEQ - double enter queue, двойная очередь), дерево, список.
5) Кодирование и передача информации
6) Формальные языки и конечные автоматы
Две последние дисциплины "вытекают" из принципов Джона фон Неймана:
а) Двоичное кодирование всей информации (вся информация представлена в двоичном коде)
б) Программное управление (программа состоит из набора команд, выполняемых процессором друг за другом в определённой последовательности)
в) Однородность памяти (программы и данные хранятся в одной и той же памяти; ЭВМ не различает числа, команды и текст)
г) Адресность (основная память состоит из пронумерованных ячеек, процессору всегда доступна любая из них)
Привдённый список дисциплин, каждая из которых заслуживает самостоятельного изучения, в комплексе составляют предметную область информатики.
Рекомендуемая литература:
Ф.Бауэер, Г.Боу "Информатика. Вводный курс."
В курсе информатики из перечисленных дисциплин будут изучаться три темы (модуля):
1) Введение в ОС UNIX
2) Системы счисления и кодирования информации
3) Модульная арифметика
Введение в ОС UNIX
Общая характеристика ОС UNIX
В общем случае, под ОС (операционной системой) понимается совокупность программ для управления вычислительными ресурсами компьютера. В настоящее время популярны две ОС: MS Windows и Linux. Linux явлется современным вариантом разработанной в прошлом веке ОС UNIX. Авторами разработки были Б.Керниган, К.Томпсон и Д.Ритчи - сотрудники компании BM Labs (концерн AT&T). Первая реализация произошла в 1970-м г. под названием OS UNIX v7. Другие версии ОС UNIX: SCO XENIX (на IBM PC), MS XENIX, DEC (Development Eqiupment Corporation), Ultrix (на VAX), SUN (Statford University Network), Solaris (SPARK STATION), DEMOS-32 (СМ, СССР-овский аналог BSD4.2 и BSD4.3), OS Linux (Линус Торвальдс - 1991). Последняя ОС из приведённого списка была ориентирована на пользователя: Red Hat, Slackware, Debian, Ubuntu.
Базовые концепции ОС Unix
ОС UNIX - многозадачная многопользовательская ОС с разделением времени. Основня особенность UNIX - мобильность исходного кода, поэтому она без больших проблем может быть установлена на компьютеры с разной архитектурой. Такая мобильность объясняется тем, что 90% исходного кода написано на языке высокого уровня высокого уровня (остальные 10% - на ассемблере).
Высокая технологичность UNIX связана с разнообразием технических средств для разработки ОС.
ОС UNIX в большей степени, чем другие ОС, ориентирована на профессиональных программистов.
В основу разработки ОС UNIX были положены следующие концепции:
1) Организация процессов выполнения программ - разделение времени процессоров и других ресурсов компьютера для выполнения разных задач.
2) Файловая структура
3) Система ввода-вывода универсальна, ввод и вывод одинаковы для всех файлов и внешних устройств
4) Многопользовательский режим работы
5) Командный процессор - специальная программа, обеспечивающая интерпретацию команд пользователя
6) Командные утилиты - программы, поддерживающие интерфейс пользователя UNIX.
7) Инструментальная среда - разнообразные средствадля разработки прикладного и системного ПО (программного обеспечения):
а) Система программирования (C/C++)
б) Язык интерпретаторов команд
в) Редакторы действий (vi, emacs, troff, nroff, lex, yacc)
8) Оконно-графическая и сетевая операционная среда (X Window System - разработка Массачусетского технологического университета)
Организация процессов
Ключевыми понятиями организации процессов ОС UNIX являются понятия ядро и процесс.
Ядро - резидентная в оперативной памяти часть ОС UNIX. Ядро оформлено как выполнимый файл на жёстком диске и считывается в оперативную память программой загрузки ОС (vmlinuz). Ядро имеет структуру выполняемой программы, но само непосредственно не выполняется. Оно предназначено для управления работой прикладных и системных программ. В соста ядра входят различные системные таблицы со статичным распределением памяти и системные вызовы.
Системный вызов - программный код, который прикладные или системные программы используют для обращения к ядру.
Процесс - фундаментальна память UNIX, которая понимается как единица целенаправленной работы. Все работы вне ядра оформлены в виде процесса работы системных команд и прикладных программ. Вычислительные процессы представлены ядром, в частности, время процесса. Программы таких процессов оформлены в виде выполнимых файлов, которые хранятся на жёстком диске. "Процесс - выполнение программы."
Процессы могут создаваться, выполняться, быть приостановлены, продолжены, могут ожидать событий, могут взаимодействовать между соой с помощью сигналов и обмениваться информацией с помощью программных команд, могут завершаться корректно или по сигналу. Множество процессов, существующих в данный момент и существовавших до этого, связывает между собой иерархическое отношение предок-потомок. Любой процесс является потомком другого процесса, кроме одного процесса (процесса инициализации init). Этот процесс нестандартным образом создаёт ядро и загружает в свою память. Задача init - инициализация пользовательского режима работы. При этом стандартным образом создаются другие процессы. Работа этих процессов имеет целью подготовить условия для работы пользователя в ОС Linux. Эта подготовка заканчивается для текстового режима запуском процесса getty, для графического режима - процесса xdm. В обоих случаях эти процессы обеспечивают регистрацию пользователя Linux. Они запрашивают пользователя ввести имя и пароль. Если данные введены правильно, то создаётся процесс интерпретации команд shell. В текстовом режиме пользователь вводит команды через командную строку. В графическом режиме пользователь работает с окнами. Интерпретация команд, связанных с окнами, обеспечивается процессом shell. В графическом режиме для этого есть специальная программа - эмулятор терминала (xterm). Она позволяет обеспечить текстовый режим в графике. Для интерпретации команд в каждом окне xterm вызывается свой shell.
Создание нового процесса должно осуществляться одним из уже существующих процессов. Для этого создаётся копия (образ) порождающего процесса с помощью вызова fork, затем программа копии заменяется на программу нового процесса. Предок может ждать завершения потомка или работать параллельно с ним, конкурируя за ресурсы.
Интерпретация команд
Интерпретация команд - процесс программной обработки команд пользователя ОС UNIX. Пользователь может вводить командные строки интерактивно, с помощью эмулятора терминала, или в режиме пакетной обработки командных строк. Командные строки составляют командные файлы. Интерпретацию командых строк обеспечивают специальные системные программы, называемые командными процессорами (shell). Существует несколько разновидностей shell:
1) sh - оболочка Борна (Bourne Shell)
2) csh - C-образный вариант оболочки с элементами конструкций языков высокого уровня. Разработка университета Беркли
3) tcsh - современный вариант csh
4) ksh - оболочка Корна
5) pdksh - Public Domain ksh
6) ash - ограниченный shell (для компьютеров с ограниченными возможностями)
7) zsh - новейшая оболочка, совместимая с sh и ksh
8) bash - Bourne (Born) Again Shell. Совместима с POSIX (Portable Software Interface)
Внутренний механизм интерпретации команд основан на использовании системных вызовов fork, exel и wait. Интерпретация команд возможна в двух режимах: синхронном и асинхронном.
Синхронный реим обработки команды:
sh <- (wait) <- sh -> (fork) -> sh -> (exel) -> mv
Асинхронный режим обозначается символом & (амперсант) в конце строки:
$_ find / -name core -print&
Процессор будет искать файл core во всей файловой системе
($_) sh -> (fork) -> sh -> (exel) -> mv
$_ xedit hello.txt&
$_ xterm -bg gold
Если командная строка вызывается в фоновом режиме, то сразу под этой строкой пишется идентификатор. В скобках пишется внутренний идентификатор, вне скоббок - системный. Используя эти идентификаторы, можно управлять идентификаторами этих команд. Можно, например, остановить выполнение асинхронного действия командой stop ($_ stor % id). Но процесс можно продолжить, даже в другом режиме.
$ bg % id - в том же режиме (асинхронном
$ fg % id - в синхронном режиме
Нефоновый процесс можно остановить комбинацией ctrl + z, завершить - командой ctrl + c. Фоновый процесс может быть завершён командой kill:
$ kill -9 sid - завершение процесса
$ kill -e - список номеров сигналов команды
Чтобы узнать идентификатор процесса, можно воспользоваться командой jobs. Она вызовет список внутренних идентификаторов для процессов:
$ jobs
$ ps -ax # Будут выведены идентификаторы
$ ps -ea # системных процессов
Информационный обмен между процессами
Для обмена информации между процессами предусмотрен процесс программных каналов. Передаваемые по каналам данные идут по схеме: один процесс перенаправляет информацию по каналу, другой процесс читает информацию из канала путём замены своего стандартного ввода на чтение команды.
| - стандартный вывод
$ ps -ax | grep xterm
grep - команда поиска по образцу строк из своего потока
$ cd -c core | more (или less)
Для создания программного канала между двумя процессами командный процессор организует системнай вызов файла. Программный канал можно создать только между потомками shell одного уровня, либо между shell и его потомком. Полезным может оказаться соединение в командной строке больше, чем двух программных команды. Более двух каналов образуют конвеер команд.
$ ls -l | grep root | we -l # Вывод числа строк, владелец которых - root
Именованный программный канал - канал для обмена информацией между непрямыми родственниками. Он образован командой:
$ mkfifo Kanal
$ cat Kanal # далее нажать enter
data flow
$ echo "dataflow" > Kanal
$ rm Kanal
Кроме выше упомянутых возможностей, командный процессор предоставляет средства перенаправления станций ввода и вывода для процессов. Стандартные потоки связаны с терминалом и имеют дескрипторы:
0 - стандартный ввод
1 - стандартный вывод
2 - стандартная диагностика
Подготовка к 1ому рейтингу
Регулярные выражения
Регулярное выражение - алгебраическая запись, множество символьных слов, которое имеет вид формулы, где символы любого конечного алфавита чередуются со знаками регулярных операций.
Регулярные операции
Минимальный набор регулярных операций, которые позволяют описать любое множество слов, составляют 3 операции:
1) Объединение |
2) Конкатинация (без обозначения)
3) Итерация *
1. Операция объединения предоставляет возможность выбора слов по любой из двух альтернатив. Пример:
word1 | word2
2. Операция конкатинации интерпретируется как последовательность символов регулярного выражения. Пример:
Integer # Строгая последовательность символов
3. Операция итерации обозначает многократное повторение символа, стоящего перед ней, произвольное число раз. Пример:
10* # Произвольное число нулей после единицы (числа 1, 10, 100, 1000 и т.д.)
Первоначально регулярные выражения были введены американским математиком Клини для удобства математического описания так называетмых регулярных событий в нейронных сетях. Регулярные выраженя оказались востребованы не только в области нейронных сетей, но и в области практического программирования. Впервые они были использованы американским программистом Томпсоном в текстовом редакторе qed. Qed стал основой ed - базового редактора UNIX. В qed регулярные выражения применялись лдя поиска текста по заданному образцу. Такое практическое применение регулярных выражений оказалось настолько полезным, что разработали специальную команду grep (Global Regular Expression Print) - поиск информации по заданному регулярному выражению.
grep '10*' prog.c
Практика потребовала расширить минимальный набор регулярных выражений, состоявший всего их трёх операций, для удобства записи в команде grep. Минимальный набор регулярных выражений превратился в базовый набор команды grep:
. * ^ $ [] {} \
В дальнейшем появилась команда egrep (Extended Global Regular Expression Print), содержавшая больше операций:
. * ^ $ [] {} \ + ? () |
Кроме grep, регулярные выражения используются в редакторах vi и emacs, в потоковом редакторе sed, в генераторе лексических анализаторов lex, команде awk, а также в специальных языках, ориентированных на работу с регулярными выражениями: Perl, Python, Tcl, sh.
Дополнительные регулярные операции:
. любой символ
* повторение предыдущего символа 0 или более раз
+ повторение предыдущего символа 1 или более раз
? предыдущий символ не оязателен
Якоря:
^ начало
$ конец
Якоря обеспечивают привязку к началу или концу строки. Они должны указываться тлько в начале или в конце регулярного выражения.
^# # поиск строк, начинающихся с символа #
Используя якоря, легко искать строки, состоящие из одного слова, или пустые строки.
^CAD$ # строки, состоящие из слова CAD
^$ # пустые строки
Квадратные скобки [] применяются, чтобы ограничить наборы символов, которые находятся в определённой строке. Внутри скобок можно перечислить, какой символ стоит в строке, тремя способами:
1) Явно перечислить, какие символы стоят в строке. Пример:
^[aeiou] # поиск строки, начинающейся с гласной буквы
2) В скобках можно указать диапазон символов, которые могут стоять в данном месте. Примеры:
[1-9][0-9] # двузначные натуральные числа
[1-9][0-9]* # произвольное натуральное число
[A-Za-z] # любая буква
[A-Z02468] # любая прописная буква или чётная цифра
3) Можно задать не набор символов, а его дополнение до полного набора символов. При этом символ циркумфлекс ^ приобретает иной смысл. Пример:
[^aeiou] # в регулярном выражении нет гласных букв
Символ обратный слеш \ отменяет специальный смысл символа
\. # превращение специального символа точки в простую точку
\040 # отмена специального смысла пробела (указан его код 040)
Круглые скобки () применяют для группировки части выражения, заключённой в них. Группировка нужна, чтобы ограничить область деятельности операторов с низким приоритетом, и для того, чтобы применить квантификаторы к группе символов. Примеры:
\$[0-9]+(\.[0-9][0-9]? # поиск стоимости в долларах
this or | and that # this or либо and that
this (or | and) that # this or that либо this and that
Командный язык оболочки
Командный язык оболочки - специальный язык программирования командных строк, которые могут вводиться в интерактивном режиме или в пакетном режиме из командного файла. Командный файл, составленный из программируемых командных строк, называется сценарием или скриптом.
#!/bin/bash
Командные строки, которые обрабатываются этим языком, могут состоять из переменных, команд ОС и внутренних команд интерпретатора shell, которые можно считать операторами этого языка.
Переменные
Переменная - параметр, обозначенный именем, которому можно присвоить и от которого можно получить значение. Переменные бывают:
1) Командные
2) Позиционные
3) Специальные
1. Командные переменные - переменные, кторые можно употреблять в командных строках для подстановки в аргументы команд или для присваивания значений другим переменным. Значение командных переменных можно изменить. Имя командной переменной может состоять из произвольной последовательности букв и цифр, но обязательно должно начинаться с буквы, значение переменной - строка символов. Если строка состоит из цифр, то предусмотрена возможность арифметической обработки переменных с таким числовым значением. Для присвоения используются следующие форматы:
var=val # без пробелов
a=T b=H c=I d=S
x=10 y=20
# интерпретация производится справа налево
Чтобы получить значение переменной, нужно выполнить подстановку с помощью специального символа $
$var
${var}
abcd=$a$b$c$d # значение переменной abcd - THIS
Фигурные скобки вокруг имени переменной при подстановке употребляются, когда после имени переменной стоят символы которые могут быть интерпретированы как часть имени переменной.
far=tele
tv=${far}vision # tv = television
Кроме прямой подстановки в другие переменные или аргументы команд, используются условные подстановки.
var1=${var:=word} # 2 одинаковые переменные var и var1
Если переменная var существует и имеет непустое значение, то подставится var, если значение пустое или переменная не существует, то подставляется строка word
varl=${var:=word} # word -> var1
varl=${var:word} # word -> var
# таким образом, мы не сделем 2 одинаковые переменные
Измерение длины значения переменной
${#var} # длина переменной в символах
len=${#tv} # tv = television, len = 10
echo $len # выведет 10
${#var:n}
Данная команда позволяет усечь значение var и вернуть её часть, которая начинается с символа её значения с пордковым номером n, при этом значени var не усекается, усекается только результат.
ab=${abcd:2} # результат ab = IS
${var:l:n}
Данная команда позволяет вернуть в строку значение var длиной l, которое используется с символа с порядковым номером n
bc=${abcd:2:1}
echo $bc # выведет HI
Модификация значения переменной по шаблону
${var/pat/sub}
dcba=${abcd/IS/AT} # результат - THAT
Символы, применяемые для модификации по шаблону:
[] - произвольный диапазон
! - аналог циркумфлекса ^ в grep
? - любой одиночный символ
* - любые символы
Подстановка значения переменной по стандартному выводу команды:
var=`cmd`
var=`date` # в var запишется Mon Oct 2012 13:30:00
expr - вычисление выражения
expr 1+2 # результат - 3
x=10 y=20
var=`expr $x+$y` # результат: var = 30
var=`expr $var+2` # результат: var = 32
В командном языке оболочки shell можно создавать массивы. Для ввода массива переменных нужно указать рядом со значением переменной индекс значения переменной в массиве в квадратных скобках []. Пример:
A[0]=Xx
A[1]=Yy # Или A=(Xx Yy Zz)
A[2]=Zz
Доступ к массиву такой же, как и к обычным переменным, но при использовании элементов массива нужны фигурные скобки. Примеры:
A[3]=${A[0]} # A[3] = Xx
copy=(${A[*]}) # Копирование массива A в массив copy
2. Позиционные переменные обозначаются символами от 0 до 9 - номера переменных. Обычно они используются как аргументы вызова командной строки. При этом переменная с номером 0 соответствует имени процедуры, а переменные с именами от 1 до 9 соответствуют аргументам командной строки вызова этой процедуры.
name=$0 # 0 - имя команды
arg1=$1 # 1-9 - имена аргументов команды
arg2=$2
...
arg9=$9
copy file.src file.try
#!/bin/bash
cp $1 S2
Кроме того, позиционные переменные можно непосредственно задавать в командной строке с помощью команды set. Пример:
$ set rk1 rk2 ... rk10
$ echo $6 # выведет rk6
Если число аргументов больше 9, то доступ к ним обеспечивает команда shift, которая сдвигает все переменные влево, при этом первые переменные исчезают. Пример:
$ shift
$ echo $9 # выведет rk10
$ echo $1 # выведет rk2
Значение позиционных переменных можно подставить через стандартный вывод команд, как и значение командных переменных. Пример:
$ et `date` # $1 = Mon, $2 = Oct, $3 = 15, $4 = 2012, $5 = 12:30:00
$ echo $# # результат - 5(см. далее)
$ echo $4 # напечатает 2012
3. Специальные переменные. Значения специальных переменных могут быть подставлены в аргументы командных строк, но непосредственно изменить значение этих переменных нельзя. Обычно используют следующие специальные переменные:
? код завершения последней команды: 0 - успешное завершене, не 0 - аварийное
! номер последнего процесса
$ номер текущего процесса
# число позиционных переменных
* набор значений позиционных переменных, начиная с 1ой. При записи "$*" выдётся одно "кучное" значение
@ набор значений позиционных переменных, начиная с 1ой. При записи "$@" выдётся набор значений (то же, что и без кавычек)
$ echo Hello; echo $? # выведет Hello 0
$ touch tmp $$ # temp 365, 265<-pid
$ set `date`; echo $* # то же, что и echo $1 $2 $3 $4 $5
Управляющие конструкции shell
Управляющие конструкции
For – цикл с перечислением.
While – цикл с условием.
Until – цикл с антиусловием.
If – условный оператор.
Case – выбор варианта.
Continue – продолжение цикла.
Break – завершение.
Function – оператор функции.
Return – возврат из функции.
Exit – завершение процедуры.
Оператор цикла с перечислением
For var in list_word #получает значение первого слова в и выполниется список команд из , затем do значение 2 слова
List_and
done
Если [in list_word] опущено, то принимает значения позиционных переменных.
#Сложение чисел
J=0
Num=’10 20 30’
For I in $num
Do
J=`expr $j + $i`
done
#Сложение слов
Sum=0
For w in `cat text`
Do sum=`expr $sum + ${#w}`
Done
Оператор While
While cmd #Работает пока
do
list
done
while true; do Всегда=0, Бесконечный цикл с выводом ENDLESS LOOP
echo ENDLESS LOOP
done
while test –r lock # -r можно ли читать файл
do # -f существует ли файл
sleep 1 # Задержка 1 секунда
done
Оператор Until
until cmd #Работает пока cmd !=0
do
list
done
Вывод чисел Фибоначчи не превосходящих 100
F0=1 F1=1
echo $F0
until [ $F1 –gt 100 ]
do
echo $F1
let “F=F1+F0”
F0=$F1
F1=$F
done
Оператор if-else
if cmd #если cmd – истина then
then list
fi
Является ли 2-ое слово частью 1-ого
set Information Info
m=`expr $1 : $2`
echo $m #результат кол-во совпадений 4
if [ $m –gt 0 ] # -gt =>
then
echo “$m matches”
fi
set Information format
m=`expr $1 : $2`
echo $m #результат 0, т.к. I!=f
if [ $m –gt 0 ]
then
echo “$m matches”
else
echo “No matches”
fi
set Info Information
m=`expr $1 : $2`
echo $m #результат 0
Является ли одна началом второй
if [ $m –gt 0 ]
then
echo “$m matches”
elif [ $n –gt 0 ]
then
echo “$n matches”
else echo “No matches”
fi
Оператор case
case word in #ищет по порядку шаблон, если он найден выполняется команда
pat1) list1;;
pat2) list2;;
…
pat3|pat4) list34;;
*) list0;; #если ни один шаблон не совпал с word выполняется list0
esac
Оператор function
function name
{ command list
return n
}
Оператор exit
Завершение процесса выполнения процедур
Функция должна быть в начале
#!/bin/sh
function name #объявление
{ тело функции
}
name [arg1…arg2] #вызов
Функция в языке shell имеет собственные позиционные переменные.
Обычные переменные объявленные в ком. файле доступны внутри функции.
#Абсолютная величина целочисленного значения модуль разности 2-ух чисел.
#!/bin/bash
function abs
{ x=$1
if [ $x –lt 0 ]
then
let “x *= -1”
fi
echo $x
return
}
d=`expr $1 -$2`
D=`abs $d`
echo “|$d|=$D”
exit $D #значение D попадает в системную переменную ?, если < 256
Операторы продолжения, прерывания цикла.
Continue - вызов перехода к следующей итерации цикла.
Break - завершение цикла.
Вычисление десятичных дополнений целых чисел.
#!/bin/bash
for I ; do
pref=`expr $i : ‘.*[^0-9]’`
if test $pref -gt 0
then continue
fi
n=$i
len=`expr length $n`
until [ $len –lt 2 ] ; do
z=`expr subst2 $n 1 1`
if [ $z –ne 0 ]
then break
fi
n=${n:1}
let len--
done
d=1 j=0
while [ $j –lt $len ] ; do
d=${d}0
let j++
done
m=`expr $d - $n`
echo $m
done
exit 0
Файловая система ос unix
Файловая система определяет логическую организацию внешней памяти.
В ОС UNIX файловая система может быть организована на любом устройстве внешней памяти с прямым доступом (например, на жестком диске, в его разделах, дискете или на съемном диске, на Flash-накопителе).
Файловая система имеет двойственную интерпретацию: на пользовательском и на системном уровнях.
1). На системном уровне интерпретируется как последовательность блоков внешней памяти фиксированного разряда (обычно кратен двум).
В этом случае пространство внешней памяти имеет следующую организацию:
-
Блок начальной загрузки
Суперблок( в нем заголовок ф.с., который представляет информацию)
Индексный файл (последовательность блоков)
Область данных
Swapping
Индексный файл содержит индексные дескрипторы файлов. Каждый дескриптор формально состоит из структур.
Структура – абстрактный тип данных языка С, который образует набор именованных полей. Эти поля могут быть данными простых типов (int, char или указатели), а могут быть структурами. Структуры – аналоги записей в Pascal. Размер структуры – 64 байта.
Индексный дескриптор включает всю системную информацию о файле: владелец, код защиты, время последней модификации, тип файла, его размер, адрес блока, в котором расположены данные файла.
В области данных расположена последовательность блоков, которые используются для хранения данных, входящих в файл, свободных блоков и блоков, которые используются для адресации элементов блоков.
Swapping используется для временного хранения образов пассивных процессов. Изначально использовалось для сохранения места в операционной памяти.
2). На уровне пользователей файловая система имеет иерархическую структуру с поименованными именами, которыми являются файлы, каталоги, подкаталоги. В такой системе имеется свободное свойство вложенности.
В большинстве случаев имеет место следующая типовая иерархия файловой системы:
/ - корень иерархии.
аpi – application program interface.
bin dev efc lib usr home boot mnt
ls lp password libc.a vmblinuz usb
cp sdb host libc.so os
grep
api .Xdefaults
sort X11R6 man lib bin include … work
sh
string.h
lib bin man1
… stdio.h
X11
…
Каталог bin – содержит наиболее частый команды пользователей.
Каталог dev - содержит специальные файлы, через которые реализуется интерфейс с внешними устройствами.
echo Hello>/dev/pts/1 (где 1 – это номер терминала).
Необходимо сразу же открыть соответствующее окно.
Каталог efc – содержит административные команды и таблицы.
Каталог lib – содержит библиотеки объектных модулей.
libc.a, libc.so – основные функции языка С. Например, при $cc –o snn snn.c неявно подключается –lc. Можно сразу дописать необходимую библиотеку таким образом.
Каталог usr – содержит заголовочные файлы для С.
Каталог home – содержит домашние каталоги пользователей. Можно проверить домашний каталог путем echo $HOME.
Каталог boot – содержит информацию при запуске системы.
Каталог mnt – содержится для монтирования внешней файловой системы.