• No results found

Att navigera på datorn

Litet om program, villkorssatser, flödeskontroll och funktioner

5.1 Att navigera på datorn

Att hålla ordning på alla filer som skapas under ett projekt, som till exempel en laboration eller en MATLABövning kräver litet disciplin. Det är naturligtvis extra viktigt att man tänker sig för i en miljö som den på övningslab, där många användare använder samma dator. Innan vi går igenom hur man bör arbeta gör vi först en allmän genomgång över hur program på en dator hanterar disk och minne.

5.1.1 Minne och hårddisk på en dator

Ett program som kör på en dator hanterar två typer av information, dels "instruktioner" - det vi i dagligt tal kallar programmet, som styr programmet och på lägsta nivån talar om för programmet hur det skall utföra olika kommandon, dels "data" som är vad programmet opererar på. Sett ur det här perspektivet håller ett program som MATLAB när vi till exempel skriver "2 + 2" reda på två saker: dels vad instruktionen "x + y" innebär och hur MA T L A B skall genomföra den operationen, denna information är det vi kallar instruktioner. Sedan måste programmet också hålla reda på vad "x" och "y"

är i just den aktuella beräkningen, och spara svaret någonstans, den typen av information kallas "data".

Den här informationslagringen kan ske på två ställen, antingen på hårddisken eller i datorns internminne. Det finns några skillnader i egenskap hos dessa två lagringsmedia: hårddisken är permanent, i betydelsen att så länge allting fungerar som det skall så finns all information som lagras på hårddisken kvar så länge som man inte uttryckligen raderar den. Internminnet å andra sidan är temporärt i två avseenden, dels så "överlever" ingen information i internminnet att datorn stängs av, men det är till och med så att ett program som MATLAB avslutas så raderas all information som programmet sparade i minnet. En annan skillnad mellan hårddisk och internminne är att det går mycket snabbare att komma åt data som finns i minnet (oftast talar man om internminnet som bara

"minnet") än på disken.

Med det här som bakgrund kan vi nu förstå litet bättre vad som händer när vi kör MATLAB. Eftersom MATLAB måste finnas kvar varje gång vi startar datorn så måste själva programmet finnas lagrat på hårddisken. Eftersom det tar lång tid att hämta instruktioner som finns lagrade på hårddisken så vill man inte att programmet skall gå och hämta varje instruktion för sig från hårddisken, det skulle dels göra programmet mycket långsamt och dels skulle datorns disk stå och surra hela tiden. Ett program som startar reserverar därför ett stycke minne för instruktioner och kopierar in de mest centrala dit och läser dem direkt därifrån. Skulle MATLAB träffa på en instruktion som inte finns inkopierad till minnet så går den ut på hårddisken och läser in denna instruktion, men inte bara en enstaka instruktion, utan ett block med instruktioner som ofta används tillsammans. Ett välkonstruerat program behöver därför

inte gå ut och läsa från den långsamma disken särskilt ofta, utan håller sig för det mesta till den kopia av instruktionerna som finns i minnet.5

Samtidigt reserverar programmet en annan del av minnet för att lagra data. Allt som finns i MATLABs workspace lever till exempel i internminnet, när vi skriver klubba = 0.5 så reserveras ett litet område i internminnet för variabel klubba, och värdet 0.5 lagras där. Kommandot clear klubba instruerar MATLAB att vi inte längre är intresserade av klubba, den delen av minnet flaggas då som ledigt och kan användas av MATLAB för att spara en ny variabel.

Eftersom instruktionerna bara är en kopia av det som finns lagrat på hårddisken så påverkas inte programmets funktion av en eventuell krasch med efterföljande omstart, det är ju bara att skapa en ny kopia av instruktionerna från hårddisken. Data däremot flyger all sin väg. När programmet avslutas, frivilligt eller ofrivilligt, så är all information som lagrats i workspace borta. Om man nu har lagrat priserna för ett stort antal olika sorters godis i MATLABs workspace och räknar med att behöva använda den listan igen vid ett senare tillfälle så vill man naturligtvis kunna spara listan även efter det att MATLAB avslutats för den här gången. Det här går att göra, vi kan från MATLAB spara innehållet i workspace på hårddisken, vi kan också skapa separata filer med data och/eller MATLAB kommandon som sparas på hårddisk och som vi sedan läser tillbaks, sk M-filer. Detta kommer att bli det sätt vi normalt arbetar med MATLAB, genom att spara allt på hårddisk är det enkelt att gå tillbaks och göra smärre korrektioner och modifieringar och framför allt: vi kommer att spara oerhört mycket arbete genom att vi kan återanvända kod-snuttar från tidigare övningar.

5.1.2 Filnamn och Sökvägar

Varje fil på en dator måste ha ett unikt namn som fungerar som en sorts adresslapp. Precis som när vi identifierar personer genom namn och en hirearki av adresser alltifrån gata med portnummer upp till städer och länder så har en datoradress flera nivåer. På den lägsta nivån talar vi om filnamn, som till exempel rapport2.text, laboration4.m osv. Varje fil måste vara placerad i en katalog (engelskans directory, på svenska kan vi också kalla det "mapp"). Katalogen kan i sin tur vara inplacerad i en annan katalog, och så vidare. Det är klokt att försöka organisera en trädstruktur av kataloger som logiskt delar upp de filer man äger i avgränsade undergrupper som i exemplet nedan. Vi ser hur det finns en textfil som heter "utkast1" i katalogen "rapport". Katalogen "rapport" ligger i sin tur i katalogen "lab1", som liger i katalogen "labbar" och så vidare. I en given katalog kan det bara finnas en fil med samma namn, vilket inte är så konstigt, hur skulle datorsystemet annars förstå till exempel vilken fil vi ville skriva ut när vi ger ett print kommando. Men precis som brevbärarna inte bara kan hantera en "Sven Andersson" utan kan hålla isär Sven Anderson på Linnégatan från Sven Andersson

5 När vi lärt oss det här om hur datorer fungerar kan vi föstå två saker: Dels varför vissa program ibland kan gå så sagolikt långsamt. Om minnet "börjar ta slut", det vill säga om det inte finns något ledigt minne kvar att reservera, vilket kan hända när vi kör många program samtidigt, så kan ett program inte reservera tillräckligt stora delar av minnet för att lagra så många instruktioner så att det kan köra effektivt. Istället måste programmet ut och titt som tätt läsa instruktioner från den långsamma disken. Det här leder till "sega" program som svarar långsamt på våra kommandon.

Vi förstår nu också varför program "kraschar". I nio fall av tio (minst) beror det på att program A (ofta tillverkat av Microsoft) har skrivit till exempel data i en del av minnet som program B reserverat för sina instruktioner. I stället för instruktioner om hur programmet skall hantera "x + y" står det någonting helt annat, som programmet helt oskyldigt försöker genomföra med resultatet att allting hänger sig. Ibland är program A och B identiska, ett program kan skriva över sina egna instruktioner. Det här kallas ibland med datorjargon "minnesläcka".

på Kungsgatan, och Sven Andersson på Linnégatan i Göteborg från Sven Andersson på Linnégatan i Stockholm så kan datorn, om vi bara ger hela adressen, hålla isär en fil som heter "utkast1" i katalogen

"rapport" i katalogen "lab2" från en fil som heter "utkast1" i katalogen "rapport" i katalogen "lab1".

För att vara säkra på att vi och datorn förstår varandra när vi refererar till filer så måste vi reda ut två saker. Dels hur man anger att det är filen utkast1 som finns i trädet under "lab1" och inte filen med samma namn i trädet under "lab2", det vill säga hur bär vi oss åt för att skriva en fils fullständiga namn, inklusive katalogtillhörigheten (detta kallas på engelska path). Den andra saken vi måste förstå är något som kallas "den aktuella katalogen" och som avgör hur datorn tolkar våra kommandon när vi bara ger namnet och ingen information om katalogtillhörigheten.

5.1.3 Fullständiga filnamn

Ett fullständigt filnamn i operativsystemet Windows börjar med namnet på hårddisken. Den dator du arbetar på kan nämligen ha mer än en hårddisk6, och det kan också vara så att du över nätverket kan ha tillgång till hårddiskar som inte fysiskt finns på just den datorn du arbetar vid, som till exempel de filer du lagrar "på ditt AFS konto". När du loggat in på ditt AFS konto (se intstruktioner på

6 Rent fysiskt är det oftast så att på datorer med mer än en hårddisk så finns det egentligen inte mer än en disk, men den är uppdelad i fler avgränsade avdelningar som för datorn ser ut som om de vore helt skilda enheter.

ten

xpkursen

abbar

ab1 ab2

data rafer apport

atlab

Exempel på katalogstruktur

http://www.physto.se/afs/konton_windows.html) så kommer det att se ut som om de filer du lagrat där ligger på en disk på den dator du jobbar vid med namnet S. I filnamnet följs disknamnet av kolon, därefter \ ("backslash") och sedan namnen på katalogerna, separerade med backslash. Om vi till exempel antar att katalogen "Sten" i exemplet ovan ligger i en katalog "USERS" som inte har någon katalog över sig på D-disken så blir den fullständiga adressen till filen utkast1:

D:\USERS\Sten\Expkursen\labbar\lab1\rapport\utkast1 . Även kataloger kan adresseras på detta sätt, katalogen för lab1 har adressen D:\USERS\Sten\Expkursen\labbar\lab1 .

5.1.4 Aktuell katalog

Varje gång vi vill spara en fil från ett program så finns det ett förstahandsalternativ, en katalog där programmet vi arbetar i sparar filer om inte användaren aktivt väljer en annan katalog. Denna katalog kallas "aktuell katalog" (engelska "current directory"). Det är alltså här filer hamnar om vi inte aktivt anger en annan katalog. Exakt vilken katalog som är den aktuella kan variera från fall till fall. De flesta program har en katalog någonstans i den katalogstruktur som hör till programmet som används i standardfallet. Öppnar vi Microsoft Word och skapar ett nytt textdokument så sparars det i en katalog som hör till programmet, snarare än till dig som användare. Om vi däremot öppnar ett redan existerande dokument genom att dubbelklicka på det, gör några ändringar och sparar det under ett nytt namn så hamnar det i den katalog där det ursprungliga dokumentet låg. Oftast bereder det oss inte

någon större möda att hålla rätt på detta, när vi sparar ett dokument så öppnas ju en dialogruta där vi tydligt kan se i vilken katalog dokumentet hamnar, och vi en rullgardinsmeny kan välja en annan katalog. Men om vi till exempel sparar MATLABs workspace genom att ge kommandot save i kommandofönstret så får vi inte upp någon dialogruta utan MATLAB sparar direkt i det som är den aktuella katalogen.

I MA T L A B finns det en liten ruta högst upp i desktopen som anger vilket som är den aktuella katalogen. Om vi skriver in adressen till någon annan katalog i rutan så ändras den aktuella katalogen till den nya adress vi skrivit in. Vi kan också genom att klicka på pilen till höger om textraden få upp en meny där vi kan välja att gå tillbaka till någon av de kataloger som tidigare under vår session varit den aktuella.

Trycker vi på knappen med de tre punkterna strax till höger om namn-rutan får vi upp en dialogruta där vi kan navigera oss fram på datorns disk för att välja den katalog vi vill göra till aktuell.

5.1.5 "Current directory browser"

Det finns en panå i MATLABs desktop som används just för att navigera bland filer, den heter "Current Directory Browser", och aktiveras på samma sätt som de andra panåerna i desktopen genom att gå in i

"View" menyn och klicka på "Current Directory Browser". I den panå som då öppnas har vi många möjligheter, vi kan bland annat

• få en överblick över vilka filer som finns i den aktuella katalogen

• öppna en godtycklig fil i det program den skapades genom att dubbelklicka på ikonen för filen

• ändra aktuell katalog. Vill vi flytta oss nedåt i strukturen så dubbelklickar vi på ikonen för den katalog vi vill flytta oss till, vill vi flytta oss uppåt så dubbelklickar vi på symbolen uppe

på fönstrets list. Genom att upprepa detta kan vi flytta oss godtyckligt långt upp i katalogträdet och sedan flytta oss ned genom en anna gren genom att dubbelklicka på de

kataloger som syns i panån. Lägg märke till att "aktuell katalog" ändras vartefter vi väljer en katalog i denna panå.

En detaljerad beskrivning av "Current Directory Browser" ges i hjälpsektionen:

?/MATLAB/Using¬MATLAB/Development¬Environment/Running¬MATLAB¬Functions/Workspace, Search Path and File Operationa/File Operations/Current Directory Browser

5.1.6 Var söker MATLAB efter filer

MATLAB har ett antal kommandon som innebär att programmet skall ladda in innehållet i en fil till workspace. Man kan till exempel genom att skriva load filnamn läsa in hela innehållet i filen med namn filnamn in i MATLABs workspace, man kan också genom att bara skriva filnamn.m instruera MATLAB att läsa in och utföra de kommandon som finns sparade i filen filnamn.m . För att detta skall fungera krävs givetvis att MATLAB hittar filen i fråga. Det fungerar givtevis om den fil vi anger ligger i den aktuella katalogen, men utöver det så har MATLAB en lista med kataloger där den söker efter de filer vi anger i våra kommandon. En sådan lista kallas sökväg (eng. search path). När vi skriver in ett filnamn så kommer MATLAB att först leta efter filen i den aktuella katalogen, därefter söks efter filen i alla kataloger som finns med i sökvägen, i den ordning som katalogrna står i sökvägen. Det kan alltså vara viktigt i vilken ordning katalogerna är listade i sökvägen, om det finns flera filer med samma

namn. MATLAB har en meny där man kan se vilka kataloger som finns med i sökvägen. Man kan också lägga till eller ta bort kataloger, och även ändra ordningsföljden. För att få fram den dialogruta där det sker går vi till menyn "File" och klickar på "set path". Efter att ha valt7 en av katalogerna i fönstret till höger kan vi sedan med hjälp av knapparna till vänster flytta den valda katalogen upp och ner i listan för att på så sätt ändra ordningsföljden mellan dem. Vi kan också ta bort en vald katalog och med någon av de två översta knapparna lägga till en katalog till sökvägen. Använder vi den övre knappen när vi lägger till en katalog kommer endast den katalog vi valt att läggas till sökvägen, använder vi den andra knappen lägger vi till en katalog och alla dess underkataloger till sökvägen.

Observera att det är nödvändigt att klicka på "Save" när vi är klara för att våra sökvägar skall sparas.

Notera också att de ändringar du gör till MATLABs sökväg kommer att gälla för alla andra som också använder denna dator, precis som du kommer att kunna ha "glädje" av alla sökvägar som någon annan lagt in.

5.1.7 Var skall jag spara filer

Eftersom vi arbetar på datorer som används av många personer måste vi vara noggranna med var på hårddisken vi sparar data så att vi inte lämnar efter oss en massa "skräp" som andra inte är intresserade av. Likaledes är det ju inte särskilt attraktivt att behöva återvända till exakt samma dator vid nästa arbetspass. Det finns egentligen bara två areor som inte är "allmänna", det vill säga som används av alla som använder datorn. Den ena är katalogen USERS som ligger antingen på C eller D disken på datorn. För tillfälligt sparande av personliga filer kan man skapa en underkatalog till denna katalog med sitt eget namn. Men kom ihåg att denna katalog bara kan ses på just denna dator. Använd därför den katalogen bara för temporär lagring under ett arbetspass. Filer som man vill spara för längre tid och kunna komma åt oavsett vilken dator man sitter vid skall sparas på AFS-disken, M-disken på övningslabs datorer.

För att ha en rimlig chans att hitta sina sparade data bör man ha en tydlig indelning i olika kataloger som var och en hör samman med ett tydligt "delprojekt". När vi kommit igång med labbandet är det till exempel naturligt att ha en katalog som heter "Laboration 1" exempelvis med underkataloger

"rådata", "m-filer", "rapport" mm. Under övandet med MATLAB bör man därför skaffa sig kataloger som t.ex "pass 1" och sedan lägga dem i en katalog som kallas "MATLABövningar". Namn på katalogerna är givetvis helt fritt att välja, men det bör vara en logisk struktur där alla filer i en given katalog "hör ihop", och har namn som gör att man förstår vad det är för fil utan att behöva öppna den och titta efter.

Vartefter som du börjar bygga upp ett bibliotek av standardfiler (t ex sådana som beräknar normalfördelningen) som du tror att du skall använda i olika projekt så bör du kanske spara dessa i en

"bibliotekskatalog" som inte är direkt associerad med en specifik kurs eller laboration.

Alla filer som sparas på "allmänna" områden riskerar att raderas, antingen av misstag av någon av dina kollegor, eller också av systemansvariga när de städar upp på datorns hårddisk.

Related documents