CSC 660 Advanced OS Introduction CSC 660 Advanced

  • Slides: 46
Download presentation
CSC 660: Advanced OS Introduction CSC 660: Advanced Operating Systems 1

CSC 660: Advanced OS Introduction CSC 660: Advanced Operating Systems 1

Who am I? http: //www. nku. edu/~waldenj 1 James Walden – Assistant Professor of

Who am I? http: //www. nku. edu/~waldenj 1 James Walden – Assistant Professor of Computer Science – waldenj@nku. edu – Interests: • • Software Assurance Information Security Programming Languages Network Security CSC 660: Advanced Operating Systems 2

Course Administration Web Site http: //www. nku. edu/~waldenj 1/classes/2006/spring/csc 660 Notes, readings, and assignments

Course Administration Web Site http: //www. nku. edu/~waldenj 1/classes/2006/spring/csc 660 Notes, readings, and assignments on web site. Assignment submission Send electronic submissions to waldenj@nku. edu Contact Information Email: waldenj@nku. edu Phone: (859) 572 -5571 Office Hours: MW 3: 00 -4: 00, R 3: 00 -4: 00 CSC 660: Advanced Operating Systems 3

Course Information Prerequisites CSC 560, CSC 601 Laboratory Facilities FH 102 VMWare image Textbooks

Course Information Prerequisites CSC 560, CSC 601 Laboratory Facilities FH 102 VMWare image Textbooks Linux Kernel Development, 2 nd edition, Robert Love, Prentice-Hall, 2005. Understanding the Linux Kernel, 3 rd edition, Daniel P. Bovet and Marco Cesati, O’Reilly, 2005. CSC 660: Advanced Operating Systems 4

Course Goals 1. A deep understanding of operating system principles. 2. A solid grasp

Course Goals 1. A deep understanding of operating system principles. 2. A solid grasp of how the Linux kernel works. 3. An understanding of Linux/POSIX programming interfaces. 4. Ability to read and understand a large base of legacy code. 5. Ability to reliably make modifications to a large code base. CSC 660: Advanced Operating Systems 5

Grading Grades are based on – Individual programming assignments. – Group projects. CSC 660:

Grading Grades are based on – Individual programming assignments. – Group projects. CSC 660: Advanced Operating Systems A B C D F 90 -100 80 -89 70 -79 60 -69 0 -60 6

Assignment Policy Available on web page. Your responsibility to check for announcements. Types of

Assignment Policy Available on web page. Your responsibility to check for announcements. Types of assignments Individual programming assignments. Group programming assignments. Late policy 20% penalty up to one week late 0 points given after one week late Submission format E-mail tar archive to waldenj@nku. edu. Tar archive must be named username-as#. tar CSC 660: Advanced Operating Systems 7

Topics A first look at four important questions: – What is the kernel? –

Topics A first look at four important questions: – What is the kernel? – What can we learn about a running kernel? – How is the kernel source structured? – How do we build the kernel? In lab, you’ll get an introduction to – The virtual development environment (Debian Linux under VMWare Player) – Building the kernel. CSC 660: Advanced Operating Systems 8

What is an OS kernel? Program that is always running. – Manages resources. –

What is an OS kernel? Program that is always running. – Manages resources. – Provides services. Layering – Layer between programs and hardware. – Layer between users (multiuser OS). – Layer between programs (multitasking OS). CSC 660: Advanced Operating Systems 9

What is an OS kernel? CSC 660: Advanced Operating Systems 10

What is an OS kernel? CSC 660: Advanced Operating Systems 10

Resource Management Allocation Allocates finite resources among competing processes. CPU, memory, disk, network Protection

Resource Management Allocation Allocates finite resources among competing processes. CPU, memory, disk, network Protection Prevents processes from interfering with each other. Reclamation Voluntary at runtime; automatic at termination. Virtualization Provides illusion of private unshared resources Timeshared CPU, Virtual Memory, Virtual Machines CSC 660: Advanced Operating Systems 11

What is the Linux kernel? Free open source UNIX-compatible kernel. Created by Linus Torvalds.

What is the Linux kernel? Free open source UNIX-compatible kernel. Created by Linus Torvalds. Developed by thousands across the world. Coordinated via linux-kernel mailing list. CSC 660: Advanced Operating Systems 12

Kernel History 0. 01 1. 0 1. 2 2. 0 2. 2 2. 4

Kernel History 0. 01 1. 0 1. 2 2. 0 2. 2 2. 4 2. 6 First version released by Linus (1991). First release (x 86 only) in 1994. Supports other CPUs (Alpha, MIPS) in 1995. SMP support, more architectures (1996). Efficient SMP, more hardware support (1999). LVM, Plug-n-Play, USB, etc. (2001). Scalability (embedded, NUMA, PAE, sched), kernel pre-emption, User-mode linux (2003). CSC 660: Advanced Operating Systems 13

Version Numbering: A. B. C. D A: Major version Changed twice: 1. 0 (1994),

Version Numbering: A. B. C. D A: Major version Changed twice: 1. 0 (1994), 2. 0 (1996) B: Minor version Even numbers are stable releases Odd numbers are development releases C: Minor revision Not so minor in 2. 6 as development continues. D: Bug-fix / security patch release First occurred with NFS bug in 2. 6. 8. 1 Official policy as of 2. 6. 11 CSC 660: Advanced Operating Systems 14

Kernel Versions mm: Andrew Morton tree New patches, almost ready for distribution. ac: Alan

Kernel Versions mm: Andrew Morton tree New patches, almost ready for distribution. ac: Alan Cox tree Distribution trees Red. Hat Mandrake Debian Gentoo, etc. CSC 660: Advanced Operating Systems 15

Identifying the Running Kernel > uname Linux > uname -r 2. 6. 10 >

Identifying the Running Kernel > uname Linux > uname -r 2. 6. 10 > cat /proc/version Linux version 2. 6. 10(jw@csc 660) (gcc version 3. 3. 5) #3 Sun Dec 25 10: 22: 50 EST 2005 CSC 660: Advanced Operating Systems 16

Investigating the Running Kernel: /proc ###: directory for each running process cpuinfo: processor information

Investigating the Running Kernel: /proc ###: directory for each running process cpuinfo: processor information devices: supported hardware diskstats: disk performance statistics meminfo: memory usage information modules: linux kernel modules net: directory of network information partitions: linux disk partitions swaps: swap files/partitions in use by kernel self: link to ### directory for current process CSC 660: Advanced Operating Systems 17

Process information > ls -al. F /proc/self dr-xr-xr-x 2 jw jw 0 -r---- 1

Process information > ls -al. F /proc/self dr-xr-xr-x 2 jw jw 0 -r---- 1 jw jw 0 -r--r--r-- 1 jw jw 0 lrwxrwxrwx 1 jw jw 0 -r---- 1 jw jw 0 lrwxrwxrwx 1 jw jw 0 dr-x------ 2 jw jw 0 -r--r--r-- 1 jw jw 0 -rw------- 1 jw jw 0 -r--r--r-- 1 jw jw 0 lrwxrwxrwx 1 jw jw 0 -r--r--r-- 1 jw jw 0 dr-xr-xr-x 3 jw jw 0 -r--r--r-- 1 jw jw 0 2005 -12 -29 2005 -12 -29 2005 -12 -29 2005 -12 -29 13: 46 13: 46 13: 46 13: 46 CSC 660: Advanced Operating Systems attr/ auxv cmdline cwd -> /proc/20041/ environ exe -> /bin/bash* fd/ maps mem mounts root -> // statm status task/ wchan 18

Process information > cd /proc/self > cat cmdline ; echo -bash > cat environ

Process information > cd /proc/self > cat cmdline ; echo -bash > cat environ | tr '' 'n' | head -8 ENV_SET=1 MANPATH=/usr/local/man: /usr/share/man PATH=/usr/ucb: /usr/bin: /sbin: /usr/local/bin TERM=xterm SHELL=/bin/bash EDITOR=vim VISUAL=vim PAGER=less > ls -l fd total 4 lrwx------ 1 jw jw 64 2005 -12 -29 13: 50 0 -> /dev/pts/3 lrwx------ 1 jw jw 64 2005 -12 -29 13: 50 1 -> /dev/pts/3 lrwx------ 1 jw jw 64 2005 -12 -29 13: 50 2 -> /dev/pts/3 CSC 660: Advanced Operating Systems 19

Obtaining the Kernel CSC 660: Advanced Operating Systems 20

Obtaining the Kernel CSC 660: Advanced Operating Systems 20

Prepatches and Snapshots Prepatches Alpha versions of the kernel, located in the testing/ subdirectory

Prepatches and Snapshots Prepatches Alpha versions of the kernel, located in the testing/ subdirectory of kernel. org. Snapshots Automatically created images of the kernel development tree. May not work or compile. CSC 660: Advanced Operating Systems 21

Obtaining the Kernel Select the kernel version you need 2. 6. 10 for our

Obtaining the Kernel Select the kernel version you need 2. 6. 10 for our course Download the kernel wget ftp: //ftp. kernel. org/pub/linux/kernel/v 2. 6/linux 2. 6. 10. tar. bz 2 Unpack the kernel tar –xjf linux-2. 6. 10. tar. bz 2 CSC 660: Advanced Operating Systems 22

Linux Source Layout CSC 660: Advanced Operating Systems 23

Linux Source Layout CSC 660: Advanced Operating Systems 23

Documentation Text files documenting various aspects of kernel Can be very useful. Not well

Documentation Text files documenting various aspects of kernel Can be very useful. Not well organized. Not always up to date. CSC 660: Advanced Operating Systems 24

arch Architecture dependent code. Subdirectories for all current archs (22 in 2. 6. 10)

arch Architecture dependent code. Subdirectories for all current archs (22 in 2. 6. 10) i 386 is subdirectory for x 86 architecture Contains architecture-dependent subdirs boot/ kernel/ lib/ mm/ CSC 660: Advanced Operating Systems 25

arch/i 386 boot/ crypto/ kernel/ lib/ mach-*/ math-emu/ oprofile/ pci/ power/ x 86 -specific

arch/i 386 boot/ crypto/ kernel/ lib/ mach-*/ math-emu/ oprofile/ pci/ power/ x 86 -specific boot code x 86 -optimized crypto functions x 86 -specific kernel core code x 86 -optimized library code x 86 sub-architectures FPU emulation code kernel profiling tool x 86 PCI drivers x 86 power management CSC 660: Advanced Operating Systems 26

drivers Hardware device drivers. Largest division of kernel code. Major subdirectories char/ block/ net/

drivers Hardware device drivers. Largest division of kernel code. Major subdirectories char/ block/ net/ scsi/ buses (mca/, nubus/, pci/, sbus/) CSC 660: Advanced Operating Systems 27

fs Virtual filesystem framework code. Subdirectories for actual filesystems. ext 2/ ext 3/ hfs/

fs Virtual filesystem framework code. Subdirectories for actual filesystems. ext 2/ ext 3/ hfs/ isofs/ ntfs/ proc/ ufs/ CSC 660: Advanced Operating Systems 28

include/asm-* Architecture dependent subdirectories. include/linux Headers needed by both kernel and user apps. User

include/asm-* Architecture dependent subdirectories. include/linux Headers needed by both kernel and user apps. User programs use /usr/include/linux Kernel parts guarded by #ifdef __KERNEL__ … #endif CSC 660: Advanced Operating Systems 29

init Kernel startup code version. c: kernel version banner; prints at boot. main. c:

init Kernel startup code version. c: kernel version banner; prints at boot. main. c: architecture independent boot code. See arch/i 386/boot for arch-dependent code. start_kernel() is entry point. CSC 660: Advanced Operating Systems 30

ipc System V UNIX IPC Interprocess Communication Facilities sem. c shm. c msg. c

ipc System V UNIX IPC Interprocess Communication Facilities sem. c shm. c msg. c semaphors shared memory messages CSC 660: Advanced Operating Systems 31

kernel Core kernel code. Scheduler sched. c Process Control fork. c, exit. c, signal.

kernel Core kernel code. Scheduler sched. c Process Control fork. c, exit. c, signal. c, wait. c Kernel module support kmod. c, module. c Other facilities dma. c, ptrace. c, softirq. c, spinlock. c, timer. c CSC 660: Advanced Operating Systems 32

lib Kernel cannot call standard C library. lib/ contains kernel’s own library routines Optimized

lib Kernel cannot call standard C library. lib/ contains kernel’s own library routines Optimized libraries found under arch/i 386/lib Examples inflate. c rbtree. c string. c vsprintf. c Unpacks kernel at boot. Red-black tree implementation. String-handling routines. Replacement for libc vsprintf(). CSC 660: Advanced Operating Systems 33

mm Memory management memory. c filemap. c Page table setup, page faults File memory

mm Memory management memory. c filemap. c Page table setup, page faults File memory mapping Allocation and Deallocation slab. c vmalloc. Slab allocator Kernel virtual memory allocator Paging and Swapping vmscan. c page_io. c swap. c Paging policies Low level paging I/O Swapping CSC 660: Advanced Operating Systems 34

net Low level networking protocols atm/, bluetooth/, decnet/ ethernet/ TCP/IP networking: ipv 4/ and

net Low level networking protocols atm/, bluetooth/, decnet/ ethernet/ TCP/IP networking: ipv 4/ and ipv 6/ ipv 4/icmp. c ipv 4/netfilter/*. c ipv 4/route. c ipv 4/tcp. c ipv 4/udp. c ICMP Netfilter firewall Routing code TCP UDP CSC 660: Advanced Operating Systems 35

scripts Kernel scripts for Building documentation Kernel configuration CSC 660: Advanced Operating Systems 36

scripts Kernel scripts for Building documentation Kernel configuration CSC 660: Advanced Operating Systems 36

Kernel Reading Online cross-referenced linux source tree http: //lxr. linux. no/source/ Build your own

Kernel Reading Online cross-referenced linux source tree http: //lxr. linux. no/source/ Build your own cross-referenced source tree cd /usr/src/linux-2. 6. 10 make tags vim –t tag Ctrl-] Ctrl-t goto definition of tag under cursor Return from goto tag CSC 660: Advanced Operating Systems 37

Quick Kernel Build 1. Configure make xconfig 2. Build make –j 3 bz. Image

Quick Kernel Build 1. Configure make xconfig 2. Build make –j 3 bz. Image 3. Build modules make -j 3 modules && make modules_install 4. Install cp arch/i 386/boot/bz. Image-VERSION cp System. map /boot/System. map-VERSION vim /boot/grub/menu. lst CSC 660: Advanced Operating Systems 38

Configuring the Kernel kbuild: the kernel build system Kernel configuration cp. config. save make

Configuring the Kernel kbuild: the kernel build system Kernel configuration cp. config. save make mrproper vim. config Backup old config file. Clean up from prior builds. Make configuration changes. Interfaces make config make menuconfig make xconfig make gconfig Sequential questions on cli Ncurses-based menu interface QT-based graphical interface GTK-based graphical interface CSC 660: Advanced Operating Systems 39

. config CONFIG_<NAME> options y Include in kernel n Don’t include in kernel m

. config CONFIG_<NAME> options y Include in kernel n Don’t include in kernel m Build as a kernel module (not for all items) # Linux kernel version: 2. 6. 10 CONFIG_X 86=y CONFIG_MMU=y CONFIG_UID 16=y CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_IOMAP=y # Code maturity level options CONFIG_EXPERIMENTAL=y CONFIG_CLEAN_COMPILE=y CONFIG_BROKEN_ON_SMP=y CONFIG_LOCK_KERNEL=y # General setup CONFIG_LOCALVERSION="" CSC 660: Advanced Operating Systems 40

Important Options Code Maturity Level Options Experimental: Allow alpha-quality drivers. Clean compile: May not

Important Options Code Maturity Level Options Experimental: Allow alpha-quality drivers. Clean compile: May not compile if set to “N”. Loadable Module Support Processor Type Use cat /proc/cpuinfo to determine. Device Drivers Use lspci to see what current kernel supports. Networking configuration items located under here. Filesystems Kernel hacking Stuff for us: kernel debugging features. CSC 660: Advanced Operating Systems 41

Building the Kernel Top kernel Makefile Reads configuration from. config. Updates include/linux/version. h Sets

Building the Kernel Top kernel Makefile Reads configuration from. config. Updates include/linux/version. h Sets symlink include/asm to our architecture. Builds include/linux/autoconf. h Builds include/linux/config. h Invokes make –f scripts/Makefile. build obj=subdir for each subdirectory CSC 660: Advanced Operating Systems 42

Building the Kernel In each subdirectory, Makefile. build reads the Makefile in that subdirectory.

Building the Kernel In each subdirectory, Makefile. build reads the Makefile in that subdirectory. Subdirectory Makefiles define obj-y obj-m Object files to build into kernel Object files to build into modules Example from sched/Makefile obj-y = sched. o fork. o panic. o … obj-$(CONFIG_SMP) += cpu. o spinlock. o obj-$(CONFIG_UID 16) += uid 16. o obj-$(CONFIG_MODULES) += module. o CSC 660: Advanced Operating Systems 43

Installing the Kernel Copy the kernel to /boot cp arch/i 386/boot/bz. Image -VERSION Copy

Installing the Kernel Copy the kernel to /boot cp arch/i 386/boot/bz. Image -VERSION Copy kernel symbols map to /boot cp System. map /boot/System. map-VERSION Copy modules to /lib/modules/VERSION make modules_install Modify the boot loader to boot new kernel. vim /boot/grub/menu. lst CSC 660: Advanced Operating Systems 44

Configuring the Bootloader is amall program residing on MBR. BIOS loads MBR and starts

Configuring the Bootloader is amall program residing on MBR. BIOS loads MBR and starts program. Bootloader copies rest of code from disk, then runs. GRUB: GRand Unified Bootloader Configuration in /boot/grub/menu. lst Example GRUB stanza: title Ubuntu, kernel 2. 6. 10 -5 -386 root (hd 1, 0) kernel /boot/vmlinuz-2. 6. 10 -5 -386 root=/dev/hde 1 ro quiet splash initrd /boot/initrd. img-2. 6. 10 -5 -386 savedefault boot CSC 660: Advanced Operating Systems 45

References 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Daniel P. Bovet

References 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Daniel P. Bovet and Marco Cesati, Understanding the Linux Kernel, 3 rd edition, O’Reilly, 2005. Robert Love, Linux Kernel Development, 2 nd edition, Prentice-Hall, 2005. Kwan Lowe, Kernel Rebuild Guide, http: //www. digitalhermit. com/linux/Kernel-Build-HOWTO. html, 2004. LWN, “Another Look at the New Development Model, ” http: //lwn. net/Articles/94605/, 2004. Joseph Pranovitch, Wonderful World of Linux 2. 2, http: //kniggit. net/wwol 22. html, 1999. Joseph Pranovitch, Wonderful World of Linux 2. 4, http: //kniggit. net/wwol 24. html, 2001. Joseph Pranovitch, Wonderful World of Linux 2. 6, http: //kniggit. net/wwol 24. html, 2003. Claudia Rodriguez et al, The Linux Kernel Primer, Prentice-Hall, 2005. Andrew S. Tanenbaum, Modern Operating Systems, 2 nd edition, Prentice. Hall, 2001. Linus Torvalds and David Diamond, Just For Fun: The Story of an Accidental Revolutionary, Collins, 2001. CSC 660: Advanced Operating Systems 46