TTIT61 Nachos - short introduction

37
TTIT61 TTIT61 Nachos - short introduction Nachos - short introduction Gert Jervan IDA/SaS/ESLAB

description

TTIT61 Nachos - short introduction. Gert Jervan IDA/SaS/ESLAB. Introduction. Course: Concurrent Programming and Operating Systems TTIT61 Homepage: http://www.ida.liu.se/~TTIT61/ check regularly read messages section. Laboratory Assignments. “This is the planet where Nachos rule ” - PowerPoint PPT Presentation

Transcript of TTIT61 Nachos - short introduction

Page 1: TTIT61 Nachos - short introduction

TTIT61TTIT61Nachos - short introductionNachos - short introduction

Gert Jervan

IDA/SaS/ESLAB

Page 2: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-2-

Introduction

• Course: Concurrent Programming and Operating Systems TTIT61

• Homepage: http://www.ida.liu.se/~TTIT61/

check regularlyread messages section

Page 3: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-3-

Laboratory Assignments

“This is the planet where Nachos rule”Nachos homepage @Washington Univ.

• Lab 1: Threads and Synchronization• Lab 2: System Calls and Memory Management• Lab 3: Translation Lookaside Buffers (TLBs)•

All labs are build upon the previous labs

Page 4: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-4-

Laboratory Sessions

• Sun machines• C++

• Be prepared– Tools: (x)emacs, gmake, gdb (ddd / xddd), man

=> No support without using debugger before!

• Mark your changes in the source code• Demonstrate working solution

Page 5: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-5-

Laboratory Sessions

• Documentation– A readme file which contains:

• The files you have created and a short description

• The major changes you have made to the given files

– A testcase file which contains: • Which test cases did you use

• What was the output of the test cases

• Whate those testcases should demonstrate

Page 6: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-6-

Laboratory Sessions

• Marking changes

// ------------------------------------------------

// 00-01-24: your_name: changed

...

// end of changes

// ------------------------------------------------

Page 7: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-7-

Laboratory Sessions

• File header // ==========================================

// TTIT61: Lab 1: solution.cpp // ------------------------------------------------ // Group XYZ: Mister X / Miss Y // ------------------------------------------------ // This module extends Nachos to be able to work // with semaphors. // ------------------------------------------------ // 00-02-01: misterX: created // 99-02-12: missY: semSignal: changed signal type

// ===========================================

Page 8: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-8-

Laboratory Sessions

• Function header

// ------------------------------------------------ // int readInput(int file) // ------------------------------------------------ // This function reads continuously from the // file and returns the number of bytes read // ------------------------------------------------ // Parameters: // file: handle of the file to read from // ------------------------------------------------

Page 9: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-9-

Tips

• Read documentation and source code

• Use a debugger (gdb / ddd)

• Use code browsing tools (emacs)

• Use different test cases

• Read homepage regularly

Page 10: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-10-

Nachos Overview

• “Not Another Completely Heuristic Operating System”• Free operating system and simulation environment to

study an operating system• Runs as a single Unix process (real operating systems

run on bare machines)• Simulates low-level facilities (including interrupts,

virtual memory and interrupt-driven device I/O)• Implemented in subset of C++, ca. 2.500 lines of code

Page 11: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-11-

Nachos Overview

• Nachos simulates a machine approximating a real machines architecture

• Has:– Registers, Memory, CPU, Event-driven simulated clock

• Can execute arbitrary programs• Two modes: simulator (running programs)

and “kernel mode” (starting up or reacting on hardware traps)

Page 12: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-12-

Object Machine

• Available through variable machine

• Public attributes:– registers (array of 40 registers including stack pointer, program counter,

etc.)

– mainMemory (byte-addressable, organised into 128-byte pages, 31 pages)

– Virtual Memory (single linear page and software-managed TLB)

• Methods: Machine (constructor), Translate (translates virtual addresses), OneInstruction, Run, ReadRegister, WriteRegister, ReadMem, WriteMem=> Read documentation and source code

Page 13: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-13-

Interrupt Management

• Nachos simulates interrupts with an event queue and a clock (clock ticks queue is examined for pending events)

• The clock ticks, when ...– Interrupts are restored

(used often for mutual exclusion purposes)

– One instruction is executed

– “Ready list” is empty

• Object Interrupt:– Main methods: Schedule (schedule event), SetLevel (disable / enable),

OneTick=> Read documentation / source code

Page 14: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-14-

Address Translation

• Nachos supports two virtual memory architectures:– Linear page tables

(easier to program)

– Software-managed TLB(closer to what current machines support)

– Only one at a time

• Linear page tables:– Virtual address: page number and page offset– Physical address: machine->mainMemory + n * PageSize + m

• Read documentation / source code

Page 15: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-15-

Threads Overview

• Process:– Address space (memory allowed to reference: code, stack, heap,

dynamically allocated memory)

– Single thread of control

– Other objects (open file descriptors, etc.)

– => program, data, state information (memory, registers, etc.)

• Threads (Nachos):– Executing the same code

– (big difference) Global variables are shared among all threads(=> synchronisation?, mutual exclusion?)

Page 16: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-16-

Object Thread

• Object Thread methods:– Thread (constructor)

– Fork (making thread executable)

– StackAllocate

– Yield (suspend and select next waiting one)

– Sleep (suspend)

– Finish (terminate)

• Read documentation / source code

Page 17: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-17-

Thread switching

• Suspend current thread

• Save thread state (registers)

• Restore state of of thread to switch to

=> function Switch(oldThread, nextThread)(written in assembly language)

Page 18: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-18-

Threads and Scheduling

• Ready list (threads which are ready to run)• Scheduler decides which thread to run next

(invoked whenever the current thread gives up the CPU)– Nachos: unprioritized, round-robin fashion

• Object Scheduler methods:– ReadyToRun (place thread in ready list)

– FindNextToRun

– Run

Page 19: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-19-

Synchronisation and Mutual Exclusion

• Mutual exclusion achieved by disabling / enabling interrupts

• Synchronisation provided through semaphores• Object Semaphore methods:

– Semaphore (constructor)

– P (decrement semaphore’s counter;blocking caller if 0) (wait)

– V (increment semaphore’s counter,releasing one thread if any are blocked) (signal)

Page 20: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-20-

System calls & memory management - overview

• User programs run in private address spaces

• Nachos can run any binary(only using system calls that Nachos understands)

• Conversion of binaries (coff to Noff format, see documentation)

• Nachos, executing a program (Creating a process):– Create address space

– Allocate physical memory for the address space

– Load executable (instructions, initialised variables) into memory

– Zero memory for uninitialised variable

– Initialise registers and address translation tables

– Run

Page 21: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-21-

System Calls and Exception Handling

• Systems calls are invoked by the “syscall” instruction(generates hardware trap into the kernel,no parameter => system call ID in register r2)

• Traps are implemented by invoking the RaiseException function (which calls the ExecptionHandler)

• Read documentation / source code

Page 22: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-22-

Lab1: Threads and Synchronization

• You will have:– Part of a working thread system and an

implementation of semaphores

• You have to:– Write the missing code (for locks and condition

variables) and to test it

Page 23: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-23-

How to do it

• Read and understand the partial thread system given to you ($HOME/nachos-3.4/code/threads)

• Run it in debugger and trace the execution path. Follow the state of each thread and keep track which procedures are each thread’s execution stack.

Page 24: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-24-

Threads

• Nachos threads are in one of four states:– READY, RUNNING, BLOCKED, JUST_CREATED

• The scheduler decides which thread to run next

• Synchronisation facilities are provided through semaphores

Page 25: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-25-

What to do. Part 1

• You will have classes Semaphore, Lock and Condition

• Semaphore is already implemented; Lock and Condition (together will give the same functionality as monitor) should be implemented

Page 26: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-26-

How to implement

• Interfaces for Lock and Condition are provided ($HOME/nachos-3.4/code/threads/synch.h)

• You have to implement the interface (don’t change it!)

• NB! It should not take you very much code to implement.

Page 27: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-27-

What to do. Part 2

• Test your implementation– Write a class BoundedBuffer (Silberschatz, p. 172)

and use it for producer/consumer communication.– Don’t forget border conditions: empty buffer, full

buffer– Try several producers and/or consumers

Page 28: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-28-

Lab 2: System Calls and Memory Management

• Each user program runs with its own memory

• The communication between the kernel and the user program is done by system calls

• System call causes an exception (interrupt)

• All the communication to the kernel goes through an exception handler

Page 29: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-29-

How to do it

• Read and understand the part of the system given to you (mainly $HOME/nachos-3.4/code/userprog)

• Play around with example ‘halt’ in $HOME/nachos-3.4/code/test (start as ‘nachos -x ../test/halt’)

• Trace, what happens, as the program gets loaded, runs, and invokes the system call

Page 30: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-30-

Part1: SC; What to do

• Implement all system calls defined

• Compile programs to MIPS machine code (using provided cross compiler) and link (use provided Makefile as an example)

• Debug & test your implementations

Page 31: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-31-

Part1: SC; How to implement

• Interfaces for system calls are provided ($HOME/nachos-3.4/code/userprog/syscall.h)

• You have to implement the interface (don’t change it!)

Page 32: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-32-

Part2: the MM; What to do

• Given system allows to run one user program at a time

• You have to allow several user programs to reside simultaneously in the primary memory

• Test the implementation by implementing multiprogramming with time-slicing

Page 33: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-33-

Lab 3: TLBs (Overview)

• “Allows execution of processes that may be not completely in memory”

• Nachos supports virtual memory architectures:– Linear page tables

(easier to program)

– Software-managed Translation Lookaside Buffers (TLB)(closer to what current machines support)

Page 34: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-34-

• Address Translation– Virtual address: page number and page offset– Physical address: machine->mainMemory + n*PageSize + m

Linear page tables

CPU p d

logicaladdress

TLB miss

physicalmemory

f d

physicaladdress

p

page table

Page 35: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-35-

Translation Lookaside Buffers

• Used for caching between physical memory and CPU for faster access

CPU p q

logical

address

page

number

frame

number

TLB miss

TLB

physical

memoryf d

physical

address

TLB hit

p

page table

Exception:

Fetch physical page #from process page table

Resume execution from thesame PC

Page 36: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-36-

TLBs

• 4 entries in Nachos machine• TLB is invalid after a context switch

• Write code in ExceptionHandler to handle the PageFaultExceptions caused by TLB misses

• invalidate the TLB when switching contexts• Synchronize the TLB and process page table entries.

Page 37: TTIT61 Nachos - short introduction

Gert Jervan, IDA/SaS/ESLABGert Jervan, IDA/SaS/ESLAB TTIT61 Lab IntroTTIT61 Lab Intro-37-

How to survive

• Read the code that is handed out with the assignment first, until you pretty much understand it. Start with the “.h” files.

• Don’t code until you understand what you are doing. Design, design, design first. Only then split up what each of you will code.

• Talk to as many other people as possible. CS is learned by talking to others, not by reading, or so it seems to me now.

Student @Berkeley after successful finish with Nachos