Professor
Sekeri & Cheiden Str.,
38334 Pedion Areos, Volos, Greece
Tel, Fax: +30-24210-74578
E-mail: cda at uth dot gr
The goal of the course is to introduce freshmen students to the science and art of computer programming. More specifically, students are introduced to algorithmic problem solution, program design based on the procedural programming model, and program implementation (coding) using the C programming language. Moreover, they are taught how to test and debug their programs. The course is designed for students without any prior programming experience, starting from the basics and gradually moving to more advanced topics. Particular emphasis is placed on the immediate, hands-on application of the attained knowledge.
The following topics are covered: memory model and the notion of variable, basic data types, operators, control structures, functions, variable scope, parameter passing, recursion, arrays, custom data structures, dynamic memory, pointers, dynamic data structures, files, C pre-processor basics, libraries.
The course includes mandatory weekly programming labs and periodic assignments in C.
The main goal of the course is to allow students to apprehend the role and services provided by modern operating systems. The course emphasizes on the design and functionality of operating systems and on the trade-offs encountered by operating system designers. By the end of the course students should be able to assess the advantages and disadvantages of each design choice.
The main topics covered by the course are, in summary, the following:Introduction, general discussion on operating systems and computer architectures. Threads and processes, concurrency, synchronization, deadlocks. Process scheduling. Memory management. Disk management, filesystem organization. I/O, interrupts, DMA. Security and protection mechanisms and policies.
The course includes mandatory projects, which allow students to work on a real operating system, study its internals, understand the implementation of the basic concepts discussed in the class and integrate their own code.
This is a cross-listed undergraduate/graduate course. The course focuses on programming techniques for parallel systems and more specifically for systems based on multicore or manycore processors. It covers programming of both conventional and non-conventional (GPUs, accelerators etc.) architectures.
We outline the technical and economical reasons that led to the de facto prevalence of multi- and manycores and present the main principles of parallel computer architectures and the main metrics used for performance evaluation. Students are introduced to tools used for detailed performance profiling and the evaluation of hardware/software interaction. Following, we discuss programming models for multi- and many-cores (OpenMP, Pthreads, Intel Thread Building Blocks / Cilk+, OpenCL, OpenACC). The CUDA programming model for GPUs is presented extensively. Moreover, the class focuses on the interaction of software with the underlying memory architecture, the efficient implementation of synchronization primitives and optimization techniques on a single core.
The course is complemented by a term-long programming project and periodic programming assignments.
This is a cross-listed undergraduate/graduate course. The course focuses on providing students with the technical and administrative skills required for the development of large-scale software projects in groups. The course goes through all phases of software lifecycle. It also introduces students to UML, software design patterns and architectures, software quality metrics and cost estimation & management.
Moreover, the students participate in a term-long project, which allowes them to gain hands-on experience in technical, administrative and managerial issues related to the development of complex software systems. Moreover, they have the opportunity to use modern tools that support the software development process.