Computer Systems Organization

CSCI-UA.0201(007), Spring 2026

Lab assignments

Lab 1 C programming (Part 1)
Due: 2/8
Lab 2 C programming (Part 2)
Due: 2/19
Lab 3 Binary lab
Due: 3/22
Lab 4 Malloc
Due: 4/9
Lab 5 Basic Logic Design
Due: 4/23

All labs' git classroom invitation links can be found on Campuswire

AI and Integrity Policy

Please read this.

Background: Working with UNIX for program development

This course assumes familiarity of the UNIX environment as course pre-requisite. If you are new to UNIX, you should take some time to read on your own to master the required knowledge.
Good sources to help you learn UNIX:

Lab Setup Preliminary

We use Docker for doing labs so everyone has the same Linux (Unix) enviroment, whether you are on a Mac, Windows or other kind of laptops.

Docker gives you a pre-built lab environment that includes:

Install Docker Desktop
Creating and Running CSO Docker image

Reminder: if your laptop is Windows, type all the commands within WSL.

Do the following:

Setting up Git and Github

Learn to use git

Git is a version control system. It allows you to save versions of your work over time. It's like a time machine plus a teamwork system for your program files, where you track changes and safely experiment and collaborate without chaos.

Eddie Kohler has an excellent guide on Git. You should read it.

You can find other comprehensive sources to study here.

This course uses Github to distribute and collect labs. Github is a cloud storage plus other useful project management tools for code using git.

Create a Github account if you do not already have one. The Free plan is perfectly fine.

Set up ssh-based logins to Github.

Cloning your lab repo locally

  • Create a github private repository by clicking on each lab's invitation link (posted in Campuswire). Select your NYU NetID to link your github account and create your lab repository on Github.
  • On your laptop, clone your repo by typing the following (the following example is for clab part1).
    $ cd cso-labs
    $ git clone git@github.com:nyu-cso-sp26/clab-part1-<YourGithubUsername>.git clab-part1
    

    You will see that a directory named clab-part1 has been created under the cso-labs directory. This is the git repo for your clab assignment (part 1). Other labs can be created similarly by cloning respective repositories.

  • Using a command line editor to modify files for your lab assignments.

    We recommend using nano. For example, if you want to change file array.c, type the following:

    $ cd cso-labs/clab-part1
    $ nano array.c
    

    Saving changes to Github while you are working on Labs

    As you modify the skeleton files to complete the labs, you should frequently save your work to protect against laptop failures and other unforeseen troubles. You save the changes by first "committing" them to your local lab repo and then "pushing" those changes to the repo stored on github.com

    $ git commit -am "saving my changes"
    $ git push origin master
    
    Note that whenever you add a new file, you need to manually tell git to ``track it''. Otherwise, the file will not be committed by git commit. Make git track a new file by typing:
    $ git add <my-new-file>
    

    After you've pushed your changes by typing git push origin master, they are safely stored on github.com. Even if your laptop catches on fire in the future, those pushed changes can still be retrieved. However, you must remember that doing git commit by itself does not save your changes on github.com (it only saves your changes locally). So, don't forget to type git push origin master.

    To see if your local repo is up-to-date with your origin repo on github.com and vice versa, type git status

    FAQs on Git repository

    Handin Procedure

    You must do both of the following steps:

    Acknowledgements

    Some part of this material is based on the lab setup instructions in Prof. Michael Walfish's CS202.