Undergraduate Courses

  • Boolean algebra, logical gates. Simplification of logical functions. Combinatorial circuits (analysis and design of adders, subtracters, code converters, comparators, multiplexers, decoders, ROMs, PLAs, etc.). Clocked sequential circuits (latches and flip-flops, analysis and synthesis of clocked sequential circuits). Registers, counters and memory circuits. Algorithmic state machines. Asynchronous sequential circuits.

  • The course sets two general objectives which are combined to yield a unified result. One part concerns introduction to object-oriented programming using C++, including: Principles of object-oriented programming (abstract data types, generalization, specialization, locality, information hiding, encapsulation), the C++ programming language (objects and classes, access and modification of object members, constructors and destructors, inheritance, access rules, protected members, friend functions, polymorphism, virtual functions, operator, function and method overloading), analysis of program running time. The second part concerns the study of the most important data structures, implemented in C++ with the object-oriented programming model, including: Linked Lists (doubly linked lists, circular lists, ordered lists), trees (binary tree traversal, depth-first and breadth-first traversal, binary search trees, AVL trees), heaps (full binary trees, binary heaps), M-way search trees (searching, complexity), B-trees, hashing (hashing methods and functions, hash tables, implementation, complexity). Additionally, there is a laboratory part comprising a number of C++ programming projects to be worked out by students at the PC Labs on a weekly basis.

  • Introduction to computer technology concepts. Algorithms for computer arithmetic. Instruction set architectures. CPU organization, memory reference modes, instruction formats. MIPS (RISC) architecture. Datapath and control unit design. Pipelining. Memory organization, memory hierarchy, Random Access Memory (RAM), associative memory, cache memory, virtual memory. I/O organization, synchronous-asynchronous communication, interrupts, busses, network interfaces. Secondary storage devices.

  • Τhis course covers the general principles of Operating Systems. Evolution of Operating Systems, Input/Output, concurrent processes, critical section, process synchronization and communication. CPU scheduling. Memory management (static and dynamic allocation, virtual memory, paging, segmentation). File management, disk scheduling, deadlocks.

  • This course offers laboratory projects to assimilate critical concepts from the previous courses “Computer Architecture” and “Operating Systems”. The course includes 3-4 exercises in distributed UNIX programming, development of device drivers, kernel-level programming, and extensions of the Linux OS.

  • Instruction Set Architectures (ISA), modern CPU organization: control unit and datapath, pipelined architectures, memory hierarchy organization (cache memories, virtual address translation, TLB), multistage pipelines with variable latencies, branch prediction. Instruction Level Parallelism (ILP), superscalar pipelines, out of order (OOO) execution, Very large Instruction Word (VLIW) architectures, GPUs. Examples of modern processors, hyperthreading (HT), Simultaneous Multithreading (SMT), Multicore chips (Chip Multiprocessing). Cache coherence and memory consistency models.

  • Synchronization: Physical, logical and vector clocks, synchronization of physical and logical clocks, Lamport’s algorithm. Distributed Coordination: Mutual Exclusion Algorithms, Election Algorithms, Distributed Agreement, Interactive Consistency, Byzantine Protocols, Paxos Distributed Unanimity Algorithm. Transactions and concurrency control: ACID properties, nested transactions, two-phase strict locking, concurrent update problems, timestamp layout, optimistic concurrency control. Distributed transactions and concurrency control: distributed atomic transactions, distributed concurrency control, deadlock detection, error recovery. Data copies: fault tolerance, primary/secondary copy, passive/active copy, network partition management, high availability, consistency levels, the CAP theorem. Peer-to-peer networks, distributed hash tables, distributed storage systems, Map Reduce and Bulk Synchronous Parallel distributed processing programming models.

  • Introduction to Parallel Processing. Shared memory and distributed memory architectures (SMP, COMA, NUMA, cc-NUMA, SMT, Clusters, MPPs). Methods, techniques and interconnection networks (Bus-oriented, Cube, Switch Network, Mixed systems). Clusters as supercomputers. Principles of parallel programming. Design and implementation of parallel programs. Parallelization and partitioning techniques. Parallel programming models: Message passing and shared address space. Synchronization and concurrent data structures. Laboratory exercises: Application development in clusters, multicore and manycore (accelerator) architectures with OpenMP, MPI, CUDA, Cilk and others. Performance analysis.

Graduate Courses