Yen-An Chen Logo Picture
Yen-An Chen

System-Level Programming Projects

This page offers a comprehensive case study of the System-Level Programming Projects, providing you with a Project Overview, details on the Tools Used.

Project 1: Shell

Overview

The shell is a critical component in the daily lives of computer scientists, software engineers, and system administrators. It acts as the primary command-line interface for interacting with the operating system, enabling users to harness the full power of various OS features. In this case study, we delve into the development of 'nyush' (New Yet Usable SHell), a simplified version of the Unix shell

In the 'nyush' project, I set out to create a command-line interface that replicates core functionalities of a typical Unix-like shell. Key features of 'nyush' include:

  • 1. Command-Line Interface : Users can enter commands directly, mimicking the familiar shell experience.
  • 2. Program Execution : 'nyush' supports the execution of both built-in and external programs, expanding its utility.
  • 3. Process Management : I implemented process creation, management, and termination, ensuring robust control over running programs.
  • 4. Signal Handling : 'nyush' handles signals effectively, including support for Ctrl-C and Ctrl-Z actions.
  • 5. Input/Output Redirection : Flexible file handling is enabled through input and output redirection.
  • 6. Pipes : Users can enter commands directly, mimicking the familiar shell experience.

Tools Used

C
Linux
Git
GCC
Makefile
GitHub

Project 2: Run-Length Encoding

Overview

Data compression is the process of encoding information using fewer bits than the original representation. Run-length encoding (RLE) is a simple and effective compression algorithm. In this case study, we will explore the development of a parallel RLE encoder named "nyuenc.

In the 'nyuenc' project, I develop a parallel run-length encoder, aiming to efficiently compress data using run-length encoding. Key features of 'nyuenc' include:

  • 1. Building a run-length encoder capable of sequential data compression.
  • 2. Parallelizing the encoding process using POSIX threads.
  • 3. Implementing a thread pool for task execution.
  • 4. Evaluating the performance improvement achieved through parallelization.

Tools Used

C
Linux
Git
GCC
Makefile
GitHub
POSIX Threads

Project 3: File Recovery

Overview

FAT32, a widely compatible file system, has been in use for over two decades. In the event of accidental file deletion, it's possible to recover these files from a FAT32 file system. This case study delves into the development of "nyufile" (Need You to Undelete my FILE), a FAT32 file recovery tool, to help users regain access to deleted files.

In the 'nyufile' project, I create utility to recover deleted files from a FAT32 file system. Users can specify the file to recover, and nyufile will attempt to restore it. Key Steps of 'nyufile' include:

  • 1. Validate Usage.
  • 2. Print File System Information.
  • 3. List Root Directory.
  • 4. Recover a Small File.
  • 5. Recover a Large Contiguously Allocated File.
  • 6. Detect Ambiguous File Recovery Requests.
  • 7. Recover a Contiguously Allocated File with SHA-1 Hash.
  • 8. Recover a Non-Contiguously Allocated File.

Tools Used

C
Linux
Git
GCC
Makefile
GitHub
FAT32
SHA-1