[1] | [2] | [3] | [4] | [5] | [6] | [7]
This is an introductory course to computer and network communications. In this course we develop the understanding of the principles of networking and communications' functionalities. In the study of protocols we start with application level ones, enabling students to start with more familiar paradigms, in the context of applications that we use regularly. Moving to lower layers later on, we have the possibility to uncover gradually about network services, their functionality and the ease/difficulty for achieving them. Top of Page
Recent development in computer technologies provides companies and private users greater possibilities for using their computers in a distributed matter. The use of distributed computer system is becoming anytime and everywhere. Moreover, using distributed system, the government services has today already started providing a considerably greater flexibility with respect to the physical location in which their services are given. Because of this progress, there are higher requirements on the communications services among different computers. This course has the objectives to present current related issues within the areas computer communications and distributed computer systems, with a special emphasis on existing technological and social achievements. Top of Page
Distributed systems are a popular and powerful computing paradigm. Their importance increases as networked computers become more common than free-standing ones, especially since many different types of computers can be found in networks. In this course we will see the points of inherent difference and strength of distributed systems compared with sequential or strongly-coupled systems; consequently, we will also study the issues and problems that have to be addressed and solved efficiently for these differences to be taken advantage of, so that the system retains its strength and high potential. In particular, we will address and study the following issues in distributed systems: a) Synchronization: Continuation (after the course "Distributed Systems I") of the study of distributed clock-synchronization and its uses in mutual exclusion; study about resource allocation in general. Advance one step further, to see how to get solutions without the need for clock synchronization (and hence of lower cost in practice). b) Replication: The advantages and costs of replicating data: the potential improvement in response times and reliability, and the extra communication costs involved in keeping data consistent. c) Fault-tolerant Agreement in Distributed Systems: (a very special and significant problem, since it is a key issue in most synchronization and coordination problems in distributed systems) Study of the basic impossibility results and discuss their implications; proceed with solutions and protocols for systems with certain strengths and design structures. d) Distributed Shared Memory: The difference between shared-memory-based programming and message-passing-based programming; types of consistency; write-update and write-invalidate protocols. e) Resource allocation. Top of Page
In the course Low-level programming we are penetrating closer into the innermost kernels of the computer than in the other basic programming courses. We will study what parts a computer are consisting of, and how they work together. This knowledge one will need when one want to construct system programs, as for example parts of an operating systems and compilers, or programs to microcomputers that is a part of a bigger system like for example microwave ovens and space vehicles. We will learn the program language C, a high-level language that has been developed explicitly for low-level programming. We will also learn how to program a microprocessor directly in assembler language. In particular we are studying how interrupt handling works and how it can be used for I/O programming. We will see examples of how C as well as assembler can be used to control / program different kinds of hardware. In order to even increase the level of understanding we will manually translate C-code to assembler. Top of Page
The contents of the course include discussion of the fundamental concepts in operating systems design and the relation of these with conceptual design issues and with current directions in the development of operating systems. The aim is to provide the students with an understanding of the key mechanisms of operating systems, the types of decisions involved in operating systems design and the context within which the operating system functions (hardware, other system programs, application programs, interactive users). Top of Page
Syntax for the language C, strings, file handling, formatted I/O, handling of fields, memory handling, interruption handling, system calls and library procedures, program development tools, process handling and inter process communication. Top of Page
The objective of self-stabilization is for a distributed system that enters an illegitimate (e.g. erroneous or suboptimal) state to return to a legitimate state within a finite time without any external (e.g. human) intervention.
Attaining self-stabilization is especially difficult in a distributed system such as a computer network. This was demonstrated in the classic paper by E.W. Dijkstra in 1974 that originated research on self-stabilization. The ability to recover without external intervention is very desirable in modern computer and telecommunications networks, since it would enable them to repair errors and return to normal operations on their own. Computers and networks can thus be made fault-tolerant. Hence, many years after the seminal paper of Dijkstra, this concept is gaining in importance as it presents an important foundation for self-managing computer systems and fault-tolerant systems. Top of Page
[1] | [2] | [3] | [4] | [5] | [6] | [7] | [8]
This is a reading course. After an introductory part, each participant is expected to give some presentations (alone or in collaboration with one-two other participants) , to prepare for active participation in each meeting (as "opponent" and in general with questions, discussion, ...), and to write some report(s). The course material is based on selected articles (follow the links below to get the respective lists), grouped under 3 overlapping themes. The lists can be processed to fit the interests and the number of people in the course. Each participant may choose to actively participate in 2 or all three of the themes and, upon successful completion, get 3 or 5 points of credit, respectively. Top of Page
C/C++ Self Study Seminar, 2002, 2001. The intention of this seminar is to give students basic skills in programming C/C++. The seminar is split in eight sessions where students give presentations of prepared topics. Exercises are given in order to practice the discussed topics. Top of Page
Top of Page
Course contents: - Managing concurrent access of shared objects (non-blocking synchronization)
- Coordinating distributed processes (reaching agreement)
- Scheduling and non-blocking synchronization (can we meet deadlines better/easier? when?)
- Consistency models and protocols (trade-off between consistency guarantees and communication in multiprocessor and distributed environments - classic problems and distributed virtual environments)
Top of Page
We will have 5 lectures in this part of course. The aim of this part is helping you with learning of C Language. You need to study C a lot by yourself. I will mainly talk about some special staff related to C and some common problems faced by beginners and some useful programming tools, methods and library related to C. Top of Page
Sequential and parallel algorithms can usually be seen as recipes that transform inputs that are given to them at the beginning into desired outputs that are produced at the end. Distributed Algorithms run in processes of systems where the processing elements are physically apart and are there rather to guarantee desired behaviour of the system. People's concern when thinking of a distributed algorithm is not only what each component should do in order to guarantee the desired behaviour of the system but also -like in parallel and sequential algorithms- a big deal of effort goes to issues like: - the way that the processes can organize, remember, change and access collections of data (which data structures to use).
- how to predict (analyze) the resources that the algorithm requires; resources such as memory, communication bandwidth, computational time, time for an operation to finish.
- how to develop methods (create a design methodology) that another designer can employ in order to find a solution to another problem.
- how to prove that although you did not find a solution nobody ever will find one (Intractability).
One of the main themes of recent research in distributed network algorithms concerns better understanding of computations that can be done locally. By locally we mean within time independent of the size of the network. During this course we will address locality in basic problems like resource allocation, coloring and MIS. Top of Page
We will study a range of ways to cope with failures in various types of distributed systems (shared memory control systems, multiprocessors, networks) and applications (operating systems kernel, concurrent languages, network services). We will use some material from books, both on foundations and on applications (to provide breadth of knowledge and to refresh some introductory material, but mostly research publications (to go into some depth in the hot (or cool :-) topics and to see some nice open areas of research). Top of Page
The course will aim at making the students familiar with the basic and important problems in the area of distributed computing and some basic techniques for providing solutions or proving impossibility of solutions. It should also give a feeling for the capabilities of certain models. More specifically, the idea is that those who will have followed and participated in the course will acquire a basic background, a small "toolcase", which can be further used to study and pursue research in Distributed Computing, as well as to recognize problems encountered in practice and employ techniques for solving them (or arguments for proving impossibility). Distributed computing issues arise in a wide range of applications, including telecommunications, distributed information processing, scientific computing, real-time processing. Their importance increases as networked computers become more common than free-standing ones. Obviously, it is important that the distributed algorithms that run in these systems run correctly and efficiently, even if the communication channels and the processors operate at different speeds and/or fail. Top of Page
These are projects for students in the computer engineering program. They have to work on them during their 3rd year of the program. It is a form of capstone courses, as they are commonly referred to. Students form medium to large teams, collaborate and distribute the work. The projects span the whole academic year and have to be combined with courses to complement the team's competence. They are something like projects in a working environment. (more) Top of Page |