Systemkald i Unix/Linux

Størrelse: px
Starte visningen fra side:

Download "Systemkald i Unix/Linux"

Transkript

1 Systemkald i Unix/Linux 1

2 Operativsystemet Fra proces: OS som værktøjskasse: tilgængelig via systemkald... OS som resurseadministrator, abstrakt/virtuel maskine: CPU: processer, tråde, schedulering I/O: device drivere, filsystemer Lager: virtuelt lager, segmentering 2

3 Udvalgte POSIX.1 systemkald Beskriver grænseflade mellem OS og applikationer 3

4 Rettigheder og tilstande Bruger- og OS-aktiviteter har forskellige rettigheder Kernel Mode (x86 ring 0) og User Mode (x86 ring 3) 4

5 Udførelse af systemkald Et dilemma: En bruger-proces, som skal udføre et systemkald, udføres i User Mode, men systemkaldet skal udføres i Kernel Mode. Mulige løsninger: Skift fra User Mode til Kernel Mode i eksisterende proces. Start en ny kerne-tråd, som udfører systemkaldet. 5

6 Sikkerhedsproblem Et problem: Bruger-kode må aldrig kunne udføres i Kernel Mode, så en bruger-instruktion, der blot skifter tilstand er farlig En typisk løsning: Brug en specialiseret instruktion som laver et trap 6

7 [Click] Et problem: Bruger-kode må aldrig kunne udføres i Kernel Mode, så en bruger-instruktion, der blot skifter tilstand er farlig. Kunne man ikke bare...? A... checke at bruger-koden er OK? B... skifte til Kernel Mode og hoppe til samme sted hver gang? C... gå tilbage til User Mode hvis ikke programmet straks hopper til kode i kernen? D... udføre hele systemkaldet i User Mode? E. Ved ikke 7

8 Re: Traps En intern hændelse for CPU en (ofte en fejl): Implicit: division med 0, lagertilgang, Eksplicit: systemkald (supervisory call / SVC) 8

9 Udførelse af et systemkald Biblioteksproceduren (kern_func) kaldes ofte for en stub... 9

10 Udførelse af systemkaldet read read( fd, &buffer, nbytes ) 10

11 Udførelse af systemkaldet read Kalder en biblioteksprocedure (en stub) for read (trin 1-4)... stub'en ligger i User Space... Stub'en forbereder og udfører trap til kernen (trin 4-5)... skifter til Kernel Mode og fortsætter udførelsen fra fast sted i Kernel Space... Kernen identificerer og udfører read i Kernel Mode (trin 7-8) Kernen returnerer til Stub'en(trin 9)... skifter til User Mode og fortsætter udførelsen i User Space... Stub'en returnerer til kalderen (trin 10-11) 11

12 Impl. af systemkald i Linux Tilgængelige systemkald, argumenter til trap, defineres i arch/i386/kernel/entry.s include/asm-i386/unistd.h Implementeres i den øvrige kerne-kildetekst f.eks read i fs/read_write.c 12

13 arch/i386/kernel/entry.s.data ENTRY(sys_call_table).long SYMBOL_NAME(sys_ni_syscall) /* 0.. */.long SYMBOL_NAME(sys_exit).long SYMBOL_NAME(sys_fork).long SYMBOL_NAME(sys_read).long SYMBOL_NAME(sys_write).long SYMBOL_NAME(sys_open) /* 5 */.long SYMBOL_NAME(sys_close)....long SYMBOL_NAME(sys_ni_syscall) /* streams2 */.long SYMBOL_NAME(sys_vfork) /* 190 */ /* * NOTE!! This doesn't have to be exact - we just have * to make sure we have _enough_ of the "sys_ni_syscall" * entries. Don't panic if you notice that this hasn't * been shrunk every time we add a new system call. */.rept NR_syscalls-190.long SYMBOL_NAME(sys_ni_syscall).endr 13

14 include/asm-i386/unistd.h /* * This file contains the system call numbers. */ #define NR_exit 1 #define NR_fork 2 #define NR_read 3 #define NR_write 4 #define NR_open 5 #define NR_close 6... #define NR_sendfile 187 #define NR_getpmsg 188 /*.. */ #define NR_putpmsg 189 /*.. */ #define NR_vfork 190 Linux kernen version tilbyder 190 systemkald 14

15 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 15

16 fs/read_write.c prototype asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 15

17 fs/read_write.c prototype asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; asmlinkage: struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); argumenter på stak lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 15

18 fs/read_write.c prototype asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; asmlinkage: struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); argumenter på stak lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) goto: hop, indenfor ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) funktion ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 15

19 fs/read_write.c prototype asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; asmlinkage: struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); argumenter på stak lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) goto: hop, indenfor ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) funktion ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: label: mål for goto unlock_kernel(); return ret; 15

20 fs/read_write.c prototype asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; asmlinkage: struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); argumenter på stak lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) locks: ignore goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) goto: hop, indenfor ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) funktion ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: label: mål for goto unlock_kernel(); return ret; 15

21 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 16

22 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; critical section 16

23 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 17

24 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; allocate/deallocate resource 17

25 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 18

26 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 18

27 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 18

28 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 18

29 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 18

30 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; the real work 18

31 fs/read_write.c asmlinkage ssize_t sys_read(unsigned int fd, char * buf, size_t count) { ssize_t ret; struct file * file; ssize_t (*read)(struct file *, char *, size_t, loff_t *); lock_kernel(); ret = -EBADF; file = fget(fd); if (!file) goto bad_file; if (!(file->f_mode & FMODE_READ)) ret = locks_verify_area(flock_verify_read, file->f_dentry->d_inode, file, file->f_pos, count); if (ret) ret = -EINVAL; if (!file->f_op!(read = file->f_op->read)) ret = read(file, buf, count, &file->f_pos); out: fput(file); bad_file: unlock_kernel(); return ret; 19

32 Tilføjelse af systemkald i Linux int my_gettime(int flag, struct timeval *tv); Skriv aktuel tid i tv og udskriv til skærm hvis flag er TRUE Tilføj definition af systemkald til entry.s og unistd.h Tilføj implementation passende sted i kildeteksten Oversæt og genstart dopsys-linux maskinen med ny kerne 20

33 diff -Naur -X /root/dontdiff linux /arch/i386/kernel/entry.s onsdag_uge47/ --- linux /arch/i386/kernel/entry.s Mon Sep 9 18:03: torsdag_uge44/arch/i386/kernel/entry.s Tue Nov 17 07:31: ,6 SYMBOL_NAME(sys_ni_syscall) /* streams1 */.long SYMBOL_NAME(sys_ni_syscall) /* streams2 */.long SYMBOL_NAME(sys_vfork) /* 190 */ +.long SYMBOL_NAME(sys_my_gettime) /* 191 */ /* * NOTE!! This doesn't have to be exact - we just -569,6 * entries. Don't panic if you notice that this hasn't * been shrunk every time we add a new system call. */ -.rept NR_syscalls rept NR_syscalls-191.long SYMBOL_NAME(sys_ni_syscall).endr diff -Naur -X /root/dontdiff linux /include/asm-i386/unistd.h onsdag_uge47/ --- linux /include/asm-i386/unistd.h Mon Sep 9 18:03: torsdag_uge44/include/asm-i386/unistd.h Tue Nov 17 07:31: ,6 #define NR_getpmsg 188 /* some people actually want streams */ #define NR_putpmsg 189 /* some people actually want streams */ #define NR_vfork 190 +#define NR_my_gettime 191 /* #define NR_ugetrlimit 191 SuS compliant getrlimit */ #define NR_mmap2 192 #define NR_truncate diff -Naur -X /root/dontdiff linux /kernel/time.c torsdag_uge44/kernel/time.c --- linux /kernel/time.c Mon Sep 9 18:04: torsdag_uge44/kernel/time.cwed A p r : 3 4 : ,3 ret = do_adjtimex(&txc); return copy_to_user(txc_p, &txc, sizeof(struct timex))? -EFAULT : ret; + +/**********************************************************************/ +/* implementation of my_gettime system call */ +/**********************************************************************/ + +asmlinkage int sys_my_gettime(int flag, struct timeval *tv) +{ + int write_failed; + struct timeval ktv; + + /* get timeval from global variable xtime */... 21

34 diff -Naur -X /root/dontdiff linux /arch/i386/kernel/entry.s onsdag_uge47/ --- linux /arch/i386/kernel/entry.s Mon Sep 9 18:03: torsdag_uge44/arch/i386/kernel/entry.s Tue Nov 17 07:31: ,6 SYMBOL_NAME(sys_ni_syscall) /* streams1 */.long SYMBOL_NAME(sys_ni_syscall) /* streams2 */.long SYMBOL_NAME(sys_vfork) /* 190 */ +.long SYMBOL_NAME(sys_my_gettime) /* 191 */ /* * NOTE!! This doesn't have to be exact - we just -569,6 * entries. Don't panic if you notice that this hasn't * been shrunk every time we add a new system funktion call. i kernen */ -.rept NR_syscalls rept NR_syscalls-191.long SYMBOL_NAME(sys_ni_syscall).endr diff -Naur -X /root/dontdiff linux /include/asm-i386/unistd.h onsdag_uge47/ --- linux /include/asm-i386/unistd.h Mon Sep 9 18:03: torsdag_uge44/include/asm-i386/unistd.h Tue Nov 17 07:31: ,6 #define NR_getpmsg 188 /* some people actually want streams */ #define NR_putpmsg 189 /* some people actually want streams */ #define NR_vfork 190 +#define NR_my_gettime 191 /* #define NR_ugetrlimit 191 SuS compliant getrlimit */ #define NR_mmap2 192 #define NR_truncate diff -Naur -X /root/dontdiff linux /kernel/time.c torsdag_uge44/kernel/time.c --- linux /kernel/time.c Mon Sep 9 18:04: torsdag_uge44/kernel/time.cwed A p r : 3 4 : ,3 ret = do_adjtimex(&txc); return copy_to_user(txc_p, &txc, sizeof(struct timex))? -EFAULT : ret; + +/**********************************************************************/ +/* implementation of my_gettime system call */ +/**********************************************************************/ + +asmlinkage int sys_my_gettime(int flag, struct timeval *tv) +{ + int write_failed; + struct timeval ktv; + + /* get timeval from global variable xtime */... Tilføj adressen på den nye 21

35 diff -Naur -X /root/dontdiff linux /arch/i386/kernel/entry.s onsdag_uge47/ --- linux /arch/i386/kernel/entry.s Mon Sep 9 18:03: torsdag_uge44/arch/i386/kernel/entry.s Tue Nov 17 07:31: ,6 SYMBOL_NAME(sys_ni_syscall) /* streams1 */.long SYMBOL_NAME(sys_ni_syscall) /* streams2 */.long SYMBOL_NAME(sys_vfork) /* 190 */ +.long SYMBOL_NAME(sys_my_gettime) /* 191 */ /* * NOTE!! This doesn't have to be exact - we just -569,6 * entries. Don't panic if you notice that this hasn't * been shrunk every time we add a new system call. */ -.rept NR_syscalls rept NR_syscalls-191 af tabellen.long SYMBOL_NAME(sys_ni_syscall).endr diff -Naur -X /root/dontdiff linux /include/asm-i386/unistd.h onsdag_uge47/ --- linux /include/asm-i386/unistd.h Mon Sep 9 18:03: torsdag_uge44/include/asm-i386/unistd.h Tue Nov 17 07:31: ,6 #define NR_getpmsg 188 /* some people actually want streams */ #define NR_putpmsg 189 /* some people actually want streams */ #define NR_vfork 190 +#define NR_my_gettime 191 /* #define NR_ugetrlimit 191 SuS compliant getrlimit */ #define NR_mmap2 192 #define NR_truncate diff -Naur -X /root/dontdiff linux /kernel/time.c torsdag_uge44/kernel/time.c --- linux /kernel/time.c Mon Sep 9 18:04: torsdag_uge44/kernel/time.cwed A p r : 3 4 : ,3 ret = do_adjtimex(&txc); return copy_to_user(txc_p, &txc, sizeof(struct timex))? -EFAULT : ret; + +/**********************************************************************/ +/* implementation of my_gettime system call */ +/**********************************************************************/ + +asmlinkage int sys_my_gettime(int flag, struct timeval *tv) +{ + int write_failed; + struct timeval ktv; + + /* get timeval from global variable xtime */... Juster antal tomme pladser i slutningen 21

36 diff -Naur -X /root/dontdiff linux /arch/i386/kernel/entry.s onsdag_uge47/ --- linux /arch/i386/kernel/entry.s Mon Sep 9 18:03: torsdag_uge44/arch/i386/kernel/entry.s Tue Nov 17 07:31: ,6 SYMBOL_NAME(sys_ni_syscall) /* streams1 */.long SYMBOL_NAME(sys_ni_syscall) /* streams2 */.long SYMBOL_NAME(sys_vfork) /* 190 */ +.long SYMBOL_NAME(sys_my_gettime) /* 191 */ /* * NOTE!! This doesn't have to be exact - we just -569,6 * entries. Don't panic if you notice that this hasn't * been shrunk every time we add a new system call. */ -.rept NR_syscalls rept NR_syscalls-191.long SYMBOL_NAME(sys_ni_syscall).endr diff -Naur -X /root/dontdiff linux /include/asm-i386/unistd.h onsdag_uge47/ --- linux /include/asm-i386/unistd.h Mon Sep 9 18:03: torsdag_uge44/include/asm-i386/unistd.h Tue Nov 17 07:31: ,6 #define NR_getpmsg 188 /* some people actually want streams */ #define NR_putpmsg 189 /* some people actually want streams */ #define NR_vfork 190 +#define NR_my_gettime 191 /* #define NR_ugetrlimit 191 SuS compliant getrlimit */ #define NR_mmap2 192 #define NR_truncate diff -Naur -X /root/dontdiff linux /kernel/time.c torsdag_uge44/kernel/time.c --- linux /kernel/time.c Mon Sep 9 18:04: torsdag_uge44/kernel/time.cwed A p r : 3 4 : ,3 ret = do_adjtimex(&txc); return copy_to_user(txc_p, &txc, sizeof(struct timex))? -EFAULT : ret; + +/**********************************************************************/ +/* implementation of my_gettime system call */ +/**********************************************************************/ + +asmlinkage int sys_my_gettime(int flag, struct timeval *tv) +{ + int write_failed; + struct timeval ktv; + + /* get timeval from global variable xtime */... Annoncér navnet på det nye systemkald 21

37 diff -Naur -X /root/dontdiff linux /arch/i386/kernel/entry.s onsdag_uge47/ --- linux /arch/i386/kernel/entry.s Mon Sep 9 18:03: torsdag_uge44/arch/i386/kernel/entry.s Tue Nov 17 07:31: ,6 SYMBOL_NAME(sys_ni_syscall) /* streams1 */.long SYMBOL_NAME(sys_ni_syscall) /* streams2 */.long SYMBOL_NAME(sys_vfork) /* 190 */ +.long SYMBOL_NAME(sys_my_gettime) /* 191 */ /* * NOTE!! This doesn't have to be exact - we just -569,6 * entries. Don't panic if you notice that this hasn't * been shrunk every time we add a new system call. */ -.rept NR_syscalls rept NR_syscalls-191.long SYMBOL_NAME(sys_ni_syscall).endr diff -Naur -X /root/dontdiff linux /include/asm-i386/unistd.h onsdag_uge47/ --- linux /include/asm-i386/unistd.h Mon Sep 9 18:03: torsdag_uge44/include/asm-i386/unistd.h Tue Nov 17 07:31: ,6 #define NR_getpmsg 188 /* some people actually want streams */ #define NR_putpmsg 189 /* some people actually want streams */ #define NR_vfork 190 +#define NR_my_gettime 191 /* #define NR_ugetrlimit 191 SuS compliant getrlimit */ #define NR_mmap2 192 #define NR_truncate diff -Naur -X /root/dontdiff linux /kernel/time.c torsdag_uge44/kernel/time.c --- linux /kernel/time.c Mon Sep 9 18:04: torsdag_uge44/kernel/time.cwed A p r : 3 4 : ,3 ret = do_adjtimex(&txc); return copy_to_user(txc_p, &txc, sizeof(struct timex))? -EFAULT : ret; + +/**********************************************************************/ +/* implementation of my_gettime system call */ +/**********************************************************************/ + +asmlinkage int sys_my_gettime(int flag, struct timeval *tv) +{ + int write_failed; + struct timeval ktv; + + /* get timeval from global variable xtime */... Tilføj koden for den nye funktion 21

38 Anvendelse af nyt systemkald Brug generisk stub via syscall-systemkaldet: #include <sys/syscall.h>... syscall(191, 1, &tv);... eller lav stub vha. _syscall-makroen... #include <linux/unistd.h>... _syscall2(int, my_gettime, int, flag, struct timeval *, tv);... my_gettime(1, &tv); 22

39 Anvendelse af nyt systemkald Brug generisk stub via syscall-systemkaldet: Husk at lave symlink /usr/src/linux til at pege på rette kildetekst $ cd /usr/src #include $ rm <sys/syscall.h> linux... $ ln -s mygettime linux syscall(191, 1, &tv);... eller lav stub vha. _syscall-makroen... #include <linux/unistd.h>... _syscall2(int, my_gettime, int, flag, struct timeval *, tv);... my_gettime(1, &tv); 22

40 mygettime_test.c #include <stdio.h> #include <stdlib.h> #include <sys/syscall.h> #include <sys/time.h> #include <linux/unistd.h> _syscall2(int, my_gettime, int, flag, struct timeval *, tv); int main() { int val; struct timeval tv; val = syscall(191, 1, &tv); val = my_gettime(1, &tv); val = my_gettime(1, NULL); return 0; tv_sec: tv_usec: tv_sec: tv_usec: my_gettime: Cannot write into user space 23

41 Opsummering Systemkald adskiller ISA-niveauet fra brugerkode nødvendige for at sikre systeminvarianter ( sundhed ) realiseres med traps Case: Linux-systemkald annonceres til brugerkode (unistd.h) opsættes i adressetabel til brug i kernen (entry.s) implementeres i kernen kald i brugerkode skal etableres (syscall, _syscalln) 24

Styresystemer og tjenester

Styresystemer og tjenester Styresystemer og tjenester Indhold: 1. Introduktion til styresystemer 2. Processer og tråde 3. Synkroniseringsmetoder og IPC 4. Memory management 5. IO og devicedrivere 6. Analyse og design af embedded

Læs mere

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald

Læs mere

Operativsystemer - dopsys

Operativsystemer - dopsys Operativsystemer - dopsys Erik Ernst [email protected] dopsys 1 Q/A Mange deltagere er nu på 2. år af datalogistudiet, med dcomnet 1 for år siden Er din baggrund anderledes? dopsys 2 Praktiske oplysninger

Læs mere

Processer og tråde. dopsys 1

Processer og tråde. dopsys 1 Processer og tråde dopsys 1 Motivation.. parallelle processer udnytter hardwaren bedre: Batch operativsystemer (50 erne) hhv. små systemer: Multiprogrammering og time-sharing (fra 60 erne og frem): dopsys

Læs mere

VMware og dopsys-linux

VMware og dopsys-linux VMware og dopsys-linux 1 Virtuel maskine: OS Hardware Virtualisering: Resurser deles mellem processer: En virtuel maskine er til rådighed for hver proces. Virtualisering nu dybere: hver proces hvert OS.

Læs mere

ESP30076 임베디드시스템프로그래밍 (Embedded System Programming)

ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) Module 14: Kernel Timer ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 리눅스에서커널타이머사용법알아보기 HZ, jiffies_64, struct timer_list 커널타이머를활용한하드웨어제어용디바이스드라이버작성 2 Timer 관련변수 HZ 리눅스커널에서주기적으로발생하는시스템타이머

Læs mere

Principper for Samtidighed og Styresystemer

Principper for Samtidighed og Styresystemer Principper for Samtidighed og Styresystemer Kursusgang 12: Device drivere [email protected] Ph.D.-studerende Distribuerede og Indlejrede Systemer Institut for Datalogi Aalborg Universitet 17. maj 2010 Intro

Læs mere

DM14-1. Obligatorisk opgave F.06. System Call. Jacob Aae Mikkelsen Ingen andre gruppe medlemmer. 6. marts 2005

DM14-1. Obligatorisk opgave F.06. System Call. Jacob Aae Mikkelsen Ingen andre gruppe medlemmer. 6. marts 2005 - 1. Obligatorisk opgave F.06 System Call Jacob Aae Mikkelsen - 191076 Ingen andre gruppe medlemmer 6. marts 2005 1 Indhold 1 Opgave beskrivelse 2 2 Analyse 2 2.1 Hukommelses allokering.....................

Læs mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

Læs mere

Design Systemkald. User-mode Linux, The Linux kernel/325-2004

Design Systemkald. User-mode Linux, The Linux kernel/325-2004 Tracing tråden afbryder systemkaldet via ptrace Systemkaldet til værten ændres til getpid Processens stak manipuleres til at kalde kernen Kernen returnerer til processen Design Systemkald Design Startup/shutdown

Læs mere

WIKI & Lady Avenue New B2B shop

WIKI & Lady Avenue New B2B shop WIKI & Lady Avenue New B2B shop Login Login: You need a personal username and password Du skal bruge et personligt username og password Only Recommended Retail Prices Viser kun vejl.priser! Bestilling

Læs mere

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index

DET KONGELIGE BIBLIOTEK NATIONALBIBLIOTEK OG KØBENHAVNS UNIVERSITETS- BIBLIOTEK. Index DET KONGELIGE Index Download driver... 2 Find the Windows 7 version.... 2 Download the Windows Vista driver.... 4 Extract driver... 5 Windows Vista installation of a printer.... 7 Side 1 af 12 DET KONGELIGE

Læs mere

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU OUTLINE INEFFICIENCY OF ATTILA WAYS TO PARALLELIZE LOW COMPATIBILITY IN THE COMPILATION A SOLUTION

Læs mere

Principper for Samtidighed og Styresystemer

Principper for Samtidighed og Styresystemer Principper for Samtidighed og Styresystemer kursusintroduktion og Introduktion til Styresystemer René Rydhof Hansen Februar 2008 PSS 08 (Forelsning 00) Kursus intro./intro. styresystemer Februar 2008 1

Læs mere

//--------------------------------- Definition af porte og funktioner -------------------------

//--------------------------------- Definition af porte og funktioner ------------------------- Temeraturmåler (C-program).txt // Initialiserings-sekvens #include #pragma model=medium #pragma code=0x0000 #pragma xdata=0x4000 #pragma asm=on #pragma parameters=register //#define display P4

Læs mere

DANSK INSTALLATIONSVEJLEDNING VLMT500 ADVARSEL!

DANSK INSTALLATIONSVEJLEDNING VLMT500 ADVARSEL! DANSK INSTALLATIONSVEJLEDNING VLMT500 Udpakningsinstruktioner Åben indpakningen forsigtigt og læg indholdet på et stykke pap eller en anden beskyttende overflade for at undgå beskadigelse. Kontroller at

Læs mere

Trolling Master Bornholm 2015

Trolling Master Bornholm 2015 Trolling Master Bornholm 2015 (English version further down) Panorama billede fra starten den første dag i 2014 Michael Koldtoft fra Trolling Centrum har brugt lidt tid på at arbejde med billederne fra

Læs mere

Boligsøgning / Search for accommodation!

Boligsøgning / Search for accommodation! Boligsøgning / Search for accommodation! For at guide dig frem til den rigtige vejledning, skal du lige svare på et par spørgsmål: To make sure you are using the correct guide for applying you must answer

Læs mere

Datatekniker med programmering som speciale H5

Datatekniker med programmering som speciale H5 Datatekniker med programmering som speciale H5 H5 består af et selvstændigt projekt som du definerer. Styringen af projektet er i centrum her, og ikke selve softwaren. H5 varer ti uger bestående af ni

Læs mere

Aktivering af Survey funktionalitet

Aktivering af Survey funktionalitet Surveys i REDCap REDCap gør det muligt at eksponere ét eller flere instrumenter som et survey (spørgeskema) som derefter kan udfyldes direkte af patienten eller forsøgspersonen over internettet. Dette

Læs mere

Help / Hjælp

Help / Hjælp Home page Lisa & Petur www.lisapetur.dk Help / Hjælp Help / Hjælp General The purpose of our Homepage is to allow external access to pictures and videos taken/made by the Gunnarsson family. The Association

Læs mere

Trolling Master Bornholm 2015

Trolling Master Bornholm 2015 Trolling Master Bornholm 2015 (English version further down) Sæsonen er ved at komme i omdrejninger. Her er det John Eriksen fra Nexø med 95 cm og en kontrolleret vægt på 11,8 kg fanget på østkysten af

Læs mere

Schedulering. dopsys 1

Schedulering. dopsys 1 Schedulering dopsys 1 Re: Schedulering af processer.. administration af CPU-resursen. Ready List (RL) list af processer i ready_a tilstand. dopsys 2 Re: Schedulering af processer.. administration af CPU-resursen.

Læs mere

Niveauer af abstrakte maskiner

Niveauer af abstrakte maskiner Mikroarkitektur Niveauer af abstrakte maskiner Spørgsmål... Hvordan realiseres IJVM maskinen (lev. 2), eller hvordan ser en IJVM-CPU ud? Opbygning (mikroarkitekturen Mic-1) Anvendelse (mikroprogrammet

Læs mere

MIPS, registerallokering og MARS

MIPS, registerallokering og MARS MIPS, registerallokering og MARS Torben Mogensen 2011 Resumé Vi beskriver modulerne Mips.sml og RegAlloc.sml, samt hvordan de bruges sammen med MIPS-emulatoren MARS. 1 MIPS modulet Modulet Mips.sml indeholder

Læs mere

Planen for idag. Kontrol af ydre enheder. Systemarkitektur. Synkronisering ved aktiv venten. Multiprogrammering[1]: Ydre enheder og multiprogrammer

Planen for idag. Kontrol af ydre enheder. Systemarkitektur. Synkronisering ved aktiv venten. Multiprogrammering[1]: Ydre enheder og multiprogrammer : Ydre enheder og multiprogrammer Forår 2003 Jørgen Sværke Hansen Planen for idag Samspil mellem CPU og ydre enheder: Generelt Kontrolregistre Afbrydelser Specifikt for Alpha AXP (kernemaskinerne) Multiprogrammering:

Læs mere

how to save excel as pdf

how to save excel as pdf 1 how to save excel as pdf This guide will show you how to save your Excel workbook as PDF files. Before you do so, you may want to copy several sheets from several documents into one document. To do so,

Læs mere

Hukommelsesspil. Introduktion. Scratch

Hukommelsesspil. Introduktion. Scratch Scratch 2 Hukommelsesspil All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can

Læs mere

Get Instant Access to ebook Udleveret PDF at Our Huge Library UDLEVERET PDF. ==> Download: UDLEVERET PDF

Get Instant Access to ebook Udleveret PDF at Our Huge Library UDLEVERET PDF. ==> Download: UDLEVERET PDF UDLEVERET PDF ==> Download: UDLEVERET PDF UDLEVERET PDF - Are you searching for Udleveret Books? Now, you will be happy that at this time Udleveret PDF is available at our online library. With our complete

Læs mere

RentCalC V2.0. 2012 Soft-Solutions

RentCalC V2.0. 2012 Soft-Solutions Udlejnings software Vores udvikling er ikke stoppet!! by Soft-Solutions RentCalC, som er danmarks ubetinget bedste udlejnings software, kan hjælpe dig med på en hurtigt og simple måde, at holde styr på

Læs mere

Trolling Master Bornholm 2013

Trolling Master Bornholm 2013 Trolling Master Bornholm 2013 (English version further down) Tilmeldingerne til 2013 I dag nåede vi op på 85 tilmeldte både. Det er stadig lidt lavere end samme tidspunkt sidste år. Tilmeldingen er åben

Læs mere

Ghostbusters. Introduktion. Scratch. Du skal lave et fangelegsspil med spøgelser! Arbejdsliste. Test dit Projekt. Gem dit Projekt

Ghostbusters. Introduktion. Scratch. Du skal lave et fangelegsspil med spøgelser! Arbejdsliste. Test dit Projekt. Gem dit Projekt Scratch 1 Ghostbusters All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can register

Læs mere

Sunlite pakke 2004 Standard (EC) (SUN SL512EC)

Sunlite pakke 2004 Standard (EC) (SUN SL512EC) Sunlite pakke 2004 Standard (EC) (SUN SL512EC) - Gruppering af chasere igen bag efter. På den måde kan laves cirkelbevægelser og det kan 2,787.00 DKK Side 1 Sunlite pakke 2006 Standard (EC) LAN (SUN SL512EC

Læs mere

Netværk & elektronik

Netværk & elektronik Netværk & elektronik Oversigt Ethernet og IP teori Montering af Siteplayer modul Siteplayer teori Siteplayer forbindelse HTML Router (port forwarding!) Projekter Lkaa Mercantec 2009 1 Ethernet På Mars

Læs mere

Lærebog. Datalogi 1F Forår 2003. Hvad sker hvornår? Kursusbøger. Planen for idag. Hvad er et operativsystem

Lærebog. Datalogi 1F Forår 2003. Hvad sker hvornår? Kursusbøger. Planen for idag. Hvad er et operativsystem Lærebog Datalogi 1F Forår 2003 Operativsystemer og multiprogrammering Jørgen Sværke Hansen Silberschatz, Galvin, Gagne: Operating System Concepts, 6. udgave (med Windows XP opdatering) Har I 6. udgave

Læs mere

User Manual for LTC IGNOU

User Manual for LTC IGNOU User Manual for LTC IGNOU 1 LTC (Leave Travel Concession) Navigation: Portal Launch HCM Application Self Service LTC Self Service 1. LTC Advance/Intimation Navigation: Launch HCM Application Self Service

Læs mere

Brug sømbrættet til at lave sjove figurer. Lav fx: Få de andre til at gætte, hvad du har lavet. Use the nail board to make funny shapes.

Brug sømbrættet til at lave sjove figurer. Lav fx: Få de andre til at gætte, hvad du har lavet. Use the nail board to make funny shapes. Brug sømbrættet til at lave sjove figurer. Lav f: Et dannebrogsflag Et hus med tag, vinduer og dør En fugl En bil En blomst Få de andre til at gætte, hvad du har lavet. Use the nail board to make funn

Læs mere

Forskning i socialpædagogik socialpædagogisk forskning?

Forskning i socialpædagogik socialpædagogisk forskning? Forskning i socialpædagogik socialpædagogisk forskning? eller knudramian.pbwiki.com www.regionmidtjylland.dkc Indhold Professionsforskning til problemløsning eller som slagvåben? Hvad er forskning? Hvad

Læs mere

Introduktion til C programmering

Introduktion til C programmering Introduktion til C programmering Rasmus Erik Voel Jensen Uge 17 [email protected] Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler

Læs mere

Tegnekasse. Introduktion. Scratch. I dette projekt skal du lave dit eget tegneprogram! Arbejdsliste. Test dit Projekt.

Tegnekasse. Introduktion. Scratch. I dette projekt skal du lave dit eget tegneprogram! Arbejdsliste. Test dit Projekt. Scratch 1 Tegnekasse All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can register

Læs mere

Trolling Master Bornholm 2016 Nyhedsbrev nr. 6

Trolling Master Bornholm 2016 Nyhedsbrev nr. 6 Trolling Master Bornholm 2016 Nyhedsbrev nr. 6 English version further down Johnny Nielsen med 8,6 kg laks Laksen blev fanget seks sømil ud for Tejn. Det var faktisk dobbelthug, så et kig ned i køletasken

Læs mere

Rockband. Introduktion. Scratch. I dette projekt skal du lære, hvordan du kan kode dit eget musikinstrument! Arbejdsliste.

Rockband. Introduktion. Scratch. I dette projekt skal du lære, hvordan du kan kode dit eget musikinstrument! Arbejdsliste. Scratch 1 Rockband All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Introduktion

Læs mere

Hvor er mine runde hjørner?

Hvor er mine runde hjørner? Hvor er mine runde hjørner? Ofte møder vi fortvivlelse blandt kunder, når de ser deres nye flotte site i deres browser og indser, at det ser anderledes ud, i forhold til det design, de godkendte i starten

Læs mere

Danish Language Course for International University Students Copenhagen, 12 July 1 August Application form

Danish Language Course for International University Students Copenhagen, 12 July 1 August Application form Danish Language Course for International University Students Copenhagen, 12 July 1 August 2017 Application form Must be completed on the computer in Danish or English All fields are mandatory PERSONLIGE

Læs mere

1 Operativsystemer oversigt

1 Operativsystemer oversigt 1 Operativsystemer oversigt Hvorfor OS virtualisering Abstraktion (processer, virtual hukommelse, filer) Kernel mode og user mode Systemkald (slide 31) Interrupts At levere en simplere model af computeren

Læs mere

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1 Project Step 7 Behavioral modeling of a dual ported register set. Copyright 2006 - Joanne DeGroat, ECE, OSU 1 The register set Register set specifications 16 dual ported registers each with 16- bit words

Læs mere

DK - Quick Text Translation. HEYYER Net Promoter System Magento extension

DK - Quick Text Translation. HEYYER Net Promoter System Magento extension DK - Quick Text Translation HEYYER Net Promoter System Magento extension Version 1.0 15-11-2013 HEYYER / Email Templates Invitation Email Template Invitation Email English Dansk Title Invitation Email

Læs mere

Sikkerhedsvejledning

Sikkerhedsvejledning 11-01-2018 2 Sikkerhedsvejledning VIGTIGT! Venligst læs disse instruktioner inden sengen samles og tages i brug Tjek at alle dele og komponenter er til stede som angivet i vejledningen Fjern alle beslagsdele

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Copenhagen Business Academy Multimediedesigner 3. semester - 1. projekt, september 2014 Gruppe 1 - MulA Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Study: Multimedia Design Project:

Læs mere

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Copenhagen Business Academy Multimediedesigner 3. semester - 1. projekt, september 2014 Gruppe 1 - MulA Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Study: Multimedia Design Project:

Læs mere

Programmering i C. Lektion 4. 5. december 2008

Programmering i C. Lektion 4. 5. december 2008 Programmering i C Lektion 4 5. december 2008 Funktioner Eksempel Fra sidst 1 Funktioner 2 Eksempel Funktioner Eksempel Eksempel: 1 / f u n k t i o n s p r o t o t y p e r / i n t i n d l a e s ( void )

Læs mere

Hjernetræning. Introduktion. Scratch

Hjernetræning. Introduktion. Scratch Scratch 2 Hjernetræning All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can register

Læs mere

De 10 JavaScript eksamensspørgsmål

De 10 JavaScript eksamensspørgsmål De 10 JavaScript eksamensspørgsmål I det nedenstående præsenteres de 10 JavaScript spørgsmål der sammen med relevante dele af kursets pensum vil udgøre udgangspunktet for den del af den mundtlige eksamen

Læs mere

Bilag. Resume. Side 1 af 12

Bilag. Resume. Side 1 af 12 Bilag Resume I denne opgave, lægges der fokus på unge og ensomhed gennem sociale medier. Vi har i denne opgave valgt at benytte Facebook som det sociale medie vi ligger fokus på, da det er det største

Læs mere

Trolling Master Bornholm 2016 Nyhedsbrev nr. 8

Trolling Master Bornholm 2016 Nyhedsbrev nr. 8 Trolling Master Bornholm 2016 Nyhedsbrev nr. 8 English version further down Der bliver landet fisk men ikke mange Her er det Johnny Nielsen, Søløven, fra Tejn, som i denne uge fangede 13,0 kg nord for

Læs mere

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav. Miniprojekt2011 Projektbeskrivelse Der skal fremstilles en lille java application på PC, hvor brugeren kan foretage interaktioner med en simpel database på disken via et grafisk brugerinterface. Formålet

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Programmeringscamp. Implementer funktionerne én for én og test hele tiden. Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere

Læs mere

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank 03-10-2018 Rune Ibsen Softwareudvikling Seniorkonsulent Mentoring 10 konsulenter F# Programmeringssprog som oversættes til.net Functional-first,

Læs mere