This lab manual is written in Serbian to
accompany a conventional OS undergraduate textbook. It contains
basic information for students about key operating system
concepts and system programming for UNIX/Linux and Windows
XP/2000. The book is devoted primarily to students of the
Faculty of Electronic Engineering in Niš, where the complete
course of "System Software" (in eight semester for
the Computer Science and Informatics major) is covered. The
book, also, covers all standard courses related to Operating
Systems and System Programming at other computer science and
informatics faculties. The lab manual consists of two parts:
the first one covered UNIX/Linux operating system concepts
and system programming using POSIX and proprietary UNIX system
calls, and the second one covered Windows XP/2000 concepts
and system programming using Win32 API.
Chapter content
The first part of the book covering UNIX/Linux is organized
into eight chapters.
Chapter 1 is introductory chapter that presents
usage of Linux /proc file system. This mechanism allows inspection
of various kernel values that reflect the machine's state
like load average, process resource utilization and so on.
Chapter 2 describes standard system functions
used to read, write and create files. It also contains descriptions
of functions used to manipulate file system folders.
Chapter 3 contains explanations of system
functions used to create and manage processes and threads.
As an example for process creation and management, chapter
contains complete program for implementing simple shell. Second
part of this chapter explains functions used for managing
POSIX threads. Finally, chapter ends with an example program,
which completes a task using multiple threads.
Chapter 4 describes techniques used to synchronize
execution of threads. Synchronization methods described in
detail and supplemented with example source code are mutexes,
condition variables, POSIX and System V semaphores.
Chapter 5 contains description of various
methods of communication between different running processes.
The chapter is divided in two parts, first part demonstrating
usage of pipes and second part usage of signals. Comprehensive
example program is presented at the end of each part.
Chapter 6 presents memory structure of a
UNIX/Linux process. Functions used for memory allocation and
deallocation are explained in detail. This chapter also describes
shared memory concept. This is another method that can be
used for inter process communication.
Chapter 7 describes advanced I/O functions
including System V streams, I/O multiplexing and memory mapped
I/O.
Chapter 8 contains description of UNIX/Linux
network programming. Chapter deals with both connection oriented
and connectionless sockets and their usage for communication
between processes that reside on different machines.
The second part of the book covering Windows
XP/2000 is also divided into eight chapters.
Chapter 1 has an introductory character and
gives a short review of the Windows 2000 operating system
essentials and tools that can be used for monitoring system
behaviour.
Chapter 2 describes Windows file system,
functions opening, reading, writing and closing files and
techniques for file and directory management.
Chapter 3 contains definition of Windows
process and threads and description of techniques for process
creation, exiting and terminating process, thread creation
and management,
Chapter 4 describes need for thread synchronization
and basics of Win32 synchronization objects: Mutexes, Semaphores,
Events, Critical Sections
Chapter 5 defines basic mechanism and techniques
for interprocess communication: Anonymous pipe, Named pipes,
Mail Slots and Memory mapped files
Chapter 6 contains basics of Win32 memory
management architecture and techniques for monitoring system
memory and dynamic memory management.
Chapter 7 defines Win32 I/O architecture
basics and gives overview of Win32 asynchronous and overlapped
I/O.
Chapter 8 contains definition of OSI reference
model and basic techniques for Windows socket programming.
At the end of each chapter there are programming
assignments for lab practicing. The final section of the book
contains references and material for further readings.
This book was written primarily for students
and provides necessary information for preparation and performing
of System Software laboratory exercises for UNIX/Linux and
Windows XP/2000. The book provides hands-on learning by allowing
students to work on system programs that implement the concepts
that they learned in lectures and primary text readings. Numerous
examples of system calls providing programming interface to
operating system functionality and complete program code implementing
more complex problems within the operating system topics are
useful not only for lab practicing, but also for better understanding
of the matter and preparing written and oral exams.
Our recommendation is that this book is useful
as manual for lab exercises, but also as an auxiliary book
for courses covering topics on operating systems and system
programming.
|