Skrevet av Emne: POSIX på Arduino  (Lest 10632 ganger)

Utlogget Cybersyn

  • n00b
  • *
  • Innlegg: 2
  • Karma: +1/-0
    • Vis profil
    • localhost
POSIX på Arduino
« på: 14. Mars 2015, 23:47 pm »
  • [applaud]0
  • [smite]0
  • Jeg jobber med å implementere POSIX på Arduino. Jeg prøver å gjøre det så lite ressurskrevende som mulig, samtidig som kildekoden er åpen, lettlest og vel dokumentert. Jeg har også planer om å legge et lag med et Arduino-aktig grensesnitt oppå POSIX, slik at det skal være enklere å lage programmer.

    Hva er POSIX?

    POSIX er en standard for hvordan operativsystem virker. Hensikten med en slik standard er at programmer kan virke på flere forskjellige operativsystem. Operativsystem som følger ("implementerer") POSIX eller deler av POSIX kalles ofte "Unix-like". Linux og Mac OS X er eksempler på operativsystem som følger POSIX.

    Hvorfor POSIX på Arduino?

    POSIX på Arduino slår flere fluer i en smekk. For det første er det mange som bruker Arduino for å lære seg programmering. POSIX på Arduino bygger en bro mellom Arduino og POSIX, slik at man kan bruke elementer man lærer i Arduinoland for å lage programmer for Linux, og også bruke programmer laget for Linux på Arduino.

    Det hadde vært morsomt om flere ville hjelpe til med dette prosjektet. Kildekoden er selvfølgelig åpen på GitHub.
    « Siste redigering: 15. Mars 2015, 00:17 am av BrutalOst »



    Utlogget Cybersyn

    • n00b
    • *
    • Innlegg: 2
    • Karma: +1/-0
      • Vis profil
      • localhost
    Sv: POSIX på Arduino
    « Svar #1 på: 13. Juni 2015, 15:38 pm »
  • [applaud]0
  • [smite]0
  • AVR-arkitekturen har noen mangler og begrensninger som gjør det vanskelig å implementere et Unix-lignende operativsystem.

    - AVR skiller kode fra stakken, haugen og statisk data (Harvard-arkitektur). Minnet som kode leses fra er ikke laget for å tåle mange store skriveoperasjoner. Dermed bør kode lastes opp så sjelden som mulig. I tillegg er minnet som regel veldig lite (det er snakk om kibibyte). Dermed er det viktig å kunne kjøre kode gjennom en virtuell maskin. Kode for virtuell maskin kan leses fra hvor som helst. Dessverre er det umulig å gjøre en virtuell maskin like rask som maskinen den kjører på. Det er viktig å finne en balanse mellom ytelse, størrelse og funksjonalitet i den virtuelle maskinen, og finne ut hvilke deler av systemet som skal kjøres på den.

    - AVR har ingen MMU. Dermed må alt kjøre i kernel space. Uten minnebeskyttelse er det lite vits å forsøke å begrense brukeres tillatelser. På den lyse siden kan man spare ressurser ved å kvitte seg med alle delene av en kernel som avhenger av en MMU. Dessverre blir det umulig å få til forking av prosesser og en rekke andre viktige funksjoner. Mange av disse kan til dels erstattes av andre funksjoner (f. eks. vfork), men likevel forsvinner litt av grunnprinsippet i POSIX.

    MIT kurs 6.828
    uClinux
    « Siste redigering: 13. Juni 2015, 23:37 pm av BrutalOst »