styresystemer og tjenester

28
Per P. Madsen Styresystemer og tjenester 1 Styresystemer og tjenester Indhold: 1. Introduktion til styresystemer. 2. Processer og tråde. 3. Synkroniseringsmetoder og InterProcesCommunikation. 4. Memory management. 5. I/O og devicedrivere. 6. Filsystemer. 7. Distribuerede systemer. 8. Sikkerhed. 9.

Upload: quilla

Post on 12-Jan-2016

35 views

Category:

Documents


4 download

DESCRIPTION

Styresystemer og tjenester. Indhold: Introduktion til styresystemer. Processer og tråde. Synkroniseringsmetoder og InterProcesCommunikation. Memory management. I/O og devicedrivere. Filsystemer. Distribuerede systemer. Sikkerhed. I/O device og hastigheder. I/O Struktur. Operativsystem. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 1

Styresystemer og tjenester

Indhold:1. Introduktion til styresystemer. 2. Processer og tråde. 3. Synkroniseringsmetoder og

InterProcesCommunikation. 4. Memory management. 5. I/O og devicedrivere. 6. Filsystemer. 7. Distribuerede systemer. 8. Sikkerhed.9.

Page 2: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 2

I/O device og hastigheder.

Page 3: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 3

I/O Struktur

Tilsluttet udstyr

Elektronik

Software

Disk, Mus, Keyboard, Monitor, Netværk, ....

Controler: DiskControler, Grafikcontroler, UART, ...

DeviceDriver: Disk-driver, keyboard-driver,...

Operativsystem

Hardware

Page 4: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 4

I/O Opgavefordeling

Tilsluttet udstyr

Controler

Devicedriver

Opgave: Lagre, præsentere, generere, transportere data.

Opgave: Overfører mem.baseret byte til og fra udstyr.

Opgave: Uniform easy to use interface til brugeren.

Buffering, Interrupt håndtering.

Error håndtering.

Page 5: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 5

I/O grænseflader.

Tilsluttet udstyr

Controler

Devicedriver

Fysiske signaler vha en passende bus.

DMA, Memory-mapped eller I/O-porte. Kontrol via byte/word-registre.

Operativsystem

ApplikationUniform easy to use systemkalds baseret interface.

Page 6: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 6

I/O porte på en PC0000-001f : dma10020-003f : pic10040-005f : timer0060-006f : keyboard0080-008f : dma page reg00a0-00bf : pic200c0-00df : dma200f0-00ff : fpu0170-0177 : ide101f0-01f7 : ide002f8-02ff : serial(set)0300-031f : NE20000376-0376 : ide103c0-03df : vga+03f6-03f6 : ide003f8-03ff : serial(set)1000-103f : Intel Corporation 82371AB PIIX4 ACPI1000-1003 : acpi1004-1005 : acpi1008-100b : acpi100c-100f : acpi1100-110f : Intel Corporation 82371AB PIIX4 IDE1300-131f : pcnet_cs1400-141f : Intel Corporation 82371AB PIIX4 ACPI1800-18ff : PCI CardBus #021c00-1cff : PCI CardBus #045800-581f : Intel Corporation 82371AB PIIX4 USBd000-dfff : PCI Bus #01d000-d0ff : ATI Technologies Inc 3D Rage LT Pro AGP-133

/proc/ioports

Page 7: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 7

I/O memory på en PC

00000000-0009fbff : System RAM0009fc00-0009ffff : reserved000a0000-000bffff : Video RAM area000c0000-000c7fff : Video ROM000f0000-000fffff : System ROM00100000-03feffff : System RAM 00100000-0022c557 : Kernel code 0022c558-0024455f : Kernel data20000000-2fffffff : Intel Corporation 440BX/ZX - 82443BX/ZX Host bridge68000000-68000fff : Texas Instruments PCI122568001000-68001fff : Texas Instruments PCI1225 (#2)e0000000-e3ffffff : PCI Bus #01e4000000-e7ffffff : PCI Bus #01e4000000-e4ffffff : ATI Technologies Inc 3D Rage LT Pro AGP-133

/proc/iomem

Page 8: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 8

Simpel character devicedriver

xxx

Controler:UART

Status

Data

Control

Sys

tenk

ald

AplikationOperativsystem

Output kald.

ISR

RTE

If NoOfChInBuf = BufSize Wait(OutSem);putbuf(ch); If NoOfChInBuf > 0 Åben for IRQ

Data =getbuf();If NoOfChInBuf < 2/3*BufSize og sender har kaldt Wait() så signal(OutSem);If NoOfChInBuf = 0 Luk for IRQ.

x

Page 9: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 9

FIFO kø: Ringbuffer

ab

c

InPtr

UdPtr

NoOfChInBuf= 3

Int PutBuf(data)

Int GetBuf(&data)

Page 10: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 10

FIFO kø: Ringbuffer#define BufSize 128char ringbuf[BufSize];int InPtr=0, UdPtr=0, NoOfChInBuf=0;

void enable() {asm("STI");}void disable() {asm("CLI");}

void PutBuf(char ch) { disable(); ringbuf[InPtr]= ch; if (BufSize <= ++InPtr) InPtr= 0; ++ NoOfChInBuf enable();}

char GetBuf(){ char ch; disable(); if (NoOfChInBuf > 0) { ch= ringbuf[UdPtr]; NoOfChInBuf--; if (BufSize <= ++UdPtr) UdPtr= 0; } enable(); return ch;}

Page 11: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 11

I/O software.

Page 12: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 12

Device-Independent.

Uniform interface:– Device uafhængig. Fordel for både systemudvikler og

applikationsudvikler.

UNIX/Linux metoden:Fil I/O metoden.

En device refereres vha et symbolsknavn.

ttys1, lp0, sound.

Device systemkaldene: open, read, write, lseek, .....

Page 13: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 13

Device-Independent.

Protections.Major nr: xMinor nr: y

/dev/MinDriver

Mindriver ttys

Protections.Major nr: 3Minor nr: 48

/dev/ttys0

Protections.Major nr: 3Minor nr: 49

/dev/ttys1

fd= open(”/dev/MinDriver”,..);read(fd,..);write(fd,..);

Nr: xNr: 3

Operativsystem

Applikation

Page 14: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 14

Device-Independent.

mknod /dev/MinDevice c 121 0chmod 666 /dev/MinDevice

Oprettelse af device fil:

Character devices:1 mem2 pty3 ttyp4 ttyS6 lp7 vcs10 misc13 input14 sound21 sg180 usb

/proc/devices Major nummerene: 60 to 63, 120 to 127, 240 to 253er reserveret for ekspermintal brug.

Page 15: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 15

I/O software.

Page 16: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 16

Blocking og buffering

Synkrone device:Digital I/O port, Realtids Ur,..Simple divices der kan læses/sættes når man vil.

Asynkrone device:RS232, USB, Keyboard, disk, ....Kræver: Interrupt håndtering, buffering og blocking/signalning.

Fremgangsmåde fra applikationen:Læsning blokere hvis der ikke er data i buffer. (Synkron app.).Signal til Applikationen når der er data. (Asynkron app.)Skrivning blokere hvis devicen ikke kan følge med dvs.Buffer fuld. (Synkron app.).Signal til Applikationen når den er klar til at modtage data. (Asynkron app.)

Page 17: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 17

FejlhåndteringProblem:

Device er en kilde til fejl. Datanet fejl, disk læse/skrive fejl, printerfejl,......

Strategi:Prøv at håndterer fejlen der hvor den opstår,

ellers rapportere op i systemet.

Fx. Disk læse fejl: Devicedriveren kan prøve et antal gange.

Hvis det ikke hjælper sends en fejlmeddelese til brugeren.

Page 18: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 18

Device driver typer

Char device:Strøm af byte.

ttys0, lp, usb, consol,.....

Blok device:Data er organiseret i blokke

Diske.

Network interface:Strøm af byte eller pakkeopdelt.

Kan ikke håndteres alene vha. fil-hald(open,read,write).

Page 19: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 19

Eks. på brug af char device driver #include <sys/types.h>

      #include <sys/stat.h>      #include <fcntl.h>      #include <termios.h>      #include <stdio.h>                             main()      {        int fd, res, stop= 0;        struct termios oldtio, newtio;        char buf[255];                fd = open("/dev/ttyS1", O_RDWR | O_NOCTTY );                 tcgetattr(fd,&oldtio); /* save current port settings */                bzero(&newtio, sizeof(newtio));        newtio.c_cflag = B38400 | CRTSCTS | CS8 | CLOCAL | CREAD;        newtio.c_iflag = IGNPAR;        newtio.c_oflag = 0;                /* set input mode (non-canonical, no echo,...) */        newtio.c_lflag = 0;                 newtio.c_cc[VTIME]    = 0;   /* inter-character timer unused */        newtio.c_cc[VMIN]     = 5;   /* blocking read until 5 chars received */                tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio);                        while (!stop) {      

          res = read(fd,buf,255);   /* returns after 5 chars have been input */        }        tcsetattr(fd,TCSANOW,&oldtio); close(fd);

      }   

Page 20: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 20

Loadable kernemoduler.#include <linux/module.h>module_init(device1_init);module_exit(device1_exit);

make -C /usr/src/linux M='pwd' modules

mod1.ko

insmod mod1.ko

APP

OPS rmmod mod1

Page 21: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 21

Hjemmelavet devicedriver

1. Skriv et kernemodul der implementere deviven.Major= register_chrdev(0, ”MinDriver”, &fops);Plus meget mere.

2. Indsæt modul i kernen.insmod MinDriver.ko

3. Lav en devicefilmknod –m 664 MinDevice c Major 7

Page 22: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 22

Hjemmelavet devicedriverstatic int device1_init(void) { int res;

device1_cdev = cdev_alloc( ); device1_cdev->ops = &device1_fops;

if (device1_major) { dev = MKDEV(device1_major, device1_minor); res = register_chrdev_region(dev, 1, "device1"); } else { res = alloc_chrdev_region(&dev, device1_minor, 1, "device1"); device1_major = MAJOR(dev); } if (res < 0) { return res;} else printk(KERN_INFO "device1: major number %d\n",device1_major); cdev_init(device1_cdev, &device1_fops); cdev_add (device1_cdev, dev, 1); printk(KERN_INFO "Inserting device1 module\n"); return 0;}

static void device1_exit(void) { unregister_chrdev_region(dev, device1_nr_devs);}

Page 23: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 23

Hjemmelavet devicedriverint device1_open( struct inode *inode, struct file *filp);int device1_release(struct inode *inode, struct file *filp);ssize_t device1_read( struct file *filp, char *buf, size_t count, loff_t *f_pos);ssize_t device1_write(struct file *filp,const char *buf,size_t count,loff_t *f_pos);

struct file_operations device1_fops = { .read= device1_read, .write= device1_write, .open= device1_open, .release= device1_release};

ssize_t device1_read( struct file *filp, char *buf, size_t count, loff_t *f_pos){ copy_to_user(buf,buffer,count); return count;}

ssize_t device1_write(struct file *filp,const char *buf,size_t count,loff_t *f_pos){ copy_from_user(buffer,buf,count); return 1;}

Page 24: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 24

Hjemmelavet devicedriverstatic int Device_Open = 0;char *buffer;static int device1_open(struct inode *inode, struct file *file){ int minor_num = iminor(inode); if (Device_Open) return −EBUSY; Device_Open++; // Init driver buffer= kmalloc(Size * sizeof(char), GFP_KERNEL); return 0;}

static int device1_release(struct inode *inode, struct file *file){ Device_Open−−; kfree(buffer); return 0;}

Page 25: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 25

Hjemmelavet devicedriver

Page 26: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 26

Hjemmelavet devicedriver

#include <linux/ioport.h>

int check_region(unsigned long start, unsigned long len);

struct resource *request_region(unsigned long start, unsigned long len, char *name);

void release_region(unsigned long start, unsigned long len);

unsigned char inb(unsigned short port);void outb(unsigned char byte, unsigned short port);

unsigned short inw(unsigned short port);void outw(unsigned short word, unsigned short port);

Page 27: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 27

DMA devicedriver

Page 28: Styresystemer og tjenester

Per P. Madsen Styresystemer og tjenester 28

DMA

A typical direct memory-access controller interface