Системско програмирање

Циљ и исход предмета

Припрема студената да постану програмери који могу да направе а) програме ниског нивоа који користе или се извршавају унутар оперативног система, б) системске алатке за друге програмере и кориснике (асемблере, компајлере, пуниоце, дебагере) и в) програме који међусобно комуницирају преко рачунарске мреже. Након завршеног курса студенати разумеју функцију и начине конструкције различитих системских алата, као што су макро процесори, асемблери, компајлери, емулатори, повезивачи и пуниоци. Могу да и сами конструишу и имплементирају сличне алате или прилагоде већ постојеће. У стању су да имплементирају различите кернел модуле за оперативне системе Unix и Windows.

Теоријска настава

Упознавање са функцијама и начином конструкције различитих системских алата, као што су макро процесори, асемблери, емулатори, повезивачи и пуниоци. Основе асемблера за различите процесорске архитектуре. Функције асемблера као алата. Конструкција асемблера и макропроцесора. Претпроцесор за језик C. Пројектовање високо оптимизујућих компајлера. Пројектовање интерпретативних и JIT емулатора. Формати објектних програма. Основне функције пуниоца. Конструкција пуниоца и повезивача. Динамичко повезивање и пуњење. Пуњење са прекривањем. Функције кернела оперативног система и њихова употреба. Упознавање са функционисањем системских библиотека и кернел API-ја различитих оперативних система Кернел АПИ и системски позиви. Програмирање улаза и излаза. Прављење управљачких програма. Дебаговање у кернелу. Имплементација кернел модула. Интерпроцесна и међурачунарска комуникација.

Практична настава

Пројектовање компактора машинског кода. Пројектовање симулатора одредишног система. Пројектовање компоненти за дебаговање и контролисано извршење програма. Интегрисано развојно окружење. Процеси, њихова међусобна комуникација и употреба команди за праћење. Имплементација најважнијих Unix системских команди. Писање нових команди. Употреба POSIX API и сигнала. Развој управљачких програма (драјвера) за Униx и Wиндоwс. Системско програмирање употребом скрипт језика.