Skip to main content
Link
Menu
Expand
(external link)
Document
Search
Copy
Copied
Operating Systems
Cooler Operating Systems
Labs
Setup
Lab 1 - Operating System Perspective
Task: System Calls
Task: System Call Wrappers
Task: Library Calls vs System Calls
Read: Modern Software Stacks
Read: Analyzing the Software Stack
Read: System Call Wrappers
Read: Library calls vs System Calls
Lab 2 - Library Perspective
Task: Common Functions
Task: Standard C Library
Task: High-Level Languages
Guide: Statically-linked and Dynamically-linked Libraries
Task: App Investigation
Read: Common Functions
Read: Libraries and libc
Read: High-Level Languages
Read: App Investigation
Lab 3 - Memory
Task: Memory Access
Task: Memory Corruption
Task: Memory Protection
Task: Access Counter
Read: Working with Memory
Read: Process Memory
Guide: Memory Allocation Strategy
Guide: Memory Vulnerabilities
Lab 4 - Investigate Memory
Task: Allocating and Deallocating Memory
Task: Memory Mapping
Task: Memory Areas
Task: Modifying Memory Region Size
Task: Memory Layout of Statically-Linked and Dynamically-Linked Executables
Task: Page Mapper
Task: Reference Counting
Read: Investigate Memory Actions
Guide: Memory Actions (and Leaks) in Existing Programs
Guide: Memory Leak
Lab 5 - Memory Security
Task: Pointer Arithmetic Leak
Task: ASLR
Task: Stack Protector
Task: Bypassing the Stack Protector
Task: Exec Shellcode
Read: Memory Security
Guide: Buffer Overflow Leak
Guide: Buffer Overflow Overwrite
Lab 6 - Multiprocess and Multithread
Task: Sleepy
Task: Wait For Me Processes
Task: Create Process
Task: Multithreaded
Task: Sum Array
Task: Sum Array Bugs
Task: Another Time Slice
Read: Hardware Perspective
Task: Synchronization - Thread-Safe Data Structure
Read: Processes
Read: Threads
Guide: Baby steps - Python
Guide: Sum Array Processes
Guide: system() Dissected
Guide: Sum Array Threads
Guide: Threads and Processes with clone()
Lab 7 - Copy-on-Write
Task: Page Faults
Task: Mini Shell
Task: Apache2
Task: Shared Memory
Read: Processes, Threads and Apache2
Read: Copy-on-Write
Guide: Fork Faults
Lab 8 - Synchronization
Task: Race Condition
Task: Wrap The For
Task: Race Condition Atomic
Task: TLS On Demand
Task: Atomic Assembly
Guide: Apache2 Simulator with Semaphore
Task: Apache2 Simulator Condition
Read: Synchronization
Read: User-Level Threads
Read: Scheduling
Guide: Interaction Between Threads and Fibers
Guide: ULT Library
Lab 9 - File Descriptors
Task: My cat
Task: Copy a File with mmap()
Task: Anon Pipes
Task: Buffering
Read: File Descriptors
Read: File Descriptor Operations
Read: Pipes
Guide: Simple File Operations
Guide: Redirections
Guide: File Descriptor Table
Guide: libc FILE struct
Guide: File Mappings
Guide: Reading Linux Directories
Lab 10 - Inter-Process Communication
Task: Named Pipes
Task: Unix Socket
Task: Network Socket
Task: Receive Challenges
Read: Unix Sockets
Read: Network Sockets
Read: Client-Server Model
Guide: Networking 101
Lab 11 - IO Optimizations
Task: Ordered Client-Server Communication
Task: Multiplexed Client Server
Task: Async Server
Read: I/O Multiplexing
Guide: Async IO
Read: Asynchronous I/O
Read: Zero-Copy
Guide: Benchmarking sendfile()
Guide: Kernel Caching
Lab 12 - Application Interaction
Task: Time Server
Task: Password Cracker
Task: D-Bus - Battery Level
Read: The X Window System
Read: Time Server
Read: Password Cracker
Guide: Containers vs VMs
Read: OS Cloud
Read: D-Bus
Guide: D-Bus Inspection with D-Feet
Guide: Calling D-Bus Methods
Guide: Inspecting Low-Level Communication
Guide: D-Bus usage in Python
Quizzes
ASLR
Always Shared Sections
Both Condition and Mutex
Bypass Canary
Cause of FileNotFoundError
Cause of bind() Error
Cgroups Versus namespaces
Child Faults After Write
Client-Server Number of Copies
Coarse vs Granular Critical Section
Container Versus VM
Copy-on-write Flag for mmap()
Dynamic Libraries
Fewer than Two Copies
Fiber Strace
File Descriptor of stderr
File handler in C
Firefox: TCP or UDP?
Flush Libc Buffer
Half Page
I/O Errors
Libcall with Syscall
Limitation of Anonymous Pipes
Memory Granularity
Memory Leaks
Mini-shell Stops After Command
Modify String
Not Race Condition
Number of RUNNING User-Level Threads
Number of Running Threads
Oneko Timer
Operator Overloading
Page Allocation
Parent Faults before fork()
Parent of sleep Processes
Pipe Ends
Process Creation
Processes Speedup
Python Tools
Receiver Socked File Descriptor
Segfault Exit Code
Semaphore Equivalent
Similarities Between the TCBs of libult and Unikraft
Sleeping on a Fiber
Software Properties
Stack Protector
Stack layout
Static Executables
Strcpy Buffer Overflow
String Buffer Overflow
Syscall ID
Syscall Numbers
Syscall Tool
Syscall Tool
Syscall Used by fopen()
Syscall Wrappers
Syscalls Used by cp
TLS Synchronization
TLS var Copies
The Need for a COMPLETED Queue
Thread Memory
Threads Shared Data
Time Server Interoperability
Time Server Protocol
Time Slice Value
Type of Scheduler in libult.so
ULT Thread IDs
VM Creation
Valgrind Leaks
Variables in memory regions
Who Calls execve in the Log of the Parent Process?
apache2 Document Root
create_sleepy Process Ending
exec() Without fork()
malloc()
malloc() and brk()
malloc() and mmap()
mmap() file
mmap() vs read() and write() Benchmark
printf() System Call
printf() Under Strace
printf() vs write
sender.py and receiver.py Client-Server Parallel
strcpy() System Call
Assignments
Mini-libc
Memory Allocator
Parallel Firewall
Minishell
Asynchronous Web Server
Lambda Function Loader (hackathon)
Parallel Graph (archived)
Resources and Useful Links
Rules and Grading
Labs
Quizzes
Process Creation
Process Creation
Question Text
At what stage is a new process created?
Question Answers
At load time
At link time
At runtime
At compile time