Computer Science Department
College of Arts and Sciences

Fundamentals of Computing Systems


This course is a required junior-level Computer Science course. It covers the fundamental concepts underlying the design and implementation of computing systems.

The philosophy underlying the design of this course is that students should be familiarized with problems that reoccur in software systems, and should be acquainted with the set of classical algorithms for solving such problems. In particular, it is important to develop the ability to recognize standard problems in different wordings and within unusual context, and match them with appropriate algorithms.


The College of Arts and Science has recently approved a change in the requirements for a BA in Computer Science. According to this change, CS-305: "Automata and Formal Languages" is being replaced by CS-350: "Fundamentals of Computing Systems" (see the description below). This change applies to all undergraduate students declaring Computer Science as a major concentration in April 1997, or after. This spring (S'98) marks the the first offering of CS-350. Thereafter, CS-350 will be offered every Fall (including Fall 1998). Students who were planning on satisfying their CS upper-division requirements by enrolling in CS-305 must take CS-350 instead.

Catalog Description:

Rigorous treatment of invariant concepts, algorithms, and performance evaluation methods underlying computing systems design. Topics include modeling and analysis of concurrent processing, computational resource scheduling and consumption, and performance evaluation techniques.


Function in the Curriculum:

As a core undergraduate course, CS-350 does not focus on particular implementations or specific technologies. On the contrary, it stresses the fundamental concepts and basic algorithms that have survived (and are likely to survive) the evolution of computer software systems in general, and operating systems in particular.

This course is significantly different in purpose and coverage from CS-210 (Computer Systems). CS-210 introduces computer systems to sophomores using a hands-on approach by examining the "mechanics" of modern (or typical) computer operation through exposure to various interfaces between architecture, compilers, loaders, linkers, and run-time systems. CS-350 does not focus on a particular interface or a particular technology, rather it deals with fundamental notions and algorithms that are common to computing systems in general and to software systems in particular.

This course will be required for the following advanced courses: CS-552 (Advanced Operating Systems), CS-550 (Advanced Computer Architecture), CS-551 (Parallel Computing Architectures and Models), CS-555 (Data Communications), and CS-560 (Databases). In that respect, this course covers basic notions that we expect students (graduates and undergraduates alike) enrolling into these classes to have mastered. For example, it is inconceivable that a student who is interested in taking a database class, not to have being exposed to the notion of concurrent processing and mutual exclusion, for example.

Topical contents:

The topics covered in this class could be grouped under 3 general themes:

Created on: October 1, 1997
Updated on: October 21, 1997
Maintainer: Azer Bestavros