ࡱ;  B  !"#$%&'()*+,-./0123456789:;<=>?@ADEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry  !r\V)䰱 PresentationStarImpress 5.0$oC=SfxDocumentInfo Libera Universit Internazionaln0hDaniel Pierre Bovet DU1h n0 Linux Kernel Info 0 Info 1 Info 2 Info 3 =U1d< TASK,0,1,H 3,0,100,1,Oh+'00 h t  189@"@&z6@$<ާ@'6Daniel Pierre Bovet Libera Universit Internazional%XOutdevItemPool 1   )     &'()*+,-./06789:;UVWXYZ[\]c !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstt      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefd;"0d#'(@wXXX'N@pZXX,'^@+2#XXXX&X.X6X>'x@{{IIXX X2XDXV'@iArrow ArrowddXXXS'@rArrowddlineendlineend@XXX_X'.@,XXX'F@,o*XXXX&X.'@.XX'@QX@qX@X@X@X@X@ X@'X'@MXX' @̙{{IIaaXX X2XDXVXhXzX'6@Y 22ddX'(@ X'"@ BMvv(@@SD@x^SI 0 s\ z 46ZBn8x)1̔.<觔B+̄ ޢ40:prf |q]~+H~|WFMbP@aoCē[ȡz6~U{߃XFXNXVX^XfXnXvX~XXXXXXXXXXXXKK@D XX(L @bMM"@ XXNN"@ XXOO"@{ XXPP"@{ XXQQ(@B XXXRR@lXSS.@GXXXTT @UU@XXVV(@XXXWW @2XX @HYY @^ZZ @t[[ @\\ @]] @__ @`` @aa @bb @cc @$dd @:ee @P @f @| @ @ @ @ @'@@''''''%'*'6''' ''' ''' '''''' ''''''' ''''''$''''''$''''''''''''''''''''''''''' ''XX&X,X2XJXVXbXnXzXXXXXX:XRXjXpXXXXX0X6X<@@''E''%''%'''''''' <'' '' $' '' ''''          'XX X&X,X>XPXbXtXXXXXXXX**F@,*+XXXX X&X,77@ <,,%,,%,,,, $XXXX&X2X>XDXPXVX\HH@"+'Y+''+*+'+- @'A'+' ' ' +'' +''XXX X&X8X>XDXPXVX\XtXXXXff2f@+$# JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV[QQVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV $JJKK # JJKKMMNNOOPPQQUUVV  JJKKMMNNOOPPQQUUVV  JJKKMMNNOOPPQQUUVV  JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJ KKMMNNOOPPQQUUVV JJ KKMMNNOOPPQQUUVV JJ KKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJ KKMMNNOOPPQQUUVV JJ KKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVVJJ JJ KKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVV JJKKMMNNOOPPQQUUVVJJJJKKSSUUVV JJKKMMNNOOPPQQUUVV  JJKKMMNNOOPPQQUUVV!JJKK"JJ#JJKK$%QQVV& JJKKMMNNOOPPQQUUVV'JJKKRR(JJKKSSUUVV)JJKKSSUUVV*JJKKXXJXXXXXXRXXXXXTXXXXDXXXX4XpXXX$X`XlXXX X,XPXXXXXXXXLXdXX@#XB4A{4TrP~+Y 8 V t , K i % S  7 U s !O} /i3I_u%;Qg}c?# P%h>EditEngineItemPool H&6f80^g*=*@ {PTZ,StarBats ZZ "X,StarBatsN -",StarBatsN -",StarBatsN -"` ` ,StarBatsN -" ,StarBatsN -",StarBatsN -"hh,StarBatsN -",StarBatsN -",StarBatsN -"pp,StarBatsN - ",StarBatsN -",StarBatsN -",StarBatsN -"` ` ,StarBatsN -" ,StarBatsN -",StarBatsN -"hh,StarBatsN -",StarBatsN -",StarBatsN -"pp,StarBatsN - Z+,StarBats K,StarBats d 3Times New Romand+,StarBats @,StarBats d,StarBats ,,d,StarBats d,StarBats d,StarBats dZ Z,StarBats d,StarBats d ,StarBats d,StarBats d,StarBats d,StarBats ddd,StarBats ddd,StarBats ddd,StarBats ddd,StarBats dddZ Z,StarBats d,StarBats d ,StarBats d,StarBats d,StarBats d,StarBats  d,StarBats d,StarBats d,StarBats d,StarBats dZZ,StarBats dZ ZS,StarBats d+H,StarBats K,StarBats dg 3Times New Romand+],StarBats @S,StarBats dS,StarBats dddS,StarBats dddS,StarBats dddS,StarBats dddZ 4 Z,StarBats t,StarBats d ,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats dZ  Z,StarBats t,StarBats d ,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats dZ  ZS,StarBats d+H,StarBats K,StarBats rg 3Times New Romand+],StarBats @S,StarBats dS,StarBats dS,StarBats dS,StarBats dS,StarBats dZ  Z,StarBats {{IIt,StarBats d ,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats d,StarBats dZXXXXX XXXcXXX!X% @P@P/XX@CRbFddddddxdddYFdddUxdddxYFddd ddd YD Fddd ddDd  ddDd<ddDd\ddDd|ddDd8ddDdXddDdxddDd!XX!X4XMX`XyXXXXXXXXX*X=<( n@ R@  XXXX X&X,X2X8X>XD (g@8V StarBats!"-T StarBats!Z@ StarBats!+K] StarBats!d StarBats!dTimes New Roman{!d StarBats{!+@ StarBats{!ddd StarBats{!d + StarBats!d  StarBats!r {{II StarBats!t  StarBats!t  StarBats!tXXGXXXX+XkXXXXOXXX@'@XdddddXddddTdddYcddHdddHddddYH ddHd dddY ddd ddddddg dddg ]ddd]SdddSddHdddd dddg ddd]dddSXX!X4XGX`XsXXXXXXXXX*X=XPXcXvXA'@ X dddddddd dd dd dd dd dd  dd0ddNddXXX&X2X>XJXVXbXnXzX1'@KYdX+'(@wY.XXX' @p[ , , , , ', 1, ;, tE, `O, LY, 8c, $m,  3, , , #, -, 7, A, K, U, _, ki,  , , , , ), x3, d=, PG, , G, Q, [,  q, ], I, 5%, !/, 9, B, L, V, XXgXX XVX!'J@[ {{IIXXX&X2' @y\QTimesTimes New Roman StarBatsGaramond( StarbatsZ CourierTimesXXX8XKX^XqX'@7]Od Nd 4d d xd {d d d hd d <id d d Nd XXX"X,X6X@XJXTX^XhXrX|XX?( @]'@]XX'@]XX'@]X'@^TXX'@7^X'@V^X%'@w^dXS' @^"' @^' @^@^XW*m**/,,0222/3455A6717Y777778'8=8S8i8Pcg* "XX,StarBatsN -",StarBatsN -",StarBatsN -"` ` ,StarBatsN -" ,StarBatsN -",StarBatsN -"hh,StarBatsN -",StarBatsN -",StarBatsN -"pp,StarBatsN - ( StarBats!"-!''Times'Od 08s2 +JvStandardStandard%'''''''''''''''+;(,,--..g* (@'A'1'+''!'''''''''%'Object with arrowStandardObject with arrow'''''''Object with shadowStandardObject with shadow+;(,,--..Object without fillStandardObject without fill'TextStandardText'' Text bodyStandard Text body'''Text body justfiedStandardText body justfied''+'First line indentStandardFirst line indent''g*@'TitleStandardTitle'''Title1StandardTitle1 '''+;(,,--..+''Title2StandardTitle2 ''+;(,,--..g*@'A'+''HeadingStandardHeading''A''Heading1StandardHeading1''A'''Heading2StandardHeading2''A''''Dimension LineStandardDimension Line'''''''Home~LT~Gliederung 1Home~LT~Gliederung 1''g*@' A'1'+''!''' ''''''%'Home~LT~Gliederung 2Home~LT~Gliederung 1Home~LT~Gliederung 2@'A' 1'+''!''' '''''%'Home~LT~Gliederung 3Home~LT~Gliederung 2Home~LT~Gliederung 3@'A' 1'+''!''''''''%'Home~LT~Gliederung 4Home~LT~Gliederung 3Home~LT~Gliederung 4@'A' 1'+''!''''''''%'Home~LT~Gliederung 5Home~LT~Gliederung 4Home~LT~Gliederung 5@'A' 1'+''!''''''''%'Home~LT~Gliederung 6Home~LT~Gliederung 5Home~LT~Gliederung 6@'A' 1'+''!''''''''%'Home~LT~Gliederung 7Home~LT~Gliederung 6Home~LT~Gliederung 7@'A' 1'+''!''''''''%'Home~LT~Gliederung 8Home~LT~Gliederung 7Home~LT~Gliederung 8@'A' 1'+''!''''''''%'Home~LT~Gliederung 9Home~LT~Gliederung 8Home~LT~Gliederung 9@'A' 1'+''!''''''''%' Home~LT~Titel Home~LT~Titel''QQg*@'A'1'+''!''' ''''''%'Home~LT~UntertitelHome~LT~Untertitel''QQg*@'A'1'+''!''' ''''''%'Home~LT~NotizenHome~LT~Notizen''g*@'A' 1'+''!'''''''''%'Home~LT~HintergrundobjekteHome~LT~Hintergrundobjekte+;(,,--..Home~LT~HintergrundHome~LT~Hintergrund4'''''''''          +;(,,--..//00112233445566TitleTitle@SubtitleSubtitle@Background objectsBackground objects@ Background Background@NotesNotes@ Outline 1 Outline 1@ Outline 2 Outline 1 Outline 2@ Outline 3 Outline 2 Outline 3@ Outline 4 Outline 3 Outline 4@ Outline 5 Outline 4 Outline 5@ Outline 6 Outline 5 Outline 6@ Outline 7 Outline 6 Outline 7@ Outline 8 Outline 7 Outline 8@ Outline 9 Outline 8 Outline 9@(\P\D\ f p  v * 62^Cv Linux KernelDrMdL=JoeMn0=U1bDU1hDU1lODrLy LAYER_LAYOUTDrLy LAYER_BCKGRNDDrLy LAYER_BACKGRNDOBJDrLyLAYER_CONTROLSDrLy!LAYER_MEASURELINESDrMP'JoeMjJjDrML DrOb<SVDr&qfz!&DrOb<SVDr&(fB&DrOb<SVDr&qCz!VDrOb<SVDr&(CBVDrXXgg fHome~LT~GliederungDrMPyJoeM8cjJDrML DrObSVDr&8cjJ'Home~LT~Hintergrund8cjJDrObSVDr&U^WoStandardKVDrObSVDr&"xX! Home~LT~Titel"xXpxV4B1[#Click to edit the title text format Home~LT~Titel<( (@'DrObISVDr& 1^>(Home~LT~Gliederung 1 1^> xV4B1 %Click to edit the outline text formatHome~LT~Gliederung 1<( (@'Second Outline LevelHome~LT~Gliederung 2 <( (@' Third LevelHome~LT~Gliederung 3 <( (@'FourthOutline LevelHome~LT~Gliederung 4<( (@'Fifth Outline LevelHome~LT~Gliederung 5<( (@'Sixth Outline LevelHome~LT~Gliederung 6<( (@'Seventh Outline LevelHome~LT~Gliederung 7<( (@'Eighth Outline LevelHome~LT~Gliederung 8<( (@'Ninth Outline LevelHome~LT~Gliederung 9<(  ( DrXXHomegg ^Home~LT~GliederungDrMPsJoeMjJjDrML DrObuSVDr&jJjStandardjJjDrObSVDr& k2~@_#Home~LT~Notizen k2~@_mxV4B1XClick to edit the notes formatHome~LT~Notizen<( ( @'DrObSVDr&Y . >.! Home~LT~Titelk @ =m.dxV4B1OClick to move the slide Home~LT~Titel<( (@'DrXXHomegg VHome~LT~GliederungDrPgcJoeMjJjDrML8DrMD,DrXXgg FHome~LT~GliederungDrPgyJoeM8cjJDrML8DrMD,DrObSVDr& ]W  Standard ]W wxV4B1b!UnixForum Chicago - March 8, 2001Standard<( (@'+'!DrOb@SVDr&E1Ph; StandardE1Ph;xV4B1Daniel P. BovetStandard<( (@'+'' University of Rome "Tor Vergata"Standard<( (@'+'' DrObSVDr&q[9 ! Home~LT~Titelq[9 pxV4B1[INSIDE THE LINUX KERNEL Home~LT~Titel<( (@'+'DrXXgg JHome~LT~GliederungDrPgJoeMjJjDrMLdDrMD,DrMD,DrOb<SVDr&k @ =l.DrObSVDr& k2~@_# Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXDrObuSVDr&iJ jStandardiJ jgg NHome~LT~GliederungDrPg4JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xX~xV4B1iWHAT IS A KERNEL? (1/2) Home~LT~Titelg*<( (@'+'DrObWSVDr 1^>c]SDUDQ 0( Home~LT~Gliederung 1 1^>sxV4B1X( its a program that runs in Kernel ModeHome~LT~Gliederung 1<( (@'A' +'/ CPUs run either in Kernel Mode or in User ModeHome~LT~Gliederung 1<( (@'A' +'~ when in User Mode, some parts of RAM cant be addressed, some instructions cant be executed, and I/O ports cant be accessedHome~LT~Gliederung 1<( (@'A' +')*OPpq: when in Kernel Mode, no restriction is put on the programHome~LT~Gliederung 1<( (@'A' +'DrXXgg NHome~LT~GliederungDrPgJoeMjJjDrMLdDrMD,DrMD,DrOb<SVDr&k @ =l.DrObSVDr& k2~@_# Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXDrObuSVDr&iJ jStandardiJ jgg NHome~LT~GliederungDrPgJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xX~xV4B1iWHAT IS A KERNEL? (2/2) Home~LT~Titelg*<( (@'+'DrOb8SVDr 1^Cc]SDUDQ 0( Home~LT~Gliederung 1s 1^CTxV4B19H besides running in Kernel Mode, kernels have three other peculiarities:Home~LT~Gliederung 1<( (@'A' +'7 large size (millions of machine language instructions)Home~LT~Gliederung 1<( (@'A' +'Q machine dependency (some parts of the kernel must be coded in Assembly language)Home~LT~Gliederung 1<( (@'A' +'.28 loading into RAM at boot time in a rather primitive wayHome~LT~Gliederung 1<( (@'A' +'DrXXgg NHome~LT~GliederungDrPgJoeMjJjDrMLdDrMD,DrMD,DrOb<SVDr&k @ =l.DrObSVDr& k2~@_# Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXDrObuSVDr&iJ jStandardiJ jgg NHome~LT~GliederungDrPgv  JoeM8cjJDrML8DrMD,DrObSVDr&Z! Home~LT~TitelZxV4B1s!ENTERING THE KERNEL PROGRAM (1/2) Home~LT~Titelg*<( (@'+'!DrObSVDr R"GVd'SDUD 1/usr/local/office52/share/gallery/sounds/left.wavStandard R"GVd'yxV4B1d% when the CPU is running in User ModeHome~LT~Gliederung 1<( (@'DrOb SVDrv -T"<SDUD 1/usr/local/office52/share/gallery/sounds/left.wavG 4<DrOb#SVDro:*;SDUD 1/usr/local/office52/share/gallery/sounds/left.wav Standard4<;*;DrOb#SVDr*2Bq4SDUD 1/usr/local/office52/share/gallery/sounds/left.wav Standard4<*3B3DrOb#SVDr)\3,!<SDUD 1/usr/local/office52/share/gallery/sounds/left.wav Standard4B`5C`(#* ;*p4DrOb#SVDrA]3-C"<SDUD 1/usr/local/office52/share/gallery/sounds/left.wav StandardJ|=I<Bq4B;DrOb#SVDrIBo:T;SDUD 1/usr/local/office52/share/gallery/sounds/left.wav Standard4<B;ET;DrObnSVDrv l5;SDUD 1/usr/local/office52/share/gallery/sounds/left.wav  Standardv l5;exV4B1P User ModeStandardg* <( ( @' DrObSVDr&K<-dS2 StandardK<-dS2wxV4B1b Kernel ModeStandardg* <( ( @'   DrOb#SVDrQ;/[*8SDUD 1/usr/local/office52/share/gallery/sounds/left.wav Standard4<eO0G)7DrXXDrXXgg JHome~LT~GliederungDrPgJoeMjJjDrMLdDrMD,DrMD,DrOb<SVDr&k @ =l.DrObSVDr& k2~@_# Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXDrObuSVDr&iJ jStandardiJ jgg NHome~LT~GliederungDrPg>JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1s!ENTERING THE KERNEL PROGRAM (2/2) Home~LT~Titelg*<( (@'+'!DrOb_SVDr ^"+c]SDUDQ 0(Home~LT~Gliederung 1 ^"+{xV4B1f' When the CPU is running in Kernel ModeHome~LT~Gliederung 1<( (@'DrObzSVDr-^4ASDUD 1/usr/local/office52/share/gallery/sounds/left.wavDrOb#SVDr{\#s,OiDrXXDrObSVDr,MSDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav Standard,MsxV4B1^software interrupt --->Standardg* <( ( @' DrObSVDrg.|<g%SDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav &Standardg.|<g%~xV4B1i"I/O device requires attention --->Standardg* <( ( @' "DrObSVDrO$k0/SDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav StandardO$k0/vxV4B1atime interval elapsed --->Standardg* <( ( @' DrOb~SVDr00;SDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav Standard00;qxV4B1\hardware failure --->Standardg* <( ( @' DrObSVDr9[+SCSDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav Standard9[+SCsxV4B1^faulty instruction --->Standardg* <( ( @' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m. DrObSVDr& k2~@_#  "Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPghJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1r IS AN INSTRUCTION REALLY FAULTY? Home~LT~Titelg*<( (@'+' DrObSVDr 1^>c]SDUDQ 0( Home~LT~Gliederung 1? 1^> xV4B18 faulty instructions may occur for two distinct reasons:Home~LT~Gliederung 1<( (@'A' +' programming errorHome~LT~Gliederung 2g* <( ( @' A' +' - deferred allocation of some kind of resourceHome~LT~Gliederung 2g* <( ( @' A' +' -I the kernel must be able to identify the reason that caused the exceptionHome~LT~Gliederung 1<( (@'A' +'DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgHJoeM8cjJDrML8DrMD,DrOb SVDr&"xX! Home~LT~Titel"xXxV4B1{)EXCEPTIONS RELATED TO DEFERRED ALLOCATION Home~LT~Titelg*<( (@'+')DrObYSVDr ^pGc]SDUDQ 0( Home~LT~Gliederung 1 ^pGuxV4B1\7 two cases of deferred allocation of resources in LinuxHome~LT~Gliederung 1<( (@'A' +'+ page frames (demand paging, Copy On Write)Home~LT~Gliederung 1<( (@'A' +' floating point registersHome~LT~Gliederung 1<( (@'A' +'DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1mWHY IS A KERNEL SO COMPLEX? Home~LT~Titelg*<( (@'+'DrOb2SVDr 1^>c]SDUDQ 0( Home~LT~Gliederung 1m 1^>NxV4B13% large program with many entry pointsHome~LT~Gliederung 1<( (@'A' : must offer disk caching to lower average disk access timeHome~LT~Gliederung 1<( (@'A' m must support run nested kernel invocations --> must run with the interrupts enabled most of the time Home~LT~Gliederung 1<( (@'A' XYN must be updated quite frequently to support new hardware circuits and devicesHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXX    gg VHome~LT~GliederungDrPgJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xX{xV4B1fHW CONCURRENCY (1/2) Home~LT~Titelg*<( (@'+'DrOb SVDra](SDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wavR DrObWSVDr&a#!DrOb,SVDr& S   Standard S xV4B1 I/OStandardg* <( ( @' deviceStandardg* <( ( @' DrOb*SVDr&!.98~   Standard!.98~ xV4B1 I/OStandardg* <( ( @' APICStandardg* <( ( @' DrObSVDr&S\  StandardS\gxV4B1RCPUStandardg* <( ( @' DrObuSVDr&" Standard"DrObuSVDr&*>" Standard+*>"DrObuSVDr&Ma" StandardMa"DrObSVDr&M',EStandardI+*IDrObSVDr&3;+O#Standard/='M'DrObSVDr&<O#StandardM!>!DrObSVDr&k%O  Standardk%OoxV4B1ZIRQStandardg* <( ( @' DrObSVDr&A3J,  StandardA3J,oxV4B1ZINTStandardg* <( ( @' DrXXDrObSVDr&="[O](  Standard="[O](kxV4B1VINT ACKStandardg* <( ( @' DrXXDrObSVDr"(n_JSDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav(Home~LT~Gliederung 1"(n_JxV4B1m5 the I/O APIC polls the devices and issues interruptsHome~LT~Gliederung 1<( (@'K no new interrupt can be issued until the CPU acknowledges the previous oneHome~LT~Gliederung 1<( (@': good kernels run with interrupts enabled most of the timeHome~LT~Gliederung 1<( (@':DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg6JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xX{xV4B1fHW CONCURRENCY (2/2) Home~LT~Titelg*<( (@'+'DrObSVDrhQB\Fc]SDUDQ 0(Home~LT~Gliederung 1hQB\FxV4B1I Symmetrical MultiProcessor architectures (SMP) include two ore more CPUsHome~LT~Gliederung 1<( (@'A' C SMP kernels must be able to execute concurrently on available CPUsHome~LT~Gliederung 1<( (@'A' one service routine related to networking runs on a CPU while another routine related to file system runs concurrently on another CPUHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgdJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xX{xV4B1fLIMITING KERNEL SIZE Home~LT~Titelg*<( (@'+'DrObSVDrhB\8Hc]SDUDQ 0( Home~LT~Gliederung 1hB\8HxV4B1U try to distribute kernel functions in smaller programs that can be linked separatelyHome~LT~Gliederung 1<( (@'A' ) two approaches: microkernels and modulesHome~LT~Gliederung 1<( (@'A' ")0 Linux prefers modules for reasons of efficiencyHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg]JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXsxV4B1^ MICROKERNELS Home~LT~Titelg*<( (@'+' DrOb SVDr 1^Gc]SDUDQ 0( Home~LT~Gliederung 1H 1^G)xV4B1r only a few functions such as process scheduling, and interprocess communication are included into the microkernelHome~LT~Gliederung 1<( (@'A' other kernel functions such as memory allocation, file system handling, and device drivers are implemented as system processes running in User ModeHome~LT~Gliederung 1<( (@'A' ; microkernels introduce a lot of interprocess communicationHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXtxV4B1_ MODULES (1/2) Home~LT~Titelg*<( (@'+' DrOb/SVDr\dIc]SDUDQ 0( Home~LT~Gliederung 1j\dIKxV4B14_ modules are object files containing kernel functions that are linked dynamically to the kernelHome~LT~Gliederung 1<( (@'A' H Linux offers an excellent support for implementing and handling modulesHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg7JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXtxV4B1_ MODULES (2/2) Home~LT~Titelg*<( (@'+' DrObSVDr[:SDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wavDrObSVDr& J Standard JxV4B1bStandardg* <( (@' Standardg* <( (@' DrObuSVDr&- Standardz-DrObSVDr&StandardDrObSVDr&@StandardDrObSVDr&HStandardkkDrObSVDr& q Standard| q]xV4B1HpStandardg* <( (@' DrObSVDr&u $ Standardu $xV4B1tStandardg* <( (@' Standardg* <( (@' DrOb(SVDr&0: Standard0:xV4B1 object moduleStandardg* <( (@' mmm.oStandardg* <( (@' DrObuSVDr&@Am' Standard'B4(B46 &RDrObSVDr& I& StandardSA\<TA]<HD5%DrObSVDr& Q12 Standard] Q12>xV4B1#externalStandardg* <( (@'  referencesStandardg* <( (@' to kernelStandardg* <( (@' symbolsStandardg* <( (@' DrXXDrOb2SVDr>QMSDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav StandardD>QM%xV4B1 2thanks to the kernel symbol table, it is possible Standardg* <( (@' 2%to defer linking of an object module Standardg* <( (@' $Standard<( (@'DrXXgg JHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgJJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1kMODULES AND DISTRIBUTIONS Home~LT~Titelg*<( (@'+'DrObSVDr }]$Cc]SDUDQ 0( Home~LT~Gliederung 1( }]$C xV4B1v modern computer architectures based on PCI busses support autoprobe of installed I/O devices while booting the systemHome~LT~Gliederung 1<( (@'A' I recent Linux distributions put all non-critical I/O drivers into modulesHome~LT~Gliederung 1<( (@'A' b at boot time, only the I/O modules of identified I/O devices are dynamically linked to the kernelHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.!DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPggJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1w%SUPPORT TO CLIENT/SERVER APPLICATIONS Home~LT~Titelg*<( (@'+'%DrObSVDr Q^Ac]SDUDQ 0( Home~LT~Gliederung 19 Q^AxV4B1 scenario: many tasks executing concurrently on a common address space (for instance, a web server handling thousands of requests per second)Home~LT~Gliederung 1<( (@'A'  T problem: implementing each client request as a new process causes a lot of overheadHome~LT~Gliederung 1<( (@'A' A process creation/elimination are time-consuming kernel functionsHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.#DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgFJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXzxV4B1eTHE THREAD SOLUTION Home~LT~Titelg*<( (@'+'DrObmSVDrE[Dc]SDUDQ 0( Home~LT~Gliederung 1E[DxV4B1l, introduce a new kernel object called threadHome~LT~Gliederung 1<( (@'A' &,* each process includes one or more threadsHome~LT~Gliederung 1<( (@'A' I all threads associated with a given process share the same address spaceHome~LT~Gliederung 1<( (@'A' 8 CPU scheduling is done at the thread level (Windows NT)Home~LT~Gliederung 1<( (@'A' : thread switching is more efficient than process switchingHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.%DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg2JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXyxV4B1dTHE CLONE SOLUTION Home~LT~Titelg*<( (@'+'DrObZSVDr1z[Cc]SDUDQ 0( Home~LT~Gliederung 11z[CvxV4B1[x introduce groups of lightweight processes called clones that share a common address space, opened files, signals, etc. Home~LT~Gliederung 1<( (@'A' 28> CPU scheduling is done at the process level in a standard wayHome~LT~Gliederung 1<( (@'A' $ clones have been invented by LinuxHome~LT~Gliederung 1<( (@'A' h the npmt_pthread or the dexter module used by the Linux version of Apache 2.0 are both based on clonesHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.'DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgiJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXsxV4B1^ LINUX PEARLS Home~LT~Titelg*<( (@'+' DrObSVDr0  ]|Cc]SDUDQ 0(Home~LT~Gliederung 10  ]|CxV4B1` we selected in a rather arbitrary way a few pearls related to two distinct kernel design areas:Home~LT~Gliederung 1<( (@'A'  clever design choicesHome~LT~Gliederung 1<( (@'A'  efficient codingHome~LT~Gliederung 1<( (@'A' Home~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.)DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg~JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xX|xV4B1gCLEVER DESIGN CHOICES Home~LT~Titelg*<( (@'+'DrOb%SVDr\ A 6^=@c]SDUDQ 0(Home~LT~Gliederung 1`\ A 6^=@AxV4B1(( isolate the architecture-dependent codeHome~LT~Gliederung 1<( (@'A'  rely on the VFS abstractionHome~LT~Gliederung 1<( (@'A'  avoid over-designingHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.+DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg#  JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1-ISOLATE THE ARCHITECTURE-DEPENDENT CODE (1/2) Home~LT~Titelg*<( (@'+'-DrObSVDr9Z*SDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav( !Home~LT~Gliederung 19Z*xV4B1r Linux source code includes two architecture-dependent directories: /usr/src/linux/arch and /usr/src/linux/includeHome~LT~Gliederung 1<( (@'A' DrObESVDr 0_BSDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wavwDrObSVDr&~0.A6  Standard~0.A6`xV4B1KarchStandardg* <( ( @' DrObSVDr&=i!B  Standard=i!BuxV4B1`i386 .. s390 Standardg* <( ( @' DrObSVDr&$A 0N5  Standard$A 0N5cxV4B1NincludeStandardg* <( ( @' DrObSVDr&/=_B  Standard/=_BxV4B1pasm asm-i386 . asm-s390Standardg* <( ( @' DrObSVDr&_6C=Standard56 =DrObSVDr&D _6C=Standard56r]6g =DrObSVDr&=_6CC=Standard56rB6> =DrObSVDr&M_6SC=Standard5M6S =DrObSVDr&o65uA>Standardw5w6\RA56=DrXXDrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.-DrObSVDr& k2~@_#  "Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgRJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1-ISOLATE THE ARCHITECTURE-DEPENDENT CODE (2/2) Home~LT~Titelg*<( (@'+'-DrObSVDr0  ]Cc]SDUDQ 0( Home~LT~Gliederung 10  ]CxV4B1h the schedule() function invokes the switch_to() Assembly language function to perform process switchingHome~LT~Gliederung 1<( (@'A' D the code for switch_to() is stored in the include/asm/system.h fileHome~LT~Gliederung 1<( (@'A' Y depending on the target system, the asm symbolic link is set to asm-i386, asm-s390, etc.Home~LT~Gliederung 1<( (@'A'@AAYDrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m./DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1mRELY ON THE VFS ABSTRACTION Home~LT~Titelg*<( (@'+'DrObSVDr\|Ec]SDUDQ 0( Home~LT~Gliederung 1\|ExV4B1d VFS is an abstraction for representing several kinds of information containers (IC) in a common wayHome~LT~Gliederung 1<( (@'A' N standard operations on ICs: open(), close(), seek(), ioctl(), read(), write()Home~LT~Gliederung 1<( (@'A' 3 VFS associates a logical inode with each opened ICHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.1DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgpJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXvxV4B1aEXAMPLES OF ICs Home~LT~Titelg*<( (@'+'DrObSVDr ^Dc]SDUDQ 0( Home~LT~Gliederung 1 ^DxV4B1( files stored in a disk-based filesystemHome~LT~Gliederung 1<( (@'A' % files stored in a network filesystemHome~LT~Gliederung 1<( (@'A'  disk partitionsHome~LT~Gliederung 1<( (@'A' * kernel data structures (/proc filesystem)Home~LT~Gliederung 1<( (@'A'  RAM content (/dev/mem)Home~LT~Gliederung 1<( (@'A'  RAM disk (/dev/ram0)Home~LT~Gliederung 1<( (@'A'  serial port (/dev/ttyS0)Home~LT~Gliederung 1<( (@'A' DrXXDrObuSVDr&8cjJ Standard8cjJgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.3DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgPJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xX{xV4B1fAVOID OVER-DESIGNING Home~LT~Titelg*<( (@'+'DrObSVDr ]:Cc]SDUDQ 0(Home~LT~Gliederung 13 ]:CxV4B1: Linux scheduler is simple and works for most applicationsHome~LT~Gliederung 1<( (@'A' 6 no attempt to transform Linux into a real-time systemHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.5DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgwJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1mA GENERAL-PURPOSE SCHEDULER Home~LT~Titelg*<( (@'+'DrObSVDrhB\|Ec]SDUDQ 0( Home~LT~Gliederung 1hB\|ExV4B1t the scheduler of the System V Release 4 provides a set of class-independent routines that implement common servicesHome~LT~Gliederung 1<( (@'A' object-oriented approach based on scheduling class: the scheduler represents an abstract base class, and each scheduling class acts as a subclassHome~LT~Gliederung 1<( (@'A' zDrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.7DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgJoeM8cjJDrML8DrMD,DrObSVDr&"xX!# Home~LT~Titel"xXnxV4B1YA HEATED DISCUSSION Home~LT~Titel<( (@'+'DrObSVDr 1^DSDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav( Home~LT~Gliederung 1 1^DxV4B1 If the Linux development community is not responsive to the end user community, refusing to incorporate necessary functionality on the basis of aesthetics, then that community will abandon Linux in favor of something else. Is that really what you want? Home~LT~Gliederung 1<( (@'A'   Yes - If it turns into a pile of shit they'll abandon it even faster. I'd rather have a decent OS that works and does the right thing for most people than a single OS that tries to do everything and does nothing right (Alan Cox)Home~LT~Gliederung 1<( (@'A'  DrXXgg RHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.9DrObSVDr& k2~@_#  "Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg<JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXxV4B1nEXAMPLES OF EFFICIENT CODING Home~LT~Titelg*<( (@'+'DrObZSVDr M^i?c]SDUDQ 0(Home~LT~Gliederung 1 M^i?vxV4B1]9 retrieving the process descriptor of the running processHome~LT~Gliederung 1<( (@'A'  handling dynamic timersHome~LT~Gliederung 1<( (@'A' = catching invalid addresses passed as system call parameters Home~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.;DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg`JoeM8cjJDrML8DrMD,DrObSVDr&"uxX! Home~LT~Titel"uxXxV4B1>RETRIEVING THE PROCESS DESCRIPTOR OF THE RUNNING PROCESS (1/3) Home~LT~Titel<( (@'+'DrObSVDr}[Fc]SDUDQ 0( Home~LT~Gliederung 1'}[FxV4B1 classic solution: introduce an array current[NCPU] whose components point to the process descriptors of the processes running on the CPUsHome~LT~Gliederung 1<( (@'A' clever solution: store the process Kernel Mode stack and the process descriptor into contiguous addresses so that the value of the CPU stack pointer register (esp register) is linked to that of the process descriptorHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.=DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg  JoeM8cjJDrML8DrMD,DrObSVDr&WWL! Home~LT~TitelWWLxV4B1k'DESCRIPTOR OF THE RUNNING PROCESS (2/3) Home~LT~Titel<( (@'+'DrObSVDr(] c]SDUDQ 0(Home~LT~Gliederung 1(] xV4B1U Kernel Mode stack + process descriptor are stored in 2 contiguous page frames (8 KB)Home~LT~Gliederung 1<( (@'A' DrObSVDrB$m^ISDUD 1/usr/local/office52/share/gallery/sounds/left.wavXDrObuSVDr&J$+I Standard\$+IDrObuSVDr&d>)+H Standardv>+HDrObuSVDr&d%)+5 Standardv0%+5DrOb0SVDr&s.>QH Standards.>QHxV4B1fixed-length process Standardg* <( (@'  descriptorStandardg* <( (@' DrOb1SVDr&j.B$m^. Standardj.B$m^.xV4B1variable-length Kernel ModeStandardg* <( (@' stackStandardg* <( (@' DrObSVDr&Q-!;<StandardX/9DrObSVDr&0 5 Standard0 5exV4B1PespStandardg* <( (@'A' DrObSVDr&v46 StandardX55DrXXDrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.?DrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg7JoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel"xXtxV4B1_'DESCRIPTOR OF THE RUNNING PROCESS (3/3) Home~LT~Titel<( (@'DrObSVDr{$^7SDUD 1/usr/local/office52/share/gallery/sounds/left.wavDrObuSVDr&G+7 StandardY+7DrObuSVDr&,* 7 Standard- -*6DrObuSVDr&W*$ Standard-i*#DrOb0SVDr&*.,Q57 Standard*.,Q57xV4B1fixed-length process Standardg* <( ( @'  descriptorStandardg* <( ( @' DrOb1SVDr&!.{$^ Standard!.{$^xV4B1variable-length Kernel ModeStandardg* <( ( @' stackStandardg* <( ( @' DrObSVDr& t*Standardg)g(DrObSVDr&P # StandardP #exV4B1PespStandardg* <( ( @'A' DrObSVDr&-"% StandardA##DrXXDrObSVDr&s!Gt!~V'Standardks!Gt!~VLxV4B17MaskStandard<( (@'DrObSVDr9X$?SDUD 1/usr/local/office52/share/gallery/sounds/left.wavDrObhSVDr9 7=SDUD 1/usr/local/office52/share/gallery/sounds/left.wavStandard~9 7=_xV4B1J value of esp register:Standard<( (@'DrObcSVDrk>^:X$?SDUD 1/usr/local/office52/share/gallery/sounds/left.wav(Standardyk>^:X$?ZxV4B1E 0x00bdbad4Standard<( (@' DrXXDrObvSVDrv/9?,T7CSDUD 1/usr/local/office52/share/gallery/sounds/left.wavDrObSVDr&v/9?`7BStandardlv/9?`7BMxV4B18mask:Standard<( (@'DrObSVDr&_>u?,T7C)Standardy_>u?,T7CZxV4B1E 0xffffd000Standard<( (@' DrXXDrObbSVDr[D-THSDUD 1/usr/local/office52/share/gallery/sounds/left.wavDrObKSVDr[D_8`Hc]SDUDQ Standard[D_8`HsxV4B1^+starting address of process descriptor 0: Standard<( (@'DrOb2SVDr`>D-THc]SDUDQ )Standardy`>D-THZxV4B1E 0x00bda000Standard<( (@' DrXXDrXXgg JHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.ADrObSVDr& k2~@_#  "Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgDJoeM8cjJDrML8DrMD,DrObSVDr&"GxX! Home~LT~Titel"GxXvxV4B1aHANDLING DYNAMIC TIMERS (1/3) Home~LT~Titel<( (@'+'DrObSVDr<[Gc]SDUDQ 0( Home~LT~Gliederung 1,<[G xV4B1@ I/O drivers and user applications may create hundreds of timersHome~LT~Gliederung 1<( (@'A' ^ find an efficient way to check at each timer interrupt whether at least one timer has expiredHome~LT~Gliederung 1<( (@'A' trivial solution: maintain a list of timers ordered by increasing decaying times and start checking from the first element of the listHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.CDrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgJoeM8cjJDrML8DrMD,DrObSVDr&"GxX! Home~LT~Titel"GxXvxV4B1aHANDLING DYNAMIC TIMERS (2/3) Home~LT~Titel<( (@'+'DrOb0SVDr0 M ]Cc]SDUDQ 0(Home~LT~Gliederung 1k0 M ]CLxV4B15 clever solution (timing wheel): use percolation and maintain strict ordering only for the next 256 ticks (in Linux- i386, one tick = 10 ms)Home~LT~Gliederung 1<( (@'A'  use several lists of timersHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.EDrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgRJoeM8cjJDrML8DrMD,DrObSVDr&"GxX! Home~LT~Titel"GxXvxV4B1aHANDLING DYNAMIC TIMERS (3/3) Home~LT~Titel<( (@'+'DrObSVDr&$ :*^  Standard$ :*^uxV4B1`0 1 2 255Standardg* <( (@'  DrObSVDr&A[^  StandardA[^rxV4B1]0 1 2 63Standardg* <( (@'  DrObuSVDr&U i) Standardg W)DrObSVDr&|StandardLDrObSVDr&|'StandardLDrObSVDr&0|vStandardLSSDrObSVDr&%|X%StandardL5%5%DrObuSVDr&@A[ StandardRAZDrObSVDr&}D|DStandardLDDDrObSVDr&G|HStandardLGGDrObSVDr&K|aKStandardL>K>KDrObSVDr&V|VStandardLVVDrObuSVDr&*!$ Standard  Standard6>`xV4B1Ktv2:Standardg* <( (@' DrObSVDr e=SGSDUD 5/usr/local/bin/office52/share/gallery/sounds/left.wav Standard  e=SGxV4B1,when tv1 becomes empty, it is replenished byStandardg* <( (@' ,&emptying one slot of tv2, and so forthStandardg* <( (@' &DrXXgg JHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.GDrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPg%JoeM8cjJDrML8DrMD,DrObSVDr&"GxX! Home~LT~Titel"GxXyxV4B1d CATCHING INVALID ADDRESSES (1/4) Home~LT~Titel<( (@'+'DrObMSVDr 1^Cc]SDUDQ 0( Home~LT~Gliederung 1 1^CixV4B1NH many system calls require one or more addresses specified as parametersHome~LT~Gliederung 1<( (@'A' G invalid addresses passed as parameters should not cause a system crashHome~LT~Gliederung 1<( (@'A' O classic solution: perform a preliminary check before servicing the system callHome~LT~Gliederung 1<( (@'A' _ clever solution: defer checking until an exception caused by the invalid occurs in Kernel ModeHome~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.IDrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgsJoeM8cjJDrML8DrMD,DrObSVDr&"GxX! Home~LT~Titel"GxXyxV4B1d CATCHING INVALID ADDRESSES (2/4) Home~LT~Titel<( (@'+'DrObSVDr n]1Ec]SDUDQ 0( Home~LT~Gliederung 1X n]1E9xV4B1 l deferred checking is more efficient since system calls are issued most of the times with correct parametersHome~LT~Gliederung 1<( (@'A' if an addressing error occurs in Kernel Mode, the kernel must be able to distinguish whether it is caused by a faulty process or whether by a kernel bugHome~LT~Gliederung 1<( (@'A' L in the first case, the kernel sends a SIGSEGV signal to the faulty process Home~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.KDrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgSJoeM8cjJDrML8DrMD,DrObSVDr&"xX! Home~LT~Titel~"xX_xV4B1JClick to add title Home~LT~Titel<( (@'DrObSVDrb}\ Hc]SDUDQ 0( Home~LT~Gliederung 1b}\ HxV4B1 clever idea: force the kernel to use always the same group of functions when copying data to or from the process address spaceHome~LT~Gliederung 1<( (@'A' if an addressing error occurs while doing that, the CPU will signal the address of the instruction that contained an invalid address operand Home~LT~Gliederung 1<( (@'A' DrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.MDrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrPgwJoeM8cjJDrML8DrMD,DrObSVDr&"GxX! Home~LT~Titel"GxXyxV4B1d CATCHING INVALID ADDRESSES (4/4) Home~LT~Titel<( (@'+'DrObSVDr en]Bc]SDUDQ 0( Home~LT~Gliederung 1 en]BxV4B1 the kernel knows from the address of the faulty instruction that it belongs to one of the functions used to access data in the process address spaceHome~LT~Gliederung 1<( (@'A' b it can then execute some kind of fixup code: as a result, the system call returns an error codeHome~LT~Gliederung 1<( (@'A' "#-..bDrXXgg NHome~LT~GliederungDrPg|JoeMjJjDrML8DrMD,DrOb<SVDr&k @ =m.ODrObSVDr& k2~@_#   Home~LT~Notizen k2~@_axV4B1LClick to add notesHome~LT~Notizen<( ( @'DrXXgg VHome~LT~GliederungDrXXFGeneric PrinterSGENPRT PostScriptH`Tl`Tld,,lprdefault_queueSGENPRT DrVwP SVDr SVDr:SVDrSVDrALayout:SVDrSVDr#SVDr SVDr# SVDr0 SVDr1 SVDr3 SVDr4SVDr@SVDr SVDrD SVDrP SVDrQ DrHL DrHL DrHL O' Root Entry!r\V)䰱@CompObjEOle persist elements"SfxDocumentInfo uSfxWindowsSfxStyleSheetsvSummaryInformation(`StarDrawDocument3$C