Contenu connexe Similaire à オペレーティングシステム 設計と実装 第3版(20101211) Similaire à オペレーティングシステム 設計と実装 第3版(20101211) (20) Plus de Ryousei Takano (20) オペレーティングシステム 設計と実装 第3版(20101211)2. MINIX
•
• Google Group
https://groups.google.com/group/minixReadingClub
7. MINIX
• 1987 MINIX 1: UNIX (v7) OS
• 8088 16bit
• 1997 MINIX 2
• 386 32bit
• v7 → POSIX.1 IEEE1003.1/ISO 9945-1
• 2006 MINIX 3 (book version MINIX 3.1.0)
8. OS
• OS
• CPU IO
• CPU
•
• OS
•
• OS
9. 1. fork, waitpid, exec, exit, ...
2. sigaction, sigreturn, kill, alarm, ...
3. creat, open, close, read, write, ...
4. mkdir, rmdir, mount, unmount, chdir, ...
5. chmod, chown, unmask, ...
6. time, stime, utime, times
10. OS
THE MULTICS
VM/370
exokernel
MINIX 3
13. • A New Hope:
• 1980 UNIX
• Mach Chorus Mach
• The Microkernel Strikes Back:
•
• L4 Exokernel
• Return of Virtual Machines:
•
• VMWare Xen
16. •
•
‣CPU
•
‣
• Peterson
• TSL
•
•
Mars Pathfinder’s Sojourner
17. • Peterson
• Dekker
• N
• Filter
• Lamport Bakery
• TSL
18. PERTERSON
int turn;
boolean interested[2];
do { do {
enter region
interested[0] = TRUE; interested[1] = TRUE;
turn = 0; turn = 1;
while (turn == 0 && interested[1]); while (turn == 1 && interested[0]);
/* critical region */ /* critical region */ leave region
interested[0] = FALSE; interested[1] = FALSE;
/* non critical region */ /* non critical region */
} while (TRUE); } while (TRUE);
0 1
19. TSL
• Test-and-Set Lock
• read
write read cmp 1
•
• ts (System/360)
• cas (68000, SPARC)
• xchg, cmpxchg (x86)
• ll/sc (MIPS), ldrex/strex (ARMv6)
20. • sleep&wakeup
• Semafore Semaphore
• P: down sleep
• V: up wakeup
•
•
•
•
• •
22. MINIX 3
4 init ...
3
(pm) (vfs) (vm) (inet) (rs)
TTY Ethernet
2 ...
(at_wini) (tty) (lance)
1 (kernel)
(system) (clock)
P.121
23. • boot monitor
•
init
• MINIX kernel
•
• init(8)
• /etc/rc
• service(8)
• /etc/ttytab getty (login)
24. • PM
•
• service(8)
• MINIX3
• C.Giuffrida, “We Crashed, Now What?,” USENIX HotDep’10
25. •
F4
• is kill
# cd servers/is
# vi dmp_kernel.c
# diff dmp_kernel.c.orig dmp_kernel.c
338c338
< ! printf("(%02u) %-7.7s %s %s %7d",
---
> ! printf("(%02u) %-7.7s %s %s %6d",
# make && make install
# kill 38
26. PS
PID TTY TIME CMD
(-4) ? 0h44 idle
(-3) ? 0:00 clock
(-2) ? 0:00 system
(-1) ? 0:00 kernel
5 ? 0:00 pm
7 ? 0:00 vfs
4 ? 0:00 rs
8 ? 0:00 memory
:
1 ? 0:00 init
:
122 co 0:00 sh
123 c1 0:00 getty
27. • MINIX3 book v3.1.0
ISO Appendix B
• MINIX3 book version (v3.1.0) current version (v3.1.8)
• http://www.minix3.org/doc/
28. /USR/SRC
include make world /usr/include
sys POSIX
minix MINIX 3 OS
ibm IBM PC
kernel
drivers
servers
29. • src/tools make
( http://wiki.minix3.org/en/DevelopersGuide/RebuildingSystem)
• /boot/boot:
• /boot/images:
• /sbin:
# cd /usr/src/tools
# make image
# make install
32. S kernel R
• send
( )
• send receive sendrec receive
•
S kernel R
receive
•
sendrec send
34. • priv
• ipc_to: IPC
• traps: IPC send receive sendrec notify
• pm vfs rs sendrec
sendrec send sendrec
pm vfs vm inet rs
drivers
kernel
35. sys_fork PM
sys_exec PM EXEC SP
sys_exit PM
sys_privctl RS
sys_irqctl driver
sys_devio driver I/O
sys_umap driver
sys_vircopy FS, driver
sys_physcopy driver
sys_getinfo all
P.208
36. FORK&EXEC
• UNIX PDP-7
• OS
TSS
• fork exec
• fork exec
• SDS 930 TSS
•
D.M.Ritchie, ”The evolution of the UNIX Time-sharing system,” 1979
37. • IDT
iretd
• CPU TSS SS ESP
stackframe_s
• stackframe_s
• iretd
•
38. 31 16 15 14 13 12 8 7 0
IA32
D
P P 0 0 1 0 1 4
L
31 16 15 0
TSS 0
IDTR
31 16 15 14 13 12 8 7 5 4 0
base limit 31..16 P
D
P
L
0 D 1 1 0 0 0 0 4
IDT
31 16 15 0
15..0 0
+
55 31 16 15 14 13 12
D
8 7 5 4 0
31..16 P P 0 D 1 1 1 0 0 0 4
L
31 16 15 0
15..0 0
DPL
33 SYS386_VECTOR P
D 1=32 0=16
5-2. IDT
5.12.
256
! "#$$
32 255
0 zero divide
! %&'
"#$$
! ()*)+)
39. IA32
SS SS
ESP ESP
EFLAGS EFLAGS
IRET pop
CS CS
EIP EIP
(Error Code) CPU push (Error Code)
• push
• push push
• IRET pop
41. _RESTART
struct stackframe_s (struct proc )
call save save jmp
SS SS k_stktop _restart
ESP ESP
EFLAGS EFLAGS
CS CS
EIP EIP
hwint_XX ret address (RETADR) hwint_XX ret address
EAX mov esp, k_stktop
ECX
save EDX
EBX save
ret jmp
ESP
hwint_XX ret _restart push
EBP
ESI
v3.1.8 EDI
DS ES
FS GS
struct stackframe_s
42. call save
SS SS
ESP ESP
EFLAGS EFLAGS
CS CS
EIP EIP
(Error Code) CPU push old EFLAGS
old CS
old EIP
_exception or
_errexception
C