Hårdvara

Synnerligen intressant om Hårdvara


Öppen hårdvara

Efter populariseringen av programmerbara grindmatriser kom logisk design att bli en viktig del av den öppna hårdvaran. Istället för kopplingsscheman och ritningar delas istället källkod i hårdvarubeskrivningsspråk, så kallad HDL. HDL kan användas för att programmera en FPGA, sätta upp en System-on-a-chip (SoC) eller kontrollera en ASIC. Sådana HDL-moduler, när de distribueras, kallas halvledarimmaterialrättskärnor, på engelska Semiconductor intellectual property core eller IP-core. Istället för att skapa en helt ny licens använder öppen hårdvara existerande licenser. Ett flertal nya licenser har föreslagits. Dessa licenser avses specifikt behandla hårdvara. I dessa licenser har många av de fundamentala principerna för öppen källkod konverterats för att fungera på hårdvara. Organisationer brukar ofta försöka samsas om en licens som delas. Till exempel föredrar Opencores att använda LGPL, medan FreeCores använder GPL, och Open Hardware Foundation använder sig av "copyleft" eller andra öppna licenser.. Open Graphics Project använder en samling licenser, som till exempel MIT-licensen, GPL, och en proprietär licens. och Balloon Project författade sin egen licens. Nya hårdvarulicenser beskrivs ofta som hårdvaruekvivalenter av kända licenser såsom GPL, LGPL eller BSD-licensen. Ytliga likheter med mjukvarulicenser till trots är de flesta hårdvarulicenser fundamentalt olika och graviterar naturligt mot patenträtt snarare än upphovsrätt. Medan upphovsrätten begränsar distribution av en mjukvara och designspecifikationer fokuserar patenträtt mer på användning och tillverkning av enheter baserade på designspecifikationerna. Denna skillnad omnämns specifikt i förordet till TAR Open Hardware License. Ingående diskussioner har hållits om hur man kan tillgängliggöra öppen hårdvara på liknande sätt som öppen mjukvara. Diskussioner har fokuserats på ett flertal områden, såsom hur noggrant öppen hårdvara definieras, sätt att samarbeta om hårdvaruutveckling samt en hållbar utvecklingsmodell. En av de största skillnaderna mellan utveckling av öppen mjukvara och öppen hårdvara är att hårdvaruutvecklingen leder till materiella resultat vilket kostar pengar att vidareutveckla, bygga prototyper samt tillverka. Denna skillnad användes i uttrycket "free as in free speech, not free beer", där yttrandefrihet och gratis öl ställs mot varandra för att tydliggöra vad fri programvara handlar om, på engelska används samma uttryck för fri och gratis (jämför Gratis versus Libre) och skiljer på idéerna om gratis kostnad och frihet att använda och modifiera information. Medan öppen hårdvara ställs inför utmaningen att minimera kostnad och reducera finansiella risker för individuella projektutvecklare, har några människor i gemenskapen föreslagit en modell för att hantera dessa behov. Det finns med detta i åtanke initiativ för att ta fram hållbara gemenskapsdrivna finansieringsmekanismer såsom Open Source Hardware Central Bank, såväl som verktyg som till exempel Kicad för att tillgängliggöra kopplingsschemaredigering för fler användare. Chip och elektroniktillverkare väljer ofta att sponsra tävlingar med villkoret att tävlingsdeltagare och vinnare måste dela med sig av sina designer. Tidningen Circuit Cellar organiserar sådana tävlingar. Företag som utvecklar öppen hårdvara experimenterar ofta med olika affärsmodeller. Arduino, till exempel, tjänar pengar genom konsultuppdrag. Genom att skapa en gemenskap för designer som baseras på sina egna produkter kan de hålla sig ajour med de senaste utvecklingarna. De har även varumärkesregistrerat sitt namn. Andra kan tillverka Arduinodesignen, men inte trycka Arduino som namn på dem. Detta leder till att Arduino kan särställa sig genom kvalitet.

Maskinvara

Maskinvara eller hårdvara är samlingsnamn för en dators fysiska delar. Ordet hårdvara är en direktöversättning av engelskans hardware som betyder ungefär järnvaror, sådant man köper i en järnhandel (hardware store). Hårdvara i en dator är alla de saker som man kan ta på, till exempel grafikkort, cd-spelare och i förlängningen även sladdar. Motsatsen kallas programvara eller mjukvara och det är alla de program som används i datorn. Pc-hårdvara: Moderkort (MB) (Motherboard). Processor (CPU) (Central Processing Unit). Grafikkort (GPU) (Graphics Processing Unit). Hårddisk (HDD) (Hard Disk Drive). Diskettstation och disketter. RAM och ROM (Random Access Memory) (Read-only Memory). CD / DVD (Compact Disc) (Digital Versatile Disc).

Datorprogram

Ett datorprogram, även kallat dataprogram, är en serie instruktioner som styr en dator, och beskriver de operationer som datorn ska utföra, då programmet körs. Datorprogrammet kan utföra en liten specifik uppgift eller bilda en omfattande helhet, som en operativsystemkärna, en ordbehandlare eller en webbläsare. En samling datorprogram eller datorprogram i allmänhet kallas ofta programvara eller mjukvara. Ett datorprogram skrivs typiskt i ett människovänligt programspråk (till exempel Java, C++ eller Delphi) och kompileras eller tolkas sedan till maskinkod, som datorn förstår. Datorprogram kan delas in. Man kan också göra skillnad till exempel mellan serverprogram och program avsedda att användas direkt eller mellan program för normala bords- och serverdatorer och program för inbyggda system, till exempel för mobiltelefoner, bilar och tvättmaskiner. Maskinkoden är bunden till en viss typ av processor och övrig hårdvara, ofta också till ett visst operativsystem och de tjänster operativsystemet och olika programbibliotek erbjuder. I vissa fall kan man med olika trick skriva programmet så att olika maskinkod körs beroende på omgivningen. Källkoden, d.v.s. koden i den form den ursprungligen skrivs, kan däremot någorlunda lätt skrivas så att programmet går att kompilera för olika hårdvara och olika operativsystem. Då programmet skall användas i en ny miljö måste det i allmänhet anpassas för denna, men anpassningen är enkel om programmet skrivits portabelt. Genom att fri programvara alltid har sin källkod tillgänglig och dessutom delvis bygger på traditioner från GNU-projektet (som gärna gjorde programmen tillgängliga för alla Unix-varianter), går den relativt lätt att anpassa till varje hackares favoritmiljö och finns sålunda ofta tillgänglig på allt som det minsta liknar Unix (se Posix) och också till exempel för Windows. Proprietär programvara distribueras däremot för det mesta färdigkomplierad eller utan rätt att sprida modifierad kod, varför proprietära program är mer bundna till den eller de omgivningar som stöds av programleverantören. Det typiska datorprogrammet skrivs i ett eller flera programspråk, som sedan kompileras till maskinkod och länkas ihop med olika programbibliotek. Ett datorprogram kan också vara en lista av instruktioner i form av ett skript, som tolkas i realtid till maskinkod medan programmet körs. Denna senare typ av program är inte direkt bundna till en viss typ av processor eller speciell dator om bara den skript-tolk som instruktionerna skrivits för finns tillgänglig. Skriptspråken innehåller ofta också mycket funktionalitet som i många mer maskinnära programspråk måste kodas skilt, och förutom att man slipper anpassa koden till nya datorplattformar går därför skrivandet också ursprungligen snabbare. Tolkningen kräver dock resurser när programmet körs, varför ett färdigt kompilerat program kör snabbare. De tolkade språken är också beroende av att tolken finns tillgängligt då programmet skall köras. Som mellanting finns dels programspråk som kompileras strax innan de körs (till exempel perl) och programspråk som kompileras till en kompakt och snabbtolkad bytekod (som inte är avsedd att läsas av mänskor) så att de snabbare kan tolkas då de körs (till exempel java), dels program vars för effektiviteten kritiska delar är skrivna i maskinnära språk (till exempel C), medan skriptspråk eller andra högnivåspråk används för huvuddelen av programlogiken och sådana funktioner som väl stöds i dessa språk. Skillnaden mellan tolkade och kompilerade språk är numera oklar, då det finns normala kompilatorer för många språk ursprungligen konstruerade som skriptspråk. systemprogram, som utgör plattformen, såsom operativsystemets kärna, drivrutiner och centrala verktyg samt program som behövs för bootningen (på en PC BIOS och bootloader), och systemverktyg. enkla program skrivna av användaren själv, ofta i form av skript eller makron för olika tillämpningsprogram.

Programmering

Programmering handlar om att instruera en maskin eller del av en maskin, till exempel en mikrodator, dator, robot eller NC-maskin att utföra ett visst arbete. Personen som utför detta hantverk brukar ofta tituleras programmerare. Programmering är en del av det vidare begreppet programvaruutveckling eller mjukvaruutveckling som även innefattar aktiviteter som sammanställning av krav, mjukvarudesign och testning. När man programmerar skriver man ett program och man använder ett programspråk. Olika delar av ett program kan vara skrivet i olika programspråk. Maskinen förstår normalt inte programspråket direkt. Detta måste översättas till den maskinkod som maskinen är konstruerad att direkt förstå. Programmering direkt i maskinkod förekommer praktiskt taget inte alls eftersom det är för arbetskrävande. Olika typer av maskiner har helt olika uppsättningar instruktioner i sin maskinkod. Begrepp förknippade med programmering är bland annat slingor och uppställningar. Programmering kan ske på olika abstraktionsnivåer. Närmast hårdvaran, förutom maskinkod, ligger assemblerprogrammering där man använder ett assemblerspråk. Ett sådant språk har i det närmaste en direktöversättning till maskinkod, det vill säga de instruktioner man skriver motsvaras direkt av instruktioner i maskinkod, men använder en för människan mer läsbar form än maskinskodens ettor och nollor. Till exempel kan "SR 1,2" betyda "Subtrahera innehållet i register nummer 1 med innehållet i register nr 2". Assemblerspråket, som oftast också tillåter makro-instruktioner, måste översättas till maskinkod med hjälp av ett speciellt program: en assemblator eller något liknande. På nästa nivå kommer allmänna programspråk (engelska: general purpose computer languages) som till exempel C, Pascal och Java. I ett sådant språk motsvarar en sats eller instruktion normalt många instruktioner i maskinspråket. Till exempel kan satsen "saldo = tidigaresaldo - uttag, " motsvara maskininstruktioner för att hämta data från minnet till register, subtrahera innehållet i register och skriva tillbaka resultatet till minnet. Ett sådant program översätts, kompileras, till maskinkod av en kompilator eller interpreteras av en tolk. Ofta skiljer man också här mellan maskinnära språk som C och högnivåspråk där en större del av funktionaliteten beskrivs abstrakt. Högnivåspråk kan också användas som term för språk med högre abstraktionsnivå än assembler. Ytterligera en abstraktionsnivå uppnås när man inte längre direkt beskriver hur något ska utföras utan snarare vad som ska utföras. Detta förutsätter att man begränsat problemområdet på något sätt så att tolkaren eller kompilatorn kan använda färdiga dellösningar som sätts ihop till en totallösning för det aktuella problemet. Exempel på sådana språk är RPG för rapportgenerering. Också allmänna programspråk kan vara konstruerade för en viss uppgift, såsom PostScript för sidbeskrivning eller R för statistiska problem. Andra indelningar är de i språk som skall tolkas eller kompileras och enligt programmeringsparadigm (funktionell, procedurell, objektorienterad programmering eller liknande). Programmering kan också delas in efter vad programmet utför. Närmast hårdvaran kommer här styrning av hårdvarukomponenter genom mikroprogrammering, till exempel BIOS i en persondator eller drivrutiner för olika utrustningar. Nästa nivå är operativsystemet som fördelar och administrerar datorns resurser och gör datorn allmänt tillgänglig för människan genom ett användargränssnitt. Slutligen kommer nivån med alla olika användarprogram som ordbehandlare, webbläsare och datorspel. De första typerna av programmering görs av hårdvaruleverantörer, men operativsystem programmeras numera också av fristående programvaruleverantörer, som Microsoft, Apple Computer, Sun Microsystems, eller i distribuerade frivilligprojekt med öppen källkod. Huvudartikel: Strukturerad programmering. Huvudartikel: Objektorienterad programmering.

Commercial-off-the-shelf

Commercial-off-the-shelf (COTS) "köpa från hyllan" är en beteckning på mjukvara eller hårdvara som kan köpas eller licensieras från en öppen marknad i motsats till egenutvecklad eller beställningsutvecklad mjuk- eller hårdvara. Kallas i många segment av IT-branschen för standardprogram eller standardprodukter eftersom de är skapade som standardiserade kopior i syfte till för massdistribution. Valet mellan att använda COTS eller egenutvecklade komponenter är inte alltid självklart. Tillgången på "fria" komponenter, som till exempel Linux, och den allt bättre kvaliteten på dessa har drivit på användandet av COTS under de senaste åren. Företaget behöver inte avsätta resurser för utveckling av komponenter som inte anses vara affärsmässigt unika (core). Produkten kan dra nytta av extern teknikutveckling med mindre egen insats. Leveranslogistik och underhåll kan förenklas. Kunder får produkter där de i större utsträckning känner igen sig och kan dra nytta av redan gjorda investeringar, såväl materiella som immateriella (t.ex. egen kompetens hos personal). Förändringar i COTS-komponenter sker utanför företagets kontroll. Leverantörer och teknologier kan försvinna från marknaden. Integration och test av COTS-komponenten i det totala systemet måste vanligtvis genomföras vilket i vissa fall är en stor kostnad. De egenutvecklade komponenterna måste anpassas ensidigt vilket inte alltid ger optimala system.

Emulator

En emulator är en mjukvara avsett för att efterlikna funktionen av annan hårdvara eller mjukvara. Mest vanligt är mjukvara för pc som används för att efterlikna annan hårdvara. I professionella sammanhang använder man ofta emulatorer för att testa hårdvara eller program för hårdvara, då hårdvaran ännu inte existerar, är för dyr eller sällsynt för att kunna användas för all testning eller är för anspråkslös för att kunna erbjuda ett gott gränssnitt för testningen. Emulatorer används också då system används långt efter att tillverkningen av hårdvaran systemet är planerat för har upphört. Ett klassiskt exempel är IBM:s stordatorer och 3270-terminaler. I hobbykretsar är emulatorer för gamla hemdatorer och spelkonsoler vanliga, till exempel för Commodore 64 och DOS-datorer och det finns till och med emulatorer för gamla mini- och stordatorer. Ibland behövs inte en egentlig emulator, utan det räcker med olika specialarrangemang för att tillåta körande av gamla program. Till denna kategori kan man räkna kommandotolken ("DOS-prompten") för vissa Windows-versioner, som gjordes kompatibel med DOS som operativsystem, Wine, som styr systemanrop till olika POSIX-funktioner istället för de avsedda Windows-funktionerna och av kompatibilitetsorsaker kvarlämnade gamla systemanrop, som i praktiken omkodas till de modernare varianterna. Ifråga om Wine är kompatibilitetsarrangemangen så omfattande att termen emulator kan vara berättigad.


Hårdvara