Автор: Пользователь скрыл имя, 04 Января 2012 в 16:27, курсовая работа
Для хранения программ и данных в персональных компьютерах используют различного рода накопители, общая емкость которых, как правило, в сотни раз превосходит емкость оперативной памяти. По отношению к компьютеру накопители могут быть внешними и встраиваемыми (внутренними).
Обычно операционные системы выполняют эти требования с помощью средств виртуальной памяти и файловой системы. Файловая система обеспечивает долгосрочное хранение информации, помещаемой в именованные объекты, которые называются файлами. Файл — это удобная для широкого использования структура данных, доступ к которой и ее защита осуществляются операционной системой.
Виртуальная
память — это устройство, позволяющее
программистам рассматривать
Любому
программисту должно быть ясно, что
простое объявление внешнего устройства
специальным файлом не даст возможности
работать с этим устройством, если не
создан и соответствующим образом
не подключен к системе
Для профессионалов в области операционных систем драйверы ОС UNIX, в сущности, не представляют ничего нового. По-простому говоря, в любой системе драйвер устройства - это многовходовой программный модуль со своими статическими данными, который умеет инициировать работу с устройством, выполнять заказываемые пользователем обмены (на ввод или вывод данных), терминировать работу с устройством и обрабатывать прерывания от устройства. Однако, в любой операционной системе имеется своя технология разработки драйверов. В частности, в ОС UNIX различаются символьные, блочные и потоковые драйверы.
Символьные
драйверы являются простейшими в
ОС UNIX и предназначаются для
Блочные драйверы - более сложные. Они работают с использованием возможностей системной буферизации блочных обменов ядра ОС UNIX. В число функций такого драйвера входит включение соответствующего блока данных в систему буферов ядра ОС UNIX и/или взятие содержимого буферной области в случае необходимости.
Наконец, наиболее сложной организацией отличаются потоковые драйверы. Фактически, такой драйвер представляет собой конвейер модулей, обеспечивающий многоступенчатую обработку запросов пользователя. Потоковые драйверы в среде ОС UNIX в основном предназначены для реализации доступа к сетевым устройствам, которые должны работать в соответствии с многоуровневыми сетевыми протоколами.
Подробности по поводу разных способов организации драйверов в ОС UNIX см. в разделе 3.3.
Последний
момент, на который мы хотим обратить
внимание в этом пункте, состоит
в том, что (опять же, как и в
большинстве развитых операционных
систем) в ОС UNIX возможны два способа
включения драйвера в состав ядра
ОС. Первый способ состоит в полном
включении драйвера в состав ядра
на стадии генерации системы (т.е. драйвер
статически объявляется частью ядра
системы). Второй способ позволяет обойтись
минимальным количеством
Управление
внешними устройствами - это одна из
важнейших функций любой
Interactive programming -- это про spreadsheet languages и прочие фокусы, где меняют куски кода в одном месте экрана, чтобы получить (ожиданно!) изменения кода в другом месте экрана, "как в экселе"Основные идеи -- это про эквивалентность времени компиляции времени выполнения, инкрементальность вычислений.
Интерактивность, говорит автор подхода (Perera) дает чувство логики более высоких порядков в программе с логикой первого порядка:
Функциона́льное программи́рование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних (в отличие от функций как подпрограмм в процедурном программировании).
Противопоставляется
парадигме императивного
Функциональное
программирование предполагает обходиться
вычислением результатов
На
практике отличие математической функции
от понятия «функции» в
λ-исчисления являются основой для функционального программирования, многие функциональные языки можно рассматривать как «надстройку» над ними[1].
Наиболее известными языками функционального программирования являются[2]:
LISP - (Джон МакКарти, 1958) и множество его диалектов, наиболее современные из которых:
Scheme
Clojure
Common Lisp
F# — функциональный язык для платформы .NET
Haskell — чистый функциональный. Назван в честь Хаскелла Карри.
Erlang — (Joe Armstrong, 1986) функциональный язык с поддержкой процессов.
APL — предшественник современных научных вычислительных сред, таких как MATLAB.
ML (Робин Милнер, 1979, из ныне используемых диалектов известны Standard ML и Objective CAML).
Scala
Miranda (Дэвид Тёрнер, 1985, который впоследствии дал развитие языку Haskell).
Nemerle — гибридный функционально/императивный язык.
XQuery
Ещё не полностью функциональные изначальные версии и Lisp и APL внесли особый вклад в создание и развитие функционального программирования. Более поздние версии Lisp, такие как Scheme, а также различные варианты APL поддерживали все свойства и концепции функционального языка.[источник не указан 959 дней]
Как правило, интерес к функциональным языкам программирования, особенно чисто функциональным, был скорее научный, нежели коммерческий. Однако, такие примечательные языки как Erlang, OCaml, Haskell, Scheme (после 1986) а также специфические R (статистика), Mathematica (символьная математика), J и K (финансовый анализ), и XSLT (XML) находили применение в индустрии коммерческого программирования. Такие широко распространенные декларативные языки как SQL и Lex/Yacc содержат некоторые элементы функционального программирования, например, они остерегаются использовать переменные. Языки работы с электронными таблицами также можно рассматривать как функциональные, потому что в ячейках электронных таблиц задаётся массив функций, как правило зависящих лишь от других ячеек, а при желании смоделировать переменные приходится прибегать к возможностям императивного языка макросов. Логи́ческое программи́рование — парадигма программирования, основанная на автоматическом доказательстве теорем, а также раздел дискретной математики, изучающий принципы логического вывода информации на основе заданных фактов и правил вывода. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций.
Самым известным языком логического программирования является Prolog.
Первым языком[источник не указан 909 дней] логического программирования был язык Planner, в котором была заложена возможность автоматического вывода результата из данных и заданных правил перебора вариантов (совокупность которых называлась планом). Planner использовался для того, чтобы понизить требования к вычислительным ресурсам (с помощью метода backtracking) и обеспечить возможность вывода фактов, без активного использования стека. Затем был разработан язык Prolog, который не требовал плана перебора вариантов и был, в этом смысле, упрощением языка Planner.
От языка Planner также произошли логические языки программирования QA-4, Popler, Conniver и QLISP. Языки программирования Mercury, Visual Prolog, Oz и Fril произошли уже от языка Prolog. На базе языка Planner было разработано также несколько альтернативных языков логического программирования, не основанных на методе поиска с возвратами (backtracking), например, Ether (см. обзор Шапиро [1989]).
Объе́ктно-ориенти́