HOME > 게시판 > 공지사항
게시판| 공지사항
 
작성일 : 13-07-10 22:44
"리눅스커널개발과정" 교육 오픈
 글쓴이 : 최고관리자
조회 : 5,108  

안녕하세요. 회원여러분..
긴시간 노력의 결실로 드디어.. 고건교수님의 "리눅스커널개발과정"강의를 온라인으로 오픈하게 되었습니다.

이 강좌는 30년 넘게 서울대학교 컴퓨터공학과에서 LINUX와 UNIX 및 운영체제를 강의해오신 고건교수님의 “리눅스 커널 개발”과정으로서 리눅스관련 개발자들이나 임베디드관련 개발을 하시는 개발자들을 위한 과정입니다. 직접 리눅스커널소스를 직접보면서 하나하나 설명하기 때문에 리눅스 및 임베디드관련 개발에 입문하시는분들이라면 반드시 수강하셔야하는 과정입니다.


강의상세소개 => 바로가기

강사약력

성명 : 고건(高健 Kern Koh)
전공분야: 운영체제, 성능평가, UNIX, Linux
 
1967 - 1974 서울공과대학(학사: 응용물리학)
1974 - 1976 한국과학기술연구소 (KIST) 연구원
1976 ? 1981 미국, 버지니아 대학(박사: 전산학)
1981 - 1983 Bell Laboratories 연구원(미국).
1983 - 2011 서울대학교 교수
1996 - 1999 국가 정보화추진위원회 자문위원
1997 - 1998 한국정보과학회 부회장
2007 - 2011 한국공개소프트웨어활성화포럼 의장
2011 - 2013 전주대학교 총장
현재 공학한림원 회원


다음은 "리눅스커널개발과정" 강의소개입니다.

제01강 : Introduction to Linux Operating System

. Course Description
. Outline
. References
. Homework
. History of Unix
. Portability
. Terminology
. Software Concept
. Manual
. man cat
. man bash
. script
. Multi user vs Single user
. User Interface

제02강 : 쉘(Shell )

. File expansion characters
. Using the shell
. Process Hierachy
. multitasking
. pipe
. meta-characters
. Shell variable
. Aliases
. Revisit
. How an editor is born
. How sh is coded
. Environment variable
. History
. if Statement
. Exit code
. confition Statement
. condition string expression
. for Statement
. And more
. script File
. Start-up files

제03강 : Introduction to Kernel

. Kernel, Instruction
. function
. process
. Multi-user System --multiple shells
. Protection
. Main Memory
. Program execution
. OS Kernel

제04강 : Process Management

. Data Structure
. Functions
. Meta-data for Processs : PBC(Process Control Block)
. Observation
. To Create a new child process
. Kernel system calls for process management
. More on exec
. Booting the Kernel
. Process Hierarchy
. 6 run levels
. Thread
. Per Process Data (revisited)
. Back to Process : Process Termination
. exit() system call
. More on swtch()
. Program execution (revisited)
. Round-Robin Scheduling
. Concept of a "Process"
. IPC (Inter Process Communication)
. Pipe Example

제05강 : File System

. Kernel Data Structure for File
. Meta-data for a File
. Contiguous allocation
. open()
. Split Metadata for File
. Sharing Files
. Device switch table
. Kernel tables after open
. Kernel data structure for file
. Kernel Data Structure
. System file table
. Inode table
. In core Inode
. Balanced tree
. Directory file
. Kernel tables before open
. C functions for file
. System call vs Library call
. File vs fd
. Functions for file handling

제06강 : File System in Disk

. superblock
. Disk Space Management : Free Space
. Free Space Management
. Occupied space
. File System 4 parts (Boot block, Superblock, Inode list, Data block)
. Hardware level Formatting
. Bad block handling
. OS level formatting
. UCB FFS (Fast File System)

제07강 : Loading File into Memory

. Buffer
. Buffer Cache
. Delayed Write -- Pros & cons
. Crash
. fsck()
. Design Goal
. Modern systems
. Issues
. Back to buffer cache
. Allocate buffers to whom?
. Remember .. OS Kernel
. Kernel Data Structure
. mouting
. Mount Table Entry
. Relationship between Tables
. Data File System

제08강 : Internet

. Leased line
. joining the network
. Internet Policy

제09강 : Advanced Functions for File

. Two methods of accessing files
. Memory Mapped I/O
. readv(), writev()
. Non-blocking I/O
. I/O Subsystem
. File vs I/O
. Size of device driver code
. Caution : terminology
. Terminal I/O
. tty meta-data
. Split tty meta-data
. Accessing termios
. Echoing
. When to wake up program
. raw/canonical modes
. Raw mode
. Canonical mode
. Standard code for tty
. terminfo

제10강 : X Windows

. Linux Desktop Environments KDE & GNOME
. Multiple Windows
. IPC
. Root Window
. Child Windows
. X-Window Protocol
. GUI involve a log of drawing
. Protocol to minimize network traffic
. X-Window Processes
. 2 kind of processes
. Window Manager a special client process
. Role of Window Manager
. Window Manager
. X-server (Hardware side)
. 2 helping processes
. Window Programming
. Widgets (Internal Window inside child window)
. Window Hierarchy Tree
. Widget classes (Internal windows)
. widget class example
. allowed events on widget classes
. Event-driven programming
. Window Library
. Advanced window programming
. IDE (Intergrated Development Environment)
. Curses Library
. Sample curses functions
. Starting X window

제11강 : Developing Software on Linux

. HW technology
. Separate Compile
. C language revisited
. Reading
. Compiling
. Managing source codes
. Debugging
 . Disk Speed - Exception
 . SW Size
 . 100 programmers, 1 year
 . Compile Time
 . Typical Source Codes
 . Linux kernel Example
 . To compile correctly
 . Type of operand is not provided?
 . Address of operand not provided?
 . How do we divide source files?
 . You need extern
 . "Define" vs "Declare"
 . Source file
 . Symbol Table
 . Incomplete binding
 . Linking incomplete part(z)
 . Format of file.o after gcc
 . Three stages
 . You need object module
 . You need #iniclude
 . cpp & substitution
 . C language
 . Java language
 . Program Development

제12강 : Library

. Why we need library
. Symbol table
. Static library
. Convention - Static library
. tar, tar command, tar exercise
. Two Types of Libraries
. Comparision
. Backward Compatibility
. Name of Shared library
. a.out format
. Building Shared Library
. Upgrading Shared library

제13강 : Reading Code in Modular Process(MP)

. Modular Programming
. src (include, net, vm, sys...)
. Reading Codes
. Where is getc() function?
. Skip RE if you already know
. Regular expression : Metacharacters
. grep -- regular expression
. Shell Escape
. To find MAX
. Where is read() function?

제14강 : The AWK Language

. While reading each line from file Pattern matching, Action
. string examples
. Built-in arithmetic functions
. Range Patterns
. AWK is

제15강 : ctags cscope

. src (include, net, vm, sys...)
. Reading Codes... (read.c)
. Looking for identifier
. Where is read() function? index file
. ctags command
. Productivity
. More on Ctags
. Exuberant Ctags
. Linux Cross-Reference (lxr)
. cscope
. using cscope DB
. cscope & unwanted directories
. man find

제16강 : make

. If I change a source file
. How other files should change
. Optimal compile procedure
. dependency between files
. makefile -- 2 kinds of lines
. automatic generation of makefile
. typical content of makefile
. step taken by make
. Dmmy Trget
. Multiple targets ...
. Implicit
. Macro
. special dependencies
. directory hierarchy & make
. macro & coding style
. Makefile Macro & Software Quality
. Makefile Macro Conditional Compile

제17강 : Managing Source Files, CVS

. Typical Source Codes
. Everybody makes copy of files
. Many Releases
. Many people, Many Releases
. Number of Files to Manage
. Many people, releases, branches
. Typical System
. Terminoloty
. CVS Command
. CVS Lab Exercise
. creating master source files
. after creating master source
. files created for bookkeeping
. checkout
. Multiple Developers -- Status --
. Manual merge
. add/remove files
. Managing Branches
. Branches
. merge (branch & main tree)
. versions
. CVS command arguments

제18강 : Distributing Open Software RPM Command

. Standard format Object Descriptor
. Distribute Open Software?
. Challenges - Open Software Distribution
. Action at target platform...
. Install command
. Definition of "package" (3 type of files)
. Dependency between packages
. sample list of spec files
. content of spec file
. rpm
. rpm DB
. Using rpm command
. All installed packages in the system
. file X is from which packages?
. rpm and capability
. display information of package
. provides what?
. installing package from CD

제19강 : SW development productivity

. SW development productivity
. Repeated Primitive Operations
. SW development tools
. IDE (Integrated Development Environment)

제20강 : Shell, script Revisited (Advanced Shell)

. Shell
. Bash Shell features
. Bash Setup Files
. Command Substitution
. Command Group
. How sub-shell is created
. make - revisited
. Built-in Command
. I/O redirection
. Job control
. Conditional command execution
. In sum, sh is ...
. Many different kinds...
. script & specialty area
. Why script?

제21강 : 셀프복습

자체 복습강의시간입니다. 지금까지 학습하신 강의내용중에 이해되지 않는 강의는 다시 청취하시기 바랍니다. 추후에 셀프복습강의시간에 복습의 의미로 문제를 올려두도록 하겠습니다.

제22강 : Introduction to UNIX Kernel Source Code

. Procedures (Functions)
. Back to C: Complex Declarations
. structure type variables
. Chapter Three
. Pointers
. Back to C: Functions
. Back to C: Operator Precedence.

제23강 : Mutual Exclusion in UNIX Kernel

. multi-processor system
. Critical Section : 2 CPU's share a variable
. Interleaved execution
. Mutual Exclusion
. interrupt handler vs kernel
. disable//enable interrupt
. UNIX disk driver
. Race Condition in uni-processor

제24강 : Process Image (pdp-11 CPU)

. CPU registers
. pdp-11 CPU has 2 SP's
. Why pdp-11 needs MMU (Memory management unit)
. 2 sets of memory mapping registers
. Kernel has PCB for each application
. Kernel's PCB in detail
. Kernel's PCB layout
. scatter ppda in physical address space
. each proc[] points to application's ppda
. 2 sets of {PAR|PDR}
. Kernel's 7th PAR -> active user's ppda
. Process Image
. CPU state 3 types of CPU registers

제25강 : Context Switching in pdp/unix, savu() retu()

. savu()
. retu()
. Context Switching

제26강 : main()

. main() source
. retu(proc[j])
. retu(proc[k])
. ASM : Between kernel & User

제27강 : estabur()

. After copying patent's image...
. expand()
. estabur
. sureg
. CPU & Context Switch
. When does process switching occur?

제28강 : trap()

. Interrupt or Trap(or Exception)
. Assembler  first
. HW interrupt address
. 0511
. Assembler calls kernel C function trap()
. Parameters in stack
. 2673   (dev  sp   … pc  ps)

제29강 : fork()

. parent invokes fork()
. child starts from swtch/fork
. Overhead of fork()
. How does shell work

제30강 : exec()

. exec() source code
. Algorithm of exec()
. Passing arguments to child process
. Algorithm of exec()

제31강 : File System

. block device (rk disk)
. source code
. getblk()
. character device

제32강 : pipe file

. grep | who
. source code
. IPC

제33강 : Copy Semantics(Adding IO Devices)

. Which I/O devices are in System?
. devswtab[]
. PnP (Plug and Play) : Automatic detection of hardware devices
. Bus & I/O interface
. PnP (Plug & Play)
. Linux Kernel Module

제34강 : Interactive Terminal Device Driver

. Data structure for Characters
. Device initiates (top / bottom half)
. source code
. Application Process Initiates
. source code

제35강 : Reading Code

. Source code
. Reading Codes...
. src (include, sys, vm, net...)
. Repeated Primitive Operations

제36강 : 셀프복습

자체 복습강의시간입니다. 지금까지 학습하신 강의내용중에 이해되지 않는 강의는 다시 청취하시기 바랍니다. 추후에 셀프복습강의시간에 복습의 의미로 문제를 올려두도록 하겠습니다.

제37강 : Process (Data Structures)

. Data Structure change (1) : don't divide PCB for swapping
. Data Structure change (2) : Static -> Dynamic Allocation
. Array -> Liked list
. Data Structure change (3) : Multiple Structs for fork overhead
. Process Creation Overhead
. clone() system call - five flags -
. Linux "thread"
. PCB separates from kernel stack

제38강 : Process (Functions)

. A Process running on 3 CPU's
. Multiprocessor ruuning many Processes
. Get currently executing task
. Process Creation
. clone()
. How child is run first
. Parent's code
. Child Creation in Lion's Code
. Child Creation in Linux
. Why run child first
. PID
. kernel thread (KT)
. Process State
. Process Termination

제39강 : Scheduling

. Priority
. Timeslice
. Ready Queue per each CPU
. Priority Arrays Diagram
. Two Priority Arrays per CPU
. Recalculating timeslice
. Data Structure for Each CPU Scheduling
. Scheduling Algorithm
. Kernel mode task preemption & Critical Section problem
. Mutual Exclusion
. When can you preempt CPU from a task running in kernel mode?
. When does kernel preemption occurs?
. preemption points
. schedule()

제40강 : System Call

. Invoking a system call
. inside Wrapper Routine
. Compiling
. System Call Handling in Kernel
. Kernel system call function
. System Call Number
. Write a New System Call
. Alternative to New System Call
. System Call Implementation

제41강 : Interrupt (I)

. CPU & Interrupt
. Interrupt vs Exception
. Many I/O devices - Interrupt Controller
. Interrupt Controller
. PIC (Programmable Interrupt controller)
. Ack
. PIC History (Master/Slave PIC)
. Many IRQ lines per PIC
. Many devices per IRQ line
. Interrupt Handling in Multiprocessor
. Local & multi - APIC
. SMP (Symmetric Multiprocessing)
. IRQ distribution architecture
. IRQ distribution algorithm
. Dynamic IRQ distribution algorithm
. Asymmetric Multiprocessing
. Data Structure for Interrupt Handling
. Information about each IRQ line

제42강 : Interrupt (II) Functions for Interrupt Handling

. functions for interrupt
. do_RIQ()
. source code
. Three cases
. Case (1)
. Case (2)
. Case (3)
. State of IRQ.

제43강 : Interrupt(III) Race Condition

. Race Condition
. do-IRQ() - critical section
. ISR is not a critical section
. source code
. When & who calls do_softirq()?
. Urgent/non-urgent work in TCP/IP
. Which part is done in which module TCP/IP
. Top half & Bottom half (TCP/IP example)

제44강 : Bottom Halves

. Why Bottom Halves?
. Top half & Bottom half
. 3 Ways to Register Bottom Half Handlers
. Softirq
. Defining Softirq
. In Linux, only first few entries are used
. do_softirq()
. Invoking do_softirq()
. Concurrent Execution of Softirq
. Mutual Exclusion in Softirq Execution
. Tasklet
. Softirq vs Tasklet
. Data Structure for Tasklet
. Activating the Tasklet
. Work Queue
. Which bottom half should I use?
. Comparison 3 Bottom Half Handlers

제45강 : Kernel Synchronization

. How CPU performs X++
. Three Cases of Race
. (Case A) 2 CPU's sharing a variable
. SMP sharing variable
. (Case B) kernel base code vs interrupt handler
. (Case C) Process context Switch during System Call Execution
. Linux functions for Preventing Race
. Automic functions
. Lock
. Lock - serveral issues
. 2 kinds of lock
. Spin Lock
. Semaphores
. Which method to use : Spin vs Semaphore
. Where -- race conditions
. Advanced Issues
. Reader/Writer Spin Lock
. Seq Locks
. Comparison
. BKL : The Big Kernel Lock
. Completion Variables
. Barriers
. Timers and Time Management
. Terminology
. Hardware Clocks and Timers
. Timer Interrupt Handler
. The Time of Day
. Timers
. Delaying Execution
. Other Ways to Delay Execution

제46강 : Timers and Time Management

. Timers and Time management
. Terminology
. Hardware Clocks and Timers
. Timer Interrupt Handler

제47강 : Memory Management

. Background
. Smarter Space Management
. Heap Storage
. Heap - Variable size allocation
. malloc / free example
. Heap Storage
. External Fragmentation
. Compaction
. Performance Enhancement of Heap storage
. Smarter Space Management
. inode object, inode cache
. emptypartial / full slab free inode list
. Terminology
. Slab layer -- how it works

제48강 : Virtual File System (VFS)

. Many Different Implementation
. VFS Layer
. open files & mounted file systems
. Per Process Data Structures
. Linux VFS Standard Objects
. Superblock Object
. File Object
. Operations on File Object
. Inode Object
. Operations on Inode Object
. Dentry Object
. Where should we place dentry?
. Back to File object
. Dentry Object
. Operations on Dentry Object
. dentry cache lookup
. Dentry State
. Reading Linux Code
. What is in f_op?
. Superblock
. When you load (mount) superblock from disk
. Inode object
. who initializes Superblock?
. code reading & binding is dynamic

제49강 : Page Cache

. Terminology
. Buffer and Page
. Page Cache
. Objects that use pages
. Alternatively...
. address_space struct
. This page is being used for what?
. data structures for file
. read() system call
. struct page
. Page Cache
. Buffer, You still need it for metadata
. storing buffers in a page
. buffer lists
. Linux buffer cache
. bread() for metadata read
. History

제50강 : Block IO Layer

. Vectored I/O
. Reminder -- Lion's code
. readi()
. rkstrategy()
. Lion's code buffer_header
. Problems with Lion's code Buffer Head
. The bio structure
. Individual I/O Request
. Request Queue per Device
. I/O Scheduler
. 2 types of device

제51강 : Process Address Space

. Example of Address Mapping
. Memory Descriptor
. Reaching Memory Areas
. VMA (Memory Area)
. Other Fields
. Kernel thread - Memory Descriptor
. Paging
. Address Space & Page Table Size
. Address Space per Process
. Paging in Linux
. Page Mapping Table
. Functions for Process Address Space
. Allocating Memory Descriptor
. Destroying Memory Descriptor
. Manipulating Memory Areas

제52강 : Swapping & Flushing

. When pages are updated
. Page Frame Reclamation
. Writing out Dirty Pages
. pdflush Daemon
. Swapping out Anonymous Pages
. Linux swapping
. Swap Area in Disk
. Swapping Subsystem
. Swap in - Race Problem
. Swap out - Race Problem
. Linux Solution - Swap Cache
. Page Fault

 


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기