| Date | Topic | Reading | 
  $firstday=mktime(0, 0, 0, 8, 26, 2014);
  function lecture($topic, $link, $description, $reading='No reading', $numlecs=1) {
      global $firstday;
      print '| ';
      $oldfirstday = $firstday;
      while($numlecs > 0) {
	    print date("D M d", $firstday) . ' ';
      if($link != '') {
         if(time() > $oldfirstday) {
            $linkstr = '' . $topic . ' (PDF)';
	    
	 } else {
            $linkstr = '' . $topic . '';
	 }
      } else {
	 $linkstr = '' . $topic . '';
      }
      if($description != '') {
         $linkstr = $linkstr . ': ' . $description;
      }
      
      print ''; 
            if(date("D", $firstday) == "Tue") { $firstday += 60 * 60 * 24 * 2; }
      	    else if(date("D", $firstday) == "Thu") { $firstday += 60 * 60 * 24 * 5.01; }
	    $numlecs -= 1;
      }
      print '
 | ' . $linkstr . ' | ' . $reading . ' | 
';
  }
  lecture('Introduction', 'slides/01-intro.pptx', 'Introduces the course and its contents; Discusses the history of OSs.');
  lecture('Architectural Support for Operating Systems', 'slides/02-arch-support.pptx', 'Interrupts and Traps; I/O and device drivers; OS Protection; OS Structure; Booting.', 'Ch. 1 & 2');
  lecture('Processes and Threads', 'slides/03-processes-threads-v2.ppt', 'What is a process? What is a thread? How are they created and destroyed? How are processes and threads implemented?', 'Ch. 3', 2);
  lecture('CPU Scheduling', 'slides/04-scheduling.ppt', 'How does the OS decide which user processes/threads to schedule?', 'Ch. 7', 1);
  lecture('Synchronization', 'slides/05-synchronization.ppt', 'How do threads share the same memory without stepping on each others 
	toes? How do threads coordinate their execution? Locks, 
	spinlocks, semaphores, monitors and condition variables.', 'Ch. 4 & 5', 5);
  lecture('Deadlocks', 'slides/06-deadlocks.pptx', 'How  to prevent synchronized threads from mutually blocking each other.', 'Ch. 4 & 5', 2);
  lecture('Memory Management', 'slides/07-main-memory.pptx', 'Memory organization. Paging. Segmentation. Page Tables. TLB Management.', 'Ch. 8', 2);
  lecture('Fall Break', '', '', '');
  lecture('Virtual Memory', 'slides/VirtualMemory.pptx', '', 'Ch. 9', 2);
  lecture('Networking', 'slides/09-networking.pptx', 'Network organization. Ethernet. ARP. DHCP. DNS. IP. TCP. BGP. Routing overview.',
				'
				Saltzer, Reed and Clark, End-to-End Arguments in System Design. 
', 5);
  lecture('Disks and RAID', 'slides/disksraid-09.ppt', 'Disk Organization. Disk Interface. RAID.', 'Ch. 12');
  lecture('File Systems', 'slides/filesystems-10.ppt', 'How are filesystems implemented, what are the performance implications for various designs? Persistence, Consistency, FAT, Unix File System, Log structured filesystems(PDF).', 'Ch. 13 & 14
Rosenblum and Ousterhout.
The Design and Implementation of a Log-Structured File System.
', 3);
  lecture('Security (1)', 'slides/security-12.ppt', 'Basics of authentication, authorization and privacy management in operating systems.', '');
  lecture('Thanksgiving', '', '', '');
  
  lecture('Security (2)', 'slides/security-12.ppt', '', '');
  lecture('Advanced Operating Systems', '', '', '');
?>