styresystemer og tjenester
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 PresentationTRANSCRIPT
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.
Per P. Madsen Styresystemer og tjenester 2
I/O device og hastigheder.
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
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.
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.
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
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
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
Per P. Madsen Styresystemer og tjenester 9
FIFO kø: Ringbuffer
ab
c
InPtr
UdPtr
NoOfChInBuf= 3
Int PutBuf(data)
Int GetBuf(&data)
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;}
Per P. Madsen Styresystemer og tjenester 11
I/O software.
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, .....
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
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.
Per P. Madsen Styresystemer og tjenester 15
I/O software.
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.)
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.
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).
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);
}
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
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
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);}
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;}
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;}
Per P. Madsen Styresystemer og tjenester 25
Hjemmelavet devicedriver
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);
Per P. Madsen Styresystemer og tjenester 27
DMA devicedriver
Per P. Madsen Styresystemer og tjenester 28
DMA
A typical direct memory-access controller interface