HY-345
Λειτουργικά
Συστήματα
ΑΣΚΗΣΗ
3η
Φθινόπωρο 2008
Υλοποίηση
System Calls
στο ΜΙΝΙΧ
Σκοπός
αυτής της
άσκησης είναι εξοικείωση
με τις έννοιες
και την
υλοποίηση των system calls σε ένα
λειτουργικό
σύστημα. Για το
σκοπό αυτό σας
ζητείται να
φτιάξετε δύο
νέα δικά σας system call στο
λειτουργικό
σύστημα Minix.
Θα υλοποιήσετε
ένα system call το
οποίο θα
δέχεται σαν
παράμετρο ένα process ID (PID) και
θα επιστρέφει
το process number που
είναι αποθηκευμένο
στο process table του kernel. Το νέο
αυτό system call θα το
ονομάσετε getpnr().
Επίσης θα
προσθέσετε ένα
system call το οποίο
θα εμφανίζει
τις εγγραφές
του process table. Θα
εμφανίζεται
μόνο τα slots τα οποία
δεν είναι
άδεια.
Υπάρχουν
αρκετά παραδείγματα
μέσα στον
κώδικα του MINIX που να
διατρέχουν τον
process table. Για κάθε
διεργασία του process table θα πρέπει να
εμφανίζεται το
pid, το process number και το
όνομα της
διεργασίας.
Παρακάτω σας
δίνεται ένα
παράδειγμα για
το πως μπορεί
να είναι το output της
κλήσης αυτού
του system call. Το system call αυτό θα το
ονομάσετε prproct().
Τέλος θα
γράψετε ένα
απλό πρόγραμμα
που θα χρησιμοποιεί
αυτά τα δυο νέα system calls.
Η έξοδος του
προγράμματος
μπορεί να
είναι η εξής:
PID P_NR P_NAME
0 -10 TTY
0 -9 DP8390
0 -8 SYN_AL
0 -7 IDLE
...
29 4 sh
18 5 update
30 6 getty
30 7 getty
30 8 getty
33 9 project5
Process number of PID #33 is 9 Process number of PID #29 is 4
grep
.
Επίσης, αν
χρησιμοποιείτε
τον vim
editor, θα σας φανεί
πολύ χρήσιμο
και το
πρόγραμμα ctags
.
Χρησιμοποιήστε
την εντολή man
από το shell για να
μάθετε πως
ακριβώς
λειτουργεί
κάθε εντολή.#
ifdef
... ή #
if
...
... νέος
κώδικας ...
#else
... παλιός κώδικας ...
#endif
getpid
και getppid
.
Μερικά από τα
αρχεία στα
οποία ίσως
χρειαστεί να επέμβετε
ή ακόμα και να
δημιουργήσετε
οι ίδιοι είναι
τα παρακάτω:/
src
/
lib
/
sunsyscall
/
Makefile
/
src
/
lib
/
sunsyscall
/
getpnr
.
s
/
src
/
lib
/
posix
/
Makefile
/
src
/
lib
/
posix
/_
getpnr
.
c
/
include
/
minix
/
callnr
.
h
/
src
/
mm
/
table
.
c
/
src
/
mm
/
getset
.
c
/
include
/
minix
/
syslib
.
h
/
src
/
lib
/
syslib
/
Makefile
/
src
/
lib
/
syslib
/
sys
_
getpnr
.
c
/
include
/
minix
/
com
.
h
/
src
/
kernel
/
proc
.
h
/
src
/
kernel
/
system
.
c
Παρατηρήσεις:
README
, το πολύ 30
γραμμών, με
επεξηγήσεις
για τον τρόπο
υλοποίησης
των system calls. minix
.
img
, το
οποίο είναι το
image του
minix που
φορτώνεται
από το bochs. Xρησιμοποιείστε την
εντολή tar
και για
συμπίεση το
πρόγραμμα gzip
).
Παραδώστε το
παραπάνω
αρχείο
χρησιμοποιώντας
το πρόγραμμα submit
(πληκτρολογήστε
~hy345/bin/submit 3 από το directory που
περιέχει το
αρχείο assign3.tar.gz).