41
Process CSE 421/521: Opera4ng Systems Karthik Dantu Slides adopted from CS162 class at Berkeley, CSE 451 at U-Washington and CSE 421 by Prof Kosar at UB

Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Process

CSE421/521:Opera4ngSystemsKarthikDantu

SlidesadoptedfromCS162classatBerkeley,CSE451atU-WashingtonandCSE421byProfKosaratUB

Page 2: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Logis4cs–PriorAc4onItems

•  JoinPiazza•  Setupdevelopmentenvironment:VirtualBox+Ubuntu16.04

•  Implementassignment#0andtestintheenvironment

•  Formgroups

Page 3: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Logis4cs-II

•  Assignment1out•  Recita4onsstartthisweek

– Wed10-10:50(NSC210)– Fri8-8:50(Park250)

•  Recita4on:BasicPintosdiscussionaswellasC/git/Unixtools

•  Scheduleuponwebsite–checkforconflicts!

Page 4: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Logis4cs–Newac4onItems

•  Assignment1out– Readthecode– Compile/test– Learnstructure–useprin%swhereyoucantounderstandflow

•  Testsampleprogramsfromclass

Page 5: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Recall:FourfundamentalOSconcepts•  Thread

–  Singleuniqueexecu4oncontext–  ProgramCounter,Registers,Execu4onFlags,Stack

•  AddressSpacewithTransla4on–  Programsexecuteinanaddressspacethatisdis4nctfromthememoryspaceofthephysicalmachine

•  Process–  Aninstanceofanexecu4ngprogramisaprocessconsis-ngofanaddressspaceandoneormorethreadsofcontrol

•  DualModeopera4on/Protec4on–  Onlythe“system”hastheabilitytoaccesscertainresources–  TheOSandthehardwareareprotectedfromuserprogramsanduserprogramsareisolatedfromoneanotherbycontrollingthetransla-onfromprogramvirtualaddressestomachinephysicaladdresses

Page 6: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

6

ProcessConcept•  Processisaprograminexecu4on–  Aprocessimageconsistsofthreecomponents

–  anexecutableprogram–  theassociateddataneededbytheprogram

•  theexecu4oncontextoftheprocess,whichcontainsallinforma4ontheO/Sneedstomanagetheprocess(ID,state,CPUregisters,stack,etc.)

Typical process image implementation

Stallings, W. (2004) Operating Systems: Internals and Design Principles (5th Edition).

user address space

Page 7: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

ProcessControlBlock(Assumesinglethreadedprocessesfornow)

•  Kernelrepresentseachprocessasaprocesscontrolblock

(PCB)–  Status(running,ready,blocked,…)–  Registers,SP,…(whennotrunning)–  ProcessID(PID),User,Executable,Priority,…–  Execu4on4me,…–  Memoryspace,transla4ontables,…

•  KernelSchedulermaintainsadatastructurecontainingthePCBs

•  Schedulingalgorithmselectsthenextonetorun

Page 8: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Recall:givetheillusionofmul4pleprocessors?

vCPU3vCPU2vCPU1

Shared Memory

•  Assumeasingleprocessor.Howdoweprovidetheillusionofmul4pleprocessors?– Mul4plexin4me!– Mul4ple“virtualCPUs”

•  Eachvirtual“CPU”needsastructuretohold,i.e.,PCB:–  ProgramCounter(PC),StackPointer(SP)–  Registers(Integer,Floa4ngpoint,others…?)

•  HowswitchfromonevirtualCPUtothenext?–  SavePC,SP,andregistersincurrentPCB–  LoadPC,SP,andregistersfromnewPCB

•  Whattriggersswitch?–  Timer,voluntaryyield,I/O,otherthings

vCPU1 vCPU2 vCPU3 vCPU1 vCPU2

Time

Page 9: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

9

ProcessState

•  Asaprocessexecutes,itchangesstate–  new:Theprocessisbeingcreated–  ready:Theprocessiswai4ngtobeassignedtoaprocessor–  running:Instruc4onsarebeingexecuted–  wai+ng:Theprocessiswai4ngforsomeeventtooccur–  terminated:Theprocesshasfinishedexecu4on

Page 10: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Scheduler

•  Scheduling:Mechanismfordecidingwhichprocesses/threadsreceivetheCPU

•  Lotsofdifferentschedulingpoliciesprovide…–  Fairnessor–  Real4meguaranteesor–  Latencyop4miza4onor..

if ( readyProcesses(PCBs) ) { nextPCB = selectProcess(PCBs); run( nextPCB );

} else { run_idle_process();

}

Page 11: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

ProcessCrea4on

•  Someeventsthatleadtoprocesscrea4on–  thesystemboots

•  whenasystemisini4alized,severalbackgroundprocessesor“daemons”arestarted(email,logon,etc.)

–  auserrequeststorunanapplica4on•  bytypingacommandintheCLIshellordouble-clickingintheGUIshell,theusercanlaunchanewprocess

–  anexis4ngprocessspawnsachildprocess•  forexample,aserverprocess(i.e.webserver,fileserver)maycreateanewprocessforeachrequestithandles

–  theinitdaemonwaitsforuserloginandspawnsashell

Page 12: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Pukngittogether:webserver

Request

Reply(retrieved by web server)

Client Web Server

Page 13: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Pukngittogether:webserver

Server

Kernel

Hardware

requestbuffer

replybuffer

11. kernel copy from user buffer to network buffer

Network interface Disk interface

12. format outgoing packet and DMA

6. disk request

10. network socket write

1. network socket read

2. copy arriving packet (DMA)

syscall

wait

interrupt

3. kernel copy

RTU

5. file readsyscall

8. kernel copy

RTU

7. disk data (DMA)

interrupt

4. parse request 9. format reply

Request Reply

Page 14: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

ProcessTreeinLinux

Page 15: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Recall:3typesofKernelModeTransfer•  Syscall

–  Processrequestsasystemservice,e.g.,exit–  Likeafunc4oncall,but“outside”theprocess–  Doesnothavetheaddressofthesystemfunc4ontocall–  LikeaRemoteProcedureCall(RPC)–forlater– MarshallthesyscallIDandargumentsinregistersandexecutesyscall

•  Interrupt–  Externalasynchronouseventtriggerscontextswitch–  e.g.,Timer,I/Odevice–  Independentofuserprocess

•  TraporExcep4on–  Internalsynchronouseventinprocesstriggerscontextswitch–  e.g.,Protec4onviola4on(segmenta4onfault),Dividebyzero,…

Page 16: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

User/Kernel(Privileged)ModeUser Mode

Kernel Mode

Full HW accessLimited HW access

exec

syscall

exitrtn

interrupt

rfi

exception

Page 17: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Implemen4ngSafeKernelModeTransfers

•  Importantaspects:– Separatekernelstack– Controlledtransferintokernel(e.g.,syscalltable)

•  Carefullyconstructedkernelcodepacksuptheuserprocessstateandsetsitaside– Detailsdependonthemachinearchitecture

•  Shouldbeimpossibleforbuggyormalicioususerprogramtocausethekerneltocorruptitself

Page 18: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

NeedforSeparateKernelStacks•  Kernelneedsspacetowork•  Cannotputanythingontheuserstack(Why?)•  Two-stackmodel

–  OSthreadhasinterruptstack(locatedinkernelmemory)plusUserstack(locatedinusermemory)

–  Syscallhandlercopiesuserargstokernelspacebeforeinvokingspecificfunc4on(e.g.,open)

–  Interrupts(???)

Kernel Stack

running

main

User Stack proc1proc2

...

ready to run

mainproc1proc2

...

user CPU state

waiting for I/O

mainproc1proc2syscall

user CPU state syscallhandler

I/O drivertop half

Page 19: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Before

code:

foo () { while(...) { x = x+1; y = y-2; }}

SS: ESP

User-level Process

CS: EIPEFLAGS

otherregisters:EAX, EBX,...

Registers Kernel

code:

handler() { pusha ...}

stack:Exception Stack

Page 20: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

During

code:

foo () { while(...) { x = x+1; y = y-2; }}

SS: ESP

User-level Process

CS: EIPEFLAGS

otherregisters:EAX, EBX,...

Registers Kernel

code:

handler() { pusha ...}

stack:Exception Stack

SSESP

EFLAGSCSEIP

error

Page 21: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

KernelSystemCallHandler•  Vectorthroughwell-definedsyscallentrypoints!

–  Tablemappingsystemcallnumbertohandler•  Locatearguments

–  Inregistersoronuser(!)stack•  Copyarguments

–  Fromusermemoryintokernelmemory–  Protectkernelfrommaliciouscodeevadingchecks

•  Validatearguments–  Protectkernelfromerrorsinusercode

•  Copyresultsback–  Intousermemory

Page 22: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Hardwaresupport:InterruptControl•  Interruptprocessingnotvisibletotheuserprocess:– Occursbetweeninstruc4ons,restartedtransparently– Nochangetoprocessstate– Whatcanbeobservedevenwithperfectinterruptprocessing?

•  InterruptHandlerinvokedwithinterrupts‘disabled’–  Re-enableduponcomple4on– Non-blocking(runtocomple4on,nowaits)–  PackupinaqueueandpassofftoanOSthreadforhardwork

•  wakeupanexis4ngOSthread

Page 23: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Hardwaresupport:InterruptControl•  OSkernelmayenable/disableinterrupts

– Onx86:CLI(disableinterrupts),STI(enable)– Atomicsec4onwhenselectnextprocess/threadtorun

– Atomicreturnfrominterruptorsyscall

•  HWmayhavemul4plelevelsofinterrupt– Maskoff(disable)certaininterrupts,eg.,lowerpriority

– CertainNon-Maskable-Interrupts(NMI)•  e.g.,kernelsegmenta4onfault

Page 24: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

InterruptController

•  Interruptsinvokedwithinterruptlinesfromdevices•  Interruptcontrollerchoosesinterruptrequesttohonor

–  Maskenables/disablesinterrupts–  Priorityencoderpickshighestenabledinterrupt–  SopwareInterruptSet/ClearedbySopware–  Interruptiden4tyspecifiedwithIDline

•  CPUcandisableallinterruptswithinternalflag•  Non-MaskableInterruptline(NMI)can’tbedisabled

Network

IntID

Interrupt

Interrupt Mask

ControlSoftwareInterrupt NMI

CPU

Priority Encoder

Tim

er

Int Disable

Page 25: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Howdowetakeinterruptssafely?•  Interruptvector

–  Limitednumberofentrypointsintokernel•  Kernelinterruptstack

–  Handlerworksregardlessofstateofusercode•  Interruptmasking

–  Handlerisnon-blocking•  Atomictransferofcontrol

–  “Singleinstruc4on”-liketochange:•  Programcounter•  Stackpointer•  Memoryprotec4on•  Kernel/usermode

•  Transparentrestartableexecu4on–  Userprogramdoesnotknowinterruptoccurred

Page 26: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Canaprocesscreateaprocess?•  Yes!Uniqueiden4tyofprocessisthe“processID”(orPID)•  fork()systemcallcreatesacopyofcurrentprocesswithanewPID

•  Returnvaluefromfork():integer– When>0:

•  Runningin(original)Parentprocess•  returnvalueispidofnewchild

– When=0:•  RunninginnewChildprocess

– When<0:•  Error!Musthandlesomehow•  Runninginoriginalprocess

•  AllstateoforiginalprocessduplicatedinbothParentandChild!– Memory,FileDescriptors(nexttopic),etc…

Page 27: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

fork1.c#include <stdlib.h>#include <stdio.h>#include <string.h>#include <unistd.h>#include <sys/types.h>

#define BUFSIZE 1024int main(int argc, char *argv[]){ char buf[BUFSIZE]; size_t readlen, writelen, slen; pid_t cpid, mypid; pid_t pid = getpid(); /* get current processes PID */ printf("Parent pid: %d\n", pid); cpid = fork(); if (cpid > 0) { /* Parent Process */ mypid = getpid(); printf("[%d] parent of [%d]\n", mypid, cpid); } else if (cpid == 0) { /* Child Process */ mypid = getpid(); printf("[%d] child\n", mypid); } else { perror("Fork failed"); exit(1); } exit(0);}

Page 28: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

fork2.c int status; … cpid = fork(); if (cpid > 0) { /* Parent Process */ mypid = getpid(); printf("[%d] parent of [%d]\n", mypid, cpid); tcpid = wait(&status); printf("[%d] bye %d(%d)\n", mypid, tcpid, status); } else if (cpid == 0) { /* Child Process */ mypid = getpid(); printf("[%d] child\n", mypid); } …

Page 29: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

ProcessRaces:fork3.c

•  Ques4on:Whatdoesthisprogramprint?•  Doesitchangeifyouaddinoneofthesleep()statements?

int i;cpid = fork();if (cpid > 0) { mypid = getpid(); printf("[%d] parent of [%d]\n", mypid, cpid); for (i=0; i<10; i++) { printf("[%d] parent: %d\n", mypid, i); // sleep(1); } } else if (cpid == 0) { mypid = getpid(); printf("[%d] child\n", mypid); for (i=0; i>-10; i--) { printf("[%d] child: %d\n", mypid, i); // sleep(1); } }

Page 30: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

UNIXProcessManagement•  UNIXfork–systemcalltocreateacopyofthecurrent

process,andstartitrunning–  Noarguments!

•  UNIXexec–systemcalltochangetheprogrambeingrunbythecurrentprocess

•  UNIXwait–systemcalltowaitforaprocesstofinish

•  UNIXsignal–systemcalltosendano4fica4ontoanotherprocess

•  UNIXmanpages:fork(2),exec(3),wait(2),signal(3)

Page 31: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

UNIXProcessManagement

pid = fork();if (pid == 0) exec(...);else wait(pid);

pid = fork();if (pid == 0) exec(...);else wait(pid);

pid = fork();if (pid == 0) exec(...);else wait(pid);

main () { ...

}

exec

wait

fork

Page 32: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Shell

•  Ashellisajobcontrolsystem– Allowsprogrammertocreateandmanageasetofprogramstodosometask

– Windows,MacOS,Linuxallhaveshells

•  Example:tocompileaCprogramcc–csourcefile1.ccc–csourcefile2.cln–oprogramsourcefile1.osourcefile2.o./program

Page 33: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Signals–infloop.c#include <stdlib.h>#include <stdio.h>#include <sys/types.h>

#include <unistd.h>#include <signal.h>

void signal_callback_handler(int signum){ printf("Caught signal %d - phew!\n",signum); exit(1);}

int main() { signal(SIGINT, signal_callback_handler);

while (1) {}}

Page 34: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Recall:UNIXSystemStructure

User Mode

Kernel Mode

Hardware

Applications

Standard Libs

Page 35: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

HowDoestheKernelProvideServices?

•  Yousaidthatapplica4onsrequestservicesfromtheopera4ngsystemviasyscall,but…

•  I’vebeenwri4ngallsortofusefulapplica4onsandInevereversawa“syscall”!!!

•  That’sright.•  Itwasburiedintheprogramminglanguagerun4melibrary(e.g.,libc.a)

•  …Layering

Page 36: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

OSRun-TimeLibrary

OS

Proc 1

Proc 2

Proc n…

OS

Appln login Window Manager

…OS library OS library OS library

Page 37: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

AKindofNarrowWaistCompilers

Web Servers

Web Browsers

Databases

Email

Word Processing

Portable OS Library

System Call Interface

Portable OS Kernel

Platform support, Device Drivers

x86 ARMPowerPC

Ethernet (1Gbs/10Gbs) 802.11 a/g/n/ac SCSI ThunderboltGraphics

PCIHardware

Software

System

UserOS

Application / Service

Page 38: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

KeyUnixI/ODesignConcepts•  Uniformity

–  fileopera4ons,deviceI/O,andinterprocesscommunica4onthroughopen,read/write,close

–  Allowssimplecomposi4onofprograms•  find|grep|wc…

•  Openbeforeuse–  Providesopportunityforaccesscontrolandarbitra4on–  Setsuptheunderlyingmachinery,i.e.,datastructures

•  Byte-oriented–  Evenifblocksaretransferred,addressingisinbytes

•  Kernelbufferedreads–  Streamingandblockdeviceslooksthesame–  readblocksprocess,yieldingprocessortoothertask

•  Kernelbufferedwrites–  Comple4onofout-goingtransferdecoupledfromtheapplica4on,

allowingittocon4nue•  Explicitclose

Page 39: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

I/O&StorageLayersHigh Level I/O

Low Level I/O Syscall

File System

I/O Driver

Application / Servicestreams

handles

registers

descriptors

Commands and Data Transfers

Disks, Flash, Controllers, DMA

Page 40: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Summary•  Process:execu4onenvironmentwithRestrictedRights

–  AddressSpacewithOneorMoreThreads–  Ownsmemory(addressspace)–  Ownsfiledescriptors,filesystemcontext,…–  Encapsulateoneormorethreadssharingprocessresources

•  Interrupts–  Hardwaremechanismforregainingcontrolfromuser–  No4fica4onthateventshaveoccurred–  User-levelequivalent:Signals

•  Na4vecontrolofProcess–  Fork,Exec,Wait,Signal

•  BasicSupportforI/O–  Standardinterface:open,read,write,seek–  Devicedrivers:customizedinterfacetohardware

Page 41: Processkdantu/cse421/lectures/process.pdf · • OS kernel may enable/disable interrupts – On x86: CLI (disable interrupts), STI (enable) – Atomic sec4on when select next process/thread

Logis4cs–Newac4onItems

•  Assignment1out– Readthecode– Compile/test– Learnstructure–useprin%swhereyoucantounderstandflow

•  Testsampleprogramsfromclass