The Linux Kernel 

        Copyright  1996-1999 David A Rusling
        david.rusling@arm.com
        REVIEW, Version 0.8-3


1999 1 25

 å  Ŀ  ϴ ˰ ;ϴ  ҵ 
 ̴.  å α  Ŵ ƴϴ. ̺ٴ  
Ŀ  ϰ  ׷ ϴ,  ϴ ٺ 
 ۵ Ѵ.   ϰ ִ.  å   
̰, ΰ ȸ翡   ϰ ִ 2.0.33 ҽ 
 Ѵ. 

 å Ӱ   , Ư Ǹ Ѵٸ ϰų 
   ִ. ̿ ؼ ۱ǰ    ϱ 
ٶ. 


=====================================================================


 Ŀ


        Copyright  1999-      
        linux@flyduck.com
        http://linux.flyduck.com/tlk/
        Version 0.8-3,  0.1.0





1999 11 8

 å  ȭ Ʈ(Linux Documentation Project) ϳ 
David A Rusling  <The Linux Kernel>  ̴.  
 ǻ ȸ    Ͽ.   
Ӱ   ,  ̿  .  ܴ ڰ 
 ̼ Ծ࿡ . 

=====================================================================





 (Prefaces)

1. ϵ  (Hardware Basics)

2. Ʈ  (Software Basics)

3. ޸  (Memory Management)

4. μ (Processes)

5. μ  Ŀ (Interprocess Communication Mechanisms)

6. PCI

7. ͷƮ ͷƮ ó (Interrupt and Interrupt Handling)

8. ̽ ̹ (Device Drivers)

9.  ý (The File System)

10. Ʈũ (Networks)

11. Ŀ Ŀ (Kernel Mechanisms)

12.  (Modules)

13. μ (Processors)

14.  Ŀ ҽ (The LInux Kernel Sources)

 (Glossary)

=====================================================================




 ͳ  ̴.   л  Ʈ 
ؼ,     ִ ٸ  üٵ 
 ߴ.  鿡  ̴.  ¥ε
    ?  ȵǴ Ը Ʈ ȸ ġ 
󿡼,    "Ŀ"   Ʈ ̵ Բ 
  ?   ٸ   ٸ  ⿩ 
Ʈ  ̸鼭 ÿ ȿ  ?  
 ̰ ȿ ÿ  ġ ִ.  а 
 ϻ ǻ   ϰ ִ.  ִ 
ǻͿ  ϴ  ְ, κ ȸ鵵  
ϰ ִٴ  ǰ  𼱰 Ʋ  
ϰ ִ. ׵  Ʈ , Ʈ ϰ, 
̸ ,  ϵ  ϴµ Ѵ.   
峭 ƴϴ.   ȣ ϰ ִ, 
ߵǰ   ü̴.

  UnixTM ۱ Ž ö󰣴. 1969  
(Bell Laboraties)  ׷(Research Group) Ͽ  轼(Ken 
Thompson)  ִ PDP-7 ̿Ͽ Ƽ,Ƽ½ŷ ü
 ϱ ߴ.  Ͻ ġ(Dennis Richie) շϿ,
  ׷ ٸ  Բ н  ʱ . ġ
   MULTICS Ʈ ũ  ޾Ҵµ, н
 ̸ ü MULTICS   ̴. ʱ   
ڵ ۼϿ, °  ο α׷  C ٽ 
ۼϿ. ġ ü µ   C α׷ 
 ϰ . C Ľ  (Digital)  
 PDP-11/45 11/70 ǻͷ н ű  ־.  Ĵ 
 ϴ  簡 Ǿ. н ҿ  ǻ  
ַ ԵǾ,  κ ֿ ǻ ü ڽŵ 
   Ҵ.

 ܼ 屸  ش̾.  ۼ 
  (Linus Tovalds)    Ʈ
 ̴н(Minix). ̴н н ,  üμ 
 θ ̰ ־.  ̴н ɿ  
߰, ڱ⳪ Ʈ  ̸ ذϷ ߴ. ״ 
â  ͼ ü н 𵨷 ,  386 PC 
α׷  ߴ. ۾ ſ  ôǾ, ̿  
  ڽ     ϴ  ǻ
 Ʈ Ͽ ٸ л鿡 Ͽ. ׸Ͽ   
ȸ ַ ̰ Ǿ. Ʈ  ̿ ϴ  
Ÿ ߴ. ׵ ڽ    ذϴµ 
ߴ  ο Ʈ ߴ.  ʾ  
ü  ߰ Ǿ. ߿   н ڵ带 
  ٵ   ʴٴ ̴.  ǥ POSIX ǥؿ 
   ¥ ̴.  ޻߼ ķ긮 
ִ  Ʈ (Free Software Foundation)  GNU 
(GNU's Not UnixTM) Ʈ ,  GNU Ʈ
 Ѵ. 

κ       CD-ROM   ϳ
 ġϰ,   μ Ѵ.   
ڵ α׷ ۼϰų, ٸ   α׷ ϴµ 
 Ѵ.   ڵ  HOWTO  а, 
ý  κ  Ͽ    , 
ÿ   ʴ    ⵵ Ѵ. Ҽ
 ڴ ̽ ̹ , Ŀ Ͽ  Ŀ 
̸鼭      ̴. 
 𼭵, ׼ Ŀ ҽ  ߰  ޾Ƶδ. 
̰   ó 鸱  ְ,   
ڵ ϰ ˻ϰ  ڵ带 ڽ  Ŀο ߰Ѵ. 
׷ ,      Ŀ ҽ ۾ 
   տ   ִ  Ұϴ. 

κ  ڵ ü  ϴ,  κе 
 ¹ ư   ʴ´. ׷  ڼ 
캸  ü    Ǹ   
ٸ ̴ β ̴.  ҽ ſ   Ӹ 
ƴ϶   Ӱ 캼  ֵ  Ǿ ִ. 
̰ ۼڵ Ʈ  ۱ ϰ ,  
Ʈ  GNU  ̼   ҽ ڵ带 Ӱ 
  ֵ ϱ ̴. ׷  ҽ ڵ带 ó ĥ 
 ̵  ô ȥ ̴. kernel, mm, net 丮
  ,  ȿ  ڵ尡    ڵ 
  ΰ? ⼭ ʿ      
 а ϴ ̴. ̰  ڸ ٷ  å 
̱⵵ ϴ. 
  ü  ϴ Ȯ   ֵ 
ִ ̴. ٽ ϸ  ϰų ̸  , 
 ý ο  ϵ Ͼ  Ӹӿ ׷  
ֵ Ϸ ̴. ڴ ü   ϴ ó 
޾      ϰ ִ.    å 
д ڵ鿡  ٶ. 

 ó  踦  1994 Ĺ,  AXPμ 
 ý   ۾ ϴ  Ķ(Jim Paradis) 
湮 .  1984  ŢƮ(Digital Equipment Co, 
Ltd, ٿ DEC Ǵ ̶ ) ַ Ʈ  Ű 
о߿  Ծ, 1992⿡    ݵü μ 
 ð Ǿ.  μ ǥ  ݵüĨ  忡 
 Ͽ Ĩ Ǹϴ , üδ  AXP  
ũμ, DEC ܺο   AXP ý  
, Ǹϴ ̾. ó   ,  ݹ  
̸  Ǿ.    Ȱ,۾  ߴ.
  鼭   ü üӸ ƴ϶ װ 
 Ͼ ü ؼ    ˰ Ǿ.

׷  AXP  ϴ  ϵ ÷  
ϳ  ʴ´.   Ŀ κ  μ  
ýۿ     ý   þ ִ 
߼.  AXP, ARM, MIPS, Sparc, ׸ PowerPC   . 
  å 鼭 ̵ ÷ ߿  ̵ ̿Ҽ ־, 
   İ   ַ  AXP̰, 
ARM     ˰ ִ ̴.  å  
Ű Ʈ ϴµ  ϵ     ̴. 
 Ŀ ҽ 95%   ϴ  ϵ 
״ ǰ ִ.   å 95%   Ŀ߿ 
ϵ  κп  ̴. 


 ڼ

 å ڰ  ̳ 迡  ƹ  ʰ ִ. 
 ڰ  ٷ    ִٸ, ʿ κп 
ؼ  ϰ Ǹ ϴ´. ǻͿ ģϰ(Ƹ PC
̰), C α׷     ٸ,  
  ۿ  ̵ µ   ̴.


 å 

 å  α  Ŵ   ƴϴ.   
Ϲ ü, Ư   Ұ  ̴.  () 
"Ϲ Ϳ Ͽ Ư  ۾ϴ"  Ģ  
ִ.   忡 Ϸ Ŀ ý 並 ϰ 
,   󼼳 ٷ.

 Ϻη Ŀ ۵ ˰, Լ X()  ڷᱸ 
 ׸  Ű Լ Y() θٴ   
ʾҴ. ̷ ͵ ڵ带 о   ִ ̴.   ڵ
 ϰų ٸ  װ ؾ  ,  ĥǿ 
ڷᱸ ׸ Ϻ ϰ ߴ. ,   
 õ Ŀ ڷᱸ ׵ 踦  ڼϰ ߴ.

 忡 ٷ  Ŀ ý ׷, ̵ ٷ  
  ̴.  ̵   Ǿ ִ.  , 
 ޸𸮰  ϴ   ä μ  
  ̴. 

1 "ϵ " 忡  PC   ҰѴ. 
ü ڽ 밡 Ǵ ϵ ý۰ ϰ Ǿ 
ؾ ϸ, ϵ   ִ  񽺵 ʿ Ѵ. 
 ü  Ϸ õ ϵ ⺻ ͵ 
ؾ Ѵ. 

2 "Ʈ " 忡 ⺻ Ʈ Ģ Ұϰ, 
 C α׷  캻.  忡   
ü µ ϴ  캸, ü  ɵ 
 ҰѴ.

3 "޸ " 忡  ýۻ  ޸𸮿  
޸𸮸 ϴ  Ѵ. 

4 "μ"忡 μ ̸,  Ŀ  
 ϰ ϸ ϴ° Ͽ Ѵ.

μ ׵ Ȱ ϱ  μ ̿, ׸ Ŀΰ 
Ѵ.    μ (Inter-Process 
Communication, IPC)  Ѵ. ñ׳ΰ  ̵  Ϻ
̸, System V IPC(̰ ó  н  ̸  ٿ
 ̸̴) Ŀ  Ѵ. ̷ μ  Ŀ
 5忡 ϰ ִ.
                                                     
PCI(Peripheral Component Interconnect) ǥ    PC 
 μ Ȯϰ ڸҴ. 6 "PCI"忡  Ŀ 
ý۳ PCI  ġ ʱȭϰ ϴ  Ѵ.

7 "ͷƮ ͷƮ ó" 忡  Ŀ  ͷƮ
 ٷ 캻. Ŀ ͷƮ óϴ  Ϲ 
Ŀ ̽ ,  ͷƮ ó ϵ 
Űó  ٸ.

  ϳ  PC   ִ  ϵ 
ġ Ѵٴ ̴. 8 "̽ ̹" 忡  
Ŀ ýۿ ִ  ġ ϴ  Ѵ.

9 " ý" 忡  Ŀ   ý  
 ٷ Ѵ. ,   ý(Virtual File System, 
VFS)  Ŀ   ý   Ѵ.

Ʈŷ    ǹ̸  ̴ܾ.   
ͳ,   ̵ (World Wide Web, WWW) 깰̴.  
ڵ ڵ  ̿Ͽ  ̵, ڵ带 ȯϸ, 
 ü  ü Ʈŷ  䱸 ϱ  
ȴ. 
10 "Ʈũ" 忡   ˷ Ʈũ  
ϴ TCP/IP ѰϿ Ѵ.

11 "Ŀ Ŀ" 忡, Ŀ  κе ȿ Բ 
  ֵ  Ŀ ϴ  Ϲ ۾ Ŀ
  캻. 

12 "" 忡    ý۰ ɿҵ 
, ʿ   ε  ִ Ѵ. 

13 "μ"   õǾ ִ  μ鿡  
 Ұ  ִ.

14 "ҽ"  Ŀ Ư ɿ  ˰  ,  Ŀ 
ҽ ڵ  ؾ ϴ Ѵ.


 ǥ

 å  Ȱü ǥ  .(TXT ... --;;;)

serif ۲      ڰ  ״ Էؾ ϴ ɾ Ǵ  
                ǹѴ.

type ۲       ڷᱸ ڷᱸ ׸ Ų.

å ü ļ  Ŀ ҽ ִ ڵ忡   ǥð ִ 
( ,  忡  ִ ׵θ ִ ۻ). ̴ ڰ 
ҽ ڵ ü 캸  츦 ؼ̸, ϴ  
 /usr/src/linux 丮   ġ̴.   
foo/bar.c    ϸ /usr/src/linux/foo/bar.c  
̴.   ̶ (翬 ׷ ϰ) ҽ ڵ
 鿩ٺ  ġִ ̸, ڴ  å ҽ ڵ 
    ڷᱸ ǹ̸ ľϴ   ħ  
  ̴.


ϻǥ

ARM ARM Holdings PLC ϻǥ̴.

Caldera, OpenLinux, ׸ "C" ΰ Caldera, Inc. ϻǥ̴. 

Caldera OpenDOS 1997 Caldera, Inc.

DEC Digital Equipment Corporation ϻǥ̴. 

DIGITAL Digital Equipment Corporation ϻǥ̴. 

Linux Linus Torvalds ϻǥ̴. 

Motif The Open System Foundation, Inc. ϻǥ̴.

MSDOS Microsoft Corporation ϻǥ̴.

Red Hat, glint, ׸ Red Hat ΰ Red Hat Software, Inc. 
ǥ̴. 

UNIX X/Open ϻǥ̴. 

XFree86 XFree86 Project, Inc. ϻǥ̴. 

X Window System X Consortium Massachusetts Institute of 
Technology ϻǥ̴. 


 Ұ

 1957, ǪƮũȣ ߻Ǳ    Ϻο ¾. 
 п н ó ߴ. ű⼭  н Ŀΰ 
층  ٸ ü  ĥ   ߴ.  
⵵ Ʈ  Ե PDP-11 ý  ߴ. 
1982 ǻͰа ֿ  ,  Prime Computers 
(Primos) ٹϿ, 2  (Digital) Ű(VMS,Ultrix). 
п ϴ  پ  þ ߴµ,  5Ⱓ 
  StrongARM 򰡿 带 ϴ ݵü ׷쿡 ߴ. 
1998 ARM Ű ο  ߿  ü ϴ 
 Ͼ ׷ ð Ǿ.  ̵( Ƽ) ƺ 
¥ θ.

  忡     µ,  
  ູ ̴.      
,     ŵ(zealot) Ǿ ִ. ڵ 
⼭ ͽŵ(bigot) ƴ ŵ(zealot)    
ֱ ٶ. ڴ ' ŵ', ٸ ü  
 νϰ  Ⱦ   ڷ Ѵ.  
95   Ƴ (Gill)  ̷ ߴ. "츮  
ü Ƴ ü ϴ   ɰŶ ۵ ߾". 
Ͼ  ־   䱸 Ϻϰ ¾ . 
   ȸ翡    ִ ϰ ϱ 
 Ͼ ̸ ְ ü̴. ¥   ִ 
Ʈ κ    Ǹ, δ ̸ 
   ٿε ްų CDROM ġ  ִ. ¥ 
C++̳ Perl α׷ , Java  ϴµ   
ִ ٸ  ִ°!


 

켱 ð   å  ̸Ϸ ּ ޾   е
 Ѵ.      ̵ ּ  ԽŰ 
 , ̴ ּ ޴ ͺ  ູ ۾̾. ·  
 ̸ ּҸ ָ ڴ.

   å Ϻθ ǻ͸ ġµ   ִ  
Դ. ̿    翬 ""̴. ̴  Ư 
ٷ  å 뵵  ϳ̴. 
 ޴ л ߿  ٸ   ɾ  ˰
°.

å ݿ ؼ ϰ    (John Rigby) Ŭ ٿ
(Miachel Bauer) Ư 帰.   ƴϾٵ 
  ְ   ٷ ۽(Alan Cox) Ƽ Ʈ
(Stephen Tweedie)Ե 帰.    ̰ ϱ  
 (Larry Ewing)  ߴ. ,  å  
ȭ Ʈ(Linux Documentation Project, LDP) ޾ְ Ʈ 
÷ ׷ Ų(Greg Hankins) 帰.

=====================================================================

 


 å  ȭ Ʈ(Linux Documentation Project) ϳ
 David A Rusling  <The Linux Kernel>   
̴.   ǻ ȸ     
 Ͽ ̷.     ӿ  
Ŀ ϴ ,    Ŀ ϱ⿡  ̶ 
   ϰ Ǿ    ޾Ƽ ̷
 Ǿ.

 1  2    ̷, ǵ  
 츮鼭  ˱  ٵ,  ڿ Ϸ ߴ. 
׸  ʿ κп ؼ ǵ  ּ ޷ 
, å 뿡 ߰     ߰Ϸ ߴ. 

 Version 0.8-3  Ͽ, å ִ  Ʈ(REVIEW 
NOTE)  ״ ξ.  ù  0.1.0̰, ⿡ 
 Ͽ 1 14    ִ. ⿡ 
η  ,   ִ. 

     ְ   ƴ,  ϴ 
鿡   Ǹ Ѵ.  ۿ ߸ κ 
ְų,     linux@flyduck.com  
ֽð,     ݿϵ ϰڽϴ.    
ֽ http://linux.flyduck.com/tlk/   ִ. 

     ڿԼ    ߴ. 
ڿ    ѱ Ѵٰ ̾߱⸦   
 ʾұ ,  ȳ  Ϲ 㰡  
ϰ ִ. 

    David A Rusling     
 е鲲 帰. 

1999 11 8



=====================================================================

  


1  : 1999 7 30 - 1999 9 17

1 Խ   Ӱ   ִ · 
̷. ⿡  Ѵ  Ͽ,   
 ū  Ͽ. 

ȣ (flyduck) : flyduck@flyduck.com
ɸ (maro) : 
 (cat) : 
輺 : 

̿ܿ     ־. 

â (cbsuh)
Ź (scmoon)
 (gyong)
 (jinsuk)
 (soneus)
 (honest)
 (kiyoon)
ȫ漱 (liberty)
̽ (icarus)
̽ö (sclee)
̴ (donky)

 ۿ    . 

 (jhlee), Ȳ¿ (dolphin), , truejaws, PCK, , 
ȭ, ȫ


2  : 1999 9 18 - 1999 11 7

2    Ͽ,    κ 
þҴ. 2   ,  ٵ, ּ ٴ  
ԵǾ,  ׸ ߰ϰ   ġŰ  
߰Ǿ. 

ȣ (flyduck) : 1 - 8, 11 - 14
 (cat) : 9
ɸ (maro) : 10


Version 0.8-3,  0.1.0 : 1999 11 8

 1 14, ,   ϰ ִ. 

=====================================================================



1

ϵ 



<<ü   Ǵ ϵ ý۰  踦 
  ؾ Ѵ. ü ϵ   ִ Ư 񽺵
   ʿ Ѵ.  ü  Ϸ   
  Ǵ ϵ ⺻ ׵ ϰ ־ Ѵ.  忡 
  ϵ -  PC -    Ұϵ ϰڴ.>>

"Popular Electronics"  1975 1ȣ ǥ ׾(Altair) 8080
 ȭ    ۵Ǿ. ŸƮ ʱ Ǽҵ忡 
ϴ  Ī  ̸ ׾ 8080 , ̷  
  ĵ ܿ 397 ޷ ̸   ִ 
̾.  8080 μ 256 Ʈ ޸𸮿 ȭ Ű嵵 
  δ  ߰  ̴. ̰   ι
Ʈ(Ed Roberts) ڽ  ߸ǰ "ο ǻ(personal computer, 
PC)" ̸ ٿµ,   PC  ȥڼ   ִ 
ũ κ ǻ͸ Ű Ǿ.  ǿ  ſ 
  ϴ  AXP ý  PC   ִ.

 Ŀ ׾  ˾ƺҰ, ̸  Ʈ 
ۼϰ, ϵ ϱ ߴ. װ ̵ ʱ ڵ鿡 
־  - Ʈ ڿ  ǰ ȣǴ Ŵ ϰó 
 ýκ  -  ǹߴ. 
ڱ Ź    ִ ǻͶ  ο    
ڵ İ ū   Ǿ. ݾ ٸ  ϵ
 ߰, Ʈ Ŀ  ο  Ʈ 
  ־ ູߴ. ̰Ե  PC    
 1981  IBM PC ǥϰ 1982  ̸ 鿡 Ǹϱ 
 IBM̾.  8088 μ 64K ޸ (256K Ȯ
ߴ),   ÷ ũ ̺  80,  25 
ڸ ǥ  ִ CGA (Color Graphic Adapter)  ī带  
ǻʹ   ٸ    ſ  ȷȴ. 
̸ ̾ IBM 1983, ÿ ġǰ  10M Ʈ 뷮
 ϵ ũ ޸ IBM-XT Ҵ. ʾ (Compaq) 
  ȸ IBM PC  ǻ͵ ϰ ߰, 
 PC  ǻ ǥ Ǿ. 
  ǥ  ϵ ü ܰ   
ϰ , ̷  ݿ  ߴ. â 
PC  ý  Ư¡   ͵  PC ״ 
̾ Դ. ,    Ƽ CPU ä ý
, ó    8086 巹   Ѵ. 
  ߿  ҸԵ α׷ ¥ 
, ״   θ ޵Ǿ ־, ݵ  ϵ 
 80386 PC ߴ. 



+------------------------------------------------------------------+
|                                                                  |
|           +-------+ +-------+                                    |
|           | Power | | Power |                                    |
|           +-------+ +-------+     +---------------+              |
|                                   |///////////////|              |
|    +-----------------+            |///////////////|              |
|    |  Parallel Port  |            |///////////////|              |
|    +-----------------+            |/// C  P  U ///|              |
|  +-------+ +-------+              |///////////////|              |
|  |  COM1 | |  COM2 |              |///////////////|              |
|  +-------+ +-------+              |///////////////|              |
|                                   |///////////////|              |
|                                   +---------------+              |
|                                                                  |
|                                                                  |
|                                                                  |
|                     +-------------------+ +-------------------+  |
|                     +-------------------+ +-------------------+  |
|                     +-------------------+ +-------------------+  |
|                                  Memory SIMM Slot                |
|                                                                  |
|        +-----------------+                                       |
|        +-----------------+   PCI Slot                            |
|        +-----------------+                                       |
|      +---------------------------------+                         |
|      +---------------------------------+   ISA Slot              |
|      +---------------------------------+                         |
|      +---------------------------------+                         |
|                                                                  |
+------------------------------------------------------------------+

              ׸ 1.1 : A typical PC motherboard



PC ܰ ,  иϰ   ִ  ý ڽ 
Ű, 콺, ׸ ̴. ý ڽ ո鿡   
ư, ڸ ִ  ÷, ׸ ÷ ̺갡 
ִ.   κ ýۿ CD ROM ޷ְ,  ȣ
 ʿ ϴ    ̺굵  ̴. ̵ ġ 
ѰϿ ֺġ Ѵ. 

CPU ý ü ϱ , CPU ýۿ   
 ġ ƴϴ. IDE Ʈѷ  ֺġ Ʈѷ  
    ִ. PC ο (׸ 1.1) CPU(Ǵ 
ũμ Ѵ) ޸,  ISA PCI ֺġ Ʈѷ
   ִ   尡 ִ. IDE ũ Ʈѷ 
 Ʈѷ ý  ֱ⵵ ϴ. 


1.1 CPU

CPU(CPUٴ ũμ ̸  ϴ)  ǻ 
ý ٽ̴. ũμ ޸𸮿  а ̸ 
ν,  ϰ   ϰ,  帧 
Ѵ. ǻͰ  â⿡ ũμ ̷ ɵ 
  ġ ( ū ġ ġ) Ǿ ־.   
߾óġ(Central Processing Unit, CPU)  ߴ.  
ũμ ̵  ҵ  ſ  Ǹ  
ϳ ȸη  ִ.  å CPU, ũμ
(microprocessor), μ(processor)    ǹ̷
Ѵ.

ũμ 0 1   ͷ Ѵ.  0 1 
 ¿  ¸  ⽺ġ  ̴.  42 
10¥ 4 1¥ 2 ǹϴ ó,    ڰ 
2  Ÿ 2  ̴. ⼭ ̶  
ڸ  ϴ Ƚ Ѵ. 10 1 (101) 10̰, 10 
2(102) 10x10, 103 10x10x10 ̴.  0001  
1,  0010  2,  0011  3,  0100 
 4 شѴ.   42  101010,  2 + 8 + 32 
Ǵ 21 + 23 + 25̴. ǻ α׷ Ϲ ڸ Ÿ
µ   ٴ ٸ   Ѵ. 
  ڰ 16  Ÿ. ڴ 0 9 
Ƿ 10 15  A, B, C, D, E, F ǥѴ.  
 E  14̰,  2A  42(16¥ 2 + 10)
 ȴ. C α׷   տ"0x" ٿ Ѵ. 
  2A 0x2A .  å  ǥ Ѵ. 

ũμ , ,     "X Y 
ū?"     ִ.

μ   ܺ Ŭ  ȴ.  Ŭ ý 
Ŭ̶ ϸ,  Ŭ ޽  μ , 
Ŭ ޽ μ ־  ϰ ȴ.  ,  
  Ŭ ޽ ɾ ϳ óѴ. μ ӵ 
ʴ ý Ŭ Ƚ Ÿµ,   100MHz μ 
ʴ 1 Ŭ ƽ ޴´. ׷ μ ѹ Ŭ ƽ 
ϴ   ٸ , CPU  Ŭ ӵ ϴ 
 ߸ ̴.    Ȱٸ, Ŭ ӵ  
  μ̴. μ ϴ  ſ ܼ 
.   "޸ X ġ ִ   Y о鿩" 
 ̴. (register) ͸ ϰ  ϴµ 
ϴ ũμ ο ִ ̴.   
 ϴ  ߴϰ ޸ ٸ ġ ִ  ٸ ɾ 
ǳʶٰ ϱ⵵ Ѵ. ̷ ڱ׸   μ 1ʿ 鸸
  ʾﰳ ɾ   ְ Ͽ,  μ
   ɷ   ְ Ѵ. 

ɾ Ϸ  ɾ ޸𸮿 ; Ѵ.  
 ޸𸮿 ִ ͸ ϱ⵵ ϴµ,   ޸𸮿 
͸ ; ϸ, ͸  ϴ  ޸𸮿 ͸ 
ϰ ȴ. 

μ ִ  ũ ,  μ  
ٸ.  486 μ  AXP μ ٸ  Ʈ 
. 켱  ʹ 32Ʈ ũ  AXP ʹ 
64Ʈ̴. ׷ ü  μ̵  Ϲ  
Ϳ ̺   Ư  ͸ ´. 
κ μ   Ư   ͸  
ִ. 

     α׷ ī (Program Counter, PC) :  ʹ  
        ɾ ּҸ  ִ.   ɾ  
        ڵ Ѵ. 

       (Stack Pointer, SP) : μ ͸ ӽ÷ 
         ִ Ը ܺ RAM ؾ Ѵ.  ܺ
       ޸𸮿 ӽ÷ ͸ ϰ ٽ о  ִ ս
         ϳ̴. 밳 μ ÿ ͸ ְ(push)
       , ߿ ̸ ٽ  (pop) Ư ɾ  
       ִ.  "      (last in 
       first out, LIFO)"  Ѵ. ٸ ϸ, ÿ 
       ΰ  x y ְ,    y   
       Ǵ ̴. 

        μ   ڶ, ٸ μ ޸
        ϴ  Ʒ  ڶ. ARM μ
        ΰ  θ Ѵ. 

     μ  (Processor Status, PS) :  ɾ ϸ
          ִ.   " X  Y 
        ū?"  ϸ  Ǵ ƴϿ  
       . PS ʹ ̷ Բ, μ  ¸ Ÿ
        ٸ   ִ. ̷ , κ μ 
       Ŀ (Ǵ  )   ΰ ̻ 
       ۸带  ִµ, PS ʹ   忡 ִ
        Ÿ ִ   ִ. 


1.2 ޸(Memory)

 ýۿ ޸ з ü谡 , ٸ ũ ӵ  
޸𸮵  ü  ٸ  ġѴ. 켱   ޸
 ĳ ޸𸮷,  ״  ޸  ӽ÷ ϴ, 
ĳϴµ ϴ ޸̴. ̷ ޸𸮴 ӵ ſ  
 α , κ μ Ĩ ȿ ҷ ĳ ޸𸮸, 
׸  ߰ ĳ ޸𸮸  ִ.  μ 
ϳ ĳÿ ɾ ͸  , ɾ   
  ĳø  ͵ ִ.  AXP μ ΰ  ޸ 
ĳø  ִµ, ϳ Ϳ̰(D-ĳ), ٸ ϳ ɾ
̴(I-ĳ).  ĳ(B-ĳ)  ΰ Բ . 
  ĳ ޸𸮿  ſ   ޸𸮰 ִ. CPU Ĩ 
ִ ĳÿ ϸ  ޸𸮴  배 ̴

ĳÿ  ޸𸮴   ϰ ־ Ѵ (ġ). ٸ 
ϸ,  ޸𸮿 ִ  Ͱ ĳ ϳ ̻ ġ 
Ǿ  , ý ĳÿ ִ  ޸𸮿 ִ  ġ
ϵ ־ Ѵٴ ̴. ĳ ġ  κ ϵ 
,  κ ü  ȴ. ̷  ұ  
޼ϱ  ϵ Ʈ ϰ ؾ ϴ, ý
 ٸ ֿ ۾鿡 ־ . 


1.3 (Bus)

ý   ҵ   ý 
ȣ Ǿ ִ. 
ý     ҷ µ, ϳ ּ 
(address bus), ٸ ϳ  (data bus),  ϳ 
 (control bus)̴. ּ  ͸  ޸ ġ
(ּ) Ѵ.   ۵Ǵ ͸  , 
  ϴ.  CPU о ̰ų CPU   
ϴ. 
  ý ü Ÿ̹ ȣ  ȣ ϴ  
  ִ. 
   , ISA PCI  ֺġ ýۿ 
ϴ   ǰ ִ. 


1.4 Ʈѷ ֺġ

ֺġ ý  ̳ Ǵ 忡  ī忡 ִ Ʈѷ 
Ĩ  Ǵ, ׷ ī峪 ũ  ϴ ġ 
Ѵ. IDEũ IDE Ʈѷ Ĩ , SCSIũ SCSIũ 
Ʈѷ Ĩ  ȴ. ̵ Ʈѷ    , 
CPU ٸ Ʈѷ  Ǿ ִ.   ý 
κ ̵ ֿ ý ҵ ϱ  PCI ISA 
Ѵ. Ʈѷ CPU  ϳ μ̰, CPU 忡
 ȶ ̴. CPU ý ü ϴ ̴.

 Ʈѷ  ٸ, ڽ ϱ  ͸  
ִٴ  ϴ. CPU Ǵ Ʈ ̵  
͸ а   ־ Ѵ.  ʹ  Ÿ ¸ 
 ֱ⵵ ϰ, Ǵٸ ʹ Ʈѷ 带 ٲٴ  
  뵵 Ǳ⵵ Ѵ. CPU  ִ Ʈѷ 
  ּ   ִ. ̸Ͽ Ʈ ̽ 
̹ Ʈѷ ϱ  ͸   ְ ȴ. IDE 
  , ̴  ִ ̺긦 ε   
ֵ ش. ٸ  δ  ̽(׷ī尰)  
   ִ PCI  ִ. 


1.5 ּҰ(Address Space)

CPU  ޸𸮸 ϴ ý , CPU ٸ ϵ ֺ
ġ ϴ ʹ иǾ ִ. ϵ ֺġ ϰ 
ִ ޸  ѰϿ I/O ̶ Ѵ. I/O   ɰ 
 , а ̿   ʵ . 
CPU ý  ޸𸮿 I/O  ޸𸮿   , 
Ʈѷ  ý ޸𸮿     ̸, 
̰͵ CPU  ޾ƾ߸ Ѵ. 
ġ 忡 ,  ÷ ũ Ʈѷ Ѵٸ, ڽ 
 Ͱ ִ ּҰ(ISA)  , ý ޸𸮴  
 ̴. Ϲ CPU ޸  I/O  ϴµ 
ٸ ɾ Ѵ.  , "I/O  0x3f0 ּҿ  Ʈ
 о  X ϶"  ִ ̴. ̴ CPU 
I/O  ִ ֺġ ͸ а ν, ϵ ֺ
ġ ϴ  ״ ش. Ϲ ̴ ֺġ
(IDE Ʈѷ, Ʈ, ÷ ũ Ʈѷ ) Ͱ ִ 
I/O  PC  ߵ   ʿ  Ǿ ִ. 
I/O  ּ 0x3f0 Ʈ COM1    ϳ ּ
̴. 

 Ʈѷ  ͸ ý ޸𸮿 о ̰ų 
޸𸮷  ־  찡 ִ.  ͸ ϵũ 
ϴ 찡 ̷  ̴. 
 , DMA (Direct Memory Access,  ޸ ) Ʈѷ 
Ͽ ϵ ֺġ ٷ ý ޸𸮿   ְ 
Ѵ.  ̰  CPU   Ͽ ̷. 


1.6 Ÿ̸

 ü  ð  ʿ䰡 ֱ ,   PC 
RTC(Real Time Clock, ǽð Ŭ) Ư ֺġ  ִ. 
̰ Ȯ ð,  ð  ϴ ΰ  Ѵ. 
RTC  ü ͸  ־, PC    
Ѵ. ̰ PC ׻ Ȯ ¥ ð   ִ ̴. 
 Ÿ̸(interval timer) ü ߿ ۾  Ȯ
ϰ   ְ ش.


 : ȣ, , ̴, , , truejaws
 : ȣ

=====================================================================


2

Ʈ 



<<α׷̶ Ư ۾ ϴ ǻ ɾ ̴. 
  α׷    ǻ  ۼ  ְ, 
  C α׷ ó   ޾ ۼ  ִ. 
  ü ڰ Ʈ  μ   
  ׷ Ҽ ֵ ִ Ư α׷̴.  忡 
  ׷ ⺻Ģ ü ǥ ɿ  並 ϰ 
  Ѵ.>>


2.1 ǻ (Computer Language)

2.1.1 (Assembly Language)

CPU ޸𸮿  ϴ ɾ      
̴. ̵ ǻͰ Ȯ  ؾ  ִ  ڵ
̴.  80486 CPU  0x89E5 ESP   EBP 
ͷ ϶ ̴. â ǻ͸  ߵ  
Ʈ   ϳ .     
ִ  ҽ  Ͽ  ڵ带  α׷̴. 
 Ϳ ڷῡ    ٷ, ũ
μ ٸ.  x86 ũμ   
AXP ũμ   ٸ.   AXP 
 ڵ α׷ Ҽ ִ   ش. 

ldr r16, (r15)    ; Line 1

ldr r17, 4(r15)   ; Line 2

beq r16, r17, 100 ; Line 3

str r17, (r15)    ; Line 4

100: ; Line 5

ù° (Line 1) 15  ּҿ ִ  16
 оδ.    ޸  ġ  17
 оδ.  ° ٿ 16 17  
Ͽ,    ̺100 бѴ.  Ϳ ִ 
  ʴٸ, α׷  ° ٷ  Ͽ 17 
 ޸𸮿 Ѵ.  Ͱ    ִٸ,  
  ʿ䰡 .   α׷ ϰ, ۼϴ
 ܲҰ  ʿϸ,  ϱ .  Ŀ ߿ 
 ۼ κ  Ϻο  ʴ´. ̵ ܽ ȿ
   ۼǾ, Ư ũμ ϴ.


2.1.2 C α׷  Ϸ(Compiler)

 ū α׷ ۼϴ   Ӹ ƴ϶ ð 
 ʿϴ. Դٰ  ϱ , Ư μ ѵǹ
 ̽ļ . ׷ C 迡   ϴ  
ξ . C α׷ ó  ڷ  ˰
 ǥ  ְ ش. Ϸ ϴ Ư α׷  
C α׷ о  ȯϿ, Ư 迡 شϴ ڵ带 
.  Ϸ Ǹ  α׷Ӱ ۼ Ϳ 
 ȿ  ڵ带 .  Ŀ κ 
C Ǿ ִ.  C ڵ տ    ڵ Ȱ 
 Ѵ. 

if (x != y)

x = y;

̴  x   y  ٸ x y   ̴. 
C ڵ  ٸ  ϴ  ƾ ̷. ƾ 
 ̳, C ϴ ڷ   ִ.  Ŀ
 ū α׷   C  ̷,   ڽŸ 
ڷᱸ ƾ Ǿ ִ. ̷ C ҽ ڵ  𿩼 
 ý ٷ Ͱ   ϰ ȴ. 

C    Ѵ.  ɺ ̸   ִ 
޸   ġ̴. α׷Ӵ ̷  ޸   
ִ Ű  ʿ䰡 .   ؿ  Ŀ ˾Ƽ 
ش.   , Ǽ,   ٸ  ڷḦ  
 ִ. 

ʹ ڷ ޸  ġ ּҸ   ̴. 
  x ޸  ּ 0x80010000 ִٰ . ⼭ x 
Ű   - ̰ px  -    ְ,  px 
0x80010030  ִٰ . ׷ px   x ּ 
0x80010000̰ ȴ. 

C  õ    ϳ ڷᱸ  
ִ.  , 

struct {

int i;

char b;

} my_struct;

 i (32Ʈ ڷ Ѵ), b (8Ʈ ڷ), 
   Ҹ  my_struct ڷᱸ Ѵ. 


2.1.3 Ŀ(Linker)

Ŀ  Ʈ  ̺귯 Ͽ ϳ ϰ 
α׷  α׷̴. Ʈ   
    ڵ ¹,  ڵ ڷ, ׸ Ŀ
 ٸ  Ͽ ϳ α׷  µ ʿ  
Ѵ.    α׷, ʿ ͺ̽ Լ 
  ϳ   ְ,  ڸ óϴ Լ 
ٸ   ִٰ . Ŀ ϳ Ʈ ⿡ 
 ٸ ⿡ ִ ڷᱸ ƾ ϰ  , ̵  
  ߾ ش.  Ŀ   Ʈ 
 ũϿ , ϳ Ŵ α׷̴.  


2.2 ü(Operating System) ΰ?

Ʈ ٸ ǻʹ  ̳  ǰ  
 ʴ´. ϵ ǻ ̶ Ѵٸ, Ʈ 
ǻ ȥ̶   ִ. ü ڰ α׷ 
  ֵ ִ ý α׷ Ƴ ̴. 
ü  ϵ ߻ȭϿ ý ڿ α׷
  (virtual machine) Ѵ. ׷  ü 
ý Ư ִ ó . κ PC ϳ ̻ 
ü   ,  ü ſ ٸ    
ִ.  ü ϴ   и 
 .  ϰ еǴ κ Ŀ, ̺
  ٸ Ŀ ̴. 

ü  ظ   ֵ,     
     غ. 

$ ls

Mail c images perl

docs tcl

$

⼭ $ α ( 쿡 bash)  Ʈ̴. ̴ 
ڰ   ⸦ ٸ ִٴ  ǹѴ. ls 
  Ű ̹  ڰ ԷµǾ νϰ ν 
ڵ  Ѱش.  ׷ ̸   ̹ ִ 
ã, ⼭ /bin/ls ̹ ã ȴ. Ŀ 񽺸 ȣϿ 
ls  ̹  ޸𸮿 ø, ̸ ϰ ȴ. 
ls ̹ Ŀ  ý Լ ȣϿ  ϵ 
ִ ã´.  ý ĳõ  ý  ̿ϰų, 
ũ ̽ ̹ Ͽ ũ   о  
ִ. Ǵ  ý Ʈ  ý(Network File System, 
NFS) Ͽ  Ʈ , ׼ؾ ϴ  ϵ 
 ã  Ʈ ̹ ̿Ͽ    
ȯ  ִ.    ãҴ , ls   
ϰ,  ̹ ̸ ȭ鿡 ǥѴ. 

Ⱑ    , · ̷   ؼ, 
ü ǻ  ϴ  ɵ 𿩼 ڿ ý
 ϰ  شٴ    ִ. 


2.2.1 ޸ (Memory Management)

ڿ -   ޸ -   ִٸ ü ϴ   
κ ʿ   ̴.  ü ⺻  ϳ 
   ޸(physical memory)  ִ ó ̰ 
ϴ ̴.  ⿡  ̴  ޸𸮸  ޸
(virtual memory) θ.  ̵ ý   
Ʈ ӿ ޸𸮰  ִ ó ϰ  ̴. 
ý ޸𸮸  ٷ  ֵ (page) ɰ, ý 
Ǹ鼭 ̵  ϵũ (swap)Ѵ. Ʈ 
Ƽμ̶  ٸ Ʈ     Ѵ. 


2.2.2 μ(Process)

μ  α׷̸,  μ  ϳ α׷
 ϴ е ü̴.  ϴ  ýۿ ϰ 
ִ μ 캻ٸ,    μ    
 ̴. ps Ÿϸ ýۿ ִ μ ִµ, 
     ´.

$ ps

PID   TTY  STAT  TIME   COMMAND

158   pRe   1     0:00   -bash

174   pRe   1     0:00   sh /usr/X11R6/bin/startx

175   pRe   1     0:00   xinit /usr/X11R6/lib/X11/xinit/xinitrc --

178   pRe   1 N   0:00   bowman

182   pRe   1 N   0:01   rxvt -geometry 120x35 -fg white -bg black

184   pRe   1 <   0:00   xclock -bg grey -geometry -1500 -1500 
-padding 0

185   pRe   1 <   0:00   xload -bg grey -geometry -0-0 -label xload

187   pp6   1     9:26   /bin/bash

202   pRe   1 N   0:00   rxvt -geometry 120x35 -fg white -bg black

203   ppc   2     0:00   /bin/bash

1796  pRe   1 N   0:00   rxvt -geometry 120x35 -fg white -bg black

1797  v06   1     0:00   /bin/bash

3056  pp6   3 <   0:02     emacs intro/introduction.tex

3270  pp6   3     0:00    ps

$

 ýۿ CPU  ִٸ  μ  ٸ CPU 
   ̴ (ּ ̷δ ׷).   
CPU  ϳۿ   ü  μ 
 ª ð ϴ  ٸ Ʈ ؾ Ѵ. 
 ª ð Ÿ ̽(time-slice) Ѵ. ̷ Ʈ Ƽ
μ(multi-processing) Ǵ 층(scheduling)̶ θ, 
̴  μ ڽŸ  μ ó ϵ 
 ̴. μ   ȣ Ǳ   μ ڻ
̳ų  ص ٸ μ  ġ ʴ´. ü
  μ ڽŸ ׼   ִ и ּҰ 
ν   ޼Ѵ. 


2.2.3 ̽ ̹(Device Driver)

̽ ̹  Ŀ ֿ κ Ѵ. ̽ 
̹ ü ٸ κе  Ư ϹǷ, 
߸  ɰ  ´. 
̽ ̹ ڽ ϴ ϵ ġ ü  
ȣۿ Ѵ. 
 ,  ý IDE ũ    Ϲ  
ġ ̽ ϴµ, ̽ ̹ ġ  κ
 ì, ġ ٸ ϵ Ѵ. ̽ ̹ 
Ϸ Ʈѷ Ĩ  ٸ. 
׷ NCR810 SCSI Ʈѷ ִٸ NCR810 SCSI ̹ ʿ 
̴. 


2.2.4  ý(File System)

н ,  ý   ִ е  
ýۿ ϴµ ġ ĺ(̺ ȣ ̺ ̸) 
 ʴ´.   ý ü ϳ  Ʈ  
Ͽ ϳ ü ش.   ο  ý 
/mnt/cdrom Ʈ 丮 ƮϿ, ϳ  ý Ʈ 
 ߰Ѵ.   CD-ROM /mn/cdrom Ʈϴ ̴. 
   ý ϴ    ߿ Ư¡  
ϳ̴. ̴  ſ ϰ , ٸ ü  
  ְ Ѵ.    ϴ  ý EXT2 
Ͻý, κ   EXT2 Ѵ. 

 ýۿ  ڴ  ý ³  Ϻ  
ġ Ư¡  ý ϵ ũ ִ ̳ 丮
 ν  ְ ȴ.  MS-DOS EXT2   ٸ  
ý ϰ ϸ, ƮǾ ִ  ϰ  ý 
ϳ յ   ý(Virtual File System, VFS) 
Ѵ. , ڿ μ Ϲ     
ýۿ  ִ  ʿ  ϱ⸸ ϸ ȴ. 

 ̽ ̹   ġ (IDE SCSI) 
  ֱ ,  ýۿ ־   ġ
  ӵ    ̴.  ũ ġ  
ٸ  ִ.  , ÷ ġ  512Ʈ 
ϴµ , IDE ġ 1024Ʈ Ѵ.  ̴ ý 
ڿ  ʴ´. EXT2  ý  ġ ֵ  
ڿ  Ȱ δ. 


2.3 Ŀ ڷᱸ(Kernel Data Structure)

ü ý  ¿  ſ     
־ Ѵ. ý ο   Ͼ  ¸ ݿϱ 
 ̵ ڷᱸ ؾ Ѵ. 
 ,  ڰ ýۿ αϸ ο μ 
 Ǵµ, Ŀ  ο μ Ÿ ڷᱸ , 
̸ ý  ٸ μ Ÿ  ڷᱸ Ͽ 
Ѵ. 

̵ ڷᱸ κ  ޸  ϴ ̸, Ŀΰ 
Ŀ ý۸ ׼  ִ. ڷᱸ Ϳ ͸ 
ϸ,  ʹ ٸ ڷᱸ ƾ Ų.  Ŀ 
ϴ ڷᱸ ѹ ļ  ſ ȥ  ִ. 
 ڷᱸ    , Ϻδ  Ŀ 
ýۿ , δ ó ⺸ٴ  ܼϴ. 

 Ŀ ϴ   Ŀ ڷᱸ Ŀο ִ  
Լ ̸  Ȱϴ ϴµ ޷ ִ.  å  
Ŀ ڷᱸ Ͽ Ѵ.  Ŀ ý ϴ  
 óϴ Ÿ ˰, Ŀ ڷᱸ  
ϴ ߽ Ѵ. 


2.3.1  Ʈ(Linked List)

 ڷᱸ  ϱ Ͽ   Ʈ  
 Ѵ. 
   (linked), Ǵ (chained) ڷᱸ 
ϰ ִ.  ڷᱸ   -   μ Ʈ 
ġ -   糪 츦 Ÿٸ, Ŀ ̵ θ ãƳ  
־ Ѵ.  Ʈ Ʈ Ͱ Ʈ ִ ù ° 
ڷᱸ(Ǵ ) ּҸ ,  ڷᱸ Ʈ  
 ּҸ .    Ҹ Ű ʹ Ʈ
  Ÿ  0 Ǵ NULL  .   Ʈ
(Doubly Linked List)  Ұ  Ҹ Ű Ϳ 
Բ,  Ҹ Ű ͵ .   Ʈ 
ϸ ޸ ׼ Ƚ   , Ʈ ߰ Ҹ 
߰ϰų ϴ   . ̴ ü   
Ʈ̵ (trade off) ̴. ޸ ׼   ΰ, ƴϸ 
CPU Ŭ   ΰ.


2.3.2 ؽ ̺(Hash Table)

 Ʈ ڷᱸ  ս ,  Ʈ Ž
ϴ  ȿ  ִ.  Ư Ҹ ã  , ϴ 
 ߰  Ʈ ü  Ⱦƾ ϱ ̴. ̷ 
 ϱ   ؽ(hashing)̶  Ѵ. ؽ 
̺  迭,   (vector)̴. 迭,  ʹ
 ͵ ޸  ϳ ̾ ִ  Ѵ .  å̴ 
å 迭̶   ִ. 迭 迭 ġ Ÿ ε
(index)  ׼Ѵ. å    ȮѴٸ,  
å 'ټ° å'  å̿ ġ ǥϴ 
̴. 

ؽ ̺ ڷᱸ   迭̸, ε ڷᱸ 
κ .   α  Ÿ ڷᱸ 
ִٸ, ̸ ǥϴµ  ̸ ε     
̴. 
    ڷḦ ã Ѵٸ   ̸ ε 
Ͽ α ؽ ̺κ ͸ ,  ͸ 󰡸  
 ڷᰡ ִ ڷᱸ  ̴.   
 ̸      ִ. ׷ 쿡  Ͱ 
 ̸    Ʈ Ű Ͱ ȴ.  
 ª Ʈ ã  ڷᱸ ü  ͺٴ  
 ̴.

ؽ ̺  ϴ ڷᱸ ׼ ӵ ֱ 
,  ĳø ϱ  ؽ ̺   Ѵ. ĳ
  ׼Ǿ ϴ ٷ   ִ ̸, 밳   
  Ϻθ   ִ. ڷᱸ ĳÿ ־δ  
Ŀ   ڷᱸ  ׼ϱ  ̴. ĳô   
Ʈ ؽ ̺ Ͽ ϰ ϱⰡ ϴٴ  
ִ. ã ڷᱸ ĳÿ ִٸ (̸ ĳ Ʈ θ) 
  ̴. ׷  ĳÿ  õ ڷᱸ  
 ϰ, ϴ ڷᱸ   װ ĳÿ ߰Ͽ 
Ѵ. ο ڷᱸ ĳÿ        
ִ.       ؾ  ϴµ, ̹  
ڷᰡ ٷ  ʿ  Ǵ 赵 ִ. 


2.3.3 ߻ ̽(Abstract Interface)

  ڽ ̽ ߻ȭѴ.  ̽ Ư 
 ϴ ƾ ڷᱸ ̴.   ,  Ʈ 
̽ ̹ Ư ڷᱸ ̿Ͽ  ƾ 
ؾ Ѵ. ̷   ġ ٸ ڵ  Ʒ  
ϴ (Ǵ ̽) ϴ Ϲ ڵ  ְ 
ȴ. Ʈ  Ϲȭ Ǿְ, ġ  ڵ ǥ 
̽ Ͽ ̸ Ѵ.

 ̵         ڽ Ѵ. ̷ 
  밳  ḮƮ ڷᱸ ߰ϴ  Ѵ.
 , Ŀο ִ   ý   ڽ Ŀ
 ϸ,  ϴ 쿡 ó   ý 
  ϵȴ.   ý ϵǾ ִ   
/proc/filesystems 鿩ٺ ȴ.   ϵ ڷᱸ Լ 
 ͸  ִ 쵵 ִ. ̵ ʹ Ư  
ϴ Ʈ Լ ̴ּ. ٽ  ý   
,   ý    Ŀο Ѱִ ڷᱸ
,  ý Ʈ  Ҹ  ýۿ  ƾ
 ּҰ ִ. 


 : , Ź, 
 : ȣ

=====================================================================


3

޸  (Memory Management)



<<޸  ý ü  ߿ κ  ϳ̴. 
  â ǻͿ, ýۿ  ϴ ͺ  
    ޸𸮸 ʿؿԴ.  ޸ Ѱ踦 غϱ 
     ߵǾµ,  ޸   
  ̴.  ޸(virtual  memory) ޸𸮸  ʿ ϴ  
  ϴ μ ̿ ޸𸮸 ϵ Ͽ, ý  
   ͺ   ޸𸮸  ó ̵ Ѵ.>>

 ޸𸮴 ǻ ޸𸮸 ø ϸ  ϴ  ƴϴ. ޸ 
 ý    Ѵ.

      ּҰ : ü ý   ͺ ξ 
        ޸𸮸  ִ ó ̰ Ѵ.  ޸𸮴 
       ý  ޸𸮺  質  Ŭ  ִ.

     ȣ :ý  μ    ּҰ 
       . ̵  ּҰ  Ϻϰ иǾ ־,  
       α׷ ϴ μ ٸ Ϳ    
       .  ϵ  ޸ Ŀ ޸  ⸦ 
         ְ Ѵ. ̰ ڵ Ͱ   α׷ 
           ش.

     ޸  : ޸  ̹   μ 
       ּҰ ϱ  ȴ. ޸ ο  
        μ  ּҰ  ȴ.

       ޸ Ҵ : ޸  ý ýۿ
        μ  ϰ  ޸𸮸  
       ְ Ѵ.   ޸  ޸𸮴 μ и
       () ּҰ   ֵ , δ μ 
       ޸𸮸  ϴ  ʿ  ִ.   ýۿ 
       ɽ bash ϰ ִ   μ ִٰ . 
        μ  ּҰ bash  纻  
       ,   ϳ 纻  bash ϴ  
       μ װ ϴ  ٶϴ.  ̺귯
        μ  ڵ带 ϴ ǥ ̴. 

        ޸𸮴    ̻ μ ׵ ο 
        ޸𸮸   ȯν, μ (IPC) 
       Ŀ   ִ.  н ý V  
       ޸ IPC Ѵ. 



Process X                                                  Process Y
+-------+                                                  +-------+
| VPFN7 |-+                                                | VPFN7 |
+-------+ |   Process X                     Process Y      +-------+
| VPFN6 | |   Page Table                    Page Table   +-| VPFN6 |
+-------+ +-->+--------+                  +-+--------+<+ | +-------+
| VPFN5 |     |--------|-+                | |--------| | | | VPFN5 |
+-------+ +-->|--------| |     +------+  +|-|--------|<--+ +-------+
| VPFN4 | |   |--------|-|-+ +>| PFN4 |<--+ |--------| |   | VPFN4 |
+-------+ | +>|--------|-----+ +------+  |  |--------| |   +-------+
| VPFN3 |---+ +--------+ | |   | PFN3 |  |  +--------+ |   | VPFN3 |
+-------+ |              | |   +------+  |             |   +-------+
| VPFN2 | |              | |   | PFN2 |<-+             |   | VPFN2 |
+-------+ |              | |   +------+                |   +-------+
| VPFN1 | |              | +-->| PFN1 |                +---| VPFN1 |
+-------+ |              |     +------+                    +-------+
| VPFN0 |-+              +---->| PFN0 |                    | VPFN0 |
+-------+                      +------+                    +-------+
Virtual Memory              Physical Memory           Virtual Memory


    ׸ 3.1 : Abstract model of Virtual Physical address mapping



3.1  ޸ ߻ (abstract model)

  ޸𸮸  ϱ  ϴ   캸 , 
ʹ ڼ İ ȥ ʵ  ߻  ϴ 
    ̴. 

μ α׷  , μ ޸𸮷κ ɾ 
о ͼ ؼѴ. 
 ؼϴ  ޸  ġ ִ  ų 
ؾ ϱ⵵ Ѵ. μ ɾ ϰ α׷  
ɾ ̵Ѵ. ̷ Ͽ μ  ɾ ų, 
͸ ų ϱ  ޸𸮿 Ѵ. 

 ޸ ýۿ  ּҵ   ּҰ ƴ϶  
̴ּ.   ּҵ ü ϴ ̺鿡  
  μ   ּҷ ȯȴ. 

 ȯ  ϱ  ޸𸮿  ޸𸮴   
 .     ũε,   ũ 
ʿ , ׷ ʴٸ ý ϱⰡ ô  
̴.   AXP ýۿ 8KB ,  x86 ý
 4KB   Ѵ .     ȣ(page 
frame number, PFN)  ȣ οȴ. ̿   
  ּҴ    ȣ ,  κ ̷
.  ũⰡ 4KB  ּ 0Ʈ 11Ʈ  
Ÿ, 12 Ʈ ̻    ȣ Ÿ. 
  ּҸ ó  °    ȣ 
ؾ Ѵ. μ     ȣ   
 ȣ ȯϰ ش   ¿ شϴ ּ
 Ѵ. 
̷ ϱ  μ  ̺(page table) Ѵ. 

׸ 3.1 μ X μ Y  μ   ּҰ, 
  ̺ ش.   ̺   μ 
  ޸   Ų.  ׸ 
  X    ȣ 0    ȣ 1 
ǰ, μ Y    ȣ 1   
 ȣ 4 ȴ. ̷  ̺   
  :

     o ȿ ÷. ̰  ̺ Ʈ ȿѰ Ÿ
       . 

     o  Ʈ ϴ    ȣ. 

     o  (access control) . ̰   
        ִ Ѵ. ͸   ִ°? డ ڵ
        ϴ°?  

 ̺    ȣ   Ͽ 
Ѵ.    5 ̺ 6° ׸ ȴ (0 ù° 
׸̴)

 ּҸ  ּҷ ȯϱ , μ   ּ 
  ȣ,   ȿ  ؾ Ѵ. 
 ũ⸦ 2  ϸ,   Ʈũ Ʈ 
  óҼ ִ. ٽ ׸3.1,  ũⰡ 0x2000Ʈ
(8KB,  8192),  μ μ Y  ּҰ
 ּ 0x2194    ȣ 1  0x194 ȯѴ. 

μ    ȣ ε μ   
 Ͽ,  ̺ Ʈ(page table entry, PTE) 
´.
  ̺ Ʈ ȿϴٸ, μ  Ʈ  
  ȣ  ´. Ʈ ȿ ʴٸ, μ 
 ޸    ʴ   ̴.  쿡 
μ ּҸ    ü  Ѱܼ ü 
óϵ Ѵ.

μ ü, Ȯϰ  μ ȿ ȯ   
  ּҿ Ϸ ߴ ˸  μ ٸ. 
̰  Ʈ(page fault) ϸ, μ ̸  
ϵ , ü  Ʈ ߻  ּҿ  Ʈ 
 뺸޴´. 

  ̺ Ʈ ȿ , μ  
ȣ  ũ⸦ ؼ  ޸𸮿 ̽ ּҸ ´. 
 μ  Ͽ ʿ ̳ Ϳ 
Ѵ .

  ٽ , μ Y    ȣ  1  
  ȣ 4 ǰ, 0x8000(4 x 0x2000) ۵ȴ. 
⿡ 0x194 Ʈ  ϸ   ּ 0x8194 
  ִ.

̷  ּҸ  ּҷ Ŵν,  ޸𸮴 ý
     迭  ִ.  , ׸ 3.1
 μ X    ȣ 0    ȣ 
1  Ǵ ݸ,    ȣ 7    
ȣ 0      ȣ 0 ȴ. ̰ 
 ޸ ִ λ깰 ش.  ޸  
 ޸𸮿  Ư   ʾƵ ȴ.


3.1.1 䱸 ¡(Demand Paging)

  ޸𸮺 ξ   ޸𸮸 ֱ , 
ü  ޸𸮰 ȿ  ʵ ؾ Ѵ. 
 ޸𸮸 ϴ  ϳ,  α׷  
ϴ   εϴ ̴.  , ͺ̽ 
׷ ͺ̽ Ǹ Ѵٰ .     ͺ̽
 ޸𸮿 ε ʿ . ˻  ڵ鸸  ȴ.
ͺ̽ ǰ ˻ Ƕ, ͺ̽ α׷ ο 
ڵ带  ߰ϴ  óϴ κ ڵ带 о ʿ  
̴. ̷    ٵǴ 쿡 ޸𸮿 о̴ 
 䱸 ¡̶ Ѵ. 

μ  ޸𸮿   ּҸ Ϸ ϸ, μ 
     ̺ Ʈ ã   ̴. 
 , ׸ 3.1 μ X  ̺   
 ȣ  2  Ʈ Ƿ, μ X   
 ȣ 2 Ե ּҿ  ϸ, μ  ּҸ 
 ּҷ ȯ   ̴.    μ ü
  Ʈ ߻ߴٰ 뺸Ѵ. 

 Ʈ ߻  ּҰ ȿ   ̶,  μ
    ּҿ Ϸ  ̴. ü  ̰ ޸
 ƹ ּҿ   ó, α׷ ߸ ̴.  
 ü  μ , ý ٸ μ  
߸ μκ ȣѴ. 

 Ʈ ߻  ּҰ ȿ  ε, ּҰ Ű 
 ޸𸮿  ٸ, ü شϴ  ũ ̹
κ ޸𸮿 ; Ѵ. ũ    ð 
ɸǷ, μ     ٷ Ѵ. 
ýۿ   ִ  ٸ μ ִٸ ü ̵  
ϳ Ͽ Ѵ.       ӿ 
ϵǰ,    ȣ  Ʈ μ  
̺ ߰ȴ.  μ ޸ Ʈ ߻ߴ  
 ȴ. ̹  ٽ  ޸  ̷ , 
μ  ּҸ  ּҷ ȯ  ְ ǰ, μ 
 ȴ. 

  ̹ μ  ޸𸮿 εϱ  䱸 
¡ Ѵ. 
  ,  ϴ  ,    
μ  ޸𸮷 εȴ. ̰   μ ޸  
ϴ ڷᱸ Ͽ ̷, ̸ ޸ ̶ Ѵ. 
· ̹ ù° κи   ޸𸮿 ,  
κ ũ  ִ. ̹ ʿ    Ʈ ߻
ϰ,  μ  ޸  Ͽ  ̹  κ 
  ֵ ޸𸮿   Ѵ.


3.1.2 (Swapping)

μ     ޸𸮿 ;  ϴµ,  ִ 
  ٸ, ü  ޸𸮿 ٸ  
Ͽ,     ؾ Ѵ. 

 ޸𸮿 ŵ  ̹  Ͽ  ̰, 
    ٸ,    ʿ . 
 ׳ Ÿ ϰ, ߿ ٽ ʿϰ Ǹ ̹  
κ ٽ  ޸𸮿 о̸ ȴ. 

׷  Ǿٸ, ü    ߿ ٽ 
  ֵ ؾ Ѵ. ̷  Ƽ (dirty page)
 ϸ, ̸ ޸𸮿   (swap file)̶ Ư 
Ͽ  Ѵ.  Ͽ ϴ  μ  ޸
 ӵ   ſ   ɸǷ, ü  ũ 
 ʿ伺, ٽ   ֵ ޸𸮷   ʿ伺 
 ٷ Ѵ. 

   Ǵ  ϱ  ϴ ˰
( ˰) ȿ  (thrashing) ̶ Ҹ  
° ߻Ѵ.     ũ ϵǰ  ٽ о
 Ǹ, ü ʹ ٺ  ۾  ϰ ȴ.  
 ׸ 3.1,    ȣ 1  ٵȴٸ, 
̰ ϵũ   ĺ ƴϴ. μ  
ϰ ִ   ۾ (working set)̶ ϴµ, ȿ
  å  μ ۾    ޸𸮿 
ֵ Ѵ. 

 ýۿ ŵ  ϰ ϱ ,  ֱ
 (Least Recently Used, LRU)  (page aging)  
Ѵ.   ý ,   ٵ 
ٺǴ    ִ.   ٵɼ , 
 ٵɼ ̰   ȴ. ̵     
ĺ̴. 


3.1.3   ޸(Shared Virtual Memory)

 ޸𸮴  μ ޸𸮸   ϰ ش.  
޸   ̺ ؼ  ̷,  μ 
  ̺  ִ.   μ  ޸ 
 Ϸ,     ȣ  μ 
 ̺ ο  ̺ Ʈ ־ Ѵ. 

׸ 3.1  μ     ȣ 4 ϴ  
ش.    μ X 忡    
ȣ 4̰, μ Y 忡    ȣ 6̴. ̰  
  ִ  ش. Ǵ    
  ϴ   μ  ޸  ġ
  ʿ䰡 . 


3.1.4   ּ (Physical  Addressing Mode)    ּ 
(Virtual Addressing Mode)

ü ڽ  ޸𸮿 ϴ    ǹ̰ . ׷ 
Ǹ ü ڽ   ̺ ؾ  ϴ  
Ȳ  ̴. κ  μ  ּ  
 ּ 带 Բ Ѵ.  ּ 忡  ̺
 ʿ,  忡 μ ƹ ּ ȯ  ʴ´.
 Ŀ  ּҰ ǵ ũǾ ִ. 

 AXP μ Ư  ּ 带   ʴ. ſ 
޸   κ ,      ε 
ּҷ  д.  Ŀ ּҰ KSEG ּҰ̶ θ, 
0xfffffc0000000000  ּ θ Ѵ. 
KSEG ũ ڵ(ǿ  Ŀ ڵ̴)  ϰų KSEG 
͸ ϱ ؼ ڵ ݵ Ŀ 忡 Ǿ 
Ѵ. Ŀ  Ŀ ּ 0xfffffc0000310000κ 
ǵ ũǾ ִ. 


3.1.5  (Access Control)

 ̺ Ʈ      ִ. μ 
  ּҸ  ּҷ ȯϱ   ̹  ̺ 
Ʈ ϱ ,     Ͽ,  μ
     ޸𸮸  ʵ   ִ. 

޸    Ϸ ϴ    ִ.  
ڵ带  ִ    ޸𸮴 ڿ б  ޸̸, 
ü μ ڽ  ڵ  ͸    
ؼ  ȴ. ݴ, ͸  ִ     
 ޸𸮸 ɾ Ͽ Ϸ õ ؾ Ѵ. κ
 μ      - Ŀθ ڸ -  
 ִ. 
μ Ŀ   ƴ϶, ڰ Ŀ ڵ带 
ϰų Ŀ ڷᱸ ϴ    ̴. 



31                             15 14 13 12 11 10 9 7 6 5 4 3 2 1 0
+--------------+-+-+-+--------+--+--+--+--+-----+-+-+---+-+-+-+-+-+
|              | | | |        |  |  | U| K|     |U|K| G |A|F|F|F|V|
|              | | | |        |  |  | W| W|     |R|R| H |S|O|O|O| |
|              | | | |        |  |  | E| E|     |E|E|   |M|E|W|R| |
+--------------+-+-+-+--------+--+--+--+--+-----+-+-+---+-+-+-+-+-+
                ^   ^
                |   +-----_PAGE_DIRTY
                +---------_PAGE_ACCESSED

63                                                               32
+-----------------------------------------------------------------+
|                                                                 |
|                              PFN                                |
|                                                                 |
+-----------------------------------------------------------------+

              ׸ 3.2 : Alpha AXP Page Table Entry



   PTE  μ ٸ. ׸ 3.2 
 AXP μ PTE ش.  Ʈ ʵ ǹ̴  
 : 

     V : ȿ(Valid)   ̺ Ʈ ȿ. 

     FOE : " (Fault on  Execute)"     
       Ϸ   μ   ߻ϰ Ʈ 
       ü ѱ. 

     FOW : " (Fault on Write)"     
            ߻Ѵ. 

     FOR : "б (Fault on Read)"       
           ߻Ѵ.

     ASM : ּҰ ġ(Address Space Match). ȯۿ Ϻ Ʈ
           ȴ.

     KRE : Ŀ 忡   ڵ忡     .

     URE :  忡  ڵ忡     
       .

     GH : Ե Ʈ(granularity hint)  ü  ȯ 
        Ʈ ƴ ϳ Ʈ   ȴ.

     KWE : Ŀ 忡   ڵ尡     , 

     UWE :  忡   ڵ尡     , 

       ȣ : V Ʈ  Ʈ PTE   ׸  
       PTE    ȣ ´. ȿ  PTE 
       , ׸  0  ƴ϶     
       Ǿ ִ    ִ. 

        Ʈ Ͽ Ѵ: 

     _PAGE_DIRTY :  Ʈ Ǿ    Ͽ 
       ϵ ʿ䰡 ִ.
     _PAGE_ACCESSED : ٵ  ǥϱ   
       Ѵ. 


3.2 ĳ(Cache)

   ̷  Ͽ ý Ѵٸ, 
ϱ ϰ ״ ȿ  ̴. ü  μ 
ڵ ýۿ      ־ ִ.
μ, ޸      ܿ,     
۾      ֵ,  ڷ  ĳø 
ϴ ̴.  ޸  Ͽ  ĳø 
Ѵ: 

      ĳ(Buffer Cache) :  ĳô  ̽ ̹
       ϴ  ۵  ִ. ̵ ۴  ũ
       (  512Ʈ),  ġ аų, ű⿡  ڷ
           ִ.  ġ  ũ   
        б/⸸   ִ ġ̴.  ϵ ũ 
        ġ̴. 

        ĳô ġ ĺڿ  ϴ  ȣ  εǾ 
       ְ,       ã  ִ.   
       ġ  ĳø ؼ ٵȴ. Ͱ  ĳÿ 
       ߰ߵǸ ϵ ũ   ġ  ʿ䰡 
       ,  ξ  ٵȴ. 

      ĳ(Page Cache) :  ĳô ũ  ̹ 
       Ϳ ϴ ӵ ̱  ȴ. ̰  
           ĳϱ  Ǹ, ϰ 
           ٵȴ. ũ ޸𸮷 
        о̸,   ĳÿ ĳõȴ. 

      ĳ(Swap Cache) : Ƽ 鸸  Ͽ ȴ.
       ̵   Ͽ ϵ  ̻  ʾҴ
       ,     ƿ  ̹   (
        )  Ͽ Ƿ,  Ͽ  ʿ䰡 
       .    ׳ ϸ ȴ.   ϰ 
       Ͼ ýۿ ̷ ν ʿϰ  ũ 
           ִ. 

     ϵ ĳ(Hardware Cache) :  Ǵ ϵ ĳô 
       μ ο ִ  ̺ Ʈ(PTE) ĳ̴. 
         μ ׻  ̺  д  ƴ϶, 
       PTE ʿ      ȯ  ĳѴ. 
       ̵ ȯ  (Translation Look-aside Buffers, TLB) 
       Ҹ ý  μ  ̺ Ʈ ĳõ
       纻  ִ. 

        ּҸ  , μ TLB Ʈ ġϴ ׸
        ã Ѵ.  ã´ٸ,  ּҸ ٷ  ּ
        ȯϿ, Ϳ  ùٸ    ִ. 
        ġϴ TLB Ʈ ã ϸ, ü  
       ޾ƾ Ѵ.  ޱ ؿü TLB ã ߴٴ
       (TLB miss) ȣ .  ذϵ ü  
       ȣ ϱ ؼ ý۸ Ư Ŀ 
       . ü ּ ȯ  ο TLB Ʈ Ѵ.
       ܰ ó , μ   ּ ȯ ٽ õ
       Ѵ. ̹   ּҿ شϴ ȿ TLB Ʈ 
       ֱ   ó ̴. 

ϵ ĳ̵ ٸ  ĳ̵ ĳø ϴ   , ׷ 
ȿ ̱ ؼ  ̵ ĳø ϴµ    ð 
 ؾ Ѵٴ Ͱ, ĳð   ý ״´ٴ 
̴. 


3.3   ̺(Linux Page Table)

 3ܰ  ̺ Ѵ . ٵǴ   ̺
  ܰ  ̺   ȣ  ִ. ׸ 
3.3  ּҰ   ׸  ش.  
׸ Ư  ̺  Ѵ. 
 ּҸ  ּҷ ȯϱ ,  μ  ܰ ׸ 
 ͼ  ̺  ִ    
 ȯϰ,  ܰ  ̺   ȣ д
.   3ȸ ݺϸ  ּҸ ϴ   
  ȣ   ִ. ׸  ּ  ׸ 
Ʈ  Ͽ   ִ ͸ ´. 



                          VIRTUAL ADDRESS

+-----  ------+-----------+-----------+-----------+---------------+
|             |           |           |           |               |
|             |  Levle 1  |  Levle 2  |  Levle 3  |  Byte within  |
|             |   |       |     |     |       |   |     page   |  |
+--  ---------+---|-------+-----|-----+-------|---+------------|--+
                  |             |             |                |
       Level 1    |  Level 2    |  Level 3    |                |
       Page Table |  Page Table |  Page Table |  Physical Page | 
       +-------+  |  +-------+  |  +-------+  |  +-------+     |
       |       |  |  |       |  |  |       |  |  |       |     |
       |       |  |  |       |  |  |       |  |  |       |     |
       |       |  |  |       |  |  |       |  |  |       |     |
       +---+---+  |  +---+---+  |  +---+---+  |  |       |     |
       |PEN|   |<-+  |PEN|   |<-+  |PEN|   |<-+  +-------+<----+
       +---+---+     +---+---+     +---+---+     +-------+
       | |     |     | |     |     | |     |     |       |
       | |     |     | |     |     | |     |     |       |
 PGD   | |     |     | |     |     | |     |     |       |
-----> +-|-----+  +->+-|-----+  +->+-|-----+  +->+-------+
         |        |    |        |    |        |    
         +--------+    +--------+    +--------+    


              ׸ 3.3 : Three Level Page Table



 ϴ ÷, ݵ Ŀ Ư μ  
̺ Ž  ֵ ϴ ũε ؾ Ѵ. ̰ 
ÿ Ŀ  ̺ Ʈ ̶簡  迭Ǿ 
ִ ˾ƾ  ʿ䰡 . ̷  ſ ̾ ܰ 
 ̺   μ  ܰ  ̺ 
  x86迭 μ ؼ   ̺ ó ڵ
 ϰ ִ.


3.4  Ҵ(allocation) (deallocation)

ýۿ ִ     䱸 ִ.  , 
̹ ޸𸮿 ε  ü  Ҵؾ ִ. ׸ 
̹   ε   ؾ Ѵ.  
   ٸ 뵵  ̺ ü  Ŀ Ư ڷ
 ϱ  ̴.  Ҵ  Ǵ Ŀ
̳ ڷᱸ,  ޸ ý ȿ  ߿  
ģ. 

ý    mem_map_t ü Ʈ mem_map 
ڷᱸ Ÿ ̵ ýÿ ʱȭȴ.  mem_map_t ü
 ý   ϳ Ѵ. ޸   ߿
׸   : 

     īƮ(count) :   ϰ ִ (μ) 
       .   μ ϰ ִٸ īƮ 1 
       ũ.

     (age) :  ׸  ̸ ϰ ,  
         Ǵ   ĺ ϴµ ȴ.

     map_nr :  mem_map_t ϴ    ȣ
       ̴. 

free_areaʹ  Ҵϴ ڵ尡  ãµ 
ȴ.
ü   ȹ ̷ Ŀ ̷  ڵ
 ؼ, μ ϴ  ũ  ¡  
Ŀ  ٸ  ִ. 

free_area  ҵ  鿡     ִ. 
迭 ù° Ҵ  ,     ,  
   , ̷  2  ϴ 
  Ѵ. list Ҵ ť  Ǹ, mem_map 
迭  page  ڷᱸ  ͸  ִ.   
  ť ȴ. map  ũ Ҵ  ׷ 
Ͽ ϴ Ʈʿ  ̴. Ʈ Ʈ N  
N°   ̸ 1 ȴ. 

׸ 3.4 free_area ü ش. 0° Ҵ ϳ 
(  ȣ 0), 2° Ҵ ΰ 4  ũ  
 ش.     ȣ 4,    
 ȣ 56 Ѵ. 


3.4.1  Ҵ(Page Allocation)

   ȿ Ҵϰ ϱ    ˰
(Buddy algorithm)  Ѵ.  Ҵ ڵ ϳ ̻ 
   ϳ  ҴѴ.  2  ũ 
 Ҵȴ.  1 , 2 , 4    Ҵ
  ִٴ ̴. ýۿ ִ   û óϱ⿡   
ϴٸ(nr_free_pages > min_free_pages), Ҵ ڵ free_area 
û ũ⿡ شϴ    ŽѴ. free_area  
 Ҵ ʰ, ش ũ⸦       
ִ.   迭 ι° Ҵ,  4   Ҵ 
   ϴ ޸    ִ. 

Ҵ ˰  û ũ   ˻Ѵ. free_area
ڷᱸ list ҿ  ťǾ ִ    󰣴. 
 û ũ    ٸ,   ũ(û 
ũ  )  ãƺ. 
   free_area  ˻ϰų,   ִ  
 ãƳ  ӵȴ. ãƳ   û ũ⺸ ũ
,    û ũⰡ   Ѵ.  
ִ    辿 þ ũ Ǿ ֱ , Ұ
   ߶󰡱⸸ ϸ ȴ.   شϴ ť ť
Ǹ Ҵ   ȣڿ ǵ. 

 , ׸ 3.4  2 ¥   ûߴٸ, 4 
¥ ù° (  ȣ 4 ϴ)  2 ¥ 
 ΰ  ̴.  ȣ 4 ϴ ù°  
Ҵ  Ǿ ȣڿ ǵ,  ӹȣ 6 
ϴ ι°  2   ũ   free_area 迭
 ù° ҿ ִ ť ȴ. 


3.4.2  (Page Deallocation)

  Ҵϴ   ū      ɰ
  ޸𸮸  ȴ.   ڵ   
   ū    ģ.    
ũ ߿ѵ, װ   ū   ĥ  ְ 
ϱ ̴. 

   ,  ũ  (buddy)  
 ˻Ѵ. 
׷ٸ        , ο 
 Ǿ  ũ   ̷. ΰ   
  ū     ,   ڵ   
ٽ  Ͱ ļ  ū   
Ѵ. ̷ ؼ     ޸𸮰 ϴ  ŭ Ŀ  
ְ ȴ. 


                       free_area                PHYSICAL MEMORY
                        +-----+                    +-------+
                        |     |                    |       |
                        |  5  |                    |       |
                        +-----+                    +-------+
                        |     |                    |       |  8
                        |  4  |                    |       |
                        +-----+      map           +-------+
                        |     |--->+-----+         |///////|  7
mem_map_t   mem_map_t   |  3  |    +-----+         |///////|
 +-----+     +-----+    +-----+      map           +-------+
 |     |<--- |     |<---|     |    +-----+         |///////|  6
 |     |---> |     |--->|  2  |--->|     |         |///////|
 |  56 |     |  4  |    +-----+    +-----+         +-------+
 +-----+     +-----+    |     |      map           |///////|  5
            mem_map_t   |  1  |-+  +-----+         |///////|
             +-----+    +-----+ +->|     |         +-------+
             |     |<---|     |    |     |         |///////|  4
             |     |--->|  0  |-+  +-----+         |///////|
             |  0  |    +-----+ |    map           +-------+
             +-----+            +  +-----+         |       |  3
                                +->|     |         |       |
                                   |     |         +-------+
                                   |     |         |       |  2
                                   |     |         |       |
                                   +-----+         +-------+     ^
                                                   |       |  1  |
                                                   |       |    PFN
                                                   +-------+
                     ///////  Free PFN             |///////|  0
                     ///////                       |///////|
                                                   +-------+

              ׸ 3.4 : The free_area data structure


 , ׸ 3.4   ȣ 1 Ǹ, ̹ 
Ǿ ִ   ȣ 0  2 ũ   
Ǿ, free_area ù°  ť ȴ. 


3.5 ޸ (Memory Mapping)

̹ Ϸ,   ̹  μ  ּҰ
 ; Ѵ.  ̹ ũؼ ϴ  ̺귯 
.     ޸𸮿  
,  μ  ޸𸮿 Ḹ Ų. 
׸  α׷ Ǹ鼭 α׷ Ϻΰ ʿ , 
 ̹κ شϴ ̹ κ ޸𸮷 ´. ̷ 
̹ μ  ּҰ ϴ  ޸ ̶ 
Ѵ. 

 μ  ޸𸮴  mm_struct ڷᱸ ǥȴ. ⿡
   ̹( , bash)  ,  
vm_area_struct ڷᱸ  Ͱ  ִ. 
vm_area_struct ڷᱸ  ޸  ۰ , μ 
 , ޸𸮿    Ѵ.  ⼭   
  ޸𸮸 óϱ    ؾ ϴ ƾ̴. 
 ,  ޸  ϳ, μ  ޸𸮸 
 ( Ʈ )  ޸𸮰 δ  ޸𸮿 ٴ 
 ˾ , ̸ óϴ ùٸ ۾ Ѵ.   
nopage ̴.   ̹  ޸𸮷 ű  
䱸  nopage  Ѵ.



                               Processes Virtual Memory
                                  +----------------+
                                  |                |
                                  |                |
                                  |                |
                         +------->+----------------+
                         |        |                |
                         |        |  Virtual Area  |
 vm_area_struct          |        |                |
+----------+             |        |                |
| vm_end   |-------------+        |                |
+----------+                      |                |
| vm_start |--------------------->+----------------+
+----------+                      |                |
| vm_flags |                      |                |
+----------+                      |                |
| vm_inode |                      |                |
+----------+    Virtual Memory    |                |
| vm_ops   |--> Operation         |                |
+----------+                      |                |
|          |     open()           |                |
+----------+     close()          |                |
| vm_next  |     unmap()          |                |
+----------+     protect()        |                |
                 sync()           |                |
                 advise()         |                |
                 nopage()         |                |
                 wppage()         |                |
                 swapout()        |                |
                 swapin()         |                |
                                  |                |
                                  |                |
                                  +----------------+


              ׸ 3.5 : Areas of Virtual Memory



   ̹ μ  ּҿ ε ,  Ʈ 
vm_area_struct ڷᱸ .  vm_area_struct ڷᱸ 
 ̹  κ Ÿ - ڵ, ʱȭ (),
ʱȭ  (BSS) ̴.   ǥ  ޸
  ϸ, vm_area_struct ڷᱸ  , ׿ ´ 
Ϸ  ޸  ⿡ ȴ. 


3.6 䱸 ¡(Demand Paging)

 ̹ μ  ޸𸮿 εǰ  ,   ְ 
ȴ. ̹  պκи  ޸𸮿 ö ֱ , 
  ޸𸮿    ޸  ϰ ȴ. 
  ȿ  ̺ Ʈ    ּҿ ϸ, 
μ   Ʈ Ѵ.  Ʈ  Ʈ
 ߻ ,  Ʈ ߻Ų ޸   
Ѵ. 

  Ʈ  ߻  ϴ ޸   Ÿ 
vm_area_struct ãƾ Ѵ. vm_area_structڷᱸ ˻ϴ ,
 Ʈ ȿ óϴµ ־ ٽ̱ , ̵ ڷ
 AVL(Adelson-Velskii and Landis) Ʈ   ִ.
 Ʈ ߻ ּҿ  vm_area_struct ڷᱸ ٸ, 
 μ    ּҿ  ̴.   SIGSEGV  
ñ׳  μ ,  μ   ñ׳ óϴ 
ڵ鷯   ʴٸ, μ  ̴. 

׷  ߻  Ʈ ,   ޸  
     Ѵ. μ б⸸   
 ϴ ó,    Ϸ ϸ ޸ 
 ñ׳η ޵ȴ. 

 Ʈ ùٸ ̶ Ǵߴٸ,  ̸ óؾ 
Ѵ. 
 Ͽ ִ , ũ 򰡿 ִ  ̹
 Ϻ  ؾ Ѵ.   Ʈ ߻  ּ
  ̺ Ʈ Ѵ. 

   ̺ Ʈ ȿ   ʴٸ, 
 Ʈ  Ͽ ִ  Ͽ ߻ ̴. 
 AXP  ̶̺, ȿ Ʈ  ʰ, PFN ׸
 0  ƴ   Ʈ ̿ شȴ.   PFN ׸ 
 (׸    )  κп   
ִ    ִ.  Ͽ ִ   
ٷ°   ڿ Ѵ. 

 vm_area_struct ڷᱸ  ޸   ִ  ƴ
,  ִٰ ص nopage     ִ. ̴ 
⺻  ο   Ҵϰ ̿  ȿ 
 ̺ Ʈ Ͽ, ̸ óֱ ̴.   
޸  nopage  ִٸ,  ̸  ̴. 

Ϲ nopage ޸𸮿 ε  ̹  Ǹ,  
ĳø Ͽ û   ޸𸮷 ´.  

· û   ޸𸮷 ö, μ  
̺ ŵȴ. 
 Ʈ ϱ Ͽ, Ư ȯ  (translation look 
aside buffer) ϴ μ 쿡, Ư ϵ  ´ 
ൿ ʿ  ִ. 
  Ʈ óǾǷ  Ȳ Ǹ, μ  
޸ ٿ  Ʈ ߻״ ɿ  簳Ѵ. 


3.7   ĳ

  ĳ  ũ ִ Ϸ  ӵ ̴ 
̴. ޸ ε  ѹ   , ̵ 
  ĳÿ ȴ. ׸ 3.6  ĳð  mem_map_t ڷ
    ͵  page_hash_table Ǿ ִ  
ش.     VFS inode ڷᱸ(9,  ýۿ 
)  ĺǸ,  VFS inode ϸ,  Ͽ ϴϷ 
Ǿ   Ѵ.  ̺  ε, 
VFS inode Ͽ   . 

 ޸ ε Ͽ  ,   䱸 ¡ 
 ޸𸮷 ٽ  ,   ĳø  а 
ȴ.  ĳÿ ,   Ÿ mem_map_t ڷ
   Ͱ  Ʈ ó ڵ ǵ. 
ĳÿ ٸ ̹  ִ  ýκ   ޸
 ; Ѵ.    Ҵϰ ũ  
κ  о δ.  

ϴٸ      б⸦ Ѵ. ̷ 
  ̸ д , μ    
ϴ ,   (μ  ޸𸮸 б ) 
μ  ޸𸮿 ٸ ְ Ѵ.


  page_hash_table
+-----------------+
|                 |
+-----------------+
|                 |      mem_map_t                mem_map_t
+-----------------+    +-----------+            +-----------+       
|                 |--->| inode     | 12     +-->| inode     | 12    
+-----------------+    +-----------+ 0x8000 |   +-----------+ 0x2000
|                 |    | offset    |        |   | offset    |       
+-----------------+    +-----------+        |   +-----------+       
|                 |    |           |        |   |           |       
|                 |    |           |        |   |           |       
|                 |    +-----------+        |   +-----------+       
|                 |    | next_hash |--------+   | next_hash |
|        :        |    +-----------+            +-----------+       
|        :        |    | prev_hash |            | prev_hash |       
|        :        |    +-----------+            +-----------+       
|                 |    |           |            |           |       
|                 |    |           |            |           |       
|                 |    +-----------+            +-----------+       
|                 |
|                 |
|                 |
|                 |
|                 |
+-----------------+
|                 |
+-----------------+
|                 |
+-----------------+


              ׸ 3.6 : The Linux Page Cache



ð 귯 ̹ а Կ    ĳð ϰ ȴ. 
 ̻ ʿ Ǹ,  ̹ ̻  μ 
ؼ  ʰ Ǹ, ĳ÷κ ŵȴ.  ޸𸮸 
      Ѵ.   
  ĳ ũ⸦  ̴. 


3.8   ƿ(swap out) (discarding)

 ޸𸮰 ϰ Ǹ  ޸   ý  
޸𸮸 Ϸ Ѵ.   Ŀ   (kswapd) Ҵȴ. 
Ŀ   Ŀ  Ư  μ̴. Ŀ 
  ޸  ,  ޸  Ŀθ 
Ǵ μ̴. Ŀ  ̶ ̸ ణ ߸Ǿµ, 
̴    ƿϿ ý   Ͽ ϴ   
̻   ϱ ̴. Ŀ    ޸  
ý ȿ   ֵ ýۿ    
ֵ ϴ ̴. 

Ŀ  (kswapd) Ŀ init μ  ۵Ǹ Ŀ 
 Ÿ̸Ӱ ֱ   ٸ ִ. Ÿ̸Ӱ  
,   ý    ʹ   Ȯ
Ѵ. 
free_pages_high  free_pages_low ΰ  Ͽ, 
 ؾ  ʿ䰡 ִ Ѵ. ýۿ ִ  
  free_pages_high ū , Ŀ   ƹ ϵ 
 ʰ ٽ   Ÿ̸Ӱ    ٸ.  Ȯ 
۾  , Ŀ      Ͽ  ִ 
  Ѵ.   nr_async_pages īƮ  
ȴ.      Ͽ   ť  
 ϰ,  ġ        Ѵ. 
free_pages_low free_pages_high ý   Ǹ,ý
 ִ     ִ. , ýۿ ִ   
 free_pages_high,  free_pages_low ۾, Ŀ 
  ý ϴ    ̱ Ͽ  
  õѴ. 

      ĳÿ  ĳ ũ⸦ δ.

     ý V  ޸   ƿѴ.

       ƿϰ Ѵ. 

ý    free_pages_low Ϸ , Ŀ  
  Ǳ , 6  Ϸ Ѵ. ׷ 
 3  Ϸ Ѵ.    
    ʷ õȴ. Ŀ     
ϱ    ߴ ϰ, Ź  
     ؼ   Ű Ѵ . 

   ,    ٽ  Ÿ̸Ӱ Ǳ 
ٸ. Ŀ      ,   
 free_pages_low Ϸ  ٸ, ҿ ڴ ð ݸ 
ܴ. 
׷    free_pages_low Ŀ Ŀ    
 ڰ ȴ. 


3.8.1  ĳÿ  ĳ ũ⸦ ̱

 ĳÿ   ĳÿ ִ   free_area ͷ  
 ĺ̴. ޸𸮿 ε    ִ  
ĳô ý ޸𸮸 ä ִ ʿ     
ִ.   ġ ų   ۸  ִ  
ĳ  ʿ ۸     ִ. ý   
Ǳ ϸ, ̵ ĳ÷κ   , ޸𸮿 
 ƿϴ  ޸  ġ  ʿ䰡 Ƿ 
 . ̵     ġ ޸ ε  
׼ϴ ӵ ٴ  ϰ ٸ ɰ ۿ 
. ׸ ̵ ĳ÷κ   ϴ  ϰ ̷
ٸ,  μ ϰ غ ̴. 

Ŀ   ̵ ĳø ̷   , mem_map  
Ϳ ִ   ˻Ͽ  ޸𸮿    
ִ ȮѴ. Ŀ   ϰ  ϰ ִٸ - , 
ý    ɰϰ  ٸ - ˻  
 ũⰡ  Ŀ.   ư  ˻ȴ. 
 ޸  ̷    ٸ    ˻ȴ. 
  ð ˰(clock algorithm)̶ Ҹµ, ð ٴ 
ó ü mem_map  Ϳ ѹ   ʷ 
Ǳ ̴. 

Ǵ   װ  ĳó  ĳÿ ִ° ˻
ȴ.  ܰ迡    ,   ÿ 
 ĳÿ ο   ٴ    α ٶ.   
 ĳ 𿡵   mem_map     
ȴ. 

 Ҵ    ȿ ̷ ϱ  Ͽ ( 
 ۰ ĳõǴ  ƴ϶)  ü  ĳÿ ĳõȴ.
޸  ڵ ˻Ǵ  Ե ۸ Ϸ Ѵ. 
 Ե   ۰ Ǹ, ׵  ִ  
ȴ.     ĳÿ ִٸ,  ĳÿ 
ŵ  ȴ. 

̷ ؼ   Ǿٸ Ŀ    ֱ
   ٸ. Ǵ  ߿  μ
  ޸𸮿  Ƿ ( ĳõ ̹Ƿ), ƹ
  ̺   ʿ䰡 . ĳõ  ϴ ɷ 
  ,      ƿϷ ϰ 
ȴ. 


3.8.2 ý V  ޸   ƿ

ý V  ޸𸮴   ̻ μ   ޸𸮸 Ͽ 
׵ ̿    ִ μ  (IPC) Ŀ 
̴. μ    ޸𸮸 ϴ° 5忡
 ڼ Ѵ.  ý V  ޸   shmid_ds 
ڷᱸ Ѵٰ ˾Ƶδ  ϴ.  ڷᱸ    
޸  ϴ μ ϳ Ǵ vm_area_struct 
ڷᱸ Ʈ  ͸  ִ. vm_area_struct ڷᱸ 
 μ  ޸   ý V  ޸𸮰 
ϴ Ÿ.  ý V  ޸𸮿 vm_area_struct ڷᱸ
 vm_next_shared, vm_prev_shared ͷ  Ǿ ִ. 
 shmid_ds ڷᱸ ̹ۿ     εǾ ִ  
 ϰ ִ  ̺ Ʈ Ʈ  ִ. 

Ŀ   ý V  ޸   ƿ  
ð ˰(clock algorithm) Ѵ. Ŀ    
    ƿ   ޸  ̾
  Ѵ. ̸   ΰ ε   ϴµ, ϳ 
shmid_ds ڷᱸ տ   ε̰, ٸ ϳ ý V  
޸  Ÿ  ̺  Ʈ Ʈ  ε
̴.   ý V  ޸  ϰ ǰ Ѵ. 

 ý V  ޸        
ȣ,   ޸  ϴ  μ  ̺
 ֱ , Ŀ   ̵  ̺ θ 
Ͽ,   ̻ ޸𸮿   Ͽ  ִٴ  
˷־ Ѵ.  ƿǴ   , Ŀ   
  ϰ ִ μ  ̺κ  
̺ Ʈ ã´ ( vm_area_struct ڷᱸ ͸ 
ν).  ý V  ޸    μ  
̺  Ʈ ȿϸ,  װ ȿ ʰ  ƿ 
 ̺ Ʈ ȯϰ,  ()    1 
ҽŲ.  ƿ ý  V      ̺ Ʈ, 
shmid_ds ڷᱸ տ  ε,  ý V  ޸ 
   ̺ Ʈ ε  ִ. 

ϴ μ  ̺  Ǿ   ī
Ʈ 0 Ǹ,     Ϸ  ƿ  ְ ȴ. 
 ý V  ޸   shmid_ds ڷᱸ Ű 
ִ Ʈ   ִ  ̺ Ʈ  ƿ  
̺ Ʈ üȴ.  ƿ  ̺ Ʈ ȿ 
,   ϵ  ϳ Ű ε,     
  ƿ  ִ Ÿ   ִ. 
    ٽ  ޸𸮷   ȴ.


3.8.3   ƿ 

  ýۿ ִ  μ ʷ ϸ鼭, װ 
ϱ  ĺ ǴѴ.  ĺ ҵ  鼭(
   μ ִ), ޸𸮿 ҵǰų   ִ  
 ϳ ̻  μ̴.   ȿ  
͸ ٸ    ִ   ,  ޸
κ ý  Ͽ  ƿȴ. 

 ̹   Ͽ   ̸,  Ͽ  
ٽ   ִ.   ̹ ִ    
ʱ   Ͽ  ʿ䰡 . ̵   ׳ ϰ,  
μ ̵ ٽ  ,  ̹ ޸𸮿 ٽ 
 ȴ. 

 μ ϸ,    μ ޸ 
  鼭 ǰų  ɸ   ã´.  
õ μ ִ      ƿ ʴ
.       ̴. ޸𸮿 Ǿ ִ  
ϰų   . 

  ˰  ¡(page  aging) Ѵ.  
 ī͸  ־ (mem_map_t ڷᱸ Ǿ ִ), 
Ŀ      ϴ   ϴµ 
 ش.     ̸ ԰,   ; 
  ̰    ƿѴ.  ó Ҵ
   ʱ ̴ 3̴.   , ̰ 
3 Ǿ ִ 20 ȴ(    
̴). Ŀ      ̰ 1 ҽ 
    .  ⺻    , ̷ 
 (ٸ     Բ) swap_control  ڷᱸ 
Ǿ ִ. 

  Ǹ (̰  0 Ǹ)       
 óϰ ȴ. 
Ƽ   ƿ  ִ  ̴.  PTE Ű
 Ư Ʈ ؼ  ̿   Ѵ 
(׸ 3.2  ) ׷,  Ƽ  ݵ  Ͽ ϵ
 ϴ  ƴϴ.  μ   ޸  ڽ
  (vm_area_struct vm_ops  Ͱ Ŵ)   
,     ȴ.  ǵ ʾҴٸ   
 Ͽ  Ҵϰ    Ͽ Ѵ. 

    ̺ Ʈ ȿ ʴٰ ǥõǾ, 
⿡      Ǿ   
 ִ.      Ǿ, ׸   
    ġ  ȴ.    
Ͽ,    ٽ free_area ־  
° ȴ. Ŭ (Ƽ  ) Ǿ   
 ֵ free_area . 

  μ     ƿϰų ϸ,  
 ٽ .     , ý   
μ ϰ ȴ. ̷    ý ٽ 
 ̸  μ   ݾ ش. ̰ 
ü μ   ƿϴ ͺ ξ ϴ. 


3.9  ĳ(Swap Cache)

   Ͽ  ƿ ,   ʿ䰡  
   Ѵ.    ϰ  ޸𸮿 
( ) ÿ ϴ 찡 ִ. ̷   
 ޸𸮿   ƿǾٰ,  μ   ٽ 
Ͽ ޸𸮷 ٽ  쿡 ߻Ѵ.   ޸𸮻  
  ʴ   Ͽ ִ  纻 ȿϴ. 

 ̷  ϱ    ĳø  Ѵ.  
ĳô  ̺ Ʈ Ʈ,  Ʈ ýۿ ִ 
  ϳ شѴ.   ̺ Ʈ ϳ  
ƿ   ,     Ͽ,  ġ 
ִ Ѵ.   ĳ Ʈ  0 ƴ ,  
       ִٴ   Ÿ.  
( )  ,   Ʈ  ĳÿ 
ȴ. 

     Ͽ  ƿ ʿ䰡  , 
  ĳÿ ϸ,     ȿ Ʈ ִ 
,    Ͽ  ʿ䰡 . ֳϸ ޸𸮿 
ִ    Ϸκ    ѹ 
 ʾұ ̴. 

 ĳ Ʈ  ƿ    ̺ Ʈ
̴. ̵ ȿ ʴٰ ǥõǾ ,  ùٸ  
ϰ     ùٸ  ã  ֵ ϴ 
  ִ. 


3.10   (Swapping Pages In)

 α׷ ̹  ƿ    ִ   ޸𸮿 
 ϴ ó Ͽ   Ƽ  ٽ ʿ 
찡 ִ. 
 ޸𸮿    ϸ  Ʈ  ߻Ѵ. 
 Ʈ μ  ּҸ  ּҷ ȯ     
ü   ȣ̴.    ޸   ƿ
Ǿ    ϴ  ̺ Ʈ ȿ 
ʴٰ ǥõǱ    Ʈ ߻ϴ  ̴. μ 
 ּҸ  ּҷ ȯ  ⿡,   ü Ѱ
ָ鼭 Ʈ ߻  ּҿ Ʈ  ˸.   
 μ ü  ѱ  μ  ٸ. 
μ  ٸ Ǿ ִ   Ʈ óϴ ڵ 
Ʈ ߻   ּҸ ϰ  ִ   ּ  Ÿ 
vm_area_struct ڷᱸ ãƾ Ѵ.  ڵ Ʈ ߻  
ּҰ ִ ڷᱸ ã , ش μ ϴ 
vm_area_struct ڷᱸ  ˻Ѵ.  ۾ ſ ª ð ȿ
̷ ϹǷ, μ  ִ vm_area_struct ڷᱸ 
 ˻     ֵ ġǾ ִ . 

μ   ۾ Ͽ Ʈ ߻  ּҰ  
޸ ȿ ̶ Ǵϸ,  Ʈ ó  ϹȭǾ 
 ϴ  μ Ǵ ڵ Ѿ ȴ. Ϲ
ȭ  Ʈ ó ڵ Ʈ ߻  ּҿ   
̺ Ʈ ã´. ã  ̺ Ʈ Ҿƿ 
 Ű ,      ٽ  ޸𸮷 
; Ѵ.  ƿ    ̺ Ʈ  
μ ٸ, ·  μ   ȿ 
ʴٰ ǥϰ,  Ͽ  ġ ãµ ʿ  
  ̺ Ʈ ־ΰ  ִ.   ٽ  
޸𸮷     ʿ Ѵ. 

 ,  Ʈ ߻  ּҿ,    
ҵǾ ִ    ִ  ̺ Ʈ ˰
ִ. 
vm_area_struct ڷᱸ ڽ ϴ  ޸   
  ޸𸮷   ִ ƾ  ͸  
  ִ.  ̰ swapin ̴ .   ޸   
swapin  ǵǾ   װ Ѵ.   ý 
V  ޸  ƿ ̷ óǴµ,  ƿ ý V  
 ޸ , Ϲ  ƿ  ˰ ణ ٸ 
, Ư ó  ʿϱ ̴. 
swapin   쿣,  ̸ Ϲ   Ư ó
 ʿ ٰ Ѵ.  ִ   Ҵϰ,  
ƿ Ǿ   Ͽ оδ.   
 ִ ˷ִ , شϴ ȿ   ̺ 
Ʈ ´. 

  Ʈ ߻  Ⱑ ƴ϶,   
 ĳÿ  , ޸𸮷   ̺ Ⱑ ȵ
ٰ ǥð ȴ. ڿ   ⸦ õϸ,  ٸ  
Ʈ ߻ϰ,     Ƽ  ǥõǰ, ĳÿ
 
Ʈ ϰ ȴ.      ٽ  ƿ 
ʿ䰡 ִٸ,   ̹  Ͽ ֱ   
  Ͽ  ʿ䰡  ȴ . 

 Ϸκ        ̾ٸ,  
  ĳÿ ŵǰ,  ̺ Ʈ Ƽ,  
 ǥõȴ. 


 : ɸ, , , , Ź, ̴ 
 : ȣ


 ڷ.  386 ȣ ޸ Ű

ȣ (flyduck)

Ŀο ޸  ý  ش CPU   ޾ƾ Ѵ. 
 ޸  ý ̿Ϸ CPU  ¡ ޸ 
ȣ,   Ʈ ó   ִ Ŀ ؾ ϸ  
x86 迭 CPU 80386 ̷ ޸ Űĸ 
 ִ. ⼭ x86 迭 ޸ Űĸ  캸 
Ѵ.

8086 CPU 16Ʈ ׸Ʈ(segment) Ϳ 16Ʈ  ø
Ͽ 20Ʈ,  1MB ũ ּҰ Ѵ. 80286 8086 
Ȱ ּҰ ϴ (real mode) Բ, ο  
ּҰ  ϴ ȣ(protected mode) ԵǾ. 80286 
ȣ忡 ׸Ʈ ʹ (selector) ̸ ٲ
, ͸ 24Ʈ ̽ ּ(base address) ٲپִ ̺
 ũ ̺(descriptor table) ߴ.  忡 
24ƮǺ̽ ּҿ 16Ʈ  Ͽ  24Ʈ ּ
,  16MB ּҰ Ͽ. ⼭ Ϳ ũ 
̺ ̿Ͽ  ּҰ(linear address space) Ϻθ ų 
 ֵ ϴ  ׸̼(segmentation)̶ Ѵ. 80386
 ̷ ׸̼ ܿ ޸  ʼ ¡  Ŀ 
߰ǰ ޸   32Ʈ,  4GB ȮǾ. 

80386 ޸  ּҸ Ű  16Ʈ 
(selector) Ϳ 32Ʈ (offset) ȴ. ̵ 
̼ Ŀ   ּ(linear address) ȯǰ, ٽ 
 ּҴ  ̺ ̿ ¡ Ŀ    
ּ(physical address) ٲ ȴ.  AXP  ٸ CPU 
׸̶̼   , ̴   CPU Ư̶ 
  ִ. 
̴ ׸Ʈ Ϳ  ̶ܻ   ,  
    ʰ ִ. ٸ  CPU ϴ ٸ
ü  ׸̼    ּҰ 
 ּҰ  Ŀ ּҰ иϿ,  ּҰ 3GB 
Ŀ ּҰ 1GB Ҵ  ִ. 


Selector Linear Address Physical Address 

Offset


ʹ ũ ̺  ε,   ũ ̺ 
Ű Ÿ TI (Table Indicator) ׸, ׸ ̸  
 ִ  Ÿ RPL(Requestor Privilege Level)  ̷
 ִ. TI ׸ 0̸ ε  ũ ̺(Global 
Descriptor Table, GDT) ִ ũ͸  Ű, TI ׸ 1̸ 
 ũ ̺(Local Descriptor Table LDT) Ÿ. ⼭ 
GDT Ŀ 忡 Ǵ ̺̰, LDT  忡 
Ǵ ̴̺.  GDT' Ŀ  ϳ , LDT
  μ ϳ . ̵ ̺  ġ  
GDTR, LDTR̶ Ͱ Ű ִ. 

ũ ̺ 64Ʈ ũ, 32Ʈ ũ ̽ ּҿ 20Ʈ 
ũ (limit), ׸ Ÿ  ׸ ̷  ִ. ⼭ 
̽ ּҴ 4GB  ּҰ  ġ Ű,  
̽ ּҿ Ͽ   ޸  Ÿ. ̰  
20Ʈ ũ̱   Ե Ʈ(granularity bit) Ǿ  
4KB   ŸǷ   4GB ũ    ִ. 
̷  ̽ ּҿ  ϸ   ּҰ 
ּҰ  ȴ. , ׸̼ Ŀ򿡼 ͸ ̿Ͽ 
ũ͸ ã,  ִ ̽ ּҿ  Ͽ  ּ
 ּҸ   Ѵ. 

̷   ּҴ  ּҰ  ƴϸ, ¡ Ŀ 
  ּҸ   ִ. ¡  Ŀ򿡼   ּҸ  
ٽ 10Ʈ ũ  丮 ε(page directory index), 10
Ʈ ũ  ̺ ε(page table index), 12Ʈ ũ 
 ɰ.  丮 ε   丮 
 ̺ ּҸ    ִ. ٽ  ̺  ε 
   丮 Ű  ̺  
(page frame) ġ   ִ. ̷    
ּҿ   ϸ   ּҰ   ȴ. ̴  
׸ 3.3  3ܰ  ̺  ϳ  2ܰ  
̺ ϸ ȴ. ⼭  12Ʈ̹Ƿ  ϳ  
 212,  4KB ũ⸦ ,  ǵ  ũ 
 ̴. ̷  ¡ Ŀ Ͽ  ּҴ   
ּҷ ȯǸ,   CPU ̷  Ͽ ¡  
 ִ. 


=====================================================================


4 

μ (Processes)



<< 忡 μ ̸  Ŀ   μ 
   ϰ ִ Ѵ.>>

μ ü ȿ ۾ Ѵ.  α׷ ũ  
 · Ǿ ִ  ɰ ڷ ε,  ü 
 ̴.  μ  α׷   
ִ.  μ  ɵ Կ  Ӿ ȭϴ
 ̴. α׷ ɾ  Ӹ ƴ϶, μ
α׷ ī, CPU , ׸ ƾ,  ּ,  
 Ͻ ͸ ϴ μ õ Բ .  
  α׷,  μ  ũμ ȿ Ͼ
   Ѵ.  Ƽμ ü̴. μ
   ѿ å   ½ũ̴. 
 μ ϳ  ߴٰ ؼ ̰ ý   
ٸ μ װ  ʴ´.  μ ڽ  
ּҰ Ǹ, Ŀ ϴ    ʰ 
ٸ μ ȣۿ  . 

μ  ִ   ý  ڿ Ѵ.  
ϱ ؼ CPU, ɾ ͸ ϱ ؼ  
޸𸮸 Ѵ.  ý ϵ    ְ, 
ý    ġ  Ǵ    ִ. 
  ý ڿ ϰ μ ϰ ϱ 
ؼ μ ڽŰ μ  ִ ý ڿ   
ϰ ־ Ѵ. 
ϳ μ ý   ޸𸮳 CPU κ 
ٸ, ٸ μ鿡   ̴. 

ýۿ  ߿ ڿ CPU, κ ýۿ ϳۿ 
.  Ƽμ(multiprocessing) üε,   
 CPU    μ  Ͽ CPU Ȱ
شȭϴ  ̴. μ  CPU   (κ 
 ̷),  μ Ǳ ؼ CPU   
 ٷ Ѵ. Ƽμ̶   ̴. , μ 
 ޷ ϱ  ( ý ڿ ٸ)  
Ǹ, ٸ ִٰ ڿ ԵǸ μ ٽ  
ִ. DOS  μ(uniprocessing) ýۿ CPU ׳ 
ƹ͵  ʰ   ð Ѵ. Ƽμ ýۿ 
ÿ  μ ޸  Ѵ. μ  
   ü CPU Ѿ ٸ    μ 
ϵ Ѵ. 
 μ      ϴ  
 ̰,   ϱ   층 å 
Ѵ. 

     ϴµ,  ELF, JAVA  
ϳ. ̵ μ ý  ̺귯(shared library) 
  ֵ ϴ Ͱ    ϰ ؾ Ѵ. 


4.1  μ 

 ý  μ   ֵ,  μ 
task_struct ڷᱸ ǥȴ (½ũ μ  
 ǹ̷ ȴ). task ʹ ýۿ ִ task_struct  
Ű ͵ 迭̴. ̴ ý   ִ μ 
 task  ũ  ѵǾ ִٴ  ǹѴ.  ũ 
⺻ 512̴. μ  ý ޸𸮿 ο 
task_struct ҴǾ task Ϳ ߰ȴ.  ǰ ִ 
 ã  ϱ ؼ, ̸ current Ͱ Ű ִ. 

Ϲ μ  ƴ϶  ǽð(real time) μ 
Ѵ.  μ ܺο ߻ϴ (event) ſ  
ؾ ϹǷ (ٽ ϸ ǽð), 췯 ̵ Ϲ 
 μʹ ٸ Ѵ.
task_struct ڷᱸ ϰ ,  ׸  
    ִ. 

     (State) : μ Ǹ鼭 ֺ Ȳ   ¸ 
        Ѵ.  μ   ¸  .

          (Running) : μ ̰ų( μ
             ų),    ִ غ Ǿ(ý 
             CPU ϳ ҴǴ  ٸ ִ ) Ÿ.

          (Waiting) : μ ̺Ʈ ڿ ҴǱ 
             ٸ  Ÿ.  ΰ - ͷƮ
             (interruptible) ͷƮ (uninterruptible) - 
              μ ¸  ִ. ͷƮ Ǵ 
              μ ñ׳ο  ͷƮ  ְ, 
             ͷƮ   μ ϵ  
             ٸ鼭  ȯϿ ͷƮ ʴ´ . 

          ߴܵ(Stopped) : μ ߴܵ , 밳 ñ׳ 
             ޾ ̴. μ   ̷ ¿ 
             ִ. 

          (Zombie) : ̰  μ,  
               task_struct ڷᱸ task Ϳ 
             ִ ̴.    ֵ,  μ
             ̴. 

     층  : 췯 ýۿ ִ μ  
        Ǳ⿡  ϰ Ǵϱ    
       ʿ Ѵ. 

     ĺ(Identifier) : ý  μ μ ĺڸ 
        ִ. μ ĺڴ task Ϳ  ε 
       ƴϰ, ׳ ܼ ̴.  μ   
       ĺڿ ׷ ĺڸ  ִµ, ̰͵  μ 
       ýۿ ִ ϰ ġ  ϴ  ϴµ
       ȴ. 

     μ  :   н IPC Ŀ 
       ñ׳, ,  Բ, ý V IPC Ŀ 
        ޸, , ޽ ť  Ѵ.  
       Ǵ IPC Ŀ ؼ 5忡 Ѵ. 

     (Link) :  ýۿ, ٸ μ   μ
        .ý  μ -  μ ϰ
       - θμ . ο μ Ǵ  
       ƴ϶  μκ (copy),Ȥ (clone)ȴ.
       μ Ÿ task_struct , θ μ, 
       (sibling, θ  μ) μ, ڽ ڽ(child)  
       μ鿡  ͸  ִ. pstree  Ͽ 
        ýۿ  μ鰣  踦   
       ִ. 

     init(1)-+-crond(98)

     |-emacs(387)

     |-gpm(146)

     |-inetd(110)

     |-kerneld(18)

     |-kflushd(2)

     |-klogd(87)

     |-kswapd(3)

     |-login(160)---bash(192)---emacs(225)

     |-lpd(121)

     |-mingetty(161)

     |-mingetty(162)

     |-mingetty(163)

     |-mingetty(164)

     |-login(403)---bash(404)---pstree(594)

     |-sendmail(134)

     |-syslogd(78)

     `-update(166)

        Ҿ, ý   μ init μ
        task_struct ڷᱸ ϴ  ḮƮ Ǿ 
        ִ.  Ʈ  Ŀ ý   μ
        鿩ٺ  ְ Ѵ. ps kill   Ϸ 
        ̷  ʿ䰡 ִ. 

     ð Ÿ̸ : Ŀ μ ð ִ  Һ
       ϴ CPU ð   Ѵ. Ŀ  Ŭ ƽ(tick)
       ,  μ ý   忡  
       ð  jiffies  Ѵ.    
       Ÿ̸(interval timer) ϴµ, μ ý  
       Ͽ Ÿ̸Ӹ ϰ  ð  ڽſ 
       ñ׳   ֵ Ѵ.  Ÿ̸Ӵ ѹ ߻ϴ
       (single-shot) Ÿ̸ , ֱ ߻ϴ Ÿ̸ 
        ִ. 

      ý : μ       , 
       task_struct    (descriptor)  
       Ϳ, ΰ VFS inode ͸  ִ. VFS inode
         ýۿ ִ ̳ 丮 ϰ ϴ
       , Ϻ  ýۿ   ̽ ϴ
       ̴.   ý  ϴ 9忡 
       Ѵ. ù° VFS inode μ Ʈ(Ȩ 丮) 
       Ű, ι°  pwd 丮 Ҹ  丮
       ̴. pwd н ɾ pwd  , print 
       working directory(۾ 丮 ϶) ̴.  
        VFS inode count ׸ ־,   μ ׵
        ϰ ִ Ÿ. ,  丮  
       丮   丮  μ pwd 丮 
       Ǿ ִٸ  丮   . 

      ޸ : κ μ(Ŀ    ) 
        ޸𸮸 ,  Ŀ   ޸𸮰 ý 
        ޸  Ǿ ִ ؾ Ѵ. 

     μ  ؽƮ(Processor Specific Context) : μ 
       ý      ִ. μ 
        , μ  Ϳ   Ѵ. ̰ 
       μ ؽƮ̸, μ  ߴܵ  CPU  
       Ʈ   μ task_struct Ǿ Ѵ. 
       췯  μ ٽ  ,  ؽƮ  
       κ ȴ. 


4.2 ĺ(Identifiers)

 ٸ н  ýۿ ִ ϰ ̹   
 ˻ϱ ؼ  ĺڿ ׷ ĺڸ Ѵ.   
ý  ϵ ǰ   , ٱ 
 ̳ 丮    ٷ. 
⺻ ѵ б,    , Ư ׷쿡 
ϴ μ, ý  μ   ڿ 
Ҵȴ.     ٸ    ִ.  
,  Ͽ ؼ  ڴ б ⸦   , ׷ 
б⸸   ְ, ý ٸ μ  ϵ   
ִ. 

REVIEW NOTE : ߰Ͽ Ʈ Ҵϴ  (777) ϶.

׷  Ѹ  ڳ ý  μ 
ƴ, ڵ ӿ ̳ 丮  ִ ̴. 
 ,  Ʈ Ʈ ϴ  ϳ ׷ 
  鸸 Ʈ ҽ ڵ带 а   ֵ   
ִ. ϳ μ  ׷쿡   ְ (⺻ ִ 32) 
̰͵  μ task_structִ groups Ϳ Ǿ ִ. 
μ  ִ ׷  ϳ Ͽ    ִ
,  μ  Ͽ  ش ׷    ȴ.

μ task_struct    ĺڿ ׷ ĺڰ 
ִ. 

     uid, gid : μ Ų   ĺ, ׷ 
       ĺ

     ȿ(effective) uid, gid :  α׷ uid gid μ
        Ų  κ ڽ ( ̹ 
       ϴ VFS inode  Ӽ) ȭų  ִ. ̷ 
       α׷ setuid α׷  ˷ , ̷  α׷
        Ư Ʈũ   ٸ μ ҿ 
       ǰ ִ   ϱ    ȴ. 
       ȿ uid gid setuid α׷ uid gid̸,  uid
        gid ״ ´. Ŀ Ư  ˻  ȿ uid
        gid ˻Ѵ.

      ý uid, gid : ̰ ȿ uid,  gid  ,  
       ý   ˻  ȴ. NFS Ʈ 
       ýۿ   NFS     μ
        ƴ϶ Ư μμ  ؾ ϱ  ʿ
       ϴ. ̷ 쿡  ý uid gid ȴ (ȿ 
       uid, gid  ʴ´). ̷ ν Ǹ  
       ڰ NFS  kill ñ׳   ְ Ǵ  ´.
       kill ñ׳ Ư ȿ uid gid  μԸ 
       ȴ. 

     (saved) uid gid : ̴ POSIX ǥ  䱸׿  
       ̸ ý  ̿Ͽ μ uid gid ٲٴ 
       α׷ Ѵ.  uid gid ٲ ִ  
       uid gid ϴµ ȴ. 


4.3 층(scheduling)

 μ    (user mode),    ý
 (system mode) ȴ. ϵ ̷  带 ϴ 
 ϴ ϵ  ٸ, Ϲ  忡 
ý   ȯϰų ݴ ȯϴ  Ŀ ִ. 
  ý 忡  Ͽ ξ    ִ. 
 ý     忡 ý   ȯǾ 
 ǰ ȴ. 
  Ŀ μ ٸ  ȴ.  μ
    μ  ʴ´ (non-preemptive). ,
ڱⰡ Ǳ Ͽ ٸ μ ߴܽų  .  μ
  ý ̺Ʈ ߻ϱ⸦ ٷ߸   CPU ƾ
ڴٰ ǴѴ.   , μ Ͽ  ڸ о 
Ͽ ٷ   ִ.  ٸ ý  ߿ , ý
忡 ߻Ѵ. μ   б Ͽ ̺귯 Լ
 ϸ, ̸ Ͽ ʷ  Ͽ ڸ д ý  
ȣѴ.  쿡 ٷ ϴ μ Ͻ ߴ ǰ ٸ 
  μ õǾ ȴ.

μ ׻ ý  ȣϸ    ٸ ȴ. ׷
 ұϰ  μ ٸ   ʹ  CPU ð
   , ̷ 쿡   층
(pre-emptive scheduling) Ѵ.  å  μ 
200ms ª ðȸ Ǹ ,  ð  ٸ μ
 õǾ Ǹ,  μ ڽ ʰ   
Եȴ. ̷  ð  Ÿ ̽(time-slice) Ѵ. 

  ִ μ ߿  Ҹ ġ ִ μ 
 ϴ  췯(scheduler) ̴. డ 
 CPU ڽ ϱ ٸ.   켱ǿ 
 층 ˰ Ͽ,  μ ٸ μ ̿
   .  ο μ Ű Ͽٸ,
 μ ¿ μ ִ  ͵, ٸ ؽƮ
 task_struct ڷᱸ Ѵ. ׸    μ
¸ (̰͵  μ  ٸ)ϰ ý  
 μ Ѱش. 췯 ý  డ μ
鿡 ϰ CPU ð Ҵϱ ؼ  μ  
 task_struct Ѵ.

     å(policy) :  μ  층 å̴.  
       μ (normal) μ ǽð(real time) μ
           . ǽð μ ٸ  
       麸  켱  ִ. , ǽð  μ
        ̶,  μ ׻  ȴ. ǽð
       μ   policy  ִ.
       ϳ  κ(round robin)̰, ٸ ϳ FIFO(first
       in first out)̴.  κ 층 డɸ 
        ǽð μ ʷ ǰ, FIFO 층
        ǽð μ  ť ִ   
       Ǹ    ٲ ʴ´. 

     켱(priority) : ̰ 췯 μ  켱
       ̴.  ̰ μ  , μ  
       ִ ð(jiffies)̴. μ 켱 ý 
       ̳ renice  ؼ   ִ. 

     ǽð 켱(rt_priority) :  ǽð  μ 
       ϸ, ̰͵ ý ǽð ƴ μ麸  
       켱  층 ȴ.  ׸ 췯  
       ǽð μ鰣  켱   ֵ 
       Ѵ. ǽð μ 켱Ǵ ý  ؼ ٲ 
        ִ. 

     ī(counter)   μ   ִ ð(jiffies 
       )̴.   μ ó   priority 
        Ǹ, Ŭ ƽ  پ. 

췯 Ŀξȿ   쿡 ۵ȴ. 췯  
 ť  ̳, ý   , μ ý
 忡 μ  ƿ ٷ  ȴ.  ٸ 
 ý Ÿ̸Ӱ  μ counter  0  
̴. 췯      ϵ Ѵ. 

     Ŀ ۾(kernel work) : 췯 Ϲݺ ڵ鷯(bottom half
       handler) ϰ, 췯 ۾ť(task queue) óѴ.
       ̵  Ŀ  11忡 ڼϰ ٷ . 

      μ(current process) :  μ ٸ μ
       õǱ  óǾ Ѵ. 

        μ 층 å   κ̸ μ  
       ť ǵư. 

        ½ũ ͷƮ (INTERRUPTIBLE)ϰ  
        Ŀ ñ׳(signal) ޾ (RUNNING) · 
       ٲ. 

        μ ŸӾƿǸ, ̰ (RUNNING) ° 
       ȴ. 

         μ (RUNNING) ̸,  ° 
       ȴ. 

       μ ߿ °  (RUNNING)̰ų ͷƮ 
       (INTERRUPTIBLE) ƴ ͵ ť ȴ. ̰ 
       췯  μ ã  ̵ Ѵٴ ǹ
       ̴. 

     μ (process selection) : 췯 ť ִ 
       ߿ Ҹ μ ã´. (ǽð 층
       å ) ǽð μ , ̰͵  
       麸  ġ ´.  μ ġ 
       counter  ǽð μ counter 1000 
       ̴. , ýۿ డ ǽð μ  
       ׻ డ  μ  ȴ. ־ Ÿ 
       ̽  Ҹ ( counter )  
        ý  켱  ٸ μ麸 Ҹ
       ѵ ̰ 翬ϴ.  μ Ȱ 켱 
       , ť  ʿ ִ  õȴ.  μ
        ٽ ť ǵư. 
        μ  켱    ýۿ
       ,  μ ʷ ȴ. ̰  κ 
       층̴. , μ ڿ ʿ ϰ ǹǷ, 
        ٲ ȴ.

     μ ü(swap process) :  Ҹ μ   
       μ ƴ϶,  μ ߴܵǰ ο μ
        Ǿ Ѵ. μ ߿ CPU Ϳ, ý
         ޸𸮸 ϰ ȴ. μ ƾ ȣ
        Ϳ ִ ڵ Ѱָ, ȣ ƾ 
       ƿ  ּ   ÿ صα⵵ Ѵ. 
       췯    μ ؽƮ ȿ 
       Ǵ ̴. Ư  Ŀ 忡 ֱ , 
          μ̴.  μ   
       ׷ ī(PC) μ  θ Ͽ  
        ° μ task_struct  ڷᱸ Ǿ 
       Ѵ. ׸  ο μ    ¸ 
       εؾ Ѵ. ̰ ý  ۾,  CPU 
       Ȯ     ó , 밳 
       ۾  ϵ  ִ. 

        μ ؽƮ ü 췯  ϴ ۾
       ̴. ,  μ  ؽƮ  μ
       췯  ִ ϵ ؽƮ  
       ̴. , ο μ ؽƮ εǾ ,
       װ  μ α׷ īͿ   
       Ͽ 췯  ¸ ִ  ̴. 

       ,  μ ο  μ  ޸𸮸 
       Ѵٸ, ý  ̺ Ʈ  ʿ䰡 
       ִ.   ൿ ŰĿ  ٸ.  AXP  
       μ, ȯ  ̺(translation look-aside table) 
       ĳõ  ̺ Ʈ ϹǷ,  μ 
       ϴ ĳõ ̺ Ʈ ߸ Ѵ. 


4.3.1 Ƽμ ýۿ 층 

 CPU  ý  迡 ׸  ̴. 
׷  SMP(Symmetric Multi-Processing,Ī Ƽμ) 
ü  ۾  ôǾ. ̴ ý۳  
CPU ۾ ϰ йϴ ̴.  й谡  ѷ 
Ÿ  췯̴. 

Ƽμ ýۿ  μ ٻڰ  μ 
ϰ ֱ ٶ.  μ  μ Ÿ ̽ 
 ҸϿų,  ý ڿ ٷ  ,  
췯 Ѵ.  SMP ýۿ   ָ  ýۿ ִ 
idle μ   ϳ ƴ϶ ̴. ϳ μ ִ 
ýۿ task  ù° ½ũ idle μ̴. ݸ鿡 
SMP ýۿ CPU ϳ idle μ ,  ϳ 
̻ idle CPU   ִ. Դٰ CPU ϳ  μ
 Ƿ, SMP ýۿ  μ  μ idle 
μ Ͽ Ѵ. 

SMP ýۿ  μ task_struct ڽ  ǰ 
ִ μ ȣ(processor)  Ͽ μ ȣ
(last_processor) ִ.  μ ϵ   
 ٸ CPU    ,  processor_mask
 ̿Ͽ  μ ý Ư μ Ǵ  μ
 ǵ   ִ.  NƮ Ǿ   
μ μ N   ִ. 췯  ο 
μ   processor_mask  μ ȣ Ǿ 
  μ  ʴ´. 췯   
μ Ǿ μ ణ ϰ ش. ̴  
μ ٸ μ ű  ɻ 尡 ߻ϴ 
  ֱ ̴. 


                 fs_struct             inode    
                 +-------+           +-------+
             +-->| count |       +-->|       |
             |   +-------+       |   |       |
             |   | umask | 0x022 |   |       |
             |   +-------+       |   |       |
task_struct  |   | *root |-------+   |       |
|         |  |   +-------+           |       | 
+---------+  |   | *pwd  |-------+   +-------+
| fs      |--+   +-------+       |
+---------+                      |     inode    
| files   |--+                   |   +-------+
+---------+  |                   +-->|       |
|         |  |                       |       |
|         |  |   files_struct        |       |
             |   +----------+        |       |
             +-->|          |        |       |
                 +----------+        |       |
                 | close_on |        +-------+
                 | _exec    |
                 +----------+
                 | open_fs  |
                 +----------+
                 | fd[0]    |          file                inode  
                 +----------+        +-----------+       +-------+
                 | fd[1]    |------->| f_mode    |   +-->|       |
                 +----------+        +-----------+   |   |       |
                 |          |        | f_pos     |   |   |       |
                 |          |        +-----------+   |   |       |
                 +----------+        | f_flags   |   |   |       |
                 | fd[255]  |        +-----------+   |   |       |
                 +----------+        | f_count   |   |   +-------+
                                     +-----------+   |
                                     | f_owner   |   |
                                     +-----------+   |
                                     | f_inode   |---+
                                     +-----------+
                                     | f_op      |----->file opertion
                                     +-----------+      routines
                                     | f_version |
                                     +-----------+

              ׸ 4.1 : A Process's Files


4.4  

׸ 4.1  μ  ý   ϴ ΰ ڷ
 ش. 
ù°, fs_struct  μ VFS  inode  Ϳ umask
 ϰ ִ. 
umask ο     ⺻ ̸ ý ݿ   
ٲ  ִ. 

ι° ڷᱸ files_struct  μ ϰ ִ  
ϵ鿡        ִ. α׷  ǥ  Է(standard 
input)
 а, ǥ (standard output) .  ޽  
ǥ (standard  error)  ȴ. ̵ ϼ ְ, ܸ 
/̳,  ġϼ , α׷ ־ ̵ δ 
Ϸ óȴ.   ڽ Ÿ (descriptor) 
, files_struct  μ ϴ   ϴ file ڷ
   ͸ 256 . f_mode ׸   
 (б , а ,  ) Ÿ. f_pos  
 аų   ġ  ִ. f_inode  Ͽ شϴ VFS 
inode Ű , f_ops  Ͽ Ͽ  Ϸ   
  ִ ƾ ּ ͸ Ų. ̷  Լ  
 Լ   ִ. ̷ ̽ ߻ȭϴ  ſ 
ϸ         ֵ ش. 
ڿ 캸   ̷ Ŀ Ͽ 
Ǿ. 

ϳ    files_struct ִ  file   ϳ 
ο file ڷᱸ Ű  ȴ.  μ ó  
    ڰ  ִٰ Ѵ. ǥ Է, ǥ 
, ǥ   , ̵ 밳  μ  θ 
μκ ӵȴ.  Ͽ    ǥ ý  
ϸ, ⿡  ڸ Ѱְų ǵ ް ȴ. ̵ 
 μ fd Ϳ  ε , ǥ  Է, ǥ , 
ǥ   0, 1, 2  ڸ  ִ.  Ͽ    
file ڷᱸ    ƾ VFS inode  Ѵ. 


4.5  ޸(Virtual Memory)

μ  ޸𸮿  ҽ  డ  ڵ 
Ͱ  ִ. 
ù°, ε α׷ ̹ ִ. ls    
.   ٸ  ̹  డ ڵ 
ͷ Ǿ ִ. 
̹ Ͽ డ ڵ شǴ α׷ ͸ μ
  ޸𸮿 εϱ  ʿ    ִ.  °
, μ ó   ʿ信 Ͽ -  , а ִ 
   Ͽ - () ޸𸮸 Ҵ  ִ. ̷ 
 Ҵ  ޸𸮸  Ǳ ؼ μ  
޸𸮿 Ǿ Ѵ. °,  μ  ó ƾ
   ϰ ̴ ڵ ̺귯 ϰ ִ. 
 μ Ȱ ̺귯  Ѱ  ִ´ٴ 
  ȵǸ,   ǰ ִ  μ ÿ  
 ִ  ̺귯 Ѵ. ̵   ̺귯 ִ ڵ
 ʹ  μ  ּ  Ǿ  Ӹ ƴ϶, 
 ̺귯 ϴ ٸ  μ  ּ  
Ǿ Ѵ. 

 ־ ð   μ  ޸𸮿  ִ ڵ 
͸   ʴ´. ڵ ߿  Ư ,  
 μ ۵  Ǵ  ̺Ʈ ߻  ʿ  
ڵ尡 ִ. ׸  ̺귯 ƾ  ϴ  
ƴ϶ Ϻθ Ѵ.      ִ ڵ带  ޸
  εϴ     ִ. ̷  ý۳ 
μ ŭ ݺȴٸ ý ſ ȿ  ̴. 
ſ  䱸 ¡(demand paging)̶  Ѵ. 
䱸 ¡ μ  ޸𸮸 Ϸ ϴ , 
 ޸𸮸  ޸𸮷 ´.    Ŀ μ
 ڵ ͸ ٷ   ޸𸮿 εϴ , μ 
 ̺ Ͽ   ϰ  δ 
޸𸮿  ʴٰ ǥѴ.  μ ڵ峪 Ϳ 
Ϸ ϸ,  ý  Ʈ ߻ϰ,  Ŀη Ͽ 
 Ȳ ذ϶  Ѱش. ̷   Ʈ ذ
Ϸ,  μ ּ  ִ   ޸  
,   ޸𸮰 𿡼   ޸𸮿 ε  ִ 
 ˾ƾ߸ Ѵ. 

 Ŀ ̵   ޸     ʿ䰡 ִ. 
 μ  ޸  task_struct Ű ִ 
mm_struct ڷᱸ Ǿ ִ. μ mm_struct ڷ
 ε  ̹   μ  ̺ 
 ͵  ִ. ⿡  μ   ޸  
Ÿ vm_area_struct ڷᱸ Ʈ  ͵  ִ. 

  Ʈ  ޸𸮿  Ǿ , ׸ 4.2
 μ  ޸ ġȲ װ ϱ  
Ŀ ڷᱸ ش.  ޸   ҽκ 
Ƿ,    ޸ ó ƾ vm_area_struct ִ 
vm_ops Ͽ Ű ν ̽ ߻ȭ Ͽ. ̷ 
ν Ϻ 񽺰 ޸𸮸   ٸ  ϴ Ͱ 
 μ  ޸𸮸 ϰְ ó  ְ ȴ. 
 , ⿡  μ ޸𸮿 ϴµ  ޸𸮰 
   Ҹ ƾ  ִ. 
 Ʈ ̷  óȴ. 



                                        Processes Virtual Memory
                                              +----------+
                                              |          |
                                              |          |
task_struct                                   +----------+
|        |   mm_struct     vm_area_struct  +->|          |
+--------+   +--------+     +----------+   |  |          |
| mm     |-->| count  | +-->| vm_end   |---+  |          |
+--------+   +--------+ |   +----------+      |          |
|        |   | pgd    | |   | vm_start |---+  |          |
|        |   +--------+ |   +----------+   |  | Data     |
|        |   |        | |   | vm_flags |   |  |          |
             |        | |   +----------+   |  |          |
             |        | |   | vm_inode |   |  |          |
             |        | |   +----------+   |  |          |
             +--------+ |   | vm_ops   |   |  |          |
             | mmap   |-+   +----------+   +->|          | 0x8059BB8
             +--------+     |          |      +----------+
             |mmap_avl|     +----------+      |          |
             +--------+     | vm_next  |---+  |          |
             |mmap_sem|     +----------+   |  |          |
             +--------+ +------------------+  |          |
                        |                     +----------+
                        |  vm_area_struct   +>|          |
                        |   +----------+    | |          |
                        +-->| vm_end   |----+ | Code     |
                            +----------+      |          |
                            | vm_start |----->|          | 0x8048000
                            +----------+      +----------+
                            | vm_flags |      |          |
                            +----------+      |          |
                            | vm_inode |      |          |
                            +----------+      |          |
                            | vm_ops   |      |          |
                            +----------+      |          |
                            |          |      |          |
                            +----------+      |          |
                            | vm_next  |      |          |
                            +----------+      |          |
                                              |          | 0x0000000
                                              +----------+


              ׸ 4.2 : A Process's Virtual Memory



 Ŀ  μ   ޸𸮿 ο  
,  ޸     ޸𸮿   ذ ,  
 μ vm_area_struct ڷᱸ   ׼ϰ ȴ.  
 ùٸ vm_area_struct ã  ɸ ð ý ɿ  
ū  ģ.   ׼  ϱ Ͽ  
vm_area_structڷᱸ AVL(Adelson-Velskii and Landis)Ʈ 
 صд. 
 Ʈ  vm_area_struct(,  )  Ϳ  
ʹ ϴ vm_area_struct  ̴.  Ͱ 
Ű      ּҸ  ,  Ͱ 
Ű      ּҸ  ִ. ´ 带 ã
 Ʈ Ʈκ  Ͽ ã vm_area_struct ã 
  Ǵ  ͸ 󰣴.  󿡴 ¥  
 ο vm_area_struct  Ʈ  ִµ ߰ ó 
ð ʿϴ. 

 μ  ޸𸮸 Ҵ    ޸𸮸 ¥
 Ȯ  ʴ´.  ο vm_area_struct ڷᱸ  
 ޸𸮸 Ÿ.  ڷᱸ μ  ޸ Ʈ  
ȴ. μ ο  ޸    ּҿ  
 ϸ  Ʈ ߻ϰ ȴ. μ  ּҸ ؼ
Ϸ ,  ޸𸮿 ؼ  ̺ Ʈ  
ʱ , μ ̸ ϰ  Ʈ ܸ ߻ϸ,
 Ŀ ̸ ϵ Ѵ.    ּҰ  
μ  ּ  ִ ã´. ׷ٸ  شϴ 
PTE ϰ,  ޸  ҴѴ. 
ڵ峪 ʹ Ͻý̳  ũκ   
;   ִ.  μ  Ʈ ߻ ɿ 
ٽ   ,  ޸𸮰  ϹǷ ۾ 
  ִ. 


4.6 μ ϱ

ý ó ۵  ý Ŀθ忡 , ʱ μ 
 ϳ μ Ѵ. ٸ μ  ʱ μ 
ð   ǥǴ  ¸  ִ. ̰͵ ý
 ٸ μ   , ʱ μ 
task_struct  ȴ. ý ʱȭ  ܰ迡, ʱ 
μ init ϴ Ŀ 带 ϰ ƹϵ ʴ 
 .  ٸ     췯  idle 
 Ѵ. idle μ task_struct ϰ  Ҵ
  ƴϰ Ŀ    ǵ ,  ȥ
 init_task Ѵ.

init Ŀ (Ǵ μ) ý ù° ¥ μ, 
μ ĺڷ 1 ´.  μ ý ʱȭ Ϻθ 
ϰ (ý ܼ , Ʈ  ý Ʈϴ  ), 
ý ʱȭ α׷ Ѵ. ýۿ  ٸ 
/etc/init, /bin/init, /sbin/init  ϳ̴. init α׷ ý
ۿ  μ  ؼ /etc/inittab̶ ũƮ 
 Ѵ.   μ  ٸ μ ⵵ Ѵ. 
 , getty μ ڰ α õ  login 
 ⵵ Ѵ. ý۳  μ init Ŀ  
ڼ̴. 

 μ  μ ϰų  μ 
ϸ鼭 ȴ.  ½ũ ý (fork clone) ؼ  
,  Ŀ Ŀ 忡 Ѵ. ý   
 ڽ Ͽ ϱ ٸ ο μ ְ ȴ. 
 task_struct ڷᱸ ý   ޸𸮿 Ҵǰ, ϳ 
Ǵ     μ (ڿ Ŀ)  
Ҵȴ. ýۿ ִ ĺڵ ߿  ο ĺڰ 
. ׸  μ 翬ϰԵ θ μ ĺڸ 
 ִ.   task_struct task Ϳ Ҵǰ,  (current) 
μ task_struct    task_struct ȴ. 

μ  ,   μ  纻 ϴ
 ƴ϶ ڿ ϵ Ѵ. μ ϵ, ñ׳ ڵ鷯 
޸𸮰 ⿡ شȴ. ڿ   ̵ count  
 ΰ μ ΰ ڿ  ġ  Ҵ  
ϵ Ѵ. ׷,     μ  ޸𸮸 
 ,  μ task_struct  μ mm_struct 
 ͸ , mm_struct count  Ǿ ̸ ϰ 
ִ μ  Ÿ. 

μ ޸𸮸 ϴ    Ʈ Ѵ.  
vm_area_structڷᱸ ̵ ϴ mm_struct ڷᱸ 
 μ  ̺ Բ   Ѵ. μ  
޸𸮴     ʴ´.  ޸ Ϻδ 
  ޸𸮿 ְ,  ٸ  κ   μ  
̹ ,  κ  Ͽ   Ƿ, ̰ 
 ư ð ҿϴ ̴. ſ  "Ͻ 
(copy on write)"  ϴµ, ̰  μ  ϳ 
 õ  ޸𸮸 ϴ ̴.  ޸ ߿ 
ϵ  κ ( װ    ִ ̶ ϴ) 
ƹ   μ ̿ ȴ.  ڵ  б 
 ޸𸮴 ׻ ȴ. 
"Ͻ " ϱ ؼ,   ִ   ̺ 
Ʈ б  ǥõǰ, ̸ Ÿ vm_area_structڷᱸ
 "Ͻ " ǥѴ. 
׷ μ  ϳ   ޸𸮿  ϸ   Ʈ 
߻Ѵ. ̶  ޸ 纻   μ  
ϰ  ޸  Ѵ. 


4.7 ð Ÿ̸

Ŀ  μ  ð, μ  CPU ð 
Ѵ.  Ŭ ƽ Ŀ  μ ý   
  ð  jiffies  Ͽ Ѵ. 

̵ ݰ Ÿ̸ӿ ܿ,  μ Ͽ  
 ִ  Ÿ̸Ӹ Ѵ. μ ̵ Ÿ̸Ӹ ̶ ð 
  ڽſ  ñ׳ µ   ִ. 
    Ÿ̸Ӹ Ѵ. 

     (Real)  ðμ Ÿ̸ ƽ, Ÿ̸Ӱ Ǹ 
       μ SIGALRM ñ׳ ޴´. 

     (Virtual) μ   ðμ Ÿ̸  ƽ, 
       Ǹ SIGVTALRM ñ׳ ޴´. 

     ϶(Profile) μ  ð μ ٸ  
       ý  ð ģ Ÿ̸ ƽ, Ǹ SIGPROF 
       ñ׳ ޴´. 

ϳ Ǵ   Ÿ̸Ӱ    ,  μ 
task_struct ڷᱸ ʿ   Ѵ. ý  
Ͽ ̵  Ÿ̸Ӹ ϰ, ϰ, ߰,      
ִ.  Ÿ̸ӿ ϶ Ÿ̸Ӵ Ȱ  óȴ.  Ŭ 
ƽ  μ  Ÿ̸Ӵ ϸ, Ǹ شϴ 
ñ׳ ޴´. 

 ð  Ÿ̸Ӵ ٸ Ÿ̸ӵ ణ ٸ,  ̵
  11忡 ϰ  ִ  Ÿ̸  Ŀ Ѵ.  
 ڽ timer_list ڷᱸ  ,   Ÿ̸Ӱ 
ǰ , ̸ ý Ÿ̸ Ʈ ť ִ´. Ÿ̸Ӱ 
Ǹ Ÿ̸ Ϲݺ ڵ鷯 ̸ ť ϰ  Ÿ̸ ڵ鷯 
θ.  ڵ鷯 SIGALRM ñ׳  ߻ϰ,   Ÿ̸Ӹ 
Ͽ ̸ ٽ ý Ÿ̸ ť ִ´. 


4.8 α׷ ϱ 

н   α׷ ɾ  ɾ 
ؼ(command interpreter)  ȴ. ɾ ؼ ٸ 
μó  μ̸, (shell) ̶ Ҹ.  
   ִµ    δ sh, bash, tcsh ִ. 
cd pwd   ο   ɾ ϰ, ɾ
    ִ  ̴. ɾ  ԷµǸ  ȯ溯 
PATH  μ ã (search path)  ̸  
 ̹ ã´.  ã ̸ εϰ Ѵ.  տ
  fork Ŀ ̿Ͽ ڱڽ  , ̷ 
   ڽ  μ  ϰ ִ  ̹
 (⼭ ) ã   ̹ üѴ.    
ϷǱ,  ڽ μ Ǳ⸦ ٸ. ⼭   ڽ 
μ ׶  ǰ   ִµ,  control-Z 
 ڽ μ SIGSTOP ñ׳  ߰ Ѵ. ׸  
ɾ bg ϸ  ̸ ׶  SIGCONT ñ׳ 
 ٽ ϰ Ѵ.   μ ϰų ͹̳  
ʿ  ״   ̴. 



           linux_binfmt         linux_binfmt         linux_binfmt
formats  +---------------+    +---------------+    +---------------+
-------->| next          |--->| next          |--->| next          |
         +---------------+    +---------------+    +---------------+
         | use_count     |    | use_count     |    | use_count     |
         +---------------+    +---------------+    +---------------+
         | *load_binary()|    | *load_binary()|    | *load_binary()|
         +---------------+    +---------------+    +---------------+
         | *load_shlib() |    | *load_shlib() |    | *load_shlib() |
         +---------------+    +---------------+    +---------------+
         | *core_dump()  |    | *core_dump()  |    | *core_dump()  |
         +---------------+    +---------------+    +---------------+


              ׸ 4.3 : Registered Binary Formats



    Ǿ   ,  ũƮ 
ϵ ϴ. ũƮ Ϸ νߴٸ, ̸ ó  ִ ù
 ؼ⸦ ؾ Ѵ.   /bin/sh  ũƮ ؼ
Ѵ. 
  ִ Ʈ    ڵ Ϳ Բ, ü谡 
̸ ޸𸮿 ø   ֵ ϴµ ʿ  
ִ.   Ϲ ϴ   ELF, 
  Ʈ  ˵ ٷ  ŭ ϰ Ǿ ִ. 
 
 ýó  Ŀ     ϴ  
Ŀο   ְ  ε  ִ. Ŀ ϴ  
  ϰ ִٰ (׸ 4.3),  Ϸ ϸ 
ϴ  ã  ϳ   õغ. Ϲ 
 ϴ   a.out ELF̴.    
    ޸𸮷 о  ʿ , 䱸 ε(demand 
loading)  Ͽ, μ  ̹  κ  
 ̰ ޸𸮷 ´. ̹ Ⱦ̴ κ ޸𸮿 
ȴ. 


4.8.1 ELF 

ELF (డϰ ũ  ִ  : Executable and Linkable 
Format) Ʈ   н ý (Unix  System 
Laboratories)   ,    Ϲ 
ϴ  Ǿ. ECOFF  a.out ٸ Ʈ  ˰ 
ϸ ణ  ɻ 尡  , ELF     ϴ. 
ELF   ؽƮ(text) θ  ڵ (data) 
 ִ.  ̹ ȿִ ̺  α׷ μ
  ޸𸮿   ϴ Ѵ.  ũ ̹
 Ŀ(ld) ũ (link editor)  ̿Ͽ, ϳ 
̹ ϴµ ʿ  ڵ ͸  ִ. ̿ 
Բ ̹ ڽ ޸𸮿 ġ ó  ڵ ̹ 
 ּҸ ϰ ִ.

׸ 4.4  ũ ELF  ̹ ġ ش. ̰
 "hello world" ϰ ϴ  C α׷̴.  
̰ ΰ  (e_phnum 2̴) ̹  ó 
 52Ʈ(e_phoff)  ġϴ ELF ̹  ̾߱
Ѵ. ù°   ̹  ڵ带 Ѵ. 
̴  ּ 0x8048000 ϰ 65532 Ʈ ´. ̷ 
ū  ̰  ũ ̹, "hello world" ϴ 
printf() Լ  ̺귯 ڵ带   ֱ ̴. 
̹ (entry point),   α׷ ó ϴ  
̹ ּҰ ƴ϶  ּ 0x8048090 (e_entry)̴.  ڵ
 ι°   ε Ŀ ٷ ۵ȴ.  ι°  
 α׷ ͸ Ÿ,  ޸ 0x8059BB8 ġ
 εȴ.  ʹ аų   ִ. ⼭ Ͽ  
ũ 2200Ʈ(p_filesz)ε , ޸𸮿 ũ 4248Ʈ
  ġæ  ̴. ̴ ó 2200Ʈ ̸ ʱȭ
 ͸  ,  ִ 2048Ʈ   ڵ尡 ʱ
ȭ ͸  ֱ ̴. 



                ELF Executable Image 
                 +---------------+
                 |  e_ident      | 'E' 'L' 'F'
                 |  e_entry      | 0x8048090
                 |  e_phoff      | 52
                 |  e_phentsize  | 32
                 |  e_phnum      | 2
                 +---------------+
                 |               |
                 +---------------+
                 |  p_type       | PT_LOAD
                 |  p_offset     | 0
Physical Header  |  p_vaddr      | 0x8048000
                 |  p_filesz     | 68532
                 |  p_memsz      | 68532
                 |  p_flags      | PF_R, PF_X
                 +---------------+
                 |  p_type       | PT_LOAD
                 |  p_offset     | 68526
Physical Header  |  p_vaddr      | 0x8059BB9
                 |  p_filesz     | 2200
                 |  p_memsz      | 4248
                 |  p_flags      | PF_R, PF_W
                 +---------------+
                 |               |
                               
                 |     Code      |
                 |               |
                 +---------------+
                 |               |
                 |     Data      |
                 |               |
                 +---------------+


     ׸ 4.4 : ELF Executable file Format



 μ  ּ  ELF  ̹ ε , 
 ̹ ø  ƴϴ.   ޸ ڷᱸ
 μ vm_area_struct Ʈ ⿡   ̺ 
¾ϴ ̴. ׸ α׷ Ǹ鼭  Ʈ ߻ϸ 
α׷ ڵ ͸   ޸𸮷 ´. α׷ 
Ⱦ̴ κ  ޸𸮿 ε ʴ´. ELF   δ 
ڽ  ̹ ELF  ̹ ´ٴ   Ȯϸ, 
 ޸𸮿   ̹ ѾƳ.  μ 
 ̹̹Ƿ ( μ ),   ̹ θ 
μ ߴ α׷  -   bash ɾ ؼ  - 
 ̴. ̷    ̹ ѾƳ    ޸ 
ڷᱸ ְ μ  ̺ Ѵ.  
Ǿ ִ  ñ׳ ڵ鷯 ,  ϵ  ݴ´. 
 ѾƳ  μ ο  ̹ ޾Ƶ 
غ񰡵ȴ.  ̹  ̳Ŀ  μ 
mm_struct Ȱ  ¾ ȴ. ⿡ ̹ ڵ 
 ۰  Ÿ Ͱ ִ.    ELF  ̹ 
  д ߿ ߰ϰ ǰ,    ϴ α׷  
ǵ μ  ּ   ȴ. ̴ vm_area_struct 
ڷᱸ ¾ϰ μ  ̺   
. mm_struct ڷᱸ  α׷ ޵ ڵ鿡  Ϳ 
μ ȯ   ͵  ִ. 


ELF  ̺귯 

,  ũǴ ̹ ϴµ ʿ  ڵ 
   ʴ´. ̵  Ϻδ ÿ ̹ ũǴ  
̺귯(shared library)  ִ. ELF  ̺귯  ̺
 ÿ Ŀ  ̺귯 ̹   
Ѵ.    Ŀ Ѵ. ld.so.1, libc.so.1, 
ld-linux.so.1. ̵ δ /lib  ã  ִ.  ̺귯 
 ƾ   ϴ ڵ带 .   ũ 
 ʴ´ٸ  α׷ ̵ ̺귯 纻  ־ 
 ̸, ξ  ũ   ޸𸮸 ʿ  ̴. 
 ũ   ELF ̹ ִ ϴ  ̺귯 
Լ ̺  ִ.    Ŀ  ̺귯
 ƾ ġŰ α׷ ּ  ũų ˷ش. 

REVIEW NOTE :    ̸  ڼ  ʿ䰡 ִ°?


4.8.2 ũƮ (Script File)

ũƮ  ϴµ (interpreter) ʿϴ 
̴.   پ Ͱ ִ.   wish, 
perl̳ tcsh ɽ  ̴.   
̸ ũƮ  ù° ٿ  ִ ǥ н ǥ 
. ,   ũƮ     Ѵ.

#!/usr/bin/wish 

ũƮ  δ  ũƮ ó ͸ ã Ѵ. 
̰ ũƮ ù° ٿ    ϴ ̴.
 ̸   ִٸ,  α׷ VFS inode  ͸ 
 ũƮ  ؼ    ̴. ũƮ  ̸ 
 0(α׷ ޵Ǵ ù° ) ǰ, ٸ  
鵵 ĭ ̵ϰ ȴ ( ù° ڿ  ι° ڰ 
Ǵ ̴). ͸ εϴ      
εϴ Ͱ   Ѵ. 
    ʷ õϿ ϴ  ã´. ̴ 
̷  Ϳ  ˵ ׾ ø  ְ 
ϸ,    ڵ鷯 ſ  Ʈ . 


 : , , â, ȣ, , ,
 : ȣ


=====================================================================



5 

μ  Ŀ 
(Interprocess Communication Mechanism) 



<<μ ȣ Ȱ ϱ ؼ  μ, ׸ 
  Ŀΰ  Ѵ.    μ  
  (Inter-Process Commuication, IPC) Ѵ.  ñ׳ΰ 
   ̿ܿ  ý V IPC ϴµ  ý V IPC  
   ó  н  ̸   ̸̴.>>


5.1 ñ׳(Signal)

ñ׳ н ýۿ μ  ϴ    
 ϳ̴. ̵ ϳ ̻ μ鿡 񵿱 ̺Ʈ 
˸  ȴ. ñ׳ Ű ͷƮκ ߻Ǳ⵵ ϰ, 
μ  ʴ  ޸  Ϸ ϴ 찰 
 Ȳ ߻Ѵ.  ñ׳  ڽ μ ۾  
   ȴ. 

Ŀ̳ شϴ   ִ ý ٸ  μ ߻
  ִ Ϸ ǵ ñ׳ε ִ. ̷ ñ׳ε   
kill  ϸ Ǵµ(kill -l),    迡 
  ñ׳ε ִ.

 1) SIGHUP        2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP       6) SIGIOT       7) SIGBUS       8) SIGFPE
 9) SIGKILL       10) SIGUSR1    11) SIGSEGV     12) SIGFEP
13) SIGPIPE       14) SIGALRM    15) SIGTERM     17) SIGCHLD
18) SIGCONT       19) SIGSTOP    20) SIGTSTP     21) SIGTTIN
22) SIGTTOU       23) SIGURG     24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM     27) SIGPROF    28) SIGWINCH    29) SIGIO 
30) SIGPWR

ñ׳   AXP  ý۰ ٸ   ִ. μ 
κ ñ׳ε Ϸ   , ⿡   
߿ ܰ ִ: μ  ߴܽŰ SIGSTOP  ñ׳ΰ 
μ   ϴ SIGKILL ñ׳   . ׷ 
, μ   ñ׳  ó    
ִ. μ ñ׳   ְ,   ʴ 쿡 
 óϰų Ŀ óϵ ϴ  ߿    ִ. 
  Ŀο ó ñ 쿡 ñ׳ο شϴ ⺻  
 ȴ.  , μ SIGFPE(ε Ҽ  )
ñ׳   ⺻  ھ (core dump) ϰ μ
   Ǿ ִ. ñ׳ο  켱 .  
 ÿ   ñ׳ ߻ϴ ,  ñ׳ε 
 ޵Ǵ  óǴ    ʴ.  ÿ
 ñ׳  ߻ϴ   ó  ִ Ŀ .
, μ SINGCONT ñ׳ ѹ ޵  42 ޵ ̸ 
  . 

include/linux/sched.h 

 μ task_struct   ؼ ñ׳ 
 Ѵ.   ִ ñ׳  μ (word) 
ũ⿡  ޴´. 32Ʈ 带 ϴ ýۿ ִ 32
 ñ׳   ְ,  AXP  64Ʈ μ 
ϴ 쿡 ִ 64 ñ׳    ִ.  ó 
 ñ׳ε signal ׸ Ǹ,   ñ׳ε ũ 
blocked ׸  ȴ. SIGSTOP SIGKILL  ٸ  ñ
ε ŷ   ִ.  ñ׳ ߻   ñ׳ 
ŷ    ·  ְ ȴ. 
  ߻  ִ  ñ׳ε μ  ó
ϴ°    ִµ,   μ task_struct
 ִ sigaction ڷᱸ 迭 ȴ. sigaction  
ٸ  Բ, ñ׳ ڵ鷯 ּ, Ǵ μ ش ñ׳
    Ȥ Ŀ  ñ׳   óϰ   
Ÿ ÷װ  ִ. μ  ý  ؼ ⺻ ñ
 ڵ鷯 ٲ  ,  ý   ش ñ׳ sigaction 
blocked ũ Ѵ.

ý  μ  ٸ  μ ñ׳   ִ
 ƴϴ. Ŀΰ ڴ   μ    ,Ϲ
μ  uid gid  μ, Ǵ  μ ׷  
 μԸ ñ׳   ִ. ñ׳ task_struct 
signal ׸ شϴ Ʈ Ͽ ߻ȴ. μ  ñ
  ʾҰ,  ͷƮ   ¿( INTERRUPTIBLE 
¿) ߿ ִٸ, μ  ¸ (RUNNING) 
ٲٰ ڽ ť ν  ȴ. ̷   ý
  층  Ҷ, 췯  μ  
ĺ ϰ ȴ. ⺻  ñ׳ ó ʿϴٸ 
 ñ׳ ó ȭ ų  ִ.    SIGWINCH(X 
 Ŀ ) ߻Ͽ ⺻ ڵ鷯  ̶, 
     Ǵ ̴. 

ñ׳ ߻ϴ  ٷ μ ޵Ǵ  ƴ϶  
 ٽ ɶ ٷ Ѵ.  μ ý  
ġ ƿ  signal blocked Ź ˻Ǵµ, ̶ 
  ñ׳ ϴ  μ μ ޵Ǵ ̴. 
   ŷڼ   ó , ý  
  (  ͹̳ο  ڸ  ؼ)  
ð κп  ý   ϹǷ ׷ ʴ.Ѵٸ 
μ ñ׳ ߻ ٸ     ִµ,   
ͷƮ  ¿ ñ׳ ޵Ǿ   μ  
ְ ȴ.  ñ׳ ó ڵ    ñ׳ο 
 sigaction ڷᱸ Ѵ.

ñ׳ ڵ鷯 ⺻ ڵ鷯 Ǿ  Ŀ  ó   
ϰ ȴ. SIGSTOP ñ׳ο  ⺻  ڵ鷯  μ 
  (STOPPED) ٲٰ,   μ ϱ 
췯 Ѵ. 
SIGFPE ñ׳  Ŀ  μ ھ ϰ μ
 Ѵ. ̿ ޸ μ  ڽ ñ׳ ڵ鷯 
 ִ. ̰ ñ׳ ߻  ȣǴ , sigaction 
ڷᱸ  ƾ ּҸ  ִ.   Ŀ ݵ μ
 ñ׳ ڵ鷯 ȣؾ ϴµ, ̰  ̷° 
  ٸ, Ѱ ,   μ Ŀ 忡 
̸   忡 Ŀ Ȥ ý ƾ θ μ 
ư Ѵٴ   CPU ο ΰ óϿ ϴ 
̴ .    μ ð ͸ ν ذ
ϴ. μ α׷ ī͸  ñ׳ ó ƾ 
ϰ, ڵ鷯  ڸ  ӿ ߰ϰų Ϳ  
 ̴.  μ  簳ϸ ñ׳ ó ƾ 
ġ   ȣǾ Ͱ ̰ ȴ. 

 POSIX ȣȯ̹Ƿ, μ Ư ñ׳ ó ƾ ȣ
Ǿ   ñ׳     ִ. ̰ μ  
ñ׳ ڵ鷯 Ҹ  blocked ũ  ٲٰ  Ѵ. 
blocked ũ ñ׳ ó ƾ      ƾ 
Ѵ. ׷   ƾ ϳ  ҷ, ñ׳  
μ  ÿ س   blocked ũ   
ϵ Ѵ.   ñ׳ ó ƾ   ȣǾ  
ʿ䰡    ƾ ó ׾Ƽ,  ڵ鷯  
 ڵ鷯  ȣǰ,   ƾ ȣǵ ñ׳ 
ó ȭѴ.


5.2 (Pipe)

Ϲ ϴ    ̷(redirection) 
Ѵ.  

$ ls | pr | lpr

̶  ls  ϴ   ̸ pr  ǥ Է
 , pr  Էµ     . pr   
ǥ    ٽ lpr  ǥ Է  ⺻ 
ͷ  µȴ.   ó  μ ǥ 
 ٸ μ ǥ Է ִ ܹ Ʈ Ʈ̴. 
 Ǵ μ ̷ ̷ Ͼ ִٴ  
 ϸ,    Ѵ. ⼭ μ ӽ 
  ִ  ̴. 

  ӽ÷   VFS inode Ȱ Ű ΰ
 file ڷᱸ ؼ Ǹ,  ⼭ VFS inode ޸𸮻 
  Ű ȴ . 
׸ 5.1  file ڷᱸ  ٸ   ƾ ͸ Ű
 ͸  ִ  ش. ⼭   file ڷᱸ 
  Լ  ͸, ٸ ڷᱸ  о
̴ Լ  ͸ . 
̰  Ͽ а  ý   Ʒ  ̿ 
 ϵ Ѵ. μ   ʹ    
 ǰ, д μ  κ о ϶  
 κ Ͱ ǰ ȴ. 
    ȭؾ Ѵ.  д μ
  μ ݵ ʸ ų    ֵ ؾ   ϰ, ׷  
ϱ  (lock) ť(waiting queue), ñ׳  Ѵ. 



  Process 1                                   Process 2
                                                       
    file                                        file   
+-----------+                               +-----------+
| f_mode    |                               | f_mode    |
+-----------+                               +-----------+
| f_pos     |                               | f_pos     |
+-----------+                               +-----------+
| f_flags   |                               | f_flags   |
+-----------+                               +-----------+
| f_count   |                               | f_count   |
+-----------+                               +-----------+
| f_owner   |                               | f_owner   |
+-----------+                               +-----------+
| f_inode   |-----+  +-------------------+  | f_inode   |-----+
+-----------+     |  |                   |  +-----------+     |
| f_op      |--+  |  |                   |  | f_op      |--+  |
+-----------+  |  |  |      inode        |  +-----------+  |  |
| f_version |  |  |  |   +---------+     |  | f_version |  |  |
+-----------+  |  |  +-->|         |     |  +-----------+  |  |
               |  +----->|         |     +--------------------+
               |         |         |                       |
               |         |         |          Data Page    |
               |         |         |        +-----------+  |
               |         |         |------->|           |  |
               |         +---------+        |           |  |
               V                            |           |  V
              Pipe                          |           | Pipe      
              Write                         |           | Read
              Operations                    |           | Operations
                                            |           |
                                            |           |
                                            |           |
                                            |           |
                                            |           |
                                            |           |
                                            +-----------+

                    ׸ 5.1 : Pipes



μ  ⸦   ⸦ ϴ ǥ ̺귯 Լ 
Ѵ. ̵ Լ鿡  (file descriptor) ѱµ, 
̴ μ   file ڷᱸ(̵  μ 
    Ÿ,  쿡    Ÿ)
  ε̴ .   ý    Ÿ file
ڷᱸ Ű ִ  ƾ Ѵ.   ƾ  
û óϱ   Ÿ VFS inode ִ  ̿
Ѵ.  û Ʈ    ְ,  д 
μ  ɾ  ʾҴٸ,     ɰ, 
  Ʈ  μ ּҰ    
Ѵ.  д μ   ɾξų ͸ 
   ٸ,  μ ش  inode ִ 
ť  ,   ִ ٸ μ ϱ  
췯 ȣѴ.  μ ͷƮ  ̹Ƿ, ñ׳
   , д μ   ͸ ⿡  
 ų   Ǯ  ȴ. ͸  
 VFS inode  Ǯ, inode ť ٸ  
ִ д μ  ȴ. 

 ͸ д       ſ ϴ. 
μ ŷ  ʰ   ִµ (̴ ̳ 
    带 ϿĿ  ٸ),    
 ų   ɷ  ƿ´. ̴ μ 
 ʰ    ִٴ ̴. ŷ   
inode ť  μ ⸦  ٷ Ѵ.  
   ۾ ϸ,  inode   
 Բ ȴ. 

  (named pipe) Ѵ.   FIFO 
Ҹµ ̴       (First In First 
Out, FIFO) Ģ  ϱ ̴.    ʹ 
    ´.  ޸ FIFO ӽ 
  ƴ϶  ýۿ  ϴ ̸, mkfifo  
  ִ. μ شϴ     ִٸ FIFO 
Ӱ   ִ. FIFO   ʹ  ٸ. 
(ΰ file ڷᱸ ̵  VFS inode,   
) ѹ µ , FIFO ̹ ϴ ̸, ڿ 
   ̴ .   FIFO  μ   
ٸ μ ̸ б    ϴ ̳, FIFO  
 FIFO ⸦ ϱ  д μ  ϴ   
óؾ Ѵ. ̸ ϸ, FIFO    Ȱ 
 ޵Ǹ,  ڷᱸ  Ѵ . 


5.3 (Socket) 

REVIEW NOTE : Ʈũ    ߰Ѵ. 


5.3.1. ý V IPC Ŀ

 н System V (1983) ó    
   Ѵ. ̵ ޽ ť(message queue) 
(semaphore), ׸  ޸(shared memory)̴. ̵ ý 
V IPC   Ȱ   Ѵ. μ Ŀο 
ý  ݷ ̵  ڿ Ű     ĺ(reference 
identifier) νḸ ̵鿡   ִ. ̵ ý V IPC 
ü鿡    (access permission)  ˻ϴ
, Ͽ   ˻ϴ Ͱ  ϴ. ý V IPC ü
    ý  Ͽ ü ڿ  ȴ. 
    ĺڸ ڿ ̺  εó ϴ
,  ĺڴ ״ ε  ƴϰ, ε  
 ణ  ʿϴ. 

ýۿ ִ ý V  IPC ü Ÿ   ڷᱸ , 
μ ڿ  uid, gid  ü   (
, ׷, ׹ۿ ) IPC ü Ű  ipc_perm̶ ڷᱸ
 ϰ ִ. Ű ý V IPC ü  ĺڸ ã  
 δ.     Ű ϴµ, (public) ο
(private) װ̴.  Ű  ýۿ ִ  μ
  ˻縦 Ѵٸ ý V IPC ü   ĺڸ 
ã  ִ. ý V IPC ü Ű   , ̵鿡  
 ĺڷθ   ִ. 


5.3.2 ޽ ť(Message Queue) 

޽ ť ϳ ̻ μ ޽    ְ, ̸ ϳ 
̻ μ     ֵ Ѵ.  ޽ ť 
Ʈ msgque ͷ Ѵ. 
msgque  Ҵ ޽ ť    ϴ msqid_ds ڷ
 Ų. ޽ ť ϳ  ϸ msqid_ds ڷᱸ ý
 ޸𸮿 Ҵ޾  Ϳ Ѵ. 

 msqid_ds ڷᱸ ipc_perm ڷᱸ,   ť  ޽ 
 ͵  ִ. ߰,   ť   
ð ť  ð Ѵ. 
msqid_ds   ť  ִ : ϳ ť  μ
 , ϳ ť  μ ؼ. 



   msqid_ds   
+------------+
|            |
| ipc        |
|            |
+------------+
|            |
+------------+
| *msg_last  |                   msg                        msg     
+------------+              +-----------+              +-----------+
| *msg_first |------------->| *msg_next |------------->| *msg_next |
+------------+              +-----------+              +-----------+
|            |              | msg_type  |              | msg_type  |
| times      |              +-----------+              +-----------+
|            |              | *msg_spot |              | *msg_spot |
+------------+              +-----------+              +-----------+
| *wwait     |              | msg_stime |              | msg_stime |
+------------+              +-----------+              +-----------+
| *rwait     |              | msg_ts    |              | msg_ts    |
+------------+         ^    +-----------+         ^    +-----------+
|            |         |    |           |         |    |           |
+------------+         |    |           |         |    |           |
| msg_qnum   |         |    |           |         |    |           |
+------------+       msg_ts | message   |       msg_ts | message   |
|            |         |    |           |         |    |           |
+------------+         |    |           |         |    |           |
                       |    |           |         |    |           |
                       V    +-----------+         V    +-----------+

                            <-------------- msg-qnum -------------->


            ׸ 5.2 : System V IPC Message Queues



μ ť ޽   , ȿ  ĺ
(effective user identifier) ȿ ׷ ĺ(effective group 
identifier)  ť ipc_perm ڷᱸ ִ  Ѵ. ׷ 
μ ť    ִٸ ޽ μ ּҰ msg 
ڷᱸ ǰ ޽ ť  δ.  ޽  
ϴ μ   Ÿ, α׷  Ÿ 
ǥ ܴ.    ִ ޽  ̸ ϰ 
Ƿ ޽     ִ. ̷  μ ޽
 ť  ť(msqid_ds *wwait ׸) ߰ǰ  ο 
μ ϱ  췯 ȣѴ. μ ޽ ť
 ϳ ̻ ޽    ȴ. 



                                +--------+
                        +------>|        |
                        |       |        |  array of
                        |       +--------+  semaphores
                        |       |        |
      semid_ds          |       |        |
+------------------+    |       +--------+
|                  |    |       |        |
| ipc              |    |       |        |
|                  |    |       +--------+
+------------------+    |       |        |     
|                  |    |       |        |   
| time             |    |       +--------+       sem_queue 
|                  |    |       |        |      +---------+
+------------------+    |       |        |  +-->| next    |
| sem_base         |----+       +--------+  |   +---------+
+------------------+                        |   | prev    |
| sem_pending      |------------------------+   +---------+
+------------------+                            | sleeper |
| sem_pending_last |     sem_undo               +---------+
+------------------+   +-----------+            | undo    |
| undo             |-->| proc_next |            +---------+
+------------------+   +-----------+            | pid     |
| sem_nsems        |   | id_next   |            +---------+
+------------------+   +-----------+            | status  |
                       | semid     |            +---------+
                       +-----------+   +----+   | sma     |
                       | semadj    |-->|    |   +---------+   +----+
                       +-----------+   |    |   | sops    |-->|    |
                                       |    |   +---------+   |    |
                                       |    |   | nsops   |   |    |
                                       |    |   +---------+   |    |
                                       |    |                 |    |
                                       +----+                 |    |  
                                                              |    |
                                                              +----+


              ׸ 5.3 : System V IPC Semaphores



ť д    ģ.   μ  
ť    ˻Ѵ. д μ ŸԿ  ť 
ִ ù° ޽  , Ǵ Ư Ÿ  ޽ 
    ִ.  ؿ ´ ޽ ٸ  μ
 ޽ ť б ť(msgq_id *rwait ׸) ߰ǰ, 
 ȴ. ť ο ޽  Ǹ  μ  
ٽ   ְ ȴ. 


5.3.3 (Semaphore)

  ܼ ´ ޸  ġ ִ ,   
ϳ ̻ μ ˻ϰ (test and set)  ִ ̴. 
 ˻  (test and set) ,  μ ־, ߴܵ  
,  ڼ  ̴.  ѹ ۵Ǹ ƹ͵ ̸ ߴ 
  .  ˻       簪 Ͽ 
 ϴ ̸,       ִ. ˻  
     μ ٸ μ  
 ٲ  ٸ    ִ.  ÿ  
μ  ؾ ϴ ߿ ڵ尡 ִ, Ӱ(critical 
region) ϴµ   ִ. 

 ϴ μ ϳ   Ͽ ڵ带 аų 
ٰ .   Ͽ    ȭӰ  ̷ 
ٶ ̴. ⼭    ִµ,   ʱ
 1 ϰ,   ϴ ڵ  ΰ   
ξ, ù°     ˻ϰ  ҽŰ,  
  ˻ϰ Ű   ִ. Ͽ Ϸ ù° 
μ   ҽŰ ϰ, ̰ Ͽ 
  0  ȴ. 
 μ   Ͽ   , ̸ 
Ϸ ϴ ٸ μ   ҽŰ ߴµ 
 -1  ǹǷ Ѵ.  μ ù° μ   
۾ ĥ   ߴܵ ̴. ù° μ   
۾ ġ   ٽ   1 .  ٸ
 μ  ̹  ҽŰ õ 
ϰ ȴ . 

ý V IPC  ü   迭 Ÿ, 
 ̸ Ÿ  semid_ds ڷᱸ Ѵ. semary ý
 ִ  semid_ds ڷᱸ Ű ִ,  ̴.
semid_ds ڷᱸ sem_nsems ŭ  迭 , 
 sem ڷᱸ ȴ.   迭 sem_base Ű
 ִ . ý V IPC  ü  迭   ִ 
   μ ̵ ٷ ý  θ  ִ. 
ý  ѹ     ,    
Է -  ε,  , ÷׵ Ʈ -  Ÿ.
 ε  迭 ε̸,   
    ߰  ̴.       
ִ ׽ƮѴ.         0 ̻
ų,       0 ,   ϰ 
ȴ.    ϳ Ѵٸ  μ 
ߴ  ִµ, ̴ ý  θ  ÷׿ ŷ 带 
 Ŷ   ̴. μ ߴܵǾ 
Ѵٸ  ؾ    ¸ ϰ,  
μ ť ִ´.  ۾ sem_queue ڷᱸ ÿ 
 ̰   äν ̷. 
 sem_queue ڷᱸ  ü  ť    
(⼭ sem_pending sem_pending_last  ͸ Ѵ).  
 sem_queue ڷᱸ ִ ť(sleeper ׸)  , 
 ٸ μ   췯 ȣȴ. 

     Ͽ μ  ߴܵ ʿ䰡 ٸ, 
  Ͽ  迭 ùٸ   
Ѵ.   ť ٸ ߴܵǾ ִ μ   
 꿡   ִ ˻ؾ Ѵ.   ̰ť
(sem_pending)    ʷ  캸, ̹   
  ִ ˾ƺ  ׽Ʈ Ѵ.  Ѵٸ  
̰ Ʈ sem_queue ڷᱸ ϰ  迭  
  Ѵ.   μ   췯  
  ٽ   ֵ .  ̰ Ʈ 
ó Ͽ ̻     ,  
    캻. 

 Ѱ  ִµ (deadlock) ٷ װ̴. 
̴  μ Ӱ 鼭   ٲپµ 
μ  ߸ǰų  Ǿ  Ӱ  
 쿡 ߻Ѵ.  ̷   迭   
Ʈ ν ´.   ̷  ϸ 
  μ   ϱ  · ǵư 
ϴ ̴.    sem_undo ڷᱸ ǰ, ̵  
semid_ds ڷᱸ  迭 ϴ μ task_struct 
ʿ ťȴ.

     ϵ  䱸  ִ. 
 μ   迭   ƺ ϳ sem_undo 
ڷᱸ Ѵ.   û μ  ڷᱸ 
  ʴٸ ʿ  ϳ  ̴.   sem_undo 
ڷᱸ    μ  task_struct  ڷᱸ    迭 
semid_ds ڷᱸ ʿ ťȴ.  迭 ִ  
 ϸ 갪 ݴ    μ sem_undo ڷᱸ 
ִ  迭  Ʈ ߰ȴ.  갪 2 ϴ 
̾ٸ    Ʈ -2 . 

μ Ͽ  ,   sem_undo ڷᱸ Ʈ 
  迭   Ѵ.     Ʈ 
 μ task_struct ťǾ ִ sem_undo ڷᱸ 
״ ,  迭 ĺڴ ߸  ̴.   
  ڵ ϰ sem_undo ڷᱸ Ѵ.


5.3.4.  ޸(Shared Memory) 

 ޸𸮴 ϳ ̻ μ ڽŵ  ּ  
 Ÿ ޸𸮸 Ͽ   ֵ Ѵ. ̵ μ 
 ̺     ޸  Ű  
̺ Ʈ ְ ȴ. ̵  μ  ޸𸮿 
 ּҿ  ʿ  . ٸ ý  V IPC ü  
 ޸   Ű  ǰ    ˻ϰ 
ȴ.  ѹ ޸𸮰 ǰ  μ ̸  
ϴ ؼ ƹ ˻絵  ʴ´. μ ٸ 
,   ý V   Ͽ ޸𸮷  
ȭϿ Ѵ. 

   ޸  shmid_ds ڷᱸ Ÿ. ̵ 
shm_segs Ϳ ȴ. shmid_ds ڷᱸ  ޸  
 ū, 󸶳  μ ϰ ,  ޸𸮰 μ
 ּҰ  εǾ ִ   .  
޸𸮸  μ  ޸𸮿  ٱѰ Ű  
ο ϸ,  Ѹ ִٸ  ޸𸮸  ޸
  ų ִ. 



   shmid_ds
+------------+
| ipc        |
|            |
+------------+
| shm_segsz  |
+------------+    +-----+
|            | +->| pte |
|            | |  +-----+
| times      | |  | pte |
|            | |  +-----+
|            | |  |     |
+------------+ |  |     |
| shm_npages | |  +-----+
+------------+ |  | pte |
| shm_pages  |-+  +-----+    vm_area_struct         vm_area_struct
+------------+             +----------------+     +----------------+
| attaches   |------------>|                |  +->|                |
+------------+             |                |  |  |                |
                           |                |  |  |                |
                           +----------------+  |  +----------------+
                           | vm_next_shared |--+  | vm_next_shared |
                           +----------------+     +----------------+
                           |                |     |                |
                           |                |     |                |
                           |                |     |                |
                           +----------------+     +----------------+


              ׸ 5.4 : System V IPC Shared Memory



޸𸮸 ϱ ٶ  μ  ý  Ͽ    
޸𸮿 ؾ Ѵ. ̰  μ  ޸𸮸 
ϴ ο vm_area_struct ڷᱸ . μ  
޸𸮰 ڽ  ּ  ġ    ְ, ƴϸ 
  ū    ϵ   ִ.   
vm_area_struct ڷᱸ shmid_ds Ű ִ vm_area_struct 
Ʈ ߰ȴ. vm_newxt_shared vm_prev_shared ͵ ̵  
 ϴµ Ѵ.  ޸𸮴 ̷ ϴ ȿ  
 , ó μ ⿡ Ϸ   
. 

μ ϰ ִ  ޸   ó  
õϸ  Ʈ ߻Ѵ.    Ʈ ó  
̸ ϴ vm_area_struct ڷᱸ ߰ϰ ȴ. ⿡  
Ÿ   ޸𸮿  ó ƾ  Ͱ ִ. 
޸  Ʈ ó ڵ shmid_ds  ̺ Ʈ 
,   ޸ ش    ̺ Ʈ 
ִ ã´.  ٸ  ޸𸮸 ϳ Ҵ ޾ ̸ Ÿ
  ̺ Ʈ  ̴. ̸  μ   
̺ 鼭 shmid_ds Ѵ. 
׷  μ  ޸𸮿 Ϸ ϴٰ  Ʈ 
߻ϸ,  ޸  Ʈ ó ڵ尡 ̸ ãƼ,  
    μԵ ϰ Ѵ.   
޸    ϴ ù° μ ̸ ϰ, 
ٸ μ ⿡    ̸ ڽ  ޸  
߰ϰ ȴ. 

μ ̻  ޸𸮸 ϱ ٶ    
 ´.  ޸𸮸 ϴ ٸ μ ϴ  
    ش μԸ  ģ.  ޸ 
vm_area_struct  shmid_ds ڷᱸ ŵǰ  ̸, 
 ϴµ ߴ  ޸  ȿ  Ÿ 
 μ  ̺ ŵȴ.  ޸𸮸 
ϰ ִ μ    ޸𸮿  ϰ ִ 
  ޸  ǰ,   ޸𸮸 Ÿ 
shmid_ds ڷᱸ ȴ. 

  ޸𸮰  ޸𸮷 Ǿ     ణ  
 ߻Ѵ. 
̴ ޸ 뷮 Ƽ  ޸𸮰  ũ ҵ  
쵵 ִ.  ޸𸮰   ޸𸮿 ҵǾ 
  3忡 ϰ ִ. 


 : ̽, ȣ, , , ɸ
 : ȣ

=====================================================================



6

PCI 



<<PCI(Peripheral Component Interconnect, ֺġ ȣ) ̸ 
  ״, ýۿ ִ  ֺġ  ̰  
    ִ  Բ   ϰ ִ ǥ̴. 
  ǥ[3, PCI ù Ծ] ý ġ  ϴ 
  İ,  ġ ؾ ϴ  ϰ ִ.  忡
   Ŀ ý PCI  ġ  ʱȭϴ  
   캸 Ѵ.>>

׸ 6.1  Ϲ PCI   ý   ̴.  PCI  
PCI-PCI 긴 ý ġ  ϴ    ̴. 
CPU ù° PCI  0 PCI  Ǿ ְ,   
  ġ ⿡ Ǿ ִ. PCI-PCI 긴 Ư PCI ġ
μ, 1(primary) PCI  2(secondary) PCI  1 PCI 
 Ѵ . PCI Ծ࿡  δ, 1 PCI  PCI-PCI 
긴 ٿƮ(downstream), 0  긴 Ʈ
(upstream)̶ Ѵ.   2 PCI  SCSI ī峪 
̴ ī  ȴ.  긴 2 PCI ,  
  ġ ϳ  PCI ī    ִ. PCI-ISA 
긴  Ǿ ISA ġ ϴ ,  
 Ű 콺, ÷ ̺긦 ϴ I/O Ʈѷ 
Ĩ ⿡ Ǿ ִ. 


6.1 PCI ּҰ(PCI Address Space) 

CPU PCI ġ ׵ ϰ ִ ޸𸮿  ʿ䰡 ִ. 
 ޸𸮴 ̽ ̹ PCI ī带 ϰ    ȯ
ϴµ Ǵ ̴. Ϲ   ޸𸮿 ġ  
 (control register)  (status register) 
 ִ.   ͵ ġ  ϰ ¸ дµ δ. 
 , PCI SCSI ̽ ̹ SCSI ũ ͸   
 , ġ  ͸ о ġ  غ Ǿ ˾  
,     ġ ϴ  ϵ  
   ȴ. 

CPU ϴ ý ޸𸮸 ̷   ޸𸮷   ְ
, ̷ Ѵٸ PCI ġ ޸𸮿    CPU ޸𸮿 
  ä PCI ġ ۾ ġ⸦ ٷ ϴ  
߻ ̴. ̴ Ϲ ޸𸮿 ϴ  ÿ ϳ 
ѵǾ ֱ ̸,  ̷ Ѵٸ ý  ̴. ׷
 ֺġ  ޸𸮿 ƹ      ֵ ϴ° 
   ̴. ̰ ſ ϸ, ߸  ġ  
ý ſ Ҿϰ   ִ. 



                        +-------+
                        |       |
                        |  CPU  |
                        |       |
                        +---+---|
                            |
                            |                   PCI Bus 0
-----+----------------+-----+----------+-----------------
     |                |                |        
     |                |                |       ^
+----+----+        +--+--+        +----+----+  | Upstream
| PCI-ISA |        |     |        | PCI-PCI |  |
| Bridge  |        |     |        | Bridge  |   
|         |        |     |        |         |  |
+----+----+        +-----+        +----+----+  | Downstream
     |              Video              |       V
     |ISA Bus                          |          PCI Bus 1
----++------      --------+------------+---------+-----------  
    |                     |                      |      
    |                     |                      |      
 +--+--+               +--+--+                +--+--+   
 |     |               |     |                |     |   
 |     |               |     |                |     |   
 |     |               |     |                |     |   
 +-----+               +-----+                +-----+   
Super I/O Controller    SCSI                  Ethernet


         ׸ 6.1 : Example PCI Based System



ֺġ  ڽŸ ޸   ִ. CPU   
Ӱ   , ݴ  ġ ý ޸𸮿 ϴ 
 DMA(Direct Memory Access,  ޸ ) ä ̿ϴ 
θ  ѵǾ ִ. ISA ġ ISA I/O ISA ޸𸮶 ΰ 
ּҰ .  PCI  ּҰ µ, PCI I/O, PCI 
޸, ׸ PCI (configuration space) װ̴. CPU 
̵ ּҰ ο   ִµ, ̽ ̹ PCI I/O 
PCI ޸ ּҰ ϸ, PCI   Ŀ PCI ʱ
ȭ ڵ忡 ϰ ִ. 



          31             16 15               0
          +-----------------+-----------------+
          |    Device Id    |    Vendor Id    | 00h
          +-----------------+-----------------+
          |    Status       |    Command      | 04h
          +-----------------+--------+--------+
          |    Class Code            |        | 08h
          +--------+--------+--------+--------+
          |        |        |        |        | 10h
          +--------+--------+--------+--------+
          |                                   |
          |                                   |
          |                                   |
          |    Base Address Registers         |
          |                                   |
          |                                   |
          |                                   |
          |                                   | 24th
          +-----------------------------------+
          |                                   |
          |                                   |
          |                                   |
          |                                   |
          |                                   |
          |                                   |
          |                                   |
          |                                   |
          |                                   |
          +-----------------+--------+--------+
          |                 |  Line  |  Pin   | 3Ch
          +-----------------+--------+--------+
   
   
         ׸ 6.2 : The PCI Configuration Header



 AXP μ   ý ּҰ   ٸ ּҰ 
   Ǿ ִ. ׷ ⼭  PCI  ּҰ   
ٸ ּҰ   ֵ ִ  Ĩ Ѵ. ׸ 
Ŵ   ּҰ Ϻθ  PCI ּҰ ϴ  
ּ (sparse address mapping) Ѵ. 


6.2 PCI  (PCI Configuration Header) 

 PCI ġ (PCI-PCI 긴 Ͽ) PCI  ּҰ 
  õ ڷᱸ  ִ. PCI   ý 
ġ ϰ   ְ Ѵ. 
  ִ Ȯ ġ PCI  ġ ġ ġ   
ȴ.  , PCI  ī带 PC κ忡 ִ  PCI  
  ϳ  ,  Կ ȴĿ  PCI  ּҰ
  ٸ ġ  ġϰ ȴ. ̰ ״   
ʴµ, ֳĸ PCI ġ 긴  ֵ簣, ý  
 ִ  ,  ͸ ̿ ׵ ãƳ  
̱ ̴. 

 PCI   ´ 忡  ȣ   ִ. 
׷, ù°  PCI   0 ¿ ġ Ѵٸ,  
°   256 ¿ ġϰ (  Ȱ 256
Ʈ ũ̴), ٸ   ̷  ġϰ ȴ. ýۺ
 PCI   ϴ ϵ Ŀ ٸ ǵǾ 
, ̸ ̿Ͽ PCI  ϴ ڵ ־ PCI  ־ 
  PCI   ˻Ͽ,  ġ ְ  ġ 
   ׸ (  ĺ(Vendor Identification) 
׸)  а  ν  ľѴ. [3, PCI   Ծ]
  PCI slot  ĺڳ ġ ĺ(Device 
Identification)  ϸ 0xFFFFFFFF ִ   
 ϰ ִ. 

׸ 6.2 256 Ʈ  PCI    ġ ش. ⿡ 
  ׸ ִ. 

      ĺ(Vendor Identification) : PCI ġ ڸ Ÿ
        ȣ.   (Digital) 0x1011,  
       0x8086 ȣ ´.

     ġ ĺ(Device Identification) : ġ  ü Ÿ 
       ȣ.    21141  ̴ ġ 0x0009 
       ´. 

     (Status) :  ׸ ġ ¸ Ÿµ,   Ʈ
         ǹ̴ ǥؿ ϰ ִ. [3, PCI   
       Ծ] 
. 

     (Command) : ý  ׸  ν, ġ PCI I/O 
       ޸𸮸  㰡ϴ  , ġ ϴ  Ѵ. 

     зڵ(Class Code) :  ġ  ġ  Ѵ. 
         ġ  , SCSI   ǥ з 
       ִ. SCSI  зڵ 0x0100̴. 

     ̽ ּ (Base Address Register) :  ʹ ġ
        ϴ PCI I/O, PCI ޸   ũ, ġ 
       ϴµ ȴ. 

     ͷƮ (Interrupt Pin) : PCI ī忡 ִ     
        , īκ PCI  ͷƮ ϴ Ѵ.
       ǥؿ ̵  A, B, C, D θ. 
       ͷƮ  ׸ PCI  ġ ̵      ϰ
       ִ Ÿ.  Ư ġ ־ ͷƮ   
       輱Ǿ ִ. 
       , ý    ġ Ȱ ͷƮ  
       Ѵٴ ̴.   ͷƮ ó ý ġ ߻
       ߻ϴ ͷƮ   ֵ ش. 

     ͷƮ (Interrupt Line) :  ׸ PCI ʱȭ  ڵ 
       ̽ ̹,  ͷƮ ó ý ̿
       ͷƮ ڵ ϱ   Ѵ.  ִ  
       ̽ ̹ ǹ̰ , ͷƮ  ڵ鷯 PCI 
       ġκ  ͷƮ  ü ִ ùٸ 
       ̽ ̹ ͷƮ ó ڵ ͷƮ   
       ְ Ѵ.   ͷƮ óϴ   ڼ
        7 ϶. 


6.3 PCI I/O PCI ޸ ּ

̵  ּҰ ġ CPU    Ŀο Ǵ ̽ 
̹ ϱ  ϴ ̴.  , DECchip 21141 
  ̴ ġ ڽ  ͸ PCI I/O  Ѵ. 
׷ شϴ   ̽ ̹ ġ ϱ ؼ 
̵ ͸ а .   ̹   ϱ 
   PCI ޸  Ѵ. 

̵ PCI ý ¾ ǰ, PCI   ִ (Command) 
׸񿡼 ̵ ּҰ    , ƹ   
   . ⼭ PCI ϴ ڵ常 PCI   а 
  ,  ̽ ̹  PCI I/O PCI ޸ 
 а   ִٴ  ϱ ٶ. 



31                         11 10   8 7        2 1 0
+----------------------------+------+----------+-+-+
|      Device Select         | Func | Register |0|0|
+----------------------------+------+----------+-+-+

     ׸ 6.3 : Type 0 PCI Configuration Cycle


31        24 23   16 15    11 10   8 7        2 1 0
+-----------+-------+--------+------+----------+-+-+
| Reserved  |  Bus  | Device | Func | Register |0|1|
+-----------+-------+--------+------+----------+-+-+

     ׸ 6.4 : Type 1 PCI Configuration Cycle



6.4 PCI-ISA 긴(Bridge)

 긴 PCI I/O, PCI ޸   ISA I/O, ISA ޸ 
  ٲپ ν,  ؿ ISA ġ 
ϴ  Ѵ.  ȸ  ý۵ PCI  ԰ 
Բ  ISA    ִµ, ð   
Ͱ ȣȯ  ʿ پ,  PCI Ը ִ ý
 ȸ ̴ . ISA ּҰ(I/O ޸ ) ISA ġ 
Ͱ ġ ִ , Ȱ ڿ   â 8080  
PC  Ǿ. 5000 ޷ Ѵ  AXP  ǻ ISA 
÷ Ʈѷ ó  IBM PC Ȱ I/O  Ѵ . 
PCI Ծ࿡   PCI I/O ޸  ּҰ Ʒ  
ISA ý ISA ֺġ   ϰ, ϳ PCI-ISA 긴
  PCI ޸𸮷    ٲپ ν ذѴ. 


6.5 PCI-PCI 긴

PCI-PCI 긴 ýۿ ִ PCI   ٿִ Ư PCI 
ġ̴.  ýۿ PCI  ϳۿ , ϳ PCI 
   ִ PCI ġ    ־,   
  PCI ġ ϱ  ؼ PCI-PCI 긴  PCI  
߰  ֵ Ѵ. ̴ Ư   ־ ߿ϴ. 翬
,  PCI-PCI 긴 Ѵ. 


6.5.1 PCI-PCI 긴 : PCI I/O PCI ޸ (Memory Window)

PCI-PCI 긴 ٿƮ  PCI  I/O PCI ޸𸮿 аų 
 û  Ϻθ Ų.   ׸ 6.1, 0 PCI 
 1 PCI   а    , PCI-PCI 긴
  ּҰ SCSI ī峪 ̴ ī ޸   ְ, 
   ּ  ع. ̷  ͸ ʿ ּҰ 
ý ü ޵Ǵ  ش. ̸  PCI-PCI 긴 1 
(primary bus) 2 (secondary bus) ؾ ϴ PCI I/O
 PCI ޸  ̽ ּҿ  α׷ؾ Ѵ. ѹ 
PCI-PCI긴 ϰ , ̽ ̹  츦 ؼ 
PCI I/O PCI ޸  ϴ  , PCI-PCI 긴  
ʴ´. ̴ PCI ̽ ̹ ڵ ϰ ִ ߿ 
Ư¡̴. ߿ 캼 , ̴  PCI-PCI 긴 
ϴ   ٷӰ Ѵ. 


6.5.2 PCI-PCI 긴 : PCI  Ŭ(Configuration Cycle) PCI 
 ȣ ̱ 

PCI ʱȭ ڵ尡   PCI (0 PCI )   ʴ ġ鿡 
  , 긴 ڽ 1 ̽ 2 ̽
  Ŭ  ѱ  ϵ   ִ Ŀ 
־ Ѵ. Ŭ̶ PCI  ̴ ̴ּ. 
PCI Ծ࿡ ΰ  PCI  ּҸ ϰ ִ. ̴  0 
Ÿ԰ 1 Ÿε ׸ 6.3 6.4 ؼ ְ ִ. 0 
Ÿ PCI  Ŭ  ȣ ,  ġ ̸  PCI 
  PCI  ּҷ ؼѴ. 0 Ÿ  
Ŭ 11-31 Ʈ ġ  ׸̴. ý ϴ 
 ϳ  ٸ ġ ٸ Ʈ οϴ ε,  ⼭ 
Ʈ 11 0 Կ ִ PCI ġ, Ʈ 12 1 Կ ִ PCI 
ġ Ѵ. ٸ  ġ  ȣ ٷ 11-31 Ʈ 
 ִ ̴.     ϴ ý PCI ޸ 
Ʈѷ  ٸ. 

1 Ÿ PCI  Ŭ PCI  ȣ ,  Ÿ  
Ŭ PCI-PCI 긴 ϰ ٸ ġ  Ѵ.  
PCI-PCI 긴 1 Ÿ  Ŭ  , װ ڽ PCI  
 ٿƮ ų   ִ. 
PCI-PCI 긴 1 Ÿ  Ŭ Ұ, ƴϸ ٿƮ
 PCI  ų  , PCI-PCI  ǾĿ 
޷ִ.  PCI-PCI 긴 1  ̽ ȣ 2  
̽ ȣ  ִ. 1  ̽ CPU   
ʿ ִ ̰, 2  ̽  ָ ִ ̴.  
 PCI-PCI 긴  (subordinate  bus) ȣ  ִµ, 
̴ 2  ̽ ʸ 긴   PCI  ִ  
 ȣ̴. ٸ ǥϸ,   ȣ PCI-PCI 긴 
ٿƮ  PCI  ȣ   ū ̴. 
PCI-PCI 긴 1 Ÿ  Ŭ , 긴  ߿ 
Ѱ  Ѵ. 

    o   ȣ 긴 2   ȣ   ȣ 
      ̿   (   ȣ Ͽ) Ѵ. 

    o  ȣ 긴 2  ȣ ġϸ 0 Ÿ  
       ȯѴ. 

    o   ȣ 2  ȣ ũ   ȣ 
      ۰ų , ٲ ʰ ״ 2  ̽ 
      Ų. 

 ׸ 6.9 ִ ġ 3   ִ ġ1 ϰ 
Ѵٸ, CPUκ 1 Ÿ     Ѵ. ׷  긴
1 ̸ ٲ ʰ 1  Ű, 긴2 ̸ ϸ, 
긴3 ̸ 0 Ÿ   ٲٰ 3   ġ1 
ϰ ȴ. 

PCI     ȣ Ҵϴ   ü  
ٸ,   ȣ ̵簣   ýۿ ִ 
 PCI-PCI 긴 ־ ̾ Ѵ. 

    "PCI-PCI 긴 ʸӿ ִ  PCI   ȣ, 2  
     ȣ   ȣ (̵ Ͽ) ̿ ־ Ѵ." 

  Ģ ٸ, PCI-PCI 긴  1 Ÿ  Ŭ 
Ű ʰų  ȯ  ̰, ý ڽſ ִ 
PCI ġ ã ϰų ʱȭ  ̴.  ȣ ù
 ̱ ؼ ̵ Ư ġ(PCI-PCI 긴) Ư  
Ѵ.  PCI 긴  ȣ ̴  6.6.2
   Բ Ѵ. 


6.6  PCI ʱȭ 

 PCI ʱȭ ڵ      κ ɰ  
ִ. 

     PCI ̽ ̹ :   ̽ ̹(pseudo device 
       driver) 0  PCI ý ã Ͽ, ýۿ 
      ִ  PCI ġ 긴 ã´. ׸ ش ڷᱸ 
       Ʈ  ý ġ Ÿ. Ҿ, ã 
       긴 ȣ οѴ. 

     PCI BIOS :  Ʈ  [4, PCI BIOS ROM Ծ]  
       񽺵 Ѵ.  AXP ̷ BIOS 񽺰 ,
       Ȱ  ϴ  ڵ尡  Ŀο ԵǾ ִ. 

     PCI Ȯ(PCI Fixup) : ýۺ ٸ  ڵ ýۺ ٸ 
       PCI ʱȭ  κ ϰ Ѵ. 


6.6.1  Ŀ PCI ڷᱸ 

 Ŀ PCI ý  ʱȭϸ鼭 ý   PCI ġ 
״ Ÿ ڷᱸ . ׸ 6.5 ׸ 6.1  
 PCI ýۿ   ڷᱸ ش. 

 PCI ġ (PCI-PCI 긴 Ͽ) pci_dev ڷᱸ, PCI 
 pci_bus ڷᱸ Ÿ.   Ʈ  
Ʈ   ڽſ   PCI ġ ڽ . PCI
 PCI-PCI 긴 ؼ   Ƿ (ù° PCI 
 0  ϰ),  pci_bus ڷᱸ   ľ ϴ 
PCI-PCI 긴  ͸ ´.  PCI ġ PCI  θ 
PCI  ڽ̴. 

׸ 6.5   ýۿ ִ  PCI  ġ  
 pci_devices ִ. ýۿ ִ  PCI ġ ڽ pci_dev 
ڷᱸ  ְ, ̵  ť(pci_devices) ִ.  ť  
 Ŀ ýۿ ִ  PCI ġ  ãµ Ѵ. 


6.6.2 PCI ̽ ̹ 

PCI ̽ ̹  ̽ ̹  ƴ϶, ý ʱ
ȭ  Ҹ ü  Լ̴. PCI ʱȭ ڵ ýۿ ִ 
 PCI   PCI ġ(PCI-PCI 긴 Ͽ) 
 Ѵ.  ڵ PCI BIOS ڵ带 ̿Ͽ,  ϰ ִ PCI 
      Ǿ ִ ƴ ȮѴ. ׸ 
 PCI  Ǿ ,   ġ ϴ pci_dev ڷᱸ 
, ϴ PCI ġ Ʈ(pci_devices Ű ִ) 
̸ ߰Ѵ.



                 pci_bus    
 pci_root     +------------+
------------->|  Parent    |
              |  Children  |-------+
              |  next      |       |
              |  self      |       |
              |  devices   |---+   |
              |  bus=0     |   |   |
              |            |   |   |
              +------------+   |   |
                               |   |
       +---------------------------+
       |  +--------------------+
       |  |
       |  |      pci_dev          pci_dev          pci_dev  
       |  |    +---------+      +---------+      +---------+
       |  +--->| bus     | +--->| bus     | +--->| bus     |
       |       | sibling | |    | sibling | |    | sibling |
       |       | next    | |    | next    | | +->| next    |
       |       |         |-+    |         |-+ |  |         |
       |       |         |      |         |   |  |         |
       |       +---------+      +---------+   |  +---------+
       |      PCI-ISA Bridge       Video      | PCI-PCI Bridge
       |                                      |
       |        pci_bus                       |
       |     +------------+                   |
       +---->|  Parent    |                   |
             |  Children  |                   |
             |  next      |                   |
             |  self      |-------------------+
             |  devices   |--+                    
             |  bus=1     |  |
             |            |  |
             +------------+  |     pci_dev          pci_dev  
                             +-->+---------+      +---------+
                                 | bus     | +--->| bus     |
                                 | sibling | |    | sibling |
                                 | next    | |    | next    |
                                 |         |-+    |         |
                                 |         |      |         |
                                 +---------+      +---------+
                                    SCSI            Ethernet


         ׸ 6.5 : Linux Kernel PCI Data Structures



PCI ʱȭ ڵ 0 PCI  ã Ѵ.  ڵ  
 PCI Կ   PCI ġ   ĺ(Vendor 
Identification) ġ ĺ(Device Identification)  Ѵ.
׸ Ǿ ִ   ߰ϸ,  ġ Ÿ pci_dev 
ڷᱸ . PCI  ʱȭ  ڵ忡      pci_dev 
ڷ  PCI-PCI 긴 Ͽ  pci_devices  
Ʈ ȴ. 

 ã PCI  ġ PCI-PCI 긴,  pci_bus ڷᱸ  
pci_bus Ʈ pci_root Ű ִ pci_dev ڷᱸ Ѵ.  
PCI ʱȭ ڵ ġ з ڵ尡 0x060400     PCI 
ġ PCI-PCI 긴   ִ. ׸   Ŀ ڽ
 ã  PCI-PCI 긴 ٸ (ٿƮ) PCI  Ѵ. 
 ٸ PCI-PCI  긴 ߰ϴ Ȱ   Ѵ. 
  Ž(depthwise) ˰̶ ϴ ̴. ý  
PCI ġ Ž(breadthwise) ϱ  Ž Ͽ 
  ȴ. ׸ 6.1   0 PCI  ִ   
ġ ϱ  , 1  PCI  ִ ̴ݰ SCSI ġ 
   ִ. 

 ٿƮ PCI  ã , ߰ ִ PCI 긴  2 
 ȣ   ȣ ؾ ϴµ, ̴  ڼϰ 
ϰ ִ.


PCI-PCI 긴 ϱ - PCI  ȣ οϱ

PCI-PCI 긴, PCI I/O, PCI ޸, Ǵ PCI  ּҰ  а 
 õ ų  , 긴    ˾
 Ѵ : 

     1 (primary bus) ȣ : PCI-PCI 긴  ٷ  
       Ʈ  ȣ 

     2 (secondary bus) ȣ : PCI-PCI 긴 ٷ  ٿ
       Ʈ  ȣ 

      (subordinate bus) ȣ : 긴  ٿƮ 
         ִ   ū ȣ 

     PCI I/O PCI ޸  : PCI-PCI 긴  ٿƮ
        ϴ PCI I/O ּҰ PCI ޸ ּҰ 
         ̽ ּҿ ũ

  ־ PCI-PCI 긴 Ϸ     긴 
  ȣ   ٴ ̴. ٿƮ  PCI-PCI 긴
  ִ 𸣰, ȴٰ ϴ װ  ȣ   
𸥴. ش Ž  ˰ Ͽ,   ִ  
PCI-PCI 긴 ϰ, ã  ȣ οϴ ̴. 
PCI-PCI 긴 ã, 2  ȣ ̰, ӽ  
 ȣ 0xFF  , ٿƮ PCI-PCI 긴 ã 
 ȣ ٿ. ̰  ̰, Ʒ ִ  
ϴ       ̴. 

     PCI-PCI 긴 ȣ̱ : 1 ܰ ׸ 6.6 ġ ó 
       ã Ǵ 긴 긴1̴. 긴1 ٿƮ PCI 
        1 Ǹ, 긴1 2  ȣ 1, ׸ ӽ
          ȣ 0xFF Ҵȴ. ̴ PCI  ȣ 
       1̳  ̻  1 Ÿ  Ŭ  긴1
       Ͽ PCI  1 Եȴٴ ̴.  1 Ÿ 
        Ŭ  ȣ 1̶ ̴ 0 Ÿ  Ŭ
        ȯ ǰ, ٸ   ȣ ȯ ʰ ״ 
        ̴.    PCI ʱȭ ڵ尡 1 PCI 
         Ͽ ϱ  ؾ ϴ ̴. 

     PCI-PCI 긴 ȣ̱ : 2ܰ   Ž ˰ 
       ϹǷ, ʱȭ ڵ 1 PCI  Ͽ ̸ 
       Ѵ. ⼭ PCI-PCI 긴2 ߰ϰ ǰ, PCI-PCI 긴2
        Ѿ ̻ PCI-PCI 긴 Ƿ   ȣ
       2 ̽ ȣ Ȱ 2  ȴ. ׸ 6.7  
         PCI-PCI 긴    Ǵ ش. 

     PCI-PCI 긴 ȣ̱ : 3ܰ  PCI ʱȭ ڵ 1 PCI 
        ϴ  ǵƿ ٸ PCI-PCI 긴 긴
       3 ã ȴ. ̴ 1  ȣ 1, 2  ȣ 3, 
       ׸   ȣ 0xFF  ȴ. ׸ 6.8  
       ý  Ǵ ش.   ȣ 1, Ǵ 
       2 3  1 Ÿ PCI  Ŭ شϴ PCI  
       ùٸ ޵ ̴. 



                      +-------+
                      |       |
          +-----+     |       |               +-----+
          |     |     |  CPU  |               |     |
          | DI  |     |       |               | D2  |
          |     |     |       |               |     |
          +--+--+     +---+---+               +--+--+
Bus 0        |            |                      |   
-------------+------------+----------------------+------------------
                          |                    
+-----+  +-----+      +---+---+                
|     |  |     |      | Bridge| Primary Bus=0  
| DI  |  | D2  |      |       | Secondary Bus=1
|     |  |     |      |   1   | Subordinate=0xFF
+--+--+  +--+--+      +---+---+                
   |        |             |                                    Bus 1
---+--------+----+--------+------------------+----------------------
                 |                           |                    
  +-----+    +---+---+                   +---+---+
  |     |    | Bridge|                   | Bridge|
  | DI  |    |       |                   |       |
  |     |    |   3   |                   |   2   |
  +--+--+    +---+---+                   +---+---+
     |           |      Bus ?                |               Bus ?
-----+-----+-----+-----------        --------+---------------------
           |                         
       +---+---+                  +-----+  +-----+
       | Bridge|                  |     |  |     |
       |       |                  | DI  |  | D2  |
       |   4   |                  |     |  |     |
       +---+---+                  +--+--+  +--+--+
           |                         |        |                Bus ?
-----------+-------------------------+--------+---------------------


               ׸ 6.6 : Configuring a PCI System : Part 1



                      +-------+
                      |       |
          +-----+     |       |               +-----+
          |     |     |  CPU  |               |     |
          | DI  |     |       |               | D2  |
          |     |     |       |               |     |
          +--+--+     +---+---+               +--+--+
Bus 0        |            |                      |   
-------------+------------+----------------------+------------------
                          |                    
+-----+  +-----+      +---+---+                
|     |  |     |      | Bridge| Primary Bus=0  
| DI  |  | D2  |      |       | Secondary Bus=1
|     |  |     |      |   1   | Subordinate=0xFF
+--+--+  +--+--+      +---+---+                
   |        |             |                                    Bus 1
---+--------+----+--------+------------------+----------------------
                 |                           |                    
  +-----+    +---+---+                   +---+---+                
  |     |    | Bridge|                   | Bridge| Primary Bus=1  
  | DI  |    |       |                   |       | Secondary Bus=2
  |     |    |   3   |                   |   2   | Subordinate=2  
  +--+--+    +---+---+                   +---+---+                
     |           |      Bus ?                |               Bus 2
-----+-----+-----+-----------        --------+---------------------
           |                         
       +---+---+                  +-----+  +-----+
       | Bridge|                  |     |  |     |
       |       |                  | DI  |  | D2  |
       |   4   |                  |     |  |     |
       +---+---+                  +--+--+  +--+--+
           |                         |        |                Bus ?
-----------+-------------------------+--------+---------------------


               ׸ 6.7 : Configuring a PCI System : Part 2



                      +-------+
                      |       |
          +-----+     |       |               +-----+
          |     |     |  CPU  |               |     |
          | DI  |     |       |               | D2  |
          |     |     |       |               |     |
          +--+--+     +---+---+               +--+--+
Bus 0        |            |                      |   
-------------+------------+----------------------+------------------
                          |                    
+-----+  +-----+      +---+---+                
|     |  |     |      | Bridge| Primary Bus=0  
| DI  |  | D2  |      |       | Secondary Bus=2
|     |  |     |      |   1   | Subordinate=0xFF
+--+--+  +--+--+      +---+---+                
   |        |             |                                    Bus 1
---+--------+----+--------+------------------+----------------------
                 |                           |                    
  +-----+    +---+---+                   +---+---+                
  |     |    | Bridge| Primary Bus=1     | Bridge| Primary Bus=1  
  | DI  |    |       | Secondary Bus=3   |       | Secondary Bus=2
  |     |    |   3   | Subordinate=0xFF  |   2   | Subordinate=2  
  +--+--+    +---+---+                   +---+---+                
     |           |      Bus 3                |               Bus 2
-----+-----+-----+-----------        --------+---------------------
           |                         
       +---+---+                  +-----+  +-----+
       | Bridge|                  |     |  |     |
       |       |                  | DI  |  | D2  |
       |   4   |                  |     |  |     |
       +---+---+                  +--+--+  +--+--+
           |                         |        |                Bus ?
-----------+-------------------------+--------+---------------------


               ׸ 6.8 : Configuring a PCI System : Part 3



                      +-------+
                      |       |
          +-----+     |       |               +-----+
          |     |     |  CPU  |               |     |
          | DI  |     |       |               | D2  |
          |     |     |       |               |     |
          +--+--+     +---+---+               +--+--+
Bus 0        |            |                      |   
-------------+------------+----------------------+------------------
                          |                    
+-----+  +-----+      +---+---+                
|     |  |     |      | Bridge| Primary Bus=0  
| DI  |  | D2  |      |       | Secondary Bus=1
|     |  |     |      |   1   | Subordinate=4  
+--+--+  +--+--+      +---+---+                
   |        |             |                                    Bus 1
---+-+------+----+--------+------------------+----------------------
     |           |                           |                    
  +--+--+    +---+---+                   +---+---+                
  |     |    | Bridge| Primary Bus=1     | Bridge| Primary Bus=1  
  | DI  |    |       | Secondary Bus=3   |       | Secondary Bus=2
  |     |    |   3   | Subordinate=4     |   2   | Subordinate=2  
  +--+--+    +---+---+                   +---+---+                
     |           |      Bus 3                |               Bus 2
-----+-----+-----+-----------        --------+---------------------
           |                         
       +---+---+                  +-----+  +-----+
       | Bridge| Primary Bus=3    |     |  |     |
       |       | Secondary Bus=4  | DI  |  | D2  |
       |   4   | Subordinate=4    |     |  |     |
       +---+---+                  +--+--+  +--+--+
           |                         |        |                Bus 4
-----------+-------------------------+--------+---------------------


               ׸ 6.9 : Configuring a PCI System : Part 4



     PCI-PCI 긴 ȣ̱ : 4ܰ   긴3 ٿƮ
        3  ϱ Ѵ. 3 PCI  ٸ PCI-PCI 
       긴(긴4)  ְ, ̴ 1  ȣ 3, 2 
        ȣ 4 ο޴´. ̰  ٱ⿡   ִ
       긴̹Ƿ,   ȣ 4 ο޴´. ʱȭ ڵ 
       PCI-PCI 긴3 ƿ   ȣ 4 Ѵ. 
         PCI ʱȭ ڵ PCI-PCI 긴1   ȣ
        4 Ҵ  ְ  ȴ. ׸ 6.9   ȣ 
       ش. 


6.6.3 PCI BIOS Լ

PCI BIOS Լ  ÷鿡   ǥ Լ ø  
ϳ̴.  , ̵   ý۰   AXP  ý
 ־ ϴ. ̵ CPU  PCI ּҰ    
 ְ Ѵ.  Ŀ ڵ ̽ ̹ ̸   
ִ. 



    31                                               4 3 2 1 0
   +--------------------------------------------------+-+---+-+
   |                                                  | |   | |
   |                   Base Address                   | |   |0|
   |                                                  ||| | | |
   +--------------------------------------------------+|+-|-+-+
                                                       |  |
                                       Perfetchable----+  Type

               Base Address for PCI Memory Space


    31                                                   2 1 0
   +------------------------------------------------------+-+-+
   |                                                      | | |
   |                   Base Address                       | |1|
   |                                                      ||| |
   +------------------------------------------------------+|+-+
                                                           |
                                                        Reserved

               Base Address for PCI I/O Space


   ׸ 6.10 : PCI Configuration Header : Base Address Registers



6.6.4 PCI Ȯ(PCI Fixup) 

 AXP PCI Ȯ ڵ ڿ(⺻  ƹ͵  ʴ ڵ
̴) ξ .   ý ýÿ Ǵ ý BIOS
  , ̰ PCIý  ̹ ȱ ̴. 
׷  ̹ Ǿ ִ  ϴ  ܿ   
 . ׷   ƴ ýۿ    
ʿϴ . 

     o  ġ PCI I/O PCI ޸  ҴѴ. 

     o ýۿ ִ  PCI-PCI 긴 PCI  I/O PCI ޸ ּ 
       츦 Ѵ. 

     o ġ ͷƮ   . ̰   ġ ͷƮ 
       ó Ѵ. 

   ̵ ڵ尡  ϴ ̾߱Ѵ. 


<ġ 󸶳  PCI I/O PCI ޸  ʿ ϴ ˾
 >

ã PCI ġ 󸶳  PCI I/O ޸ ּҰ ʿ 
ϴ ˾Ƴ ؼ ̸  ġ  Ѵ. ̴  ġ 
̽ ּ Ϳ  1 ְ  ̸ ٽ оν 
̷. ġ ڽſ  ּ Ʈ 0 ϰ, ̴ 
ڽ ʿ ϴ ּҰ  ũ⸦ Ÿ ȿ  ȴ. 

̽ ּ Ϳ ΰ ⺻   ִµ,   ּ
 ġ Ͱ ־ ϴ - PCI I/O  PCI ޸
  - Ѵ. ̰  Ʈ 0μ   ִ. 
׸  6.10 PCI ޸𸮿 PCI I/O  ̽ ּ  
ΰ  ش. 

־ ̽ ּ Ͱ 󸶳  ּҰ  䱸ϴ ˾
 , Ϳ  1 ְ ̸ ٽ  д´. ׷ ġ
 ڽſ  ּ Ʈ 0 Ͽ, ʿ ּҰ ũ
 ϰ ȴ. ̷    ּҰ ũ 2 ̰ 
̿  ڿ ĵǾ ִٴ  ˷ش.

  DECChip 21142  PCI ̴ ġ ʱȭ   ġ, PCI 
I/O PCI ޸𸮷 0x100 Ʈ  ʿ Ѵٰ ˷ش. ʱ
ȭ ڵ ׸ŭ  Ҵϰ,   21142  Ϳ 
 ͸  ּҿ   ְ ȴ. 


<PCI-PCI 긴 PCI ġ PCI I/O PCI ޸𸮸 Ҵϱ>

ٸ ޸ó PCI I/O PCI ޸  ϸ,   
̴. ڱ ƴ ýۿ PCI Ȯ ڵ (׸  
ýۿ BIOS ڵ)  ġ 䱸ϴ ũ  ޸𸮸 ȿ
  ġ  Ҵؾ Ѵ. 
PCI I/O PCI ޸𸮴 ڿ  ǵ ġ ҴǾ 
Ѵ.  , ġ PCI I/O  0xB0 䱸Ѵٸ ̰  0xB0 
谡  Ǵ ּҿ ĵǾ Ѵٴ ̴. ⿡ ,  
긴 PCI I/O PCI ޸  ̽ 4K  ĵǾ ϸ 
 1MByte 踦  ־ Ѵ. ٿƮ ġ ּҰ
  Ʈ PCI-PCI 긴 ޸  ġ ־ ϱ 
,  ȿ Ҵϴ    ̴. 

 PCI ̽ ̹   /ġ Ʈ   
 ġ ּҰ PCI I/O ޸𸮰 ϴ  Ҵϴ 
˰ Ѵ. ⼭  ˰ Ͽ PCI ʱȭ  
ڵ忡    pci_bus pci_dev ڷᱸ 󰣴. PCI  
Ʈ(pci_root Ű ִ) Ͽ BIOS Ȯ ڵ  
 ϰ ȴ.

     o   ִ   PCI I/O  ޸ ̽  4K   
        1Mbyte 踦  Ѵ. 

     o    ġ  (ϴ  PCI I/O ޸𸮸
       ʿ Ѵ) 

          - ġ PCI I/O PCI ޸  Ҵϰ 

          - ϴ ũ⸸ŭ  PCI I/O ޸ ̽ ̵ϰ 

          - ġ PCI I/O PCI ޸𸮸 ϴ° ϰ Ѵ.

     o    ٿƮ   ã  
       ҴѴ. ̴  PCI I/O ޸ ̽ ٲ۴ٴ Ϳ 
       Ѵ. 

     o  ִ  PCI I/O PCI ޸ ̽ 4K  
        1Mbyte  ϰ, ̷ ϴ ߿  PCI-PCI  
       긴 ʿ ϴ PCI I/O PCI ޸  ̽ 
       ũ⸦ ˾Ƴ. 
     o    PCI-PCI 긴 α׷Ͽ PCI I/O PCI 
       ޸ ̽ ũ⸦ Ѵ. 

     o PCI-PCI 긴 ִ PCI I/O PCI  ޸𸮿  ϵ ϴ
       긴  Ҵ. ̴ 긴 1 PCI  ̴ PCI 
       I/O PCI ޸ ּ ߿  ȿ ִ PCI I/O PCI 
       ޸ ּҴ 2  ǳʰ ȴٴ ̴.

  ׸ 6.1 ϸ, PCI Ȯ ڵ   ý
 ̴ : 

     PCI ̽ (Align the PCI bases) : PCI I/O 0x4000, PCI 
       ޸𸮴 0x100000̴. ̰ PCI-ISA 긴  ּҸ ISA 
       ּ Ŭ ȯ  ְ Ѵ. 

      ġ :  ġ 0x200000ŭ PCI ޸𸮸 ʿ Ͽ,
        PCI ޸ ̽ 0x200000 ϴ ũ⸦ Ҵִ
       , 䱸 ũ ڿ  Ǿ Ѵ. PCI ޸ 
       ̽ 0x400000 ̵ϰ, PCI  I/O ̽ ״ 
       0x4000 ִ. 

     PCI-PCI 긴 :  PCI-PCI  긴 ǳʰ ű⿡  PCI 
       ޸𸮸 ҴѴ. ⼭ ̽ ̹ ùٷ  Ǿ 
       ֱ    ʿ䰡 . 

          ̴ ġ : ̰ 0xB0 Ʈ PCI I/O PCI ޸ 
             䱸Ѵ.  ġ 0x4000 ϴ PCI I/O 
             0x400000 ϴ PCI ޸𸮸  ȴ. PCI
            ޸ ̽  0x4000B0 ̵ϰ PCI I/O ̽ 
            0x40B0 ȴ. 

          SCSI ġ : ̰ 0x1000 ũ PCI ޸𸮸 䱸ϰ, 
            ڿ    0x401000 ϴ ޸𸮸 Ҵ
            ޴´. PCI I/O ̽ ״ 0x40B0, PCI ޸ ̽
             0x402000 ̵Ѵ. 

     PCI-PCI 긴 PCI I/O, PCI ޸  :  긴 
        0x4000 0x40B0 ̿ ġϴ PCI I/O , 0x400000
        0x402000 ̿ ġϴ PCI ޸ 츦 Ѵ ̰
        PCI-PCI 긴  ġ   ϰ, ̴
       ̳ SCSI ġ   ̸ Ű Ѵ.


 : ȣ
 : ȣ


=====================================================================



7 

ͷƮ ͷƮ ó
(Interrupt and Interrupt Handling)



<< 忡  Ŀ ͷƮ  óϴ 캻. 
  Ŀ ͷƮ óϴ  Ϲ Ŀ ̽ 
  , ͷƮ óϴ   Űó ٸ.>>

  ٸ  ϴ   ϵ Ѵ.  ġ
 ͸ ϸ, IDE ġ  ũ ϴ ̴.  ̷ 
ġ    ִ,    ûϰ (  
޸  ũ ϴ Ͱ ) װ Ϸ  
 ̴.     ϱ  ſ ȿ̾ 
ü   Ϸ  ٷ ϹǷ "ƹ͵ 
鼭 ٻ (busy doing nothing)"  ð Һ ̴. 
̺    ȿ  û   ٸ   ۾
 ϰ û ۾   ġκ ͷƮ ޴ ̴. ̷ 
踦 ϸ   ġ ÿ ۾ ûϴ  ϴ. 

CPU  ϰְ  ġ ͷƮ    ϵ
 ؾ Ѵ. δ ƴϴ  AXP  κ  
μ 밳   Ѵ. CPU Ư   
ٲ (  +5Ʈ -5Ʈ), CPU ϴ  ߰ 
Ʈ ó ڵ ͷƮ ٷ Ư ڵ带 ϱ Ѵ. 
̵      Ÿ̸ӿ Ǿ ־ 1000 1ʸ 
ͷƮ , SCSI Ʈѷ  ٸ ġ  ɵ鵵 
 ̴. 

ü ý ͷƮ Ʈѷ  Ͽ CPU ͷƮ  
ͷƮ 1:1  ʰ, ġ ͷƮ ׷ ش. 
̷ ϸ CPU ִ ͷƮ      ƴ϶ ý  
ϰ   ִ. ͷƮ Ʈѷ ͷƮ ϴ 
ũ Ϳ  Ͱ ִ. ũ  Ʈ 
Ѱų  ͷƮ ϰ ϰų  Ұϰ   , 
 ʹ ýۿ  ߻ ͷƮ ش. 

ý Ϻ ͷƮ ϵ Ǿ ִ.   ǽ
 Ŭ  Ÿ̸Ӵ  ͷƮ Ʈѷ 3  ɿ 
Ǿ ִ. ׷  ɵ Ư ISA Ǵ PCI Կ  Ʈ
 ī尡   ִ   ġ Ǵ ȴ.  
 ͷƮ Ʈѷ 4   PCI  0 Ǿ, ⿡ 
̴ ī带     ڿ SCSI Ʈѷ ٲ    
ִٴ ̴. ͷƮ ó ־ ⺻ ,  ý 
 ͷƮ    , ü ̿ ó 
 ֵ ϰ  Ѵٴ ̴. 

κ   ũμ ͷƮ Ȱ  
óѴ. ϵ ͷƮ ߻ϸ CPU  ϰ ִ 
  ߴϰ ͷƮ ó ڵ尡 ְų ͷƮ ó ڵ 
бϴ ɾ ִ ޸  Ѵ.  ڵ Ϲ 
ͷƮ (interrupt mode)  ϴ CPU Ư 忡 
Ǵµ,   忡 ٸ ͷƮ ߻  .  
 ִ.  CPU ͷƮ 켱 Ű   켱  
ͷƮ ߻  ְ Ѵ. 
̷     ͷƮ óڵ  ؼ ۼؾ 
ϸ,  ڽ   ־ ͷƮ  óϱ  ⿡ 
CPU (, CPU Ϲ Ϳ ؽƮ ) ϴµ  
Ѵ.  CPU ͷƮ 忡 ϴ Ư  
Ʈ ־, ͷƮ ڵ ʿ ؽƮ ϴµ  
   ִ. 



+-----------------+                               /-------\
|                 |              Real Time Clock  |   |   |
|                 |<----------------------------- |   |__ |
|                 |                               |       |
|      C P U      |                               \-------/
|                 |             +-----+ 0
|                 |<------------|     | 1 <-------- keyboard
|                 |         +-->|  P  | 2
+-----------------+         |   |  I  |
                            |   |  C  | 4 <-------- Serial
                            |   |  1  | 5 <-------- Sound
                            |   |     | 6 <-------- Floppy
                            |   +-----+ 7
                            |   
                            |   +-----+ 0
                            +---|     | 
                                |  P  | 
                                |  I  | 3 <-------- SCSI
                                |  C  | 
                                |  2  | 
                                |     | 6 <-------- ide0
                                +-----+ 7 <-------- ide1


          ׸ 7.1 : A Logical of Interrupt Routing 



ͷƮ óǰ  CPU ´ ͷƮ  ǰ 
ͷƮ ȴ. ׷ CPU ͷƮ  ߻ϱ  ϴ  
  ϰ ȴ. ߿  ͷƮ óϴ ڵ 
 ȿ̾ ϸ ü ͷƮ ʹ  Ǵ ʹ  
  ʾƾ Ѵٴ ̴. 


7.1 α׷  ͷƮ Ʈѷ(Programmable Interrupt 
Controller, PIC)

ý ̳ʴ ڽ ϴ  ͷƮ    
, IBM PC  82C59A-2 CMOS PIC [6,  ֺ ġ]   
Ѵ.  Ʈѷ PC â⶧ θ  , ISA 
ּҰ ִ Ʈѷ  ͸ ̿ (  ġ 
Ǿ ̹ ˷ ִ) α׷   ִ. 
 ֱ  Ĩ Ʈ ISA ޸  ġ  ͸  
 ִ.  AXP  PC  ڿ   ý۵ 
̷  κ ο, 밳 ٸ ͷƮ Ʈѷ 
Ѵ. 

׸ 7.1 8Ʈ Ʈѷ PIC1 PIC2   Ǿ ,  
ũ Ϳ ͷƮ   ϳ  ִ   
 ִ. ũ ʹ ּ 0x21 0xA1   ʹ  
0x20 0xA0 ִ. ũ  Ư Ʈ 1  ش 
ͷƮ ϰ ϸ, 0  ͷƮ Ұϰ Ѵ. , 
° Ʈ 1  ͷƮ 3  ϰ ϴ ̸, 0  
Ұϰ ϴ ̴. ϰԵ ( Ե), ͷƮ ũ 
ʹ   , ű⿡    о  . 
  ũ Ϳ   Ͽ  
Ͽ Ͽ߸  Ѵ.  ͷƮ   ƾ ͷƮ  
ƾ,   ũ ϰ Ź  Ϳ ü ũ 
. 

ͷƮ ߻ϸ, ͷƮ  ó ڵ   ͷƮ  
(Interrupt Status Register, ISR) д´. ͷƮ ó  ƾ 0x20
 ִ ISR 16Ʈ ͷƮ    Ʈ, 0xA0 
ִ ISR   Ʈ óѴ.  0xA0 ִ ISR ù° 
Ʈ شϴ ͷƮ ý ͷƮ 9 ϰ ȴ. PIC1 
ִ ι° Ʈ PIC2 ߻ϴ ͷƮ ϴµ ϱ 
   . PIC2 ߻ϴ  ͷƮ PIC1  
° Ʈ ϰ ȴ. 


7.2 ͷƮ ó ڷᱸ ʱȭ

Ŀ ͷƮ ó ڷᱸ ̽ ̹ ý 
Ʈ   ûϸ鼭 ¾ȴ. ̸  ̽ ̹
 Ϸ  Ŀ 񽺸 ν, ͷƮ ûϰ, 
ͷƮ ϰ ϰų, Ұϰ .  ̽ ̹
 ̷ ƾ ҷ ڽ ͷƮ ó ƾ ּҸ Ѵ. 

PC Űó ʻ  ͷƮ (Ư ġ ϵ) 
Ǿ ִµ,  쿡 ش ̽ ̹ ʱȭ  
ϰ   ͷƮ ûϸ ȴ. ÷ ũ ̽ 
̹ ̿   ϴµ, ׻ IRQ 6 ûѴ. 
 ġ  ͷƮ ϰ    ̽ ̹ 
𸣴 쵵 ִ. PCI ̽ ̹ 쿡 ġ  
Ʈ ϴ ׻ ˰ ֱ    , ϰ
 ISA ̽ ̹  쿡 ڽ  ͷƮ ȣ 
 ã ִ   .  ̷  ذϱ  
̽ ̹ ڽ  ͷƮ  Ž(probe)  ֵ 
ϰ ִ. 

 ̽ ̹ ġ ΰ ؼ ͷƮ ߻ϵ 
Ѵ. ׷  ٸ ġ Ҵ   ý  ͷƮ  
ϰ Ѵ. ̷ ϸ ó ߻״ ġ ͷƮ PIC 
 ޵ ̴.  ͷƮ  ͸ о   
̽ ̹  ش.   0 ƴ϶ Ž ߿ ϳ 
̻ ͷƮ ߻ ̴. ̹ Ž縦 ϰ ٸ ġ
 Ҵ  ͷƮ  Ұϰ Ѵ . Ž縦  ISA  
̽ ̹ ڽ  IRQ ȣ ãҴٸ,  
   û  ִ. 

ISA  ýۿ  PCI  ý ξ   ̴. ISA ġ
 ϴ ͷƮ  밳 ϵ ġ  ִ ۸  
ϰ, ̽ ̹   Ǿ ִ. ݸ鿡, PCI ġ
  ͷƮ ý ϸ鼭 PCI ʱȭ   PCI BIOS
 PCI ý Ҵ ش.  PCI ġ A, B, C, D 4
 ͷƮ    ִ.     ġ   
Ǵµ, κ ⺻ A ɿ ִ ͷƮ  Ѵ.  
PCI Կ ִ PCI ͷƮ  A, B, C, D ͷƮ Ʈѷ 
Ǿ ִ.   PCI  4 A  ͷƮ Ʈѷ 6 
ɿ ϰ, PCI  4 B  ͷƮ Ʈѷ 7 ɿ 
ϴ  Ǿ ִ. 

PCI ͷƮ  ޵Ǵ ý۸ ٸǷ, PCI  ͷƮ 
    ִ  ¾ ڵ尡 ʿϴ.  Ĩ  ϴ 
PC ý   Ǵ ý BIOS    ϴµ, 
 AXP ϴ ý۰  BIOS  ý 쿡 
 Ŀ  ̷  Ѵ. PCI  ¾ ڵ  ġ ͷƮ 
Ʈѷ  ȣ PCI   .  ׸ ġ ϴ 
PCI  ȣ PCI ͷƮ  ȣ  PCI ͷƮ   ̿
Ͽ ͷƮ  (Ǵ IRQ) ȣ Ѵ. ̷  ġ 
 ͷƮ  ȣ ǰ, ͷƮ  ȣ  ġ 
ϴ PCI   ִ ׸ ȴ. ¾ ڵ   ̷
  õ ͷƮ  ׸  ִ´. ̽ 
   о  Ŀο ͷƮ   û 
 Ѵ. 

PCI-PCI 긴     ýۿ PCI ͷƮ  Ű 
ġ  찡 ִ. ͷƮ Ű ġ ý PIC 
     ִ.   PCI ġ, ͷƮ Ͽ 
 PCI ġ ͷƮ ͷƮ Ʈѷ  ϳ ߻ϰ  
 ִ . ̷  ͷƮ  ϱ   ش ͷƮ
  ó ûϴ ̽ ̹ ͷƮ  
 ִ  ϰ ִ . ͷƮ ϱ  irq_action 
Ϳ irqaction ڷᱸ    ȴ.  ͷƮ ߻
ϸ,   ͷƮ ϴ ġ ͷƮ ڵ鷯  
ҷش. ͷƮ   ִ  ̽ ̹( PCI 
̽ ̹)  ͷƮ   ϴ 
ͷƮ ڵ鷯 Ҹ  Ƿ ̿ ؾ Ѵ . 


7.3 ͷƮ ó

 ͷƮ ó ý  ֿ ӹ ϳ ͷƮ
ùٸ ͷƮ ó ڵ ϴ ̴.  ͷƮ ó 
ý ý ͷƮ   ľϰ ־߸ Ѵ.  
  ÷  Ʈѷ ͷƮ Ʈѷ 6 ɿ ͷƮ 
Ųٸ,  Ŀ ͷƮ ó ý  ͷƮ 
÷ǿ ߻  ϰ ̰ ÷ ̽ ̹
ͷƮ ó ڵ ؾ Ѵ. ̸   ý 
Ʈ óϴ ƾ ּҸ  ִ ڷᱸ  Ϸ 
͸ Ѵ.  ƾ ش ̽ ̹ ִ ̸, 
̹ ʱȭ   ڽ  ͷƮ ûϴ   
̽ ̹ å̴. ׸  7.2 irqaction ڷ  
Ű ִ ͵  irq_action ְ ִ.  irqaction 
ڷᱸ ͷƮ ó ƾ ּҸ  ش ͷƮ  
ڵ鷯   ִ. ͷƮ  ̵  óǴ 
Űó,  ý۸  ٸ   ͷƮ ó 
ڵ Űó ̴. , irq_action   ũ ýۿ 
  ִ ͷƮ Ű ġ ڿ  ޶. 



    irq_action
  +------------+              irqaction 
  |            |             +---------+
  +------------+      +----->| handler |        Interrupt
  |            |      |      | flags   |------> handing
  +------------+      |      | name    |        routine
  |            |------+      | next    |        for this
  +------------+             +---------+        device
  |            |
  +------------+
  |            |
  +------------+
  |            |
  +------------+              irqaction        irqaction 
3 |            |             +---------+      +---------+
  +------------+      +----->| handler |----->| handler |
2 |            |      |      | flags   |      | flags   |
  +------------+      |      | name    |      | name    |
1 |           --------+      | next    |      | next    |
  +------------+             +---------+      +---------+
0 |            |
  +------------+


          ׸ 7.2 : Linux Interrupt Handling Data Structres



ͷƮ ߻ϸ,   ýۿ ִ  PIC ͷƮ  
(ISR) о  ġ ͷƮ ״ ˾Ƴ. ׷ 
   ġ irq_action   ȯѴ.  
, ÷ Ʈѷ Ű ͷƮ Ʈѷ 6 ɿ ߻ 
ͷƮ ͷƮ ڵ鷯   ϰ° ͷ ȯȴ. 
Ʈ ߻Ͽµ ̸ ó ͷƮ ڵ鷯 ٸ  Ŀ
   ̴. ڵ鷯 ִٸ   ͷƮ Ű  
ġ  irqaction ڷᱸ ִ ͷƮ ó ƾ θ 
̴. 

 Ŀ ̽ ̹ ͷƮ ó  ƾ θ,  
ƾ  ͷƮ ߻Ͽ ľϿ ̿ ȿ ؾ 
Ѵ.  ͷƮ ߻Ͽ ľϱ  ̽ ̹ 
ͷƮ ߻ ġ   ͸    ̴.  
   ְ  û ۾ Ϸƴٰ    
ִ.   ÷ Ʈѷ ÷ ũ Ȯ   
÷ 带 ÷ Ҵٰ   ִ. ͷƮ ߻ 
 ˾ ´ٸ, ̽ ̹ ͷƮ óϱ   
۾ ؾ  ʿ䰡  ִ. ׷   Ŀο ̽ 
̹  ۾ ڷ   ִ  Ŀ ִ. ̰ CPU
 ʹ  ͷƮ 忡 ִ  Ϸ ̴.  ڼ
  ̽ ̹ (8) . 

REVIEW NOTE : Fast interrupt slow interrupt ڿ ִ ΰ? 


 : 輺, ȫ漱
 : ȣ

=====================================================================



8 

̽ ̹ (Device Drivers)



<<ü  ϳ ý ϵ ġ ٸ Ư¡ 
  ڷκ ߴ ̴.     ý(Virtual File
  System)  ý   ġ ֵ , 
  Ʈ  ý۵ ϰ  ش.  忡  
  Ŀ ýۿ ִ  ġ   ϴ 캸 
  Ѵ.>>

CPU ýۿ ִ    ġ ƴϴ. CPU  
  ġ  ִ ڽŸ ϵ Ʈѷ  
ִ. Ű, 콺, Ʈ SuperIO Ĩ ϰ, IDE ϵ
ũ IDE Ʈѷ, SCSI ũ SCSI Ʈѷ Ѵ.  
ϵ  Ʈѷ    / (Control and 
Status Registers, CSRs) , ̰ ġ鸶 ٸ. Adaptec
2940 SCSI Ʈѷ CSRs NCR 810 SCSI Ʈѷ CSRs   
ٸ. CSRs ġ ϰ ߰, ʱȭϸ  ߻  
̸ ϴµ ̿ȴ.  α׷ ϵ ϴ 
ڵ带  ,  Ŀθ  ڵ带  ִ. ϵ 
Ʈѷ ٷ ϴ Ʈ ̽ ̹ Ѵ. 
 Ŀ ̽ ̹ ٺ Ư ǰ, 
޸𸮿 ϸ,  ϵ ó ƾ   ̺귯
̴.  ִ ̽ ̹ ڽ ϴ ġ Ư
 óѴ. 

н ⺻ Ư¡  ϳ ġ ٷ  ߻ȭѴٴ 
̴.  ϵ ġ  ó ̸,  ٷ  
̴ ǥ ý ݰ Ȱ Լ ̿Ͽ , ݰ, а, 
  ִ . ý   ġ ġ Ư (device special 
file) ǥð ȴ.  , ýۿ ִ ù° IDE ũ 
/dev/hda Ÿ.  (ũ) ġ(block  device)  ġ
(character device) Ÿ ġ Ư  mknod  
,  ̳ ġ ȣ ġ Ÿ. Ʈ ġ鵵 
ġ Ư Ϸ ǥð , ̵  ýۿ Ʈ 
Ʈѷ ãƼ ʱȭ  ( ) . Ȱ 
̽ ̹ Ǵ  ġ Ȱ  ġȣ ´. 
̳ ġ ȣ ٸ ġ Ʈѷ ϴµ Ѵ.  
 ù° IDE ũ  Ƽǵ ٸ ̳ ġȣ ´. 
׷ ù° IDE ũ ι° Ƽ (/dev/hda2)  ȣ 3, 
̳ ȣ 2  ´.  ġ ִ  ý Ʈϴ 
ó ý ݿ ġ Ư  ϸ,   ġ 
ȣ  ý ̺ ̿Ͽ(̷   ϳ  ġ 
̺ chrdevs ִ), ġ Ư  ġ ̽ ̹ 
Ѵ. 

 , , Ʈ,    ϵ ġ 
Ѵ. 
 ġ ۸  ϰ ٷ а   ִ ġ, /dev/cua0
 /dev/cua1   Ʈ ⿡ Ѵ.   ġ    
ũ( 512 Ǵ 1024 Ʈ̴) θ а   ִ.  
ġ   ĳ(buffer cache) ؼ а , ƹ ̳ 
  ִ.   ̵  װ ġ  ֵ  а 
  ִٴ ̴.  ġ ġ Ư  ؼ    
,   ý ؼ Ѵ.  ġ Ʈ
Ǵ   ý   ִ. Ʈ ġ BSD  ̽
 ϸ, ̴ 10忡  ִ Ʈŷ ý κп ڼ 
̾߱Ѵ. 

 Ŀο   ٸ ̽ ̹  (̰ 
   ϳ̴), ׵    Ư  
ִ : 

     Ŀ ڵ : ̽ ̹ Ŀ  κ̹Ƿ, Ŀ 
       ٸ ڵ  ߸Ǹ ýۿ ġ ظ   
       ִ. ߸  ̹ ý ı  ,  
       ý Ʈų ͸   ִ. 

     Ŀ ̽ : ̽ ̹  Ŀ̳ ڽ 
        ýۿ ǥ ̽ ؾ Ѵ.  ,
       ͹̳ ̹  Ŀο  I/O ̽ ؾ 
       ϸ, SCSI ̽ ̹ Ŀο  I/O  ĳ 
       ̽ ϴ SCSI ýۿ SCSI ġ ̽ 
       ؾ Ѵ. 

     Ŀ Ŀ  : ̽ ̹ ޸ Ҵ,
       Ʈ , ť ǥ Ŀ 񽺸   ִ. 

     δ(Loadable) : κ  ̽ ̹ Ŀ 
       μ, ʿ  εϰ ̻ ʿ   ε 
       ִ. ̴ Ŀ ſ 뼺 ְ  ý ڿ ȿ
        ̿  ְ Ѵ. 

     (Configurable) :  ̽ ̹ Ŀο 
       Ͽ    ִ.  ġ   Ŀ 
           ִ . 

     (Dynamic) : ý ϰ ̽ ̹ ʱȭ 
        , ý ڽ   ִ ϵ ġ ã´. 
         ̽ ̹   ִ ġ ٰ 
       ϴ  ȵȴ.   ̽ ̹  
        ִ ̰, ý ޸𸮸   Դ´ٴ  
        ƹ ص ġ ʴ´. 


8.1 (Polling) ͷƮ(Interrupt)

ġ    (  "带 Ű ÷ ũ 42 
 о"), ̽ ̹      ƴ   
  ִ. 
̽ ̹ ġ   ͷƮ   ִ. 

ġ Ѵٴ  Ϲ û ۾   ˱  
ġ °   ġ  ͸ ؼ  д 
 Ѵ. ̽ ̹ Ŀ  κ̱ ,  
̹  Ϸ Ѵٸ ġ ۾ ĥ  Ŀ ٸ 
κ   Ƿ    ̴. ׷  
ϴ ̽ ̹ ý Ÿ̸Ӹ ̿Ͽ   ð 
 Ŀ ̽ ̹ ִ  ƾ θ Ѵ. 
׷  Ÿ̸ ƾ  Ǿ ¸ ˻Ѵ. ̴ 
 ÷ ̹ ϴ ̴. Ÿ̸Ӹ ̿ϴ 
  , ̺   ȿ  ͷƮ 
ϴ  ִ. 

ϴ ϵ ġ 񽺸 ޾ƾ   ϵ ͷƮ 
߻ϴ  ͷƮ ̿ ̽ ̴̹.  , 
̴ ̽ ̹ Ʈ ̴ Ŷ   
ͷƮ ߻Ѵ.  Ŀ  ͷƮ ϵ ġ 
ùٸ ̽ ̹    ־ Ѵ. ̴ ̽ 
̹ Ŀο ͷƮ ϰڴٰ ν ̷. 
̹ ͷƮ ó ƾ ּҿ ڽ ϰ  ͷƮ
ȣ Ŀο Ѵ.  ̽ ̹  ͷƮ 
ϰ ,   ͷƮ 󸶳  ߻ߴ ˷, 
/proc/interrupts   ȴ. 

0: 727432 timer

1: 20534 keyboard

2: 0 cascade

3: 79691 + serial

4: 28258 + serial

5: 1 sound blaster

11: 20868 + aic7xxx

13: 1 math error

14: 247 + ide0

15: 170 + ide1 

ͷƮ ڿ ûϴ  ̹ ʱȭ   Ѵ. ý 
 ͷƮ ó Ǿ ִµ, ̴ IBM PC   
̴. ׷ ÷ Ʈѷ  ͷƮ 6 Ѵ. ٸ  
ͷƮ,   PCI ġ ߻ϴ ͷƮ ýÿ 
 Ҵȴ. ̰  ̽ ̹ ͷƮ  
ûϱ  ڽ  ġ ͷƮ ȣ (IRQ)  ˾
 Ѵ.  PCI ϴ ͷƮ , IRQ ȣ 
Ͽ ýۿ ִ ġ    ִ ǥ PCI BIOS ݹ 
Ѵ. 

ͷƮ CPU  ޵Ǵ ϵ    ٸ, 
κ  ýۿ ٸ ͷƮ ߻ϴ   Ư
 忡 ͷƮ Ѵ. 
׷ ̽ ̹ ͷƮ ó ƾ ȿ  ǵ 
 Ͽ,  Ŀ ͷƮ ó  ͷƮǱ  
ϴ Ϸ ǵư  ֵ ؾ Ѵ. ͷƮ ޾   
 ؾ ϴ ̽ ̹, ߿ ҷ Ǵ ۾ Ŀ 
Ϲݺ ڵ鷯 ۾ť ־ ó  ִ. 


8.2  ޸  (Direct Memory Access, DMA) 

͸ ϵ ϵ ġ ų    ͷƮ 
ϴ ̽ ̹ Դٰϴ      
Ѵ. 1 и (1/1000 )  ھ ϴ 9600 bps  
 .  ͷƮ óð - ϵ ġ ͷƮ 
߻ϰ, ̽ ̹ ͷƮ ó ƾ Ҹ ɸ 
ð -  ۴ٸ (2 иʶ ),   ü ýۿ 
ִ  ſ  ̴. 9600 bps    ܿ CPU 
μ ð 0.002%  ̿ ̴. ׷ ϵũ Ʈѷ
 ̴ ġ ӵ ġ  ۷ ſ . SCSI 
ġ 1ʿ 40MB ͸   ִ. 

DMA ̷  ذϱ  ߵǾ. DMA Ʈѷ CPU 
 ʰ ġ ý ޸ ̿ ͸   ֵ 
Ѵ. PC ISA DMA Ʈѷ  DMA ä  , 
  7 ̽ ̹  ִ. 
 DMA ä 16 Ʈ ּ Ϳ 16 Ʈ ī Ϳ 
Ǿ ִ.   ʱȭϱ  ̽ ̹ DMA ä
 ּҷͿ ī ,   ( ,  
) Բ Ѵ. ׸ ڽ Ҷ ġ DMA ص 
ٰ Ѵ.    ϷǸ ġ PC ͷƮ ߻
Ѵ.  ̷ ȿ CPU ٸ     ִ. 

̽ ̹ DMA  ſ ؼ ؾ  Ѵ. ٵ 
DMA Ʈѷ  ޸𸮿 ؼ ƹ͵ 𸣰 ,  
ý  ޸𸮿  ̴.  DMA ϴ ޸
   ޸𸮿 ӵ  Ǿ ־ Ѵ. ̴ 
  ޸ ּҰ DMA ٷ   ٴ ̴ . 
· ڴ μ    ޸𸮿 (lock) ɾ 
, DMA ۾߿ ޸𸮰  ġ  ƿǴ  ϰ 
 ִ. °, DMA Ʈѷ  ޸ ü   .  
DMA ä ּ ʹ DMA 巹 ó 16 bit Ÿ, 
 Ϳ  8 Ʈ ִ.  DMA    ִ ޸
 Ϻ 16MB ѵǾ ִٴ ̴. 

DMA ä  7 ۿ   , ̽ ̹  
   幮 ڿ̴. ͷƮ   ̽ 
  DMA ä   ˾ƾ Ѵ.  ͷƮó 
 ġ ϴ DMA ä Ǿ ִ. 
 , ÷ ġ ׻ DMA ä 2 Ѵ.  ġ 
ϴ DMA ä ۷   ִ.  ̴ ġ ̷ 
 Ѵ. ̺  뼺 ִ ġ  DMA ä 
  ˷  ־ (ڽ CSRs Ͽ), ̽ 
̹  ִ DMA ä ϸ ȴ. 

 DMA ä ϳ ִ dma_chan ڷᱸ ͸  ̿Ͽ 
DMA ä 뿩θ   ִ. dma_chan ڷᱸ ΰ ׸
 Ǿִµ, ϳ DMA ä ڸ Ÿ ڿ̰, ٸ 
ϳ DMA ä ҴǾ ִ  ִ Ÿ ÷̴. 
cat /proc/dma      dma_chan ڷᱸ 
̴. 


8.3 ޸ 

̽ ̹ ޸𸮸   ؾ Ѵ. ̽ 
  Ŀ Ϻκ̹Ƿ  ޸𸮸    . 
 ̹  ,  ͷƮ ޾Ҵٴ  Ϲݺ ڵ鷯
(bottom  half  handler) ۾ť  ڵ鷯(task queue handler) 
Ǿ , current μ ٲ  ִ. ̽ ̹ Ư
 μ ǰ  ,   μ ҿ ư 
ִ,  Ư μ   . Ŀ  κó 
̽ ̹ ڷᱸ  ڽ ϴ ġ ؾ 
Ѵ. ̷ ڷᱸ  ҴϿ ̽ ̹ ڵ 
Ϻη Ե  , ̴ Ŀ ʿ̻ ũ  
̴. 
κ ̽ ̹ Ŀ  ʴ ޸(non-paged)
 Ҵ޾ ڽ ڷḦ ִ´. 

 Ŀ ޸𸮸 Ҵϰ ϴ  ƾ ϴµ, ̽ 
̹ ̸ Ѵ. Ŀ ޸𸮴 2   Ҵȴ. 
  128̳ 512 ũ ҴǴµ, ̽ ̹   
ũ⸦ ûص ̷ Ҵȴ. 
̽ ̹ ûϴ ũ   ũ⿡   øϿ 
Ҵȴ. ̷ ϸ     ū    
Ƿ, Ŀ ޸   .

Ŀ ޸𸮸 û޾       ؾߵȴ. 
  ޸𸮰 ,   ϰų  ġ 
 ƿؾ Ѵ. Ϲ  ޸𸮸 û μ 
 Ű,   ޸𸮰   ۾ ť 
־д.  ̽ ̹(Ǵ   Ŀ  ڵ) ̷ 
۾ ߻ϴ   ,   ٷ ޸𸮸 Ҵ  
ٸ Ŀ ޸ Ҵ ƾ   ִ.  ̽ 
̹  Ҵ ޸𸮸 DMA  ϱ⸦ Ѵٸ,  ޸𸮸 
䱸  DMA̶   ִ. 
̷  ýۿ DMA ޸𸮸 ϴ  ˾ƾ ϴ   
 Ŀ ̽ ̹ ƴϴ. 


   chrdevs
+----------+
|  name    |
|  fops    |-----------> file operations
+----------+
|          |           lseek
|          |           read
|          |           write
|          |           readdir
|          |           select
|          |           ioclt
|          |           mmap
|          |           open
|          |           release
|          |           fsyn
|          |           fasync
|          |           check_media_change
|          |           revalidate
+----------+


     ׸ 8.1 : Character Devices



8.4 Ŀΰ ̽ ̹ ̽

 Ŀ ̽ ̹ ǥ  Ͽ ȣۿ 
 ־ Ѵ. 
  ̽ ̹ - , , Ʈ ̽ ̹ 
-  Ŀ ̵ο 񽺸 û    ִ  
̽ Ѵ.   ̽ Ŀ   ٸ 
ġ ̽  ̹  Ȱ ٷ  ְ Ѵ.  
 SCSI IDE ũ ſ ٸ ,  Ŀ Ȱ 
̽  ̵ Ѵ. 

 ſ ̴.  Ŀ   ٸ  ġ
 ˰ ǰ, ٸ ̽ ̹ ʿ ϰ ȴ.  
Ŀ    ũƮ Ͽ  ̽ ̹ 
  ְ Ѵ. ̷  ̽ ̹   ʱȭ 
Ǵµ, ̵  ϵ   ִ.  ̹ 
Ŀ   ڽ ʿ   ε  ִ. ̷ 
̽ ̹   ϰ ϱ , ̽ 
̹ ڽ ʱȭ  Ŀο ڱ ڽ Ѵ.  
̽ ̹ ̽ Ѻκμ, ϵ ̽ ̹
 ̺ Ѵ. ̵ ̺ شϴ  ġ ̽
 ϴ Լ Ϳ   ִ. 


8.4.1  ġ(Character Device)

 ġ  ġ ߿   ܼ ̴. α׷  
ġ ġ  ó ǥ ý  Ͽ , а, , 
  ִ. ̷   ġ PPP   ý 
ݿ ϱ  ϴ ̶   .  ġ
 ʱȭ      ̰ ̽  ̹, device_struct ڷ
  chrdevs ڽ Ʈ ߰ν  Ŀο 
ڽ Ѵ
 . ġ  ġ ȣ (  tty ġ ҴǴ 4) ̵ 
迭 εμ ȴ. ġ    ġ ȣ Ǿ 
ִ. chrdevs    device_struct ڷᱸ ΰ ׸
  ִ. ϳ ̽ ̹ ̸  
̰, ٸ ϳ      ̴.   
,  , , а, ݴ ̷   ϴ  
̽ ̹ ִ ƾ ּҵ̴ . /proc/devices ִ  
ġ    chrdevs Ϳ  ̴. 

 ġ (  /dev/cua0) Ÿ  Ư  , 
Ŀ ùٸ  ̽ ̹  ó ƾ Ҹ ֵ 
¾ ־ Ѵ.  ̳ 丮ó  ġ Ư 
  VFS inode ǥȴ.  Ư Ͽ  VFS inode ġ 
 ĺڿ ̳ ĺڸ  ִ (̴  ġ Ư 
 ϴ).  VFS inode  ġ Ư  ȸ  쿡,  
ϴ  ý (EXT2)  ýۿ  ִ  
 . 

 VFS inode  Ʈ    Ǿ ִµ, ̵  
 inode Ű  ý ü  ٸ.  Ư   
Ÿ VFS inode  ,  inode   Լ 
⺻  ġ  ȴ. 
̴  ϳ   -   길  ִ. α׷
  Ư  ,      Լ, ġ 
 ĺڸ chrdevs Ϳ  ε Ͽ,  ġ  
   ´.    Ư  ϴ fileڷ
   Ͱ ̽ ̹  Ű  ڷ
 ¾Ѵ. , α׷ θ       
ġ   εǾ Ҹ ȴ. 


8.4.2  ġ(Block Device)

 ġ鵵 ó ϴ  Ѵ.    Ư Ͽ 
ùٸ   Ʈ ϴµ Ǵ   ġ 
ߴ  ſ ϴ.  blkdevs ͷ ϵ  ġ
 Ѵ. blkdevs chrdevs Ϳ  ġ   
ġȣ εǾ  ִ.    Ʈ  device_struct ڷ
̴.  ġ ٸ ,  ġ Ŭ° ִٴ 
̴. SCSI ġ IDE ġ   ׷ Ŭ̴. Ŭ   
Ŀο ڽ ϰ Ŀο  Լ Ѵ.  Ŭ  
 ġ鿡 ϴ ̽ ̹ Ŭ  Ư Ŭ
 ̽ Ѵ. ׷    SCSI ̽ ̹, 
SCSI ý Ŀο ش ġ   Լ ϴµ 
  ִ ̽ SCSI ýۿ ؾ Ѵ. 

  ̽ ̹    Բ  ĳÿ 
 ̽ ؾ Ѵ.   ̽ ̹ blk_dev 
Ϳ ִ blk_dev_struct ڷᱸ  ä. ⿡,  
Ϳ  ε ġ  ȣ̴. 
blk_dev_struct ڷᱸ û(request) ƾ  ּҿ,  ĳð  
  ͸ аų  ̹ ϴ û Ÿ 
request ڷᱸ Ʈ  ͷ Ǿ ִ. 



                    blk_dev
               +-----------------+
               |                 |
               |                 |
               |                 |
               +-----------------+
               | request_fn()    |     request          request
blk_dev_struct | current_request |-->+---------+  +-->+---------+
               |                 |   |rq_status|  |   |rq_status|
               +-----------------+   +---------+  |   +---------+
               |                 |   |rq-dev   |  |   |rq-dev   |
               |                 |   +---------+  |   +---------+
               |    :            |   |mcd      +  |   |mcd      +
               |    :            |   +---------+  |   +---------+
               |                 |   |         |  |   |         |
               |                 |   |         |  |   |         |
               +-----------------+   +---------+  |   +---------+
                                     |sem      |  |   |sem      |
                   buffer_head       +---------+  |   +---------+
                  +-----------+      |bh       |  |   |bh       |--+
           0x0301 | b_dev     |<--+  +---------+  |   +---------+  |
                  +-----------+   |  |tail     |  |   |tail     |  |
               39 | b_blocknr |   |  +---------+  |   +---------+  |
                  +-----------+   |  |next     |--+   |next     |  |
                  | b_state   |   |  +---------+      +---------+  |
                  +-----------+   |                                |
                  | b_count   |   +--------------------------------+
                  +-----------+
             1024 | b_size    |
                  +-----------+
                  |           |
                  |           |
                  +-----------+
                  | b_next    |
                  +-----------+
                  | b_prev    |
                  +-----------+
                  |           |
                  |           |
                  +-----------+
                  | b_data    |
                  +-----------+


              ׸ 8.2 : Buffer Cache Block Device Requests



 ĳô ϵ ġ ͸ аų   , requestڷ
 blk_dev_struct ߰Ѵ. ׸ 8.2 request ϳ ̻
buffer_head ڷᱸ  ͸  ְ,  request  
 ͸ аų  û̶  ش. buffer_head 
ڷᱸ  ĳÿ   Ǹ,  ۷    
ٸ μ  ̴.  request ü  Ʈ 
all_requests Ʈ Ҵȴ. û ֺ û Ʈ ߰Ǹ, 
 û ť óϱ  ̹ û Լ  Ҹ ȴ. ׷
 ̹  ܼ Ʈ ִ  request ó ̴. 

ϴ ̽ ̹ û óϰ , ̹ request
ü  buffer_head ü ְ, ̰ ŵǾ ǥ
ϰ ̵  ؾ Ѵ. 
̷ buffer_head  ϸ,     ٸ  
ִ μ   ̸  ȴ. ̷    ̸
 ذϴ  EXT2  ý  ý  ִ  
ġκ  EXT2 丮 Ʈ ϰ ִ   
о ϴ 찡 ִ. μ ̽ ̹ ڽ  
  Ǹ,   buffer_head 丮 Ʈ 
 ̴.  request ڷᱸ ٰ ǥõǰ,  ڷ
  ٸ  û    ְ ȴ. 


8.5 ϵ ũ(Hard Disk)

ũ ̺ ڷḦ ȸϴ ũ (platter) ν 
ڷḦ   Ҽ ְ  Ѵ. ڷḦ ϱ   
׸ 尡  ǥ鿡 ִ ̼ ˰̸ ڼ  Ѵ. 
 Ư ̼ ˰ ڼ Ͽ ڷḦ д´. 

ũ ̺ ϳ ̻ (platter) Ǿ ְ, 
 ̼ϰ    չ ̼ ȭö  
õǾ ִ. ݵ  (spindle) Ǿ  ӵ 
ȸ ϴµ,  ȸ ӵ 𵨿  3000RPM 10000RPM 
ٸ. ̸  360RPM  ȸϴ ÷ ũ غ 
 ̸    ̴. ũ б/  ڷḦ а
  ϸ,  ǥ鸶 ϳ 尡 ־  ݿ 尡 
 Ѵ. б/    ǥ ǵ帮 
,   (鸸 10ġ )    ִ. 
б/ . 带 ̴ ġ(actuator)   ǥ 
 δ.  б/   پ ־  ǥ
 Ȱ ̰ ȴ. 

  ǥ Ʈ(track)̶ ϴ   ɿ 
. Ʈ0  ٱ ִ Ʈ̰,   ȣ  Ʈ 
߽ ࿡   Ʈ̴. Ǹ(cylinder) Ȱ ȣ 
 Ʈ ̴.  ũ ִ   ʿ ִ 5
° Ʈ  5 Ǹ̴. Ǹ  Ʈ  Ƿ 
 ũ     Ǹ    
  ̴. 
 Ʈ (sector)  . ʹ ڷḦ  ϵũ 
ϰ о  ִ ּҴ ũ  ũ . Ϲ 
ũ 512Ʈ̰, ũ       ũⰡ 
ȴ. 

ũ    - Ǹ , ׸   -  
̾߱Ѵ.       IDE ũ  
ϳ   Ÿ. 

hdb : Conner Peripherals 540MB-CFS540A, 516MB w/64kB Cache, 
CHS=1050/16/63

̰ ũ 1050 Ǹ (Ʈ), 16  (8 ), 
׸ Ʈ 63 ͸  ִٴ  Ѵ.   
  512Ʈ ũ⸦ Ƿ, ũ 뷮 529200 
Ʈ ȴ. ̴   ִ ũ 뷮 516MBϰ ̰ 
ִµ, ̴   Ϻδ  ũ Ƽ  ϴµ 
Ǳ ̴.  ũ ڵ  (bad sector) ã
 ũ  ۵ϵ ε ٽ ̱⵵ Ѵ. 

ϵ ũ Ƽ(partition) ɰ  ִ.  Ƽ Ư 
  Ҵ ͵ Ŵ ׷̴. ũ Ƽ  
 ũ  ü ų, ٸ    ֵ 
ش.   ý ϳ ũ  Ƽ  - 
ϳ DOS   ý̰, ٸ ϳ EXT2  ý, 
  Ƽ̴. ϵũ Ƽ  Ƽ ̺ 
ִ. Ƽ ̺  Ʈ Ƽ   ϰ  
  , Ǹ ȣ  Ѵ. fdisk DOS 
˵ ũ 4 1 ũ Ƽ(primary disk partition) 
  ִ. Ƽ ̺ 4 Ʈ  ΰ  ϴ  
ƴϴ. fdisk   Ƽ ϴµ,  1(primary),
Ȯ(extended), (logical) Ƽ̴. Ȯ Ƽ ¥ Ƽ 
ƴ϶,     Ƽ  ִ ̴. ȮƼǰ 
 Ƽ 1 Ƽ װۿ   ִ  ȸϱ 
  ߵǾ.  ΰ 1 Ƽ  ִ 
ũ  fdisk    ̴ : 

Disk /dev/sda: 64 heads, 32 sectors, 510 cylinders 

Units = cylinders of 2048 * 512 bytes 

Device Boot Begin Start End Blocks Id System 

/dev/sda1 1 1 478 489456 83 Linux native 

/dev/sda2 479 479 510 32768 82 Linux swap 

Expert command (m for help) : p 



gendisk_head
    |      gendisk                gendisk    
    |   +------------+         +------------+
    +-->|major       | 8   +-->|major       | 3
        +------------+     |   +------------+
        |major_name  |"sd" |   |major_name  | "ide0"
        +------------+     |   +------------+
        |minor_shift |     |   |minor_shift |
        +------------+     |   +------------+
        |max_p       |     |   |max_p       |
        +------------+     |   +------------+
        |max_nr      |     |   |max_nr      |
        +------------+     |   +------------+
        |init()      |     |   |init()      |    hd_struct[]
        +------------+     |   +------------+   +------------+   ^
        |part        |     |   |part        |-->| start_sect |   |
        +------------+     |   +------------+   | nr_sects   |   |
        |sizes       |     |   |sizes       |   +------------+   |
        +------------+     |   +------------+   |            |   |
        |nr_real     |     |   |nr_real     |   |    :       |   |
        +------------+     |   +------------+   |    :       | max_p
        |real_devices|     |   |real_devices|   |    :       |   |
        +------------+     |   +------------+   |            |   |
        |next        |-----+   |next        |   +------------+   |
        +------------+         +------------+   | start_sect |   |
                                                | nr_sects   |   |
                                                +------------+   v


               ׸ 8.3 : Linked list of disks



Disk /dev/sda: 64 heads, 32 sectors, 510 cylinders 

Nr AF Hd Sec Cyl Hd Sec Cyl Start Size ID 

1 00 1 1 0 63 32 477 32 978912 83 

2 00 0 1 478 63 32 509 978944 65536 82 

3 00 0 0 0 0 0 0 0 0 00 

4 00 0 0 0 0 0 0 0 0 00 

̴ ù° Ƽ Ǹ 0 ( Ʈ 0),  1,  1 
ϸ, 477 Ǹ, 32 , 63  ִٴ  
ش. ⿣  Ʈ 32 Ϳ 64 б/ 尡 Ƿ, 
 Ƽ ũ ־ Ǹ  . fdisk ⺻ 
Ƽ Ǹ   迭Ѵ. ̴   ٱ Ǹ 0 
Ͽ  ִ    478  Ǹ ´. 
ι° Ƽ  Ƽμ  Ǹ (478) Ͽ 
ũ    Ǹ ִ. 

 ʱȭϴ  ýۿ ִ ϵũ ġ ׷ 
̸ Ѵ.  ýۿ ϵũ   ְ   
˾Ƴ. ư  ũ Ƽ   ã
. ̵  gendisk ڷ  ǥõǸ, ̵ Ʈ 
gendisk_head Ʈ Ͱ Ű ִ. IDE  ũ 
ý ʱȭ  ڽ ã ũ gendisk ڷᱸ 
. ũ ý ̸ Ͽ ϰ Ʈ blk_dev 
ڷᱸ   ÿ Ѵ.  gendisk ڷᱸ    
ġ ȣ , ̴  Ư ġ  ȣ ġѴ. 
 , SCSI  ũ ý  SCSI ũ ġ Ǵ 
ȣ 8  ϳ gendisk  Ʈ ("sd") . ׸ 
8.3 ΰ gendisk Ʈ ش.   SCSI ũ 
ý ̰,   IDE ũ Ʈѷ ̴. ̰ ù° 
IDE Ʈѷ ide0̴. 

ũ ý ʱȭ    gendisk Ʈ,  
 Ƽ ˻  δ. ,  ũ ý ġ  
 ̳ ġ ȣ  ũ ִ Ƽǰ νų 
 ֵ ڽŸ ڷᱸ Ѵ.  ġ  ĳó  
  ų   , Ŀ    ġ Ư 
(  /dev/sda2) ߰   ġȣ ̿Ͽ ùٸ 
ġ  ȴ. ̳ ġ ȣ    ġ ϴ 
  ̽ ̹ ý ̴. 


8.5.1 IDE ũ 

  ýۿ  Ϲ ϴ ũ 
IDE(Integrated Disk Electronics) ũ̴. IDE SCSI I/O 
 ƴ϶ ũ ̴̽  . 
 IDE Ʈѷ ΰ ũ   ִ. ϳ (master) 
ṵ̃ ٸ ϳ (slave) ũ̴. ̳ ƴϸ ̳
  ũ ִ ۷ Ѵ. ýۿ ִ ù° IDE Ʈ
ѷ 1(primary) IDE  Ʈѷ ϰ   2(secondary) 
Ʈѷ Ѵ. IDE 1ʿ 3.3 Mbyte ͸   , 
IDE ũ ִ ũ 538  MB̴. Ȯ IDE  (Extended IDE, EIDE)
 ũ ũ⸦ ִ 8.6 GB, ۼӵ ʴ 16.6 MB ø 
̴. IDE EIDE ũ SCSI ũ μ ٷ κ PC 
 ϳ ̻ IDE Ʈѷ  ִ. 

 IDE ũ ̸ ũ Ʈѷ ߰   
δ. 1 Ʈѷ  ũ /dev/hda,  ũ /dev/hdb
̴. /dev/hdc 2 IDE Ʈѷ ִ  ũ̴. IDE 
ý  Ŀο IDE Ʈѷ  ũ ϴ 
 ʴ´. 1 IDE Ʈѷ    ĺ(Ǵ ġ ȣ) 
3̰, 2 IDE Ʈѷ 22̴. ׷ ý ΰ  IDE Ʈ
  ִٸ, blk_dev blkdevs   3 22 ε IDE  
ý Ʈ  ̴. IDE ũ  Ư  ̷ 
ȣ ̴  ݿϿ, 1 IDE Ʈѷ Ǿ ִ 
/dev/hda /dev/hdb    ĺڷ 3 . Ŀ ̵ 
 Ư  ϴ IDE  ýۿ   ̳  
ĳ ,  ĺڸ ε Ͽ ˾Ƴ IDE ý
 Ѵ.  û    IDE ũ û 
Դ ˾Ƴ  IDE ý ̴. ̸  IDE 
ý ġ Ư ĺڿ ִ ̳ ġ ȣ ϴµ, ̰
 ùٸ ũ شϴ Ƽ  û   ֵ ϴ 
  ִ. 1 IDE Ʈѷ ִ  IDE ̺ 
/dev/hdb ġ ĺڴ (3,64)̰,  ũ ù° Ƽ
(/dev/hdb1)  ġ ĺڴ  (3,65)̴. 


8.5.2 IDE ý ʱȭ 

IDE ũ IBM PC   κ Բ  ؿԴ.  ð  
̵ ġ ̽  , ̴ IDE ý ʱȭ
  ó ߴ ͺ  ϰ . 

   ִ ִ IDE Ʈѷ  4̴.  Ʈ
 ide_hwifs Ϳ ִ ide_hwif_t ڷᱸ ǥѴ. 
 ide_hwif_t ڷᱸ ΰ ide_drive_t ڷᱸ  , 
  ϳ   IDE ̺, ٸ ϳ  IDE ̺긦  
̴. IDE ý۸ ʱȭ    ý CMOS ޸
 ũ  ִ 캻. CMOS ޸𸮴 嵥  
޹ޱ  PC    빰 Ҿ ʴ ޸
.  CMOS ޸𸮴, PC   ִ  ִ ϰ 
ư ǽð ð(real time clock, RTC) ġ ִ ̴. 
CMOS ޸ ġ ý BIOS ϸ, ̴  IDE Ʈ
 ̺갡  ִ  ˷ش.   ߰ ũ
   BIOSκ ,    ̺꿡  
ide_hwif_t ڷᱸ ϴµ Ѵ. ֱٿ  PC PCI 
EIDE Ʈѷ ϰ ִ Intel 82430 VX Ĩ° PCI Ĩ 
Ѵ.   IDE ý PCI BIOS ݹ ̿Ͽ ýۿ ִ 
PCI (E)IDE Ʈѷ ã´. ׸  ִ ̵ Ĩ¿ PCI  
 ƾ ȣѴ. 

IDE ̽,  Ʈѷ ߰ߵǸ, Ʈѷ ̿  ũ
 ݿϿ ide_hwif_t ȴ. IDE ̹ I/O ޸  
ִ IDE  Ϳ  ν  ̷. 1IDE 
Ʈѷ  Ϳ   ⺻ I/O ּҴ 0x1F0 - 
0x1F7̴. ̵ ּҴ IBM PC â⿡   ̴. 
IDE ̹  Ʈѷ    ĳÿ VFS ϴ
, ̴ blk_dev blkdevs Ϳ ߰ϴ ̴. IDE ̹ 
 شϴ ͷƮ   ûѴ. ̵ ͷƮ  
ó 1 IDE Ʈѷ 14, 2 IDE Ʈѷ 15 ȴ. 
׷, ̵  IDE ٸ    Ŀο 
(command line) ɼ ־     ִ. IDE ̹  
ý ߰ߵ IDE Ʈѷ  gendisk  gendisk Ʈ 
߰Ѵ  Ʈ ߿ ý ߰ߵ  ϵ  Ʈ Ƽ 
̺ ãµ  Ѵ. Ƽ ˻ϴ ڵ IDE Ʈѷ 
ΰ IDE Ʈ   ִٴ  ˰ ִ. 


8.5.3 SCSI ũ 

SCSI (Small Computer System Interface)  , ϳ ̻ ȣƮ 
Ͽ  8 ġ   ִ ȿ 1 1 
 ̴.  ġ  ĺڸ  ϴµ, ̴ 밳 
ũ ִ ۷ Ѵ.  ִ   ġ ̵簣 
 Ǵ 񵿱 ͸   , 32Ʈ ũ 
ʴ 40 MB   ִ. SCSI  ġ Ϳ  
 Բ ϸ,  (initiator)  (target) 
 ϳ Ʈ   ٸ ¸   ִ. SCSI
  ´  ִ ټ ȣκ   ִ. 
 ´  . 

      (BUS FREE) :     ġ, 
        ߻ϴ Ʈǵ . 

      (Arbitration) :  SCSI ġ ּ ɿ ڽ SCSI ĺ
         SCSI     Ͽ.  
        SCSI ĺ ȣ ̱. 

     (SELECTION) : ġ 縦  SCSI   
       ,  SCSI û  󿡰 ڽ   Ѵ
        ȣؾ Ѵ. ̴ ּ ɿ  SCSI ĺڸ 
       ν ̷. 

     缱(RESELECTION) : SCSI ġ û óϴ ߿  
         ִ. ׷   ڸ ٽ   ִ.
        SCSI ġ  ¸ ϴ  ƴϴ. 

     (COMMAND) : 6, 10, Ǵ 12 Ʈ   ڿ 
       ۴   ִ. 

      Է,  (DATA IN, DATA OUT) :  ¿  
        Ͱ  ڿ   ̿ ޵ȴ. 

     (STATUS) :   Ϸ Ŀ  ·  , 
         ڿ ̳ и Ÿ  Ʈ 
         ְ Ѵ. 

     ޽ Է, ޽ (MESSAGE IN, MESSAGE OUT) :  
          ̿ ߰  ۵ȴ. 

 SCSI ý ΰ ⺻ ҷ Ǿ ִ.  
ڷᱸ ǥ Ǵµ ̵  . 

     ȣƮ(host) : SCSI ȣƮ ϵ  κ, SCSI
       Ʈѷ̴. NCR810 PCI SCSI Ʈѷ SCSI ȣƮ  
       .  ý    SCSI Ʈѷ ϳ ̻ 
        ִٸ,    SCSI ȣƮ ǥȴ. ̸ 
       SCSI ̽ ̹ ڽ Ʈѷ ϳ ̻  
       ִٴ ̴. 
       SCSI ȣƮ  ׻ SCSI   ̴. 



                                        Scsi_Host_Template
           scsi_hosts                      +----------+
          -------------------------------->| next     |
                                           +----------+
                                       +-->| name     | "Buslogic"
                                       |   +----------+
                                       |   |          |
                                       |   | Device   |
                                       |   | Driver   |
                                       |   | Routines |
                                       |   |          |
                                       |   +----------+
                                       |
                                       +------------------+
                                                          |
                                            Scsi_Host     |
          scsi_hostlist                    +----------+   |
          -------------------------------->| next     |   |
                                       +-->+----------+   |
                                       |   |          |   |
                                       |   +----------+   |
                                       |   | this_id  |   |
                                       |   +----------+   |
                                       |   | max_id   |   |
                                       |   +----------+   |
                                       |   |          |   |
                                       |   +----------+   |
                                       |   | hostt    |---+
                                       |   +----------+
                                       |   |          |
                                       |   +----------+
                                       |
                                       +------------------+
                                                          |
                          Scsi_Device      Scsi_Device    |
          scsi_devices   +-----------+    +-----------+   |
          -------------->| next      |--->| next      |   |
                         +-----------+    +-----------+   |
                         |           |    |           |   |
                         +-----------+    +-----------+   |
                         | id        |    | id        |   |
                         +-----------+    +-----------+   |
                         | type      |    | type      |   |
                         +-----------+    +-----------+   |
                         |           |    |           |   |
                         +-----------+    +-----------+   |
                         | host      |    | host      |---+
                         +-----------+    +-----------+
                         |           |    |           |
                         |           |    |           |
                         +-----------+    +-----------+


                    ׸ 8.4 : SCSI Data Structure



     ġ(Device) :  Ϲ SCSI ġ  δ SCSI ũ 
       , SCSI ǥ , CD-ROM, ׸ Ϲ SCSI ġ
          Ѵ. SCSI ġ  ׻ SCSI  
        ȴ. ̵ ġ  ٸ  ޵Ǿ ϴµ, 
       , CD-ROM̳  Ű ü   
         ü ŵǾ ν  ־ Ѵ. ٸ ũ
         ٸ  ġ ȣ , ̴  ġ
         û ùٸ SCSI    ְ Ѵ. 


SCSI ý ʱȭ 

SCSI ý ʱȭϴ  SCSI   ġ  Ư 
 ſ ϴ.  ýÿ SCSI ý ʱȭѴ 
- ýۿ ִ SCSI Ʈѷ(SCSI ȣƮ ϴ) ã,  SCSI 
 ˻Ͽ  ġ ãƳ. ׸ ̵ ġ ʱȭϿ 
 Ŀ  ٸ κп Ϲ    ĳ  ġ 
  ̵   ְ Ѵ. ʱȭ װ ¿ 
̷. 

ù°,  Ŀ    ִ SCSI ȣƮ ,  
Ʈѷ    ڽ  ϵ  ִ  ã´. 
Ŀο Ե  SCSI ȣƮ builtin_scsi_hosts Ϳ 
Scsi_Host_Template Ʈ  ִ. 
Scsi_Host_Template ڷᱸ  SCSI ġ SCSI ȣƮ 
Ǿ ִ ϴ    ϴ  SCSI ȣƮ    
ƾ鿡  ͸  ִ. SCSI ý ڽ ϴ 
 ̵ ƾ θ, ̵ ƾ ̷ ȣƮ  ϴ SCSI  
̽ ̹  κ̴.  SCSI ġ Ǿִ  
SCSI ȣƮ, ڽ Scsi_Host_Template ڷᱸ Ȱȭ SCSI 
ȣƮ scsi_hosts Ʈ ߰Ѵ.  ȣƮ   
ȣƮscsi_hostlist Ʈ ִ Scsi_Host ڷᱸ ǥȴ. 
 , ΰ NCR810 PCI SCSI Ʈѷ   ý  Ʈ
 ϳؼ, Ʈ ΰ Scsi_Host Ʈ  ȴ. 
 Scsi_Host ڽ ̽ ̹ Ÿ Scsi_Host_Template
 Ų. 

  SCSI  ȣƮ ߰Ƿ, SCSI  ý  SCSI 
ġ ȣƮ  Ǿ ãƾ Ѵ. SCSI ġ 0 
7 ġ  ȣ µ,  ȣ ڽ  SCSI   
ؾ Ѵ. SCSI ĺڴ 밳 ġ ִ ۷ Ѵ.   
SCSI ʱȭ ڵ SCSI  ִ ġ TEST_UNIT_READY  
 ġ ã´. ġ  Ѵٸ, ENQUIRY   
ſȮ Ѵ. ̴  (vendor) ̸  ġ 
  (revision) ̸ Ѵ. SCSI  Scsi_Cmnd ڷᱸ
 ǥǰ, ̽ ̹ Scsi_Host_Template ڷᱸ ִ 
̽ ̹ ƾ θ  ̸ Ѵ. ߰  SCSI ġ
 Scsi_Device ڷᱸ ǥϸ,  ڽ  θ Scsi_Host 
Ų.  Scsi_Device ڷᱸ scsi_devices Ʈ ߰ȴ. 
׸ 8.4  ̵ ֵ ڷᱸ  Ǿ ִ 
ش. 

SCSI ġ δ װ ִ - ũ, , CD, ׸ Ϲ. 
̵ SCSI   ٸ   ġ   Ŀο 
 ϵȴ. ׷ ̵ ־ SCSI ġ   ġ
ϳ ̻ ־ Ŀο  ϵȴ.  SCSI  -   SCSI 
ũ  - ڽŸ ġ  ̺ Ѵ. ̵  ̺ Ŀ 
 (̳ ĳ) ùٸ ̽ ̹ SCSI ȣƮ
 µ Ѵ.  SCSI  Scsi_Device_Template ڷᱸ 
ǥѴ.  ڷᱸ   SCSI ġ   پ ۾
 ϴ ƾ ּҸ  ִ. SCSIý ̵ ø
 Ͽ   SCSI ġ  SCSI   ƾ θ
 Ѵ. ٸ ϸ, SCSI ý SCSI ũ ġ 
Ϸ  , SCSI ũ    ƾ θٴ ̴. 
   SCSI ġ ϳ ̻  ߰ߵǸ Scsi_Type_Template  
ڷᱸ scsi_Devicelist Ʈ ߰ȴ. 

SCSI ý ʱȭ  ´ ϵ  Scsi_Device_Template
 (finish) Լ θ ̴. SCSI  ũ ̶, ̴ 
߰  SCSI ũ ȸ ׵ ũ  ϴ  
Ѵ.  ׸ 8.3 ̴ ó,  SCSI ũ Ÿ 
gendisk ڷᱸ ũ   ũ ߰Ѵ. 


 ġ û ϱ 

ϴ  SCSI ý ʱȭϰ   SCSI ġ  
  ְ ȴ.  ϴ  SCSI ġ  ڽ Ŀ
 Ͽ,   ġ û ڽſ   ְ Ѵ. 
⿡ blk_dev   ĳ û̳, blkdevs ϴ  
    ִ. ⼭ ϳ ̻  EXT2  ý Ƽ 
 ִ SCSI ũ ̹  ,  EXT2 Ƽ  ϳ
 Ʈ  Ŀ  û   ùٸ SCSI ũ ϴ
 캸 . 

SCSI ũ Ƽǿ   ͸ аų  û, blk_dev 
Ϳ ִ SCSI ũ current_request Ʈ ο request 
ü ߰ϰ ȴ. 
request Ʈ ó̶,  ĳô ٸ   ʿ䰡 . 
׷ ʴٸ SCSI ũ ýۿ ؼ request ť ó
 Ѵ. ýۿ ִ SCSI ũ Scsi_Disk ڷᱸ Ÿ. 
̵ rscsi_disks Ϳ  ,  ʹ SCSI ũ Ƽ 
̳ ġ ȣ  Ϻθ Ͽ ε Ǿ ִ.   
/dev/sdb1 8   ȣ 17 ̳ ȣ , ̴ 
ε 1 Ѵ.   Scsi_Disk ڷᱸ  ġ Ÿ 
Scsi_Device ڷᱸ  ͸  ִ. Scsi_Device ڷᱸ
 ʷ ڽ ""ϰ ִ Scsi_Host ڷᱸ Ű ִ. 
 ĳ÷κ  request ڷᱸ SCSI ġ  ϴ SCSI  
 ϴ Scsi_Cmnd   ü ٲ, ̴  ġ Ÿ 
Scsi_Host ü ť δ. ѹ    аų  
, ̵  SCSI ̽ ̹  óȴ. 


8.6 Ʈ ġ(Network Device)

 Ʈ ý Ʈ ġ  Ŷ  ޴ 
 ü Ѵ. ̴ 밳  ̴ ī尰  ġ
̴.  Ʈ ġ Ʈθ Ǿ ִ  ִµ, 
 ڱ ڽſ µ Ǵ (loopback) ġ  
װ̴.   Ʈ ġ device  ڷᱸ ǥȴ. 
Ʈ ̽ ̹ Ŀ ϸ鼭 Ʈ ʱȭϴ  
ڽ ϴ ġ  Ѵ .  device ڷᱸ ġ
   ,  ϴ پ  Ʈ  
ġ 񽺸  ̿  ֵ ϴ  Լ ּҸ  ִ. 
 Լ κ Ʈ  ġ   ۰ 谡  ִ. 
ġ ǥ Ʈ  Ŀ Ͽ ۹ ͸ ùٸ  
η  Ѵ.  ޴  Ʈ (Ŷ) 
sk_buff ڷᱸ ǥǴµ, ̴ Ʈ    ÷
ϰų   ֵ   ڷᱸ̴. Ʈ  
  Ʈ ġ  ϴ,  sk_buff ڷᱸ 
 ͸ յڷ ϴ  Ʈ (10) ϰ 
ٷ. ⼭ device ڷ  Ʈ ġ  ߰ϰ 
ʱȭϴ ߽ д. 

device ڷᱸ   Ʈ ġ   . 

     ̸ : Ư ġ  mknod    ġ 
        ġʹ ޸, Ʈ ġ Ư  ýۿ ִ Ʈ
        ġ ߰ϰ ʱȭϴ  ʷ Ÿ. ̵ 
       ̸ ġ  Ÿ ׷ ǥ ̸̴.  
        ġ鿡, 0 ϴ ȣ ٴ´.  ̴
       ġ /dev/eth0, /dev/eth1, /dev/eth2 ̷  Ÿ. 
       Ϲ Ʈ ġδ : 

     /dev/ethN       ̴ ġ 

     /dev/slN        SLIP ġ 

     /dev/pppN       PPP ġ 

     /dev/lo          ġ 

      :   ̽ ̹ ġ ϱ  
       ʿ ϴ ̴. IRQ ȣ ġ ϴ ͷƮ ȣ
       ̰. ̽ ּ(base address) ġ  Ϳ 
       Ͱ ִ I/O ޸  ̴ּ. DMA ä(DMA 
       channel) Ʈ ġ ϴ DMA ä ȣ̴.   
        ýÿ ġ ʱȭ  ȴ. 

     ̽ ÷(Interface Flag) : ̴  Ʈ  ġ Ư¡ 
       ɷ Ѵ. 

          IFF_UP            ̽  ְ(up) ̴. 

          IFF_BROADCAST     device εĳƮ ּҰ ȿϴ. 

          IFF_DEBUG         ġ  ɼ  ִ. 

          IFF_LOOPBAK        ġ̴. 

          IFF_POINTTOPOINT  SLIP̳ PPP   (point to 
                            point)  ġ̴. 

          IFF_NOTRAILERS    Ʈ (trailer) . 

          IFF_RUNNING       ڿ ҴǾ. 

          IFF_NOARP         ARP   ʴ´. 

          IFF_PROMISC       ġ ̷ ϴ ̴. Ŷ
                              ּҰ     
                            Ŷ ޾ δ. 

          IFF_ALLMULTI       IP ƼĳƮ(multicast) ӵ 
                            Ѵ. 

          IFF_MULTICAST     IP ƼĳƮ    

       : Ʈ   ġ   
       ִ Ÿ. 

          mtu : ũ (link layer) ̴  ϰ 
            Ʈ ġ   ִ  ū Ŷ ũ.  ִ밪
             IP   ۿ   Ŷ 
            ũ⸦ ϱ  Ѵ. 

          迭(Family) : ̰ ġ   ִ  迭
             Ÿ.   Ʈ ġ ϴ 迭 
            AF_INET, ͳ ּ 迭̴. 

          (Type) : ϵ ̽   Ʈ ġ 
             ü Ÿ.  Ʈ ġ   
            ٸ  ü Ѵ. 
            ⿡ ̴(ethernet), X.25, ū(token ring), 
            SLIP, PPP,׸ Appletalk  Եȴ. 

          ּ(Address) : device ڷᱸ IP  ּҸ Ͽ  
            Ʈ ġ شϴ   ּҸ  ִ. 

     Ŷť(Packet Queue) : Ʈ ġ  ϱ⸦ ٸ ִ  
       sk_buff Ŷ ť 

     ϴ Լ :  ġ ġ ũ   ̽ 
       Ϻημ   ȣ  ִ ǥ Լ  
       Ѵ. ̴ ¾ϰ  ϴ ƾӸ ƴ϶, 
       ǥ   ߰ϰ,   ƾ 
       Ѵ.   ifconfig   ִ. 


8.6.1 Ʈ ġ ʱȭ 

Ʈ ̽ ̹ ٸ  ̽ ̹  
Ŀο  ԵǾ   ִ.    Ʈ ġ 
dev_base  Ʈ Ͱ Ű Ʈ ġ Ʈ ִ device 
ڷᱸ ǥȴ. Ʈ  ġ  ۾  ʿ䰡
 , device ڷᱸ ִ  ƾ ּҸ   Ʈ
 ġ  ƾ ȣѴ. ׷ device ڷᱸ ó
ʱȭ ġ Ž(probe)ϴ ƾ ּҸ  ִ. 

Ʈ ̽ ̹ Ǯ ϴ   ΰ ִ. 켱 
ù°  Ŀο Ե  Ʈ ̽ ̹ ڽ 
 ġ   ƴ϶ ̴. ׸ ι° ýۿ 
ִ ̴  ġ ؿ ִ ̽ ̹  ŵ 
׻ /dev/eth0, /dev/eth1  Ÿٴ ̴.  ""Ʈ 
ġ   Ǯ  ִ.  Ʈ ġ ʱȭ ƾ θ,
 ƾ ڽ  Ʈѷ ãҴ ãҴ  ǹϴ 
 ش.  ̹ ƹ ġ ã ߴٸ, dev_base
 Ű ִ device Ʈ ִ Ʈ ŵȴ.  
 ġ ã ȴٸ, ̹ device ڷᱸ  κ 
ġ   Ʈ ̽ ̹  ִ ̹ 
ϴ Լ ּҷ ä. 

ι°  ̴ ġ ǥ  /dev/ethN ġ ƯϿ  
οϴ  ̴    ذȴ. ġ Ͽ 
eth0 eth7   ǥ Ʈ ִ. ʱȭ ƾ 
̵ ο Ȱ, ġ ã  Ŀο ִ  ̴ 
̽ ̹ õغ ̴. ̹ ġ ã  
  ethN device ڷ   ä.  ׸   Ʈ 
̽ ̹ ڽ   ϵ ʱȭϰ, 
 IRQ ϰ ְ  DMAä ϰ ִ ( ִٸ) 
 ˾Ƴ. ̹ ڽ  Ʈ ġ   
ã  ִµ,   ̹    /dev/ethN device ڷ
 Ѱش.  ǥ /dev/ethN  ҴǸ,  ̻ 
̴ ġ ã ʴ´. 


 : ȣ, Ź
 : ȣ

=====================================================================



9 

 ý (File System)



<<   Ŀ ϴ  ý  ϵ   
  ϴ° Ѵ.   ý(Virtual File System, VFS)
   Ŀ   ý  Ǵ Ѵ.>>

  ߿ Ư¡  ϳ   ý  Ѵٴ 
̴. ̷ ν    Ǿ ٸ  
ü    ְ Ǿ.  ó   ext, 
ext2, xia, minix, umsdos, msdos, vfat, proc, smb, ncp, iso9660, 
sysv, hpfs, affs, ufs 15  ý ߰, 翬 ð 
     ߰Ǿ. 

 - н  - ý   ִ   
ý ġ ĺ(̺ ڳ ̸) ٵǴ  ƴ϶ 
ϳ  Ʈ     ý ġ ϳ 
ó ̰ Ѵ.   ϳ  ýۿ Ӱ Ʈ
ϴ  ý δ.    ý  Ÿ̵ ϳ
 丮 ƮǾ, Ʈ  ý ϵ  丮
  Ѵ. ̷ 丮 Ʈ  丮 Ǵ Ʈ 
Ʈ θ.  ý Ʈ Ǹ Ʈ 丮 
  ִ ϵ ٽ 巯. 

ũ ʱȭ  (, fdisk Ͽ) ũ Ƽ  
 Ǵµ, ̰  ũ    Ƽ 
иϴ ̴.  Ƽ ϳ  ý -  , EXT2 
 ý -   ȴ.  ý  ġ , 
 丮 Ʈ ũ  Բ   Ѵ. 
 ý   ִ ġ  ġ̴. ýۿ ִ ù° 
IDE ũ ù° Ƽ /dev/hda1  ġ̴.   
ý ̷  ġ ܼ Ϸķ þ   
ϸ,  ؿ ִ  ũ ؼ  ϰ 
  ʴ´.  ġ Ư   䱸  ġ ǹ
ִ ҵ,  Ư Ʈ, , Ǹ  ϵ ũ   
ִ ġ ϴ    ̽  ̹ ̴.  
ý  ġ    ֵ  Ȱ  
, , ؾ Ѵ. Դٰ,   ý ϸ, 
̷ ٸ   ý ٸ ϵ Ʈѷ  ۵Ǵ 
ٸ  ü ִ      ʴ´ (  ý 
ڿԴ ׷).  ý   ýۿ   
 ִ. Ʈ   Ʈ ũ  ִ ̴. 
 ý SCSI  ũ Ʈ 丮    . 

A E boot etc lib opt tmp usr

C F cdrom fd proc root var sbin

D bin dev home mnt lost+found

  ۾ϴ ڵ α׷, /C  ý ù
° IDE ũ ִ VFAT  ý Ʈ 丮   
ʿ䰡 . 
  (   ִ  ý̴), /E ι° 
IDE Ʈѷ   IDE ũ̴. ù° IDE Ʈѷ  
PCI̸, ι°  IDE  CDROM ϴ ISA Ʈѷ   
 .  𵩰 PPP Ʈ  ؼ  ϴ 
 ȭ ɾ,   AXP  ý  ý 
/mnt/remote  Ʈ  ִ. 

 ý ϵ   ̴.    filesystems.tex
 ƽŰ Ͽ  ִ.  ý Ͽ   Ӹ 
ƴ϶,  ý   ִ.  ý  
 ڳ μ   ִ , 丮  Ʈ 
ũ,  ȣ   ͵ Եȴ. ̷  ϰ 
ŷڼְ Ǿ ϸ,  ü ⺻ Ἲ  
 ýۿ ޷ִ. ƹ ÷ ڷᳪ  ջǴ ü
  Ϸ   ̴ . 

 ó ߴ  ̴н(Minix) ý ̰  
 ߴ. ̸ 14ڸ   ߰ (׷, 8.3 Ѻٴ 
),  ũⰡ 64MƮ ѵǾ. 64MƮ  ⿡ 
  , Ϲ ͺ̽ ϱ ؼ ξ 
ū  ʿϴ.    Ǿ ù°  ý 
Ȯ  ý(Extended File System, EXT),  1992 4 Ұ
Ǿ   ذ   . ׷,  
1993⿡ 2 Ȯ  ý(Second Extended File System, EXT2) 
߰Ǿ.   ޺κп ڼ   ý ٷ ̰
̴. 

 EXT  ý ߰Ǿ , ߿  ־.  
 ý   ý(Virtual File System, VFS)̶ 
̽  ؼ ü ü 񽺷κ и 
. VFS п  VFS ϴ  ٸ   ý۵
  ְ Ǿ.   ý   ͵ Ʈ
 ؼ ȯǾ,   ý   Ŀ ٸ κ
   Ǵ α׷Դ   δ. , 
    ý  ٸ  ý ÿ  
Ʈ  ְ  ش. 

   ý       ȿ 
  ֵ Ǿ. , ϰ   ڷᰡ  Ȯϰ  
 ־߸ Ѵ. ̷ ΰ 䱸   ݵ  ִ. 
 VFS ƮǾ    ý  ޸𸮿 
ĳѴ. ̳ 丮 ,  ǰų ڷᰡ Էµ   
ý۰ ĳ  ڷḦ Ȯϰ ϱ ؼ  ǰ ʿ
ϴ.   Ŀξȿ  ý ڷᱸ   ִ
,  ý ڷ аų  ͵    ̴. 
Ϸ ̳ 丮 Ÿ ڷᱸ ̽ ̹ 
۾ ϰų, ڷḦ ų ϴ   .
ĳ ߿  ߿   ĳ(Buffer  Cache)ε ̰ 
  ý  Ʒ ִ  ġ ϴ  յǾ 
ִ.  ϸ    ĳÿ  ¿  
 ť   ְ ȴ.  ĳô  ۸ ĳ Ӹ ƴ
,  ̽ ̹ 񵿱 ̽  
ش. 


9.1 2 Ȯ  ý (EXT2) 

2 Ȯ  ý   Ȯ强ְ   ý
 R?my Card  ̴. ̴   ü  
     ý Ӹ ƴ϶  ǰ ִ  
    ̷ ִ. ٸ   ý۰ 
 EXT2   ý Ͽ ִ ʹ   
ȴٴ   ϰ ִ.    ũ . 
  ٸ EXT2  ýۿ ũⰡ ٸ  ִ. ׸ 
Ư EXT2   ýۿ  ũ (mke2fs  )  
ý     ȴ.   ũ  ũ⿡ 
 ø ȴ.   ũⰡ 1024Ʈ , ũⰡ 
1025Ʈ  1024Ʈ  ΰ ϰ ȴ. ̴  
ϳ    ũ ŭ ϰ ִٴ  ǹѴ. 
밳 ǻͿ CPU ޸ 뷮 ũ  Ȱ뵵 ̿ 
Ʈ̵ (trade off) ߻Ѵ. κ ü  
̷ 쿡  CPU δ ̱ Ͽ ũ Ȱ뵵 
Ѵ.  ý   ͸  ϴ  ƴϴ.
   ý  ǥϴ   ־ Ѵ.
EXT2  ý ġ ϱ Ͽ ý۳   
inode ڷᱸ ǥѴ. inode   Ͱ   
ִ, Ͽ   ,   ð,    
Ÿ. EXT2  ý    ϳ inode Ͽ 
ǥǸ  inode    ִ  ȣ  
ִ.  ý  inode inode ̺  ִ. 
EXT2 丮 ( ü  inode ǥǴ)    ϻ
̸  丮 ϴ ϵ inode  ͸  ִ. 



    +--+----------+------------+------------+--------------+
    |  | Block    |            | Block      | Block        |
    |  | Group 0  |            | Gruop N-1  | Gruop N      |
    +--+----------+------------+------------+--------------+
                               /            \
                             /                \
     /---------------------/                    \-------------\
   /                                                            \
 /                                                                \
+-------+-------------+--------+--------+-------+------------------+
| Super | Group       | Block  | Inode  | Inode |   Data           |
| Block | Descriptors | Bitmap | Bitmap | Table |   Blocks         |
+-------+-------------+--------+--------+-------+------------------+


        ׸ 9.1 : Physical Layout of the EXT2 Files system



׸ 9.1 EXT2  ý    ġ    
ϰ ִ ġ ¸ ش.  ýۿ    ġ
  а   ִ Ϸ  ̴.  ý  ü
     ϴ  Ű  ʿ䰡 . װ 
̽ ̹ ˾Ƽ  ̴.  ý   ý 
 ִ  ġκ  ͸  Ѵٸ  ش 
̽ ̹    о޶ ûϱ⸸ ϸ ȴ. 
EXT2  ý ڽ ϰ ִ  Ƽ ٽ  
׷ ɰ.   ׷  ýۿ Ἲ ٽ Ǵ 
 ߺؼ   ,  ϰ 丮   
  ִ.  ߺ  ý   糭 ߻
ؼ  ý  ʿ  ʼ̴.  Ҵܿ  
 ׷   ڼ Ѵ. 


9.1.1 EXT2 inode 

EXT2  ýۿ inode  ⺻ Ǵ  ̴.  ý
  ̳ 丮   ϳ inode Ͽ  ǥȴ. 
  ׷  EXT2 inode  inode ҴǾ ƴ 
ϱ  Ʈʰ Բ inode ̺ ȴ. 
׸ 9.2 EXT2 inode ¸ ش. Ǵ   
 ׸ ִ.

     (mode) : ⿡  inode  Ͽ شϴ Ÿ
        , ٱ Ÿ  ȴ. EXT2 
       ϳ inode ϳ , 丮, ɺ ũ,  ġ,
        ġ Ǵ FIFO Ÿ.

      (Owner Information) :   Ǵ 丮  
       ڿ ׷ ĺ̴.   ̿Ͽ  ý 
       ٱ    ְ ȴ. 


     ũ(Size) :  ũ⸦ Ʈ   ִ.

     Ÿӽ(Timestamps) : inode  ð   
        ð Ѵ.

     ͺ(Datablocks) :  inode ǥϰ  ִ Ͱ 
          .   ΰ ʹ  inode 
       ǥϰ ִ ͸     ̸ 
         ʹ        
       ִ.  ,    (double indirect block 
       pointer)    ͵   ͵
         Ű ִ. , ̰ 12   
           ū Ϻ ξ  ׼ ȴ. 

EXT2 inode Ư ġ ǥ  ִٴ  ָϿ Ѵ. 
̵     ƴ ġ  ׼ϴµ Ǵ 
׷ ٷ. 
/dev 丮 Ʒ  ġ  α׷  ġ ׼
  ֵ ϱ Ͽ ű⿡ ִ ̴.  Ʈ α׷
 ƮϷ ġ  ڷ Ѵ. 


9.1.2 EXT2 ۺ(Superblock)

ۺ   ý ⺻ ũ⳪ 翡    
ִ. ⿡  ִ  ̿Ͽ   ý ڴ  
ý Ȱϰ Ѵ.   ý Ʈ    
׷ 0  ִ ۺ оδ. ,   ׷쿡 
Ȱ 纻  ־  ý  츦 ϰ ִ. 
⿡  ִ    ͵ ִ. 

      ѹ(Magic Number) :   Ʈϴ Ʈ Ͽ 
       ̰ ¥ EXT2  ý ۺ̶  ȮѴ.
         EXT2 0xEF53 Ǿ ִ. 

      (Revision Level) :      ̳ 
         Ǹ, Ʈ α׷  Ư 
       Ǵ    ýۿ Ǵ ƴ Ȯ
       ϴµ ȴ.   ȣȯ ׸  ־ Ʈ
       α׷   ýۿ ϰ   ִ  
        Ǵ  ֵ ش. 

     Ʈ Ƚ(Mount Count) ִ Ʈ Ƚ(Maximum Mount Count)
       :  ΰ  ̿Ͽ ý  ý θ ˻ 
       ʿ䰡 ִ Ȯ  ִ. Ʈ Ƚ  ý 
       Ʈ   1 Ѵ. ׸   ִ Ʈ Ƚ
         "ִ Ʈ Ƚ Ͽϴ, e2fsck 
       ϴ  ϴ "  ޽ ǥõȴ. 

      ׷ ȣ(Block Group Number) :   ִ ۺ 
         ִ  ׷ ȣ.

      ũ(Block Size) :   ý   ũ⸦ Ʈ 
        ( , 1024 Ʈ) ǥѴ. 

     ׷ (Blocks per Group) : ϳ ׷쿡 ϴ  
       .  ũ   ý 鶧 . 

      (Free Blocks) :  ý۳   . 

      Inode(Free Inode) :  ý۳  inode . 

     ù° Inode(First Inode) :  ý۳ ù° inode  
       inode ȣ. EXT2 Ʈ  ýۿ ù° inode "/" 
       丮  丮 Ʈ̴. 


9.1.3 EXT2 ׷ (Group Descriptor)

  ׷ ڽ ϴ ڷᱸ   ִ. ۺ 
   ׷  ׷ ڴ   ׷쿡 
Ǿ  ý ıǴ 츦 Ѵ.  ׷ ڴ  
   ִ :

      Ʈ(Blocks Bitmap) :   ׷쿡  Ҵ ¸
       Ÿ Ʈμ   ŭ ִ. ̰  Ҵ
       ϰų   ȴ. 

     Inode Ʈ(Inode Bitmap) :   ׷쿡  inode Ҵ 
        Ÿ Ʈμ   ŭ ִ. ̰ inode 
       Ҵϰų   ȴ.

     Inode ̺(Inode Table) :   ׷ inode ̺  
       μ   ŭ ִ.  inode  ϴ 
       EXT2 inode ڷᱸ  ǥȴ. 

       (Free Blocks Count),  Inode (Free Inode 
     Count),  丮 (Used Directory Count)

׷ ڴ մ޾ Ÿ üδ ϳ ׷   ̺
 Ѵ.   ׷쿡 ۺ ٷ ڿ ׷   ̺ 
ü ִ. 
EXT2  ýۿ  Ǵ  (  ׷  0 ִ) ù 
° 纻 ̴. 
ٸ 纻, ۺ 纻 ,   츦 
ϰ ִ. 


9.1.4 EXT2 丮

EXT2  ýۿ 丮  ý۳ Ͽ   
θ  ϴ Ư ̴. ׸ 9.3 ޸ 󿡼 
丮 Ʈ  ش. 丮  丮 Ʈ  
Ʈ̸  丮  Ʈ     ִ : 

     inode :  丮 Ʈ شϴ inode.    ׷
       inode ̺ Ǿ ִ inode 迭  ε̴. 
       ׸ 9.3  file̶ ̸ Ͽ  丮 Ʈ 
       i1̶ ȣ inode ϰ ִ.

    ̸ (name length) :  丮 Ʈ ̸ Ʈ 
      Ÿ. 

    ̸(name) :  丮 Ʈ ̸. 

 丮 ó  Ʈ ׻ "."  ".." ̴. ̴  "
 丮"  "θ 丮"  ǹѴ. 



   ext2_inode
+-----------------+    
| Mode            |     
+-----------------+                             +------+
| Owner info      |                    +------->| Data |
+-----------------+                    |        +------+
| Size            |                    |        +------+    
+-----------------+                    |   +--->| Data |
| Timestemps      |                    |   |    +------+
+-----------------+                    |   |
|                 |--------------------+   |
| Direct Blocks   |                        |
|                 |------------------------+    +------+
|                 |                             | Data |
|                 |                             +------+
|                 |                         
|                 |                         
|                 |                             +------+
|                 |          +---+         +--->| Data |
|                 |     +--->|   |---------+    +------+
|                 |     |    |   |              +------+
+-----------------+     |    |   |------------->| Data |
| Indirect blocks |-----+    +---+              +------+
+-----------------+
| Double Indirect |--+   +---+       +---+      +------+
+-----------------+  +-->|   |------>|   |----->| Data |
| Triple Indirect |      |   |---+   |   |--+   +------+
+-----------------+      |   |   |   |   |  |   +------+
                         +---+   |   +---+  +-->| Data |
                                 |              +------+
                                 |
                                 |   +---+      +------+
                                 +-->|   |----->| Data |
                                     |   |      +------+
                                     |   |
                                     +---+
                                          


               ׸ 9.2 :EXT2 Inode



9.1.5 EXT2  ýۿ  ã

  ̸ ٸ н  ̸   Ǿ ִ. 
̸ տ ('/')  丮 ̸ ̾   
̸  ̴.  ,  ̸ /home/rusling/.cshrc̶
, /home /rusling 丮 ̸̰  ̸ .cshrc̴. ٸ  
 н ý۰    ̸ ü  Ű
 ʴ´.  ѵ  , μ  ƹ  ڷ ȴ. 
  Ÿ inode EXT2  ý ȿ ã , ý
  ̸ ؼؼ  丮 óϿ  ü  ȴ. 

ó ʿ inode  ý Ʈ inode,  inode ڰ 
 ý ۺ ´. EXT2 inode б ؼ ش
ϴ  ׷ inode ̺ ãƾ Ѵ.   Ʈ inode  
ȣ 42 츮  ׷ 0 inode ̺ 42° inode ʿ
 ̴. Ʈ  inode EXT2 丮   ̴. 
ٽ ؼ Ʈ inode  Ʈ inode 丮 Ÿ 
  EXT2 丮 Ʈ  ִ. 

home  丮 Ʈ  ϳ  ̸ /home 丮 
Ÿ inode ȣ ˷ش.  丮 о (丮  
 켱 inode а  inode Ű  κ 
丮 Ʈ о Ѵ.) rusling Ʈ ã  Ʈ 
/home/rusling 丮  Ÿ inode ȣ ˷ ̴. 
ħ 츮 /home/rusling 丮 Ÿ inode Ű 
丮 Ʈ о .cshrc  inode ȣ ã ,  ȣ  
̿Ͽ    ִ    ȴ. 


9.1.6 EXT2  ý  ũ 

 ý  ޴    ϳ ȭ Ǵ ̴. 
 ͸  ִ   ý ü Եǰ, 
   ָ       
ϴ    ȿ ȴ. EXT2  ý ̸ غ
Ϸ  Ͽ  ο     鿡 
 ϵ Ҵϰų       ׷
 ҴϷ Ѵ.     ٸ  ׷쿡 ִ  
 ҴѴ. 

μ Ͽ ͸   ,   ý 
Ͱ Ͽ  Ҵ  Ѿ ˻Ѵ. Ѿ
ٸ    ο   Ҵؾ Ѵ. Ҵ  
 μ   . 
,  ý ο   Ҵϰ  ͸ 
ϵ ٷȴٰ  ȴ. EXT2  Ҵ ƾ ó ϴ  
  ýۿ  EXT2 ۺ  Ŵ ̴. Ҵ  
ۺ ִ ׸ ϸ,   ý  ̻ 
 ÿ ϴ   ʴ´. ٸ μ 
 Ҵϰ ϸ  μ ۾ ġ ٷ 
Ѵ. ۺ ٸ μ ǰ, ۺ   
ڷκ Ǯ   Ѵ. ۺ   
 ,  μ ۺ   Ǹ ۾  
   ִ´. μ ۺ      
ýۿ    ִ ȮѴ.    
 ʴٸ  ̻ Ҵ õ  ̱  
   ý ۺ    ȴ. 

  ýۿ   ϸ  μ Ҵ ް ȴ. 
 EXT2  ý   ̸ Ҵϵ ٸ 
̸ Ҵ    ִ. ̸ Ҵ   
  Ҵ  Ʈʿ Ǿ ִ. 츮 ο   
 Ҵ  ַ ϴ   Ÿ VFS inode EXT2  
׸ ΰ  ִ. prealloc_block ó ̸ Ҵ  
  Ÿ, prealloc_count  ߿    ִ
 Ÿ. ̸ Ҵ  ų  ̸ Ҵϴ   
 ʰ , EXT2  ý ο  ҴϿ߸ 
Ѵ. EXT2  ý 켱       
  .      ׼  
 ֱ   ȿ ̴. ,     
ʴٸ ˻    ̻  64 ̳ 
  캻. ̷    ̻  
   Ͽ  ٸ     ׷쿡 
Ѵ. 

, ׷  ߿   ,   Ÿ  
ٸ   ׷  ȴ.   Ҵ α׷   ׷ 
ȿ       ã Ѵ.  
¥  ã ϸ   ̶ ãƾ Ѵ. 
  ̸ Ҵ  ʿϰ 밡ϰ Ǿ  
prealloc_block  prealloc_count   Ѵ. 

 Ҵ α׷   ã   ׷  Ʈ 
ϰ  ĳ   ۸ ҴѴ. ׷  ۴ 
 ý ϴ ġ ĺڿ Ҵ   ȣ Ͽ  
ϰ ĺȴ. ۳ Ͱ  0̰ ۰ "Ƽ(dirty)" 
 ǥõǾ   ̴  ũ  ϵ ʾ 
Ÿ.  ۺ  ٲ  Ǿ   
Ÿ Ͽ "Ƽ(dirty)"  ǥѴ. ۺ ٸ ִ 
μ ־ٸ ť  ִ μ  ù° μ ٽ 
ǰ Ǹ  ó ʿ ۺ    ȴ. 
μ ʹ     ä  ο  
 ϵǸ ̷    Ҵ  Ȱ ݺ
ȴ. 



 0                 15                         55
 +--+--+--+-------+--+--+--+-----------------+---------------------+
 |il|15| 5|file   |i2|40|14|very_long_name   |                     |
 +--+--+--+-------+--+--+--+-----------------+---------------------+
  |  |            ^ |  |                     ^
  |  |            | |  |                     |
  |  +------------+ |  +---------------------+
  |                 |
  |                 |
  |                 |     inode table
  |                 |   +-----------------+
  |                 |   |                 |
  |                 |   |                 |
  |                 |   +-----------------+
  |                 |   |                 |
  |                 |   |                 |
  |                 |   +-----------------+
  |                 +-->|                 |
  |                     |                 |
  |                     +-----------------+
  |                     |                 | 
  |                     |                 |
  |                     +-----------------+
  +-------------------->|                 |
                        |                 |
                        +-----------------+


               ׸ 9.3 : EXT2 Directory



9.2   ý(Virtual File System, VFS) 

׸ 9.4  Ŀ   ý۰   ý۰ 
 ش.   ý  ̵ Ʈ  ٸ  
ý θ ٷ  ־ Ѵ. ̸  ü ()  ý
  Ʈ  ý ϴ ڷᱸ Ͽ Ѵ. 
 ȥ ڸ, VFS EXT2  ý ۺ inode 
ϴ Ͱ   , ýۿ ִ  ۺ 
inode Ÿ. 
EXT2 inodeó VFS inode ýۿ ִ ϰ 丮   
 ý  ġ Ÿ.  ȥ ϱ Ͽ, 
EXT2 inode ۺ ޸ "VFS inode" "VFS ۺ"̶ 
ǥϵ ϰڴ.

  ý۵ ʱȭɶ, ڽ VFS Ѵ. ̴ ý 
߿ ü ʱȭǸ鼭 Ͼ.   ý Ŀ 
ü Եǰų  .  ý  ý ʿ
   εȴ.  , VFAT Ͻý Ŀ  Ǿ ִ
, VFAT  ý Ʈ  ε ̴. ġ  
 ý Ʈǰ, ̰  Ʈ  ý ϰ ִٸ, 
VFS ̰ ۺ о Ѵ.  ý ŸԺ ۺ б 
ƾ  ý ġ Ȯ   ־ ϸ,   VFS  
ۺ ڷᱸ  ų  ־ Ѵ. 
VFS Ʈ  ý۰ VFS ۺ Ʈ Ѵ. 
 VFS ۺ Ư  ϴ ƾ   ͸ 
 ִ. ,   Ʈ EXT2  ý Ÿ 
ۺ EXT2  inode б ƾ  ͸  ִ. 
 EXT2 inode б ƾ ٸ   ý  inode б 
ƾ  VFS inode  ׸ ä.  VFS ۺ 
 ý ù° VFS inode  ͸   ִ. Ʈ   
ý   inode "/" 丮 Ÿ. ̷  
 EXT2  ý 쿡 ſ ȿ ٸ  ýۿ
   ȿ̴. 

ý μ 丮  ׼Ϸ ϸ  ý۳ 
VFS inode Žϴ ý ƾ θ ȴ.  ,  
丮  ls  ġų  Ͽ Ͽ cat  ġ,  
 ý   ý Ÿ VFS inode ֿ ãƳ 
ȴ. ýۿ ִ   ̳ 丮  ϳ VFS inode 
Ͽ ǥǹǷ   inode ݺ  ׼ǰ ȴ. ׼
ӵ  ϱ Ͽ ̵ inode inode  ĳÿ ȴ.   
inode inode ĳÿ   ش inode о̱ Ͽ 
  ý   ƾ ȣϿ Ѵ. ̷ о inode
 inode ĳÿ Ǿ  ׼  ĳÿ ã  ְ 
ȴ. 
 Ǵ VFS inode ĳ÷κ ŵȴ. 

   ý  ý  ִ  ġ  
׼ ӵ ̱ Ͽ   ĳø Ѵ.   ĳ
  ý۰ ȣ ̸  Ŀ  ۸ Ҵ
ϰ а  Ŀ յǾ ִ.   ý  Ʒ
 ִ ü ׸ ϴ ġκ    ѷ 
  ش.    ġ  Ŀο ڽ 
ϸ ϵǰ,  , Ϲδ 񵿱 ̽ 
Ѵ.  SCSI ġ    ġ ̷ Ѵ. 
  ý  Ʒ ִ  ũ ͸ а 
Ǹ ̴   ̽ ̹ Ͽ ڽ Ʈϴ ġ
   е ûϴ  ȴ. ̷  ġ 
  ĳô յǾ ִ.  ý      
 ü  ĳÿ Ǿ   ý۰  Ŀο 
Ͽ ȴ.   ȿ ִ    ȣ    
ġ   ĺڿ Ͽ еȴ. ,  Ͱ  
ʿϰ Ǹ ð  ɸ  ũ д  ƴ϶ 
 ĳÿ   ȴ.  ġ Ȥ ʿ 츦 
Ͽ   ̸ оδ ̸ б(read ahead)  
Ѵ. 

VFS  Ǵ 丮 inode  ã Ͽ 丮 
ãƺ ĳõ  ִ.  ֱٿ Ʈ    
丮 Ʈ  غ. ó   ణ ĩ  Ŀ 
Ʈ   ι°ʹ ٷ  ȴ. 
丮 ĳÿ 丮  ü  inode ϴ  
ƴϴ. ̷ inode inode ĳÿ ȴ. 丮 ĳô  
ü 丮 ̸ ׿ شϴ inode ȣ  Ѵ. 


9.2.1 VFS ۺ

Ʈ  ý VFS  ۺ  ǥȴ. ٸ  
  VFS ۺ      . 

     ġ(Device) : ̰   ý Ǿ ִ  ġ
        ġ ĺ̴.   ý ù° IDE ϵ ũ
        /dev/hda1 ġ ĺڷ 0x301 ´. 

     inode  : mounted inode ʹ   ý ù°  
       inode Ų. covered inode ʹ   ý  
       Ʈ 丮 ǥϴ inode Ų. Ʈ  ý
        VFS ۺ covered inode Ͱ . 

      ũ(Blocksize) : ũ   ý  ũ⸦
       Ʈ  -  , 1024 Ʈ  - Ÿ ̴.

     ۺ (Superblock Operations) :    ýۿ  
       ۺ ƾ ̴. ٸ 뵵 Ǳ⵵ , ̵
       ƾ VFS inode ۺ а   ȴ. 

      ý Ÿ(File System Type) : Ʈ  ý 
       file_system_type ڷᱸ Ű ̴. 

      ý  (File System Specific) :   ý 
       ʿ ϴ  Ű . 


9.2.2 VFS inode

EXT2  ý۰ , VFS ȿ ִ  , 丮 
 ݵ  ϳ VFS inode ǥȴ.  VFS  inode  
 ý κ  ý  ƾ  ȴ. VFS 
inode Ŀ ޸𸮿 ϰ, ýۿ ʿ ȿ VFS 
inode ĳÿ Ǿ ִ. ٸ    VFS inode 
     .

     ġ(Device) : ̰  VFS inode Ÿ  Ǵ ٸ 
          ִ ġ ġ ĺ̴. 

     inode ȣ : ̰ inode ȣ̰,   ý ȿ 
       ϴ. ġ inode ȣ  VFS  ϴ. 

     (Mode) : EXT2   ׸  VFS inode 
       (,丮,Ÿ) Ÿ°    Ÿ . 

      ĺ(user id) : ڸ Ÿ. 

     ð(times) : ð, ð,  ð  Ÿ. 

      ũ(block size) :    ũ⸦ Ʈ   
       -  , 1024 Ʈ -  Ÿ. 

     inode (inode operations) :  ƾ ּҵ鿡  
       ̴. ̵ ƾ  ý۸ ϸ inode  
        ,     inode Ÿ  Ű  
        Ѵ. 

     Ƚ(count) :  VFS inode  ϴ ý  
       ̴. count 0̸ inode ̸ ŵǰų  
       ִ. 

     (lock) : VFS inode  ɱ  Ѵ.    
       ýۿ  inode   ȴ. 

     Ƽ(dirty) :  VFS inode ϵ  ִ° , Ϻ  
       ý۵  ʿ  Ÿ. 

      ý  .(file system specific information) :



              +---------+                   +-----------+
              |         |                   |           |
              |   VFS   |<----------------->| Inode     |
              |         |<--------------+   | Cache     |
              |         |               |   |           |
              +---------+               |   +-----------+
                 ^   ^                  |
       +---------+   +---------+        |
       v                       v        |
  +---------+             +---------+   |
  |         |             |         |   |
  |  MINIX  |             |  EXT2   |   |   +-----------+
  |         |             |         |   +-->|           |
  |         |             |         |       | Directory |
  +---------+             +---------+       | Cache     |
       ^                       ^            |           |
       +---------+   +---------+            +-----------+
                 v   v
              +---------+
              |         |
              | Buffer  |
              | Cache   |
              |         |
              +---------+
                   ^
                   |
                   v
              +---------+
              |         |
              | Disk    |
              | Drivers |
              |         |
              +---------+


       ׸ 9.4 : A Logical Diagram of the Vitual File System



9.2.3  ý ϱ

 Ŀ     ý     
ִ. Ŀ  ,  ý  ڵ     
ý ʱȭ ƾ ȣѴ.   ý   
 ִµ,  쿡 ʿ  εǰų, insmod  ۾
 εȴ.   ý  ε  ڽ Ŀο 
ϰ, ε  ڽ Ѵ.   ý ʱȭ ƾ 
ڽ   ý(VFS) ϸ, file_system_type ڷᱸ
 ǥȴ. ڷᱸ  ý ̸ VFS ۺ б 
ƾ  Ͱ Ǿ ִ. ׸ 9.5 file_system_type ڷ
 file_systems Ͱ Ű  Ʈ Ǿ ִ  
ش.  file_system_type ڷᱸ    Ѵ. 

     ۺ б ƾ :  ƾ  ý Ʈ  VFS 
        ȣȴ. 

      ý ̸ :   ý ̸   ext2. 

     ʿ ġ :   ý  ϴ ġ ʿѰ
       Ÿ.   ý  ġ ʿ  ƴϴ.
        , /proc  ý  ġ ʿ  ʴ´.

  ý  ϵǾ ִ /proc/filesystems   
  ִ.    .

ext2 

nodev  proc 

iso9660


9.2.4  ý Ʈϱ

  ý ƮϷ  ,   Ŀ ý 
ݷ ޵ ڰ  Ȯؾ Ѵ. mount ⺻ ˻縦 ϱ  
, Ŀ   ý ϵ Ǿ, Ʈ 
  ϴ  Ѵ.  mount   
. 

mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom

 mount  Ŀο     Ѵ.   ý ̸, 
 ý ϰ ִ  ġ, ׸ ο  ý 
  ý ġ  Ʈ ΰ ϴ ̴. 

  ý ݵ ؾ ϴ ù°   ý ã 
̴. ̸  ˷  ý۵ Ʈ ŽѴ.   
file_systems Ű Ʈ  file_system_type ڷᱸ 
캻. ġϴ ̸  ã´ٸ,   ý Ÿ Ŀ 
ϴ ̰, Ŀ    ý ۺ д  ý 
 ƾ ּҸ  ִٴ ̴. ġϴ  ý ̸ 
ã ϴ, Ŀ Ŀ  䱸 εϵ Ǿٸ
(12 )     ƴϴ.  쿡 Ŀ ۾
 ϱ  Ŀ    ý  εϵ 
ûѴ. 



             file_system_type             file_system_type 
file_system  +--------------+             +--------------+
------------>|*real_super() |         +-->|*real_super() |
             +--------------+         |   +--------------+  
             | name         | "ext2"  |   | name         | "proc"
             +--------------+         |   +--------------+
             | requires_dev |         |   | requires_dev |
             +--------------+         |   +--------------+
             | next         |---------+   | next         |--+
             +--------------+             +--------------+  |
                                      +---------------------+
                                      |
                                      |   file_system_type
                                      |   +--------------+
                                      +-->|*real_super() |
                                          +--------------+
                                          | name         | "iso9660"
                                          +--------------+
                                          | requires_dev |
                                          +--------------+
                                          | next         |
                                          +--------------+


               ׸ 9.5 : Registered File Systems



  mount ޵  ġ  Ʈ ʾҴٸ, 
ο  ý Ʈ   丮 VFS inode ãƾ 
Ѵ.  VFS inode inode ĳÿ ְų, ƴϸ Ʈ   
ý ϰ ִ  ġ о Ѵ. 
inode ã ̰ 丮, ׸ ⿡ ̹ ٸ  
ý Ʈ  ƴ ˻Ѵ.  丮  ϳ  
ý Ʈ θ   ִ. 

  VFS Ʈ ڵ  ο VFS ۺ Ҵϰ ̸ 
Ʈ  Բ   ý  ۺ б ƾ 
Ѵ. ý  VFS ۺ super_block ڷᱸ 
super_blocks Ϳ ȴ. ׸ ̹ Ʈ    ϳ
 Ҵȴ. ۺ б ƾ  ġ    
VFS ۺ ä Ѵ. EXT2  ý     
Ǵ ȯ ſ . 
 EXT2 ۺ а VFS ۺ ä ȴ. ٸ  
ý۵,   MS DOS  ý  ̰ ׸  
ƴϴ.    ý̵, VFS ۺ Ѵٴ    
ý   ġ ̵   ִٴ  ǹѴ. 
   ġκ   Ѵٸ,   ġ  Ÿ  
ý Ǿ   mount  ϰ ȴ. 

Ʈ   ý vfsmount ڷᱸ ȴ (׸ 9.6 
). ̵ vfsmntlist Ű Ʈ ťǾ ִ. vfsmnttail  
ʹ Ʈ  ׸ Ű, mru_vfsmnt ʹ   
ֱٿ   ý Ų.  vfsmount   ý
 ִ  ġ ġȣ,   ý Ʈ 丮, 
  ý Ʈ  Ҵ VFS ۺ    
 ִ. VFS ۺ ش   ýۿ 
file_system_type ڷᱸ   ý Ʈ inode Ų. 
 inode    ý εǾ ִ  VFS inode ĳÿ ׻ 
Ѵ. 


9.2.5   ý(VFS)  ã

  ýۿ    VFS inode  ã, VFS  
̸ ϴ ߰ 丮 Ÿ VFS  inode ѹ ϳ 
ãư 丮 ̸ ؼؾ Ѵ.  丮 ˻ϴ 
  ý  ˻ Լ ȣϰ Ǹ,  Լ ּҴ 
θ 丮 Ÿ VFS inode Ǿ ִ. ̰  
 ׻   ý  Ʈ VFS inode ˰  ְ, ̰ 
 ý VFS ۺ Ű ֱ ̴.   ý
  inode ˻ ,  丮  丮 ĳø ˻
Ѵ. 丮 ĳÿ ׸ ,   ý ϴ  
ý̳ inode ĳÿ VFS inode ´. 


9.2.6   ýۿ   


9.2.7  ý Ʈ  

   ̶ Ѵ.    ý Ʈ 
(unmount)  ȴ.  ý Ʈ Ϸ 
ýۿ   ý۳  ϰ ִ   Ѵ. 
  μ /mnt/cdrom 丮  Ʒ 丮 
ϰ ִٸ Ʈ    .  ΰ Ʈ 
Ϸ  ý ϰ ִٸ, VFS  inode ĳÿ   
ýۿ ϴ VFS inode   ̴.  Ʈ  
׷ Ϸ  ý ϰ ִ ġ ϴ inode 
ĳ inode  Ʈ  ִ ˻Ѵ. Ʈ  ý 
VFS ۺ Ƽϸ,   Ǿٸ, ۺ ũ 
 ýۿ Ͽ߸ Ѵ. ϴ ũ  ϰ  VFS 
ۺ ϰ ִ ޸𸮸 Ŀ ޸ Ǯ ش. ׸ 
   ý Ʈ ʿߴ vfsmount  
 vfsmntlist     Ѵ. 


9.2.8 VFS inode ĳ 

Ʈ  ý   ׿ شϴ VFS inode  аų 
 ȴ.   ý Ʈ  ýۿ  ׼ ӵ
 ̱ Ͽ inode ĳø Ѵ. VFS inode inode ĳÿ 
  ִٸ ׸ŭ  ġ  ׼  ص ȴ. 

VFS inode ĳô ؽ ̺ Ǿ, ̺   Ʈ 
 ؽ   VFS inode Ʈ Ű ִ. inode ؽ 
 inode ȣ   ý  ִ  ġ ġ ĺ
κ ȴ.   ý inode ׼ ʿ䰡    
 VFS  inode ĳø    ãƺ. ĳó inode ã ؼ 
ý  ؽ  ϰ   εϿ inode ؽ 
̺ . ׷  ؽ   inode Ʈ  
  ȴ.  Ʈ ã Ͱ  inode ȣ ġ ĺ
ڸ   inode Ÿ   inode 캻. 

 ĳÿ inode ãԵǸ īƮ   Ŵν  inode 
ϴ ڰ ִٴ  ˷   ýۿ  ׼ 
Ѵ.  ã  ٸ  ý ޸𸮷κ inode  
 ֵ   VFS inode ãƾ߸ Ѵ. VFS  inode ãµ 
   ִ.   ý VFS inode  Ҵ  ִٸ 
    ȴ - Ŀ  Ҵϰ ̸   
ο  inode ɰ inode  Ʈ ִ´. ýۿ ִ  
VFS inode first_inode Ű Ʈ inode ؽ ̺ 
ְ ȴ.  ýۿ  ŭ  inode ̹ ҴϿٸ 
Ҹ inode  ĺ ãƾ߸ Ѵ.  Ƚ 0 inode 
 ýۿ ǰ  ʴٴ  ǹ̹Ƿ  ĺ ȴ. 
 ߿ VFS inode,    ý Ʈ inode  
Ƚ 0 ξ ū ̹Ƿ  ĺ Ǵ 찡  . 
ϴ   ĺ õǸ    .  VFS inode
 Ƽϸ   ýۿ    ʿ䰡 ,   
Ǿ ִٸ  Ǯ  ٷ Ѵ. ĺ VFS inode 
  ݵ  Ͽ Ѵ. 

· ο VFS inode ߰ϸ  ý    ý
 о  inode ä Ư  ƾ θ. inode ä  
   VFS inode  Ƚ 1 ǰ  Ǳ , 
inode       ƹ ׼   . 

 ʿ VFS inode  ؼ   ٸ  inode 
׼ ʿ䰡 ִ. 丮   ̷  ߻Ѵ.   
丮 inode 츮  ʿ ϴ , װ  
ؼ  ߰ 丮 inode о߸ Ѵ. 
VFS inode ĳð Ǿ   Ǹ,  Ǵ inode  
  Ǵ inode ĳÿ  ȴ. 


9.2.9 丮 ĳ(Directory Cache)

 ̴ 丮  ׼ ӵ  ̱ , VFS 
丮 Ʈ  ĳø Ѵ. 丮   ý
 Ͽ ǹǷ   ýۿ  뵵 丮 ĳÿ 
ȴ.   Ȱ 丮 Ǹ ( ,  
丮 Ʈ    Ʈ ִ   ٸ) 丮
ĳÿ    ִ. ª ̸(ִ 15ڱ)  
丮 Ʈ ĳð Ǵµ ̴ ª 丮 ̸   
Ǳ ̴.   , X  ̶ /usr/X11R6/bin 
丮 ſ  ׼ ̴. 

丮 ĳô ؽ ̺ Ǵµ,  ̺  Ʈ
  ؽ   丮 ĳ Ʈ Ʈ Ű 
ִ. ؽ Լ  ý  ִ ġ ġ ȣ 丮 
̸ ̿Ͽ ؽ  ̺  ġ  ε س. ̷ 
ν ĳõ 丮 Ʈ   ã  ִ. Ʈ ãµ 
ð ʹ  ɸų  ã  ٸ ĳø  ʿ䰡 
 ̴. 

ĳ  ȿϰ ϰ ֽ  ϱ Ͽ VFS LRU(ֱ
   , Least Recently Used)  丮 ĳ Ʈ
 Ʈ Ѵ. 丮 Ʈ ó Ǿ ĳ÷ 
   1ܰ LRU Ʈ  ڷ  ٰ ȴ. 
 ĳð    LRU Ʈ    Ʈ ġѴ. 
丮 Ʈ ٽ ѹ ׼Ǹ 2ܰ LRU ĳ Ʈ ö
 ȴ.  ̷ 쿡 2ܰ LRU ĳ Ʈ ʿ 
丮 Ʈ  ġϸ   ִ. 1ܰ 2ܰ LRU Ʈ
    Ʈ ġϴ     ̴. 
 Ʈ Ʈ  տ  ִٴ  ֱٿ ׼   
ٴ  ǹϱ ̴. 
࿡ ֱٿ ׼  ִٸ  Ʈ  򰡿 ־  
̴. 2ܰ LRU ĳ Ʈ  ִ Ʈ 1ܰ  LRU ĳ 
Ʈ  ִ Ʈ麸 ϴ. Ʈ 2ܰ Ʈ 
ִٴ   ׼Ǿ Ӹ ƴ϶ ݺ ǰ  
ǹϱ   ϰ  ʿ䰡 ִ. 




vfsmntlist +------------+
---------->| mnt dev    | 0x0301 
           +------------+ /dev/hda1
           | mnt_devname| /
           +------------+     VFS
           | mnt_dirnmae|     Super_block
           +------------+    +------------+                          
           | mnt_flags  | +->| s_dev      | 0x0301
           +------------+ |  +------------+ 1023
           | mnt_sb     |-+  | s_blocksize|
           +------------+    +------------+    file_system_type
           |            |    | s_type     |-+  +-------------+
           +------------+    +------------+ +->|*real_super()|
           | next       |    | s_flags    |    +-------------+
           +------------+    +------------+    | name        |"ext2"
                             | s_covered  |    +-------------+
                             +------------+    | requires_dev|
                             | s_mounted  |-+  +-------------+
                             +------------+ |  | next        |
                                            |  +-------------+
                                            |     
                                            |    VFS
                                            |    inode
                                            |  +--------+
                                            +->| i_dev  | 0x0301
                                               | i_ino  | 42
                                               |        |
                                               |        |
                                               |        |
                                               +--------+


               ׸ 9.6 : A Mounted File System



REVIEW NOTE : ׸ ʿѰ? 


9.3  ĳ(Buffer Cache) 

Ʈ  ý ϰ Ǹ ̴  ġ   
аų   䱸 ߻ϰ ȴ.   а    
䱸 ǥ Ŀ Լ ȣ Ͽ ̽ ̹ buffer_head  
ڷᱸ ·  ޵ȴ.  ڷᱸ  ̽ ̹ 
ʿ ϴ    Ѵ. ġ ĺڴ ġ ϰ 
ְ,  ȣ ̹    о ϴ ش. 
 ġ Ȱ ũ    ó δ. 
  ġ  ӵ  ϱ    
 ĳø Ѵ. ýۿ ִ   ۵  ̴, 
Ⱦ̴ ̴   ĳ 𿣰 Ѵ.   
 ġ  ĳø ϸ,   ̴ ĳÿ   
۰ ýۿ ִ  ġ  ϳ  ҼӵǾ   ٸ 
¿   ̴.  ĳÿ ùٸ Ͱ ִٸ, ̴ ý
  ġ ϴ  ش.  ġκ ͸ 
дµ ϰų µ    ̵  ĳ÷ 
. ð   ̵  ĳÿ   ۸  
ڸ ִ,  ȴٸ ĳÿ   ְ ȴ.

ĳÿ ִ  ۴ ̸ ϴ ġ ĺڿ  ȣ 
ϰ ȴ.  ĳô ΰ  κ Ǿִ. 
ù° κ    Ʈ̴. ϴ  ũ⺰ 
 ϳ Ʈ ְ, ý   ۴ ó  
   ̵ Ʈ  ȴ.  ϴ  ũ 
512, 1024, 2048, 4096, ׸ 8192 Ʈ̴. ι°  κ 
ĳ  ü̴. 
̰ ؽ ̺μ Ȱ ؽ ε  ۵  
Ű ִ ͵ ̴. ؽ ε ش ġ ĺڿ 
   ȣκ . ׸ 9.7  Ʈ 
ؽ  ̺  Բ ְ ִ. 
 ۴  Ʈ   ϳ Ʈ Ǵ  ĳ  
 ϳ   ִ. ̵  ĳÿ   ̵ LRU Ʈ
  ȴ.    LRU Ʈ ְ, ̵ ý 
Ư   ۿ   -    ο ͸  ۸ 
ũ ϱ -  ϴµ ȴ.    
 ݿϸ,      Ѵ : 

     (clean) :  ,   

     Ǿִ(locked) :ۿ  ɷ , ϵǱ⸦ ٸ
       ִ. 

     Ƽ(dirty) : Ƽ . ̵ Ӱ ȿ ͸ 
       , ϵ ,   ϵ   
        ʾҴ. 

     (shared) :   

     ʴ(unshared) :     ʴ
        

 ý Ʒ   ġκ ۸  ʿ䰡  
  ĳ÷κ   õѴ.   ĳÿ 
۸   ٸ,  Ʈ  ũ  ۸ 
ϳ   Ǹ,   ۴  ĳÿ  ȴ. ʿ ϴ 
۰  ĳÿ ִٸ, ̰ ֱ  ϼ ׷   
ִ.  ֱ  ƴϰų,   ۶,  ý 
 ̹ شϴ   ũ о Ѵ. 

ٸ ĳÿ ,  ĳô  ȿ ϵ Ǿ 
ϸ,  ĳø ϴ  ġ ̿  ϰ ĳ Ʈ
 Ҵؾ Ѵ. 
 bdflush Ŀ  Ͽ, ĳÿ   ϵ 
,  ͵ ĳø   ڵ Ͼ. 


9.3.1 bdflush Ŀ  

bdflush Ŀ  ý ʹ  Ƽ   -  ũ 
 ϴ ͸  ִ  -   Ǿ  
 ϴ  Ŀ ̴. ̴ ý   Ŀ 
μ ۵Ǹ, ȥ ʵ ڽ kflushd θ.  ̸ 
ýۿ ִ μ 캸  ps      ִ 
̸̴. κ   ýۿ ִ Ƽ    
⸦ ٸ ִ. ۰ Ҵǰų    ýۿ 
ִ Ƽ   ˻Ѵ.  ýۿ ִ  ü  
 ߿  Ƽ   ʹ Ŀ bdflush . ⺻
   60%, ýۿ ۰ ʿϴٸ bdflush 
   ִ.   update  ų ٲ  ִ
: 

# update -d

bdflush version 1.4

0: 60 Max fraction of LRU list to examine for dirty blocks

1: 500 Max number of dirty blocks to write each time bdflush 
activated

2: 64 Num of clean buffers to be loaded onto free list by 
refill_freelist

3: 256 Dirty block threshold for activating bdflush in refill
_freelist

4: 15 Percentage of cache to scan for free clusters

5: 3000 Time for data buffers to age before flushing

6: 500 Time for non-data (dir, bitmap, etc) buffers to age before 
flushing

7: 1884 Time buffer cache load average constant

8: 2 LAV ratio (used to determine threshold for buffer fratricide).

͸ ۿ Ἥ ۰ Ƽϰ Ǹ  ۴ BUF_DIRTY LRU 
Ʈ ǰ, bdflush ߿   ش ũ  
 Ѵ.    update      , 
⺻ 500̴ (  ó). 


9.3.2. update μ 

update  ܼ ɸ  ƴ϶, ̱⵵ ϴ. μ 
Ǹ (ý ʱȭȿ), ֱ  Ƽ  ۵  
ũ Ѵ. ̴ bdflushϰ   ϴ ý  
ƾ θν ̷ ȴ. Ƽ ۰     
 ý ð ǥ д. update   ýۿ ִ 
 Ƽ ۿ ð  ͵ ã´.   ۴ 
ũ ϵȴ. 


9.4 /proc  ý 

/proc  ý̶󸻷    ý   ִ 
̴. ̴  ϴ  ƴϴ ( Ǵٸ  ⱳ
̴). /proc 丮,   丮, ϵ  
 ʴ´. ׷ٸ  cat /proc/devices   ִ°? /proc 
 ý    ý۰  ڽ   ý
 Ѵ. ׷ٰ  ̳ 丮 鼭  VFS inode û
ϸ, /proc  ý ̵ ϰ 丮 Ŀο ִ  
 .  , Ŀ /proc/devices  ġ 
Ÿ Ŀ ڷᱸκ ȴ. 

/proc  ý ڿ Ŀ  ۾   ִ ִ 
â Ѵ. 12忡 ϰ ִ  Ŀ ⰰ  
 ý۵ /proc  ýۿ Ʈ ϱ⵵ Ѵ .  


9.5 ġ Ư (Device Special Files)

 ٸ   н  ϵ  ġ Ư 
Ϸ ش.   /dev/null (null) ġ̴. ġ   
 ýۿ ƹ    ʴ´. ̴  
̽ ̹   ̴. 
EXT2  ý۰  VFS  ġ  inode Ư 
 Ѵ. ġ Ͽ  Ư ϰ  Ư ̶  
ΰ ° ִ. Ŀ ȿ, ̽ ̹ ó 
 ִ. , ̸ , ݴ      ִ.  ġ 
 I/O ۾   ,  ġ  I/O  ĳø 
ϵ Ǿ ִ. 
ġ Ϸ I/O 䱸 ϸ, ̴ ý  ִ شϴ ̽ 
̹ ޵ȴ.  ̴  ̽ ̹ ƴ϶, SCSI 
̽ ̹     ý   ̽  
̹̱⵵ Ѵ. ġ  ġ  ϴ  ȣ
,   Ǵ     ʸ ϱ  ̳ 
 Ѵ.  , ù° ýۿ  IDE Ʈѷ ִ 
IDE ũ  ȣ 3 , IDE ũ ù° Ƽ 
̳ ȣ 1 .  ls -l /dev/hda1 ϸ   
 ش. 

$ brw-rw---- 1 root disk 3, 1 Nov 24 15:09 /dev/hda1 

Ŀο,  ġ kdev_t ڷ ϰ ǥȴ. ̴ 2
Ʈ ̷ ù° Ʈ ̳ ġ ȣ, ι° Ʈ  
ġ ȣ ´.   IDE ġ Ŀο 0x0301 ´.
 ġ  ġ Ÿ EXT2 inode ġ  ȣ
̳ ȣ ù°   (direct block pointer)  
ִ. VFS ̸ , ̸ Ÿ VFS inode ڷᱸ ̰ 
i_rdev ׸ ùٸ ġ ĺڷ Ѵ. 


 : , ɸ, ȣ, , â, ̴
 : , ȣ

=====================================================================



10 

Ʈũ (Networks)



<<Ʈŷ   Ǿ̴.    ״  ͳ 
  Ǵ  ̵ (World Wide Web, WWW) 깰̴.  
  ڿ ڵ  α׷ ڵ ȯϱ   ϸ, 
   Ʈŷ 䱸 óϱ    Ѵ.  
    Ʋ TCP/IP θ Ʈũ   
  ϴ Ѵ.>>

TCP/IP ̱ ΰ ϴ ̱  (ARPANET)  ǻ 
  ϱ   ̴. ARPANET Ŷ Ī ϳ
  ٸ   ϴ  ȭ 
Ʈŷ  âߴ. 
ARPANET 1988⿡ Ǿ   NSF  NET ͳ  
ũ ߴ.   ̵ ̶ ˷  ARPANETκ 
, TCP/IP   ϰ ִ. 
ARPANET 󿡼 н ϰ Ǿ, ó Ʈŷ
  н  4.3 BSD.  Ʈŷ  4.3  
BSD 𵨷 Ǿ,  (ణ Ȯ) BSD ϰ TCP/IP 
Ʈŷ ü Ѵ.   TCP/IP α׷ ̽
   TCP/IP θ ǰ ,  ٸ н 
÷  α׷ ȣȯ ̱  ̾. 


10.1 TCP/IP Ʈŷ 

  TCP/IP Ʈŷ ⺻    ̴. ̰ ( 
 )   ƴϱ  ѹ о ٶ.

IP Ʈũ  踦 ϰ ĺϴ 32Ʈ  IP ּҸ 
 迡 οѴ. WWW ſ Ŵϰ  ϴ IPƮũμ, 
WWW    Ҵ  IP ּҸ . IP ּҴ 
  16.42.0.9   еǴ   ڷ Ÿ.
δ Ʈũ ּҿ ȣƮ ּ  κ IPּҸ Ѵ. 
(IP ּҿ  Ŭ ־)  κ ũ ޶  
, 16.42.0.9   16.42 Ʈũ ּ̰ 0.9 ȣƮ
ּҰ ȴ. ȣƮ ּҴ Ʈũ ȣƮ ּҷ  (ڼ)
  ִ. ٽ 16.42.0.9  , Ʈũ ּҴ 16.42.0
 ǰ ȣƮ ּҴ 16.42.0.9 ȴ. 
̷ IP ּҸ  ȹ   Ƿ, (Ʈũ ϴ)
 ڽ Ʈũ  ȹ   ִ.   16.42
ACME ǻͻ Ʈũ ּҶ, 16.42.0 Ʈũ 0, 
16.42.1 Ʈũ 1  ̴.  Ʈũ  ٸ 
ǹ   ְ, Ӵ ȭ ̿ϰų (ż) ̿
 Ǿ   ִ. IP ּҴ Ʈũ ڰ Ҵϴµ, 
IP Ʈũ Ͽ Ʈũ  δ лų  ִ. 
IP Ʈũ ڴ ڽ IP Ʈũ ȿ Ӱ IP 
ּҸ Ҵ  ִ. 

 Ϲ IP ּҴ  ϱ  ƴ. ̸ ̴  
ξ (ϱ) . linux.acme.com 16.42.0.9 ξ  ϱ 
, (̸ ϱ ؼ) Ʈũ ̸ IP ּҷ ȯ 
ִ  ʿϴ.  ̸ /etc/hosts Ͽ     
 ,  л  (Distributed Name Server, DNS) 
 ̸ ȯ ޶ û  ִ.    ȣƮ 
ϳ ̻ DNS  IP ּҸ ˰ ־߸ ϴµ,  ּҵ
/etc/resolv.conf Ѵ. 

     ٸ 迡     ڷḦ
ȯϱ    IP ּҸ Ѵ. ڷ IP Ŷ 
޵Ǵµ,  Ŷ     IP ּ, üũ
(checksum) ٸ    ִ IP  پ ִ. üũ
 IP Ŷ ִ ͸   ϴµ, ̸ ̿Ͽ IP Ŷ 
ڴ ȭ    ް  Ŷ ջǾ
 Ǵ  ִ.  α׷   ʹ   ٷ  
 Ŷ ɰ  ִ. IP  Ŷ ũ   ü 
  ޶µ, Ϲ ̴ Ŷ PPP Ŷ  ũ.
 ȣƮ  Ŷ ٽ Ͽ  α׷ ͸ 
ǳش.  ø ũ   ׷ ̹  ִ  
     ؿ   ׸  
캼  ִ. 

 IP Ʈũ Ǿ ִ ȣƮ IP Ŷ   
 , ׷  쿡 Ʈ(gateway) ϴ Ư 
ȣƮ IP Ŷ ߸ Ѵ. 
Ʈ(Ǵ ) ϳ ̻ IP Ʈũ Ǿ ִ
,  IP Ʈũ  Ŷ ٸ IP  Ѵ. 
 , Ʈũ 16.42.1.0 16.42.0.0  Ʈ̸ 
 Ǿ  ִٸ Ʈũ  0 Ʈũ 1 ޵Ǵ 
Ŷ Ʈ̷  Ʈ̴   Ŷ Ѵ. 
 ȣƮ Ȯ 迡 IP Ŷ ϱ   ̺
(routing table) ۼѴ.  ̺  IP   
  ϱ   ȣƮ IP Ŷ ؾ ϴ 
ϱ  Ǵ   ִ.   ̺ ̾ 
 α׷ Ʈũ ϰų Ʈũ  ǰų 
ϸ ð   ȴ. 

IP  ٸ  ͸    ϴ  
̴. TCP ŷ  ִ ϴ ݷμ, ͸ ְ ޱ 
 IP  Ѵ. IP Ŷ  پ ִ ó, TCP 
Ŷ   پ ִ. TCP  ߽ ݷ (̸ 
ϴ)  Ʈũ  α׷  ̿  Ʈũ, Ʈ
  Ͱ ִ     ȴ. TCP 
 α׷ ͸ ŷ  ִ  ϸ 
 ս̳ ߺ ٴ  Ѵ. 
TCP IP Ͽ TCP Ŷ  , IP Ŷ ִ ʹ 
ٷ TCP Ŷ̴.  ϰ ִ ȣƮ IP  IP Ŷ 
ְ ޴  Ѵ. UDP (UDP) Ŷ ϴµ IP   
, TCPʹ ޸ UDP ŷ   ̸ ͱ׷
(datagram) 񽺸 Ѵ. ̿   ٸ  IP 
Ϸ, IP Ŷ    IP   IP  Ŷ  ͸  
 ݿ ؾ ϴ ˰ ־߸  Ѵ. ̸    
IP Ŷ   ĺڸ ϴ Ʈ ִ. TCP IP 
 IP Ŷ ϵ ûϸ,  Ŷ TCP Ŷ ִ
  IP Ŷ  Ѵ. IP  ͸ ,  
 ĺڸ Ͽ,  ͸      
Ѵ.  쿡 TCP   ̴. α׷ TCP/IP 
   , α׷  IP ּһӸ ƴ϶  
α׷ Ʈ ּ  Ͽ Ѵ. Ʈ ȣ α׷
 ϸ, ǥ Ʈũ α׷ ǥ Ʈȣ Ѵ.
 ,  80 Ʈ Ѵ. ̷ ϵ  Ʈȣ 
/etc/services   ִ. 



                        ETHERNET FRAME
   +-----------+--------+--------+----------------+--------+
   |Destination|Source  |        |                |        |
   |ethernet   |ethernet|Protocol|      Data      |Checksum|
   |address    |address |        |                |        |
   +-----------+--------+--------+----------------+--------+

                                /                  \
                              /                      \
    -------------------------                          --------
  /                                                             \
/                           IP PACKET                             \
+-+-+------+-+-+-+--------+--------+----------+-----------+--------+
| | |Length| | | |Protocol|Checksum|Source    |Destination|  Data  |
| | |      | | | |        |        |IP address|IP address |        |
+-+-+------+-+-+-+--------+--------+----------+-----------+--------+
                                                         /        /
                                                       /          |
                                                    --            |
                                                  /               |
                                                /     TCP PACKET  \
         +----------+-----------+---+---+---+---+------------------+
         |Source TCP|Destination|SEQ|ACK|   |   |       Data       |
         |address   |TCP address|   |   |   |   |                  |
         +----------+-----------+---+---+---+---+------------------+


               ׸ 10.1 : TCP/IP Protocol Layers



  TCP, UDP  IP (ϴ )   
ƴϴ. IP  ü IP Ŷ ٸ IP ȣƮ ϴµ 
 ġ Ѵ.  ġ ڽŸ   ߰ϱ⵵ 
Ѵ. ̷ δ ̴  ,  ٸ  PPP SLIP 
ִ. ̴ Ʈũ   ȣƮ  ̺ ϳ ÿ 
  ִ. ۵Ǵ  ̴    ȣƮ 
̰ ǹǷ  ̴ ġ  ּҸ ´. ȣƮ ڱ 
ּҷ ޵Ǵ  ̴  ޾Ƶ,  Ʈũ 
 ٸ ȣƮ ̸ ϰ ȴ. ̴ ̷  ּ
 ̴ ġ    ְ Ǵµ, Ϲ ̴ ī 
SROM  ִ. ̴ ּҴ 6Ʈ ε   
08-00-2B-00-49-A4  ´.  ̴  ּҴ ƼĳƮ
(multicast)   Ǿ ִµ, ̷ ּҷ  ̴ 
  Ʈũ ȿ ִ   ȣƮ ޴´. ̴ 
 (ͷ)  ݵ   ֱ , IP Ŷ 
   ĺڰ ִ. ̿  ̴  Ȯϰ 
IP Ŷ ޾ IP    ִ. 

̴ݰ      IP Ŷ  ؼ 
IP  IP ȣƮ ̴ ּҸ ãƾ߸ Ѵ. IP 巹 
 ּ ̰,   ּҸ  ִ  ̴
 ġ̱ ̴. ݸ鿡 IP ּҴ Ʈũ   
ǰ    ,  Ʈũ ϵ ڽ  ּ 
Ǵ  谡 ޾ƾ߸ ϴ Ư ƼĳƮ Ѵ. 
 IP ּҸ ̴ ּҿ   ϵ ּ ȯϱ  
ARP(Address  Resolution Protocol) Ѵ. 
Ư IP ּҸ  ϵ ּҸ ˰ ϴ ȣƮ ȯϰ 
ϴ IP ּҰ  ARP û Ŷ ƼĳƮ ּҿ   
 Ѵ.  IP ּҸ  ִ ȣƮ  ڽ ϵ ּ
  ARP  ش. ARP ̴ ġ Ǵ  ƴ϶ 
IP ּҸ FDDI  ٸ  ġ ּҷ ȭϴµ  
 ִ. ARP    Ʈũ ġ  ǥø  ξ 
 ( ġ ؼ) ARP õ ʴ´. ̿ʹ ݴǴ 
 RARP(Reverse Address Resolution Protocol) ִµ, ̰
  Ʈũ ּҸ IP ּҷ ȯѴ. 
  Ʈ̰ ϴµ, Ʈ̴   Ʈũ ִ
IP ּҸ ؼ ARP û Ѵ. 


10.2  TCP/IP Ʈŷ 

Ʈũ ݰ , ׸ 10.2   ִ ó 
 ͳ  ּ йи(address family) Ϸ 
Ʈ  ϰ ִ. BSD  BSD ϸ óϴ 
Ϲ   Ʈ Ѵ. 
INET      Ʈ  ϴµ, ̰ IP 
  TCP UDP   Ѵ. UDP(User Datagram 
Protocol) 񿬰   (connectionless protocol)ε 
, TCP(Transmission Control Protocol)  ŷ  ִ 
ϴ ̴. UDP Ŷ  ,   Ŷ 
 ϰ Ͽ ˼  Ű  ʴ´. TCP Ŷ
鿡 ȣ Ű, TCP   ( ȣƮ)  Ͱ 
Ȯϰ ŵǾ ȮѴ. IP  ͳ  
 ڵ尡  ִ.  ڵ ϴ  տ IP  ̰, 
 IP Ŷ TCP UDP   ϴ ˰ ִ.
IP  Ʒ PPP Ǵ ̴ݰ  Ʈũ ġ  
 Ʈŷ Ѵ. 
Ʈũ ġ ׻  ġ Ű  ƴϴ.  
ġ   ġ  Ʈθ ۼǾ ִ. mknod 
  ǥ  ġʹ ޸, Ʈũ ġ 
õ Ʈ  ġ ãƳ ʱȭؾ Ÿ. ׷ 
شϴ ̴ ̽ ̹ ־ Ŀ ؾ߸ 
/dev/eth0   ִ. ARP  IP   ּҿ  ARP
 ϴ  ̿ ִ. 


10.3 BSD  ̽(Socket Interface)

BSD  ̽ پ  Ʈŷ Ӹ ƴ϶ μ 
ŵ ϴ Ϲ ̴̽.      
   ִµ, Ѱ ִ  μ  ῡ 
ڽ  شϴ    ȴ.  Ư  
   , ʹ  ޸  ű⿡   ִ 
 翡  .    Ŭ  ϴ
, ̰͵ ּ йи(address family) θ. ̴  Ŭ
 ڽ  ſ ϴ ּ ǥ  ֱ ̴. 
    ּ йи Ǵ  Ѵ. 

UNIX н   (Unix domain socket)

INET TCP/IP  ̿  ϴ ͳ ּ йи

AX25 Ƹ߾  X.25

IPX 뺧 IPX 

APPLETALK û Appletalk DDP 
X25 X.25 

Ͽ  Ÿ  , ̴   ϴ   
Ÿ.  ּ йи   񽺸 ϴ  
ƴϴ.  BSD    Ÿ Ѵ. 

     Ʈ(Stream) :   Ͱ   н,  Ǵ ߺ
        ʴ´ٴ  ϴ ŷ  ִ   
       Ʈ Ѵ. INET ּ йи TCP  Ʈ 
        Ѵ. 

     ͱ׷(Datagram):      ,
       Ʈ ϰ ޸  ޽ () Ѵٴ  
        ʴ´. ޽  Ͽ ϴ, ޽
        ° Ǵ ߺǰų  ʰ Ͽٴ  
        ʴ´. INETּ йи UDP    
        Ѵ. 



                          Network
                          Application
                               ^
                               |             User
-------------------------------+---------------------
                               |             Kernel
                               v
                          +---------+
                          | BSD     |
                          | Sockets |
                          +---------+
                               ^
Socket                         |
Interface                      v
                          +---------+
                          | INET    |
                          | Sockets |
                          +---------+
                             ^ ^ ^
                             | | |
                     +-------+ | +-------+
                     |         |         |
                     v         |         v
                 +-------+     |     +-------+
                 |       |     |     |       |
                 |  TCP  |     |     |  UDP  |
Protocol         |       |     |     |       |
Layers           +-------+     |     +-------+
                     ^         |         ^
                     |         |         |
                     v         v         v
              +---------------------------------+
              |                                 |
              |               IP                |<-+
              |                                 |  |
              +---------------------------------+  |   +-------+
                ^              ^              ^    +-->|       |
                |              |              | +----->|  ARP  |
                v              v              v v      |       |
          +----------+   +----------+   +----------+   +-------+
Network   |          |   |          |   |          | 
Device    |    PPP   |   |   SLIP   |   | Ethernet | 
          |          |   |          |   |          | 
          +----------+   +----------+   +----------+ 


          ׸ 10.2 : Linux Networking Layers



      (Raw) : μ Ϻ ݿ  (׷
       "raw")  ִ ̴.   ̴ ġ   
         IP  帧 Ѻ  ϴ. 

      ŷ ޽(Reliable Delivered  Messages) : ̰ 
       ׷ ϰ   Ͱ () Ѵٴ 
        Ѵ. 

      Ŷ(Sequenced Packets) : ̰  Ʈ ϰ ѵ
        Ŷ ũⰡ Ǿ ִ. 

     Ŷ(Packet) : ̰ ǥ BSD   Ÿ ƴϰ, ġ ؿ
        μ  Ŷ   ִ  Ư Ȯ
       ̴. 

 Ͽ  ϴ μ Ŭ̾Ʈ   .
 񽺸 ϰ Ŭ̾Ʈ  񽺸 ̿Ѵ. ̷  
  ϴ     д   Ŭ̾Ʈ Ǵ 
   ִ.  ϴ      
Ͽ ̸ ε(bind)Ѵ.  ̸   ּ йи 
 ޶µ, δ    ּҰ ȴ.  ̸ Ǵ 
ּҴ sockaddr ڷ  ̿ Ѵ. INET  װͿ 
ε IP Ʈ ּҸ  ȴ. ϵ Ʈ ȣ /etc/services
   ִ.  ,   Ʈ ȣ 80̴. Ͽ 
ּҰ  εǾٸ,    ε ּҸ Ű  û
  (listen) Ѵ.  û ϴ Ŭ̾Ʈ 
   ּҸ Ͽ Ͽ    û Ѵ. INET
Ͽ  ּҴ  IP ּҿ Ʈ ȣ̴. ̷  
û پ    ޵Ǿ   Ͽ 
ϰ ȴ.   û , ̰ ޾Ƶ̰ų(accept) 
Ǵ źѴ(reject).  û ޾Ƶ̱ Ͽٸ,  
 ޾Ƶ ο  .   û ϴµ ϴ  
  ޾Ƶ̴µ   .  ̷, 
 Ŭ̾Ʈ Ӱ ͸ ְ   ִ. ,
 ̻ ʿ   (shutdown)  ִ.   
 ߿ ִ  Ŷ Ȯϰ óǾ Ͽ Ѵ. 

BSD Ͽ   ϴ   ǹϴ  ּ 
йи  ۾ ϰ ִĿ  ٸ. TCP/IP ϴ 
 Ƹ߾  X.25  ϴ Ͱ  ٸ.  
 ý۰    BSD    ̽
 ߻ȭѴ. BSD   BSD   α׷ 
̽ϴ Ϳ õȴ. ̷  ̽  ּ йи
 Ʈ   ޴´. Ŀ ʱȭ , Ŀο 
 ּ йи (ڽ ϴ) BSD  ̽ Բ 
ڽ Ѵ. ߿ α׷ BSD    ,
BSD ϰ װ ϴ ּ йи   . 
̷   ڷᱸ ּ йи   ƾ 
̺  .   α׷ ο  
鶧 BSD  ̽ ϴ ּ йи    
ƾ ִ. 

Ŀ   () ּ йи  protocols Ϳ 
ִ´. protocols Ϳ  ּ йи Ǵ  ̸ ( 
 "INET") ʱȭ ƾ . ý õǸ鼭  
̽ ʱȭ ,   ʱȭ ƾ Ҹ ȴ. ⼭ 
 ּ йи  Ϸ   ƾ ϰ ȴ. 
̰ ƾ ̸  ƾ ش ּ йи  Ư 
 Ѵ. 
proto_ops ڷᱸ ּ йи Ÿ԰ Ư ּ  йи  
  ƾ  ͵  ̷ ִ. pops ʹ 
ͳ ּ йи (AF_INET 2̴) ּ йи ĺڷ ε 
Ǿִ. 


10.4 INET   

INET   TCP/IP ݵ ϴ ͳ ּ  йи 
Ѵ.   ó ̵ ݵ ̰,  
 ٸ  񽺸 Ѵ.   TCP/IP ڵ  
ڷᱸ   ݿѴ. BSD   ̽ 
Ʈũ ʱȭ ߿ BSD      ͳ ּ йи 
 Լ Ѵ. ̵ ϵ  ٸ ּ йи Բ pops 
Ϳ Ѵ. BSD ϰ ϵ INET proto_ops ڷᱸ
 INET   ƾ ȣϿ ʿ  Ѵ. 
, ּ йи INET ְ BSD   䱸Ѵٸ, ̴
ؿ ִ INET    Լ ϰ ȴ. BSD   ̵ 
 Լ INET  BSD  Ÿ socket ڷᱸ 
Ѵ. BSD socket TCP/IP ʿ   ٴ  
INET   ڽŸ ڷᱸ sock  ڽ BSD socket  
ڷᱸ Ѵ. ̷  ׸ 10.3   ִ. sock ڷ
 BSD  socket ִ data ͸  BSD socket ڷᱸ 
ȴ. ̰ ӵ INET  ȣ⿡  sock ڷᱸ 
  ִٴ ǹ̴. sock ڷᱸ  Լ   
ÿ ¾ Ǹ, ̴ 䱸 ݿ  ٸ.  TCP 䱸
ߴٸ, sock ڷᱸ  Լ ʹ TCP   ʿ 
TCP  Լ  ų ̴. 



  files_struct         
+--------------+      
| count        |      
+--------------+      file
| close_on_exec|    +----------+
+--------------+ +->| f_mode   |
| open_fs      | |  +----------+
+--------------+ |  | f_pos    |
| fd[0]        | |  +----------+
+--------------+ |  | f_flags  |
| fd[1]        |-+  +----------+
+--------------+    | f_count  |
|              |    +----------+
|              |    | f_owner  |
+--------------+    +----------+                     BSD Socket
| fd[255]      |    | f_op     |-------------------> File Operations
+--------------+    +----------+                        lseek
                    | f_inode  |-+                      read
                    +----------+ |                      write
                    | f_version| |     inode            select
                    +----------+ |  +---------+         ioctl
                                 +->|         |         close
                              +---->|         |         fasync
                              |     |         |
                              |     | socket  |
                              |     +---------+
                              |     | type    | SOCK_STREAM
                              |     | ops     |
                              |     | data    |---> Address Family
                              |     |         |-+   Socket Operation
                              |     +---------+ |
                              |                 |
                              |  +--------------+
                              +--|--------------+
                                 |     sock     |
                                 |  +---------+ |
                                 +->| type    | SOCK_STREAM
                                    +---------+ |
                                    | Protocol| |
                                    +---------+ |
                                    | socket  |-+
                                    +---------+
                                    |         |
                                    |         |
                                    |         |
                                    |         |
                                    |         |
                                    +---------+


            ׸ 10.3 : Linux BSD Socket Data Structures



10.4.1 BSD   

   ý ݿ ּ йи ĺڿ  Ÿ, ׸ 
 ڷ ش. , 䱸 ּ  йи Ͽ pops 
Ϳ ġϴ ּ йи ִ ã´.  ּ йи  
Ŀ     ִµ,   kerneld   
 о鿩 ۾    ִ. BSD  Ÿ   
socket ڷᱸ ҴѴ.  socket ڷᱸ   
VFS inode ڷᱸ  κ̰   ҴѴٴ  δ VFS  
inode ҴѴٴ  ǹѴ. ̴  Ϲ ϰ Ȱ 
 ۵Ѵٴ  Ѵٸ  ̻ϰ   ̴. 
  VFS inode ڷᱸ Ÿ,   Լ 
Ϸ BSD    VFS inode ڷᱸ ǥǾ Ѵ. 

  BSD socket ڷᱸ  ּ йи  Ư 
ƾ鿡  ͸  , ̴ pops Ϳ   ִ 
proto_ops ڷᱸ ȴ. Ÿ 䱸  Ÿ ȴ.
 SOCK_STREAM, SOCK_DGRAM   ϳ̴. ּ йи  
ٸ  Լ proto_ops ڷᱸ ִ ּҸ ̿Ͽ ȣѴ.

ֺ  (descriptor)  μ fd Ϳ Ҵǰ,
̸ Űfile ڷᱸ ʱȭȴ. ̴  Լ Ͱ BSD 
 ̽ ϴ BSD   Լ Ű 
ϴ  Ѵ.  ۾  ̽ ޵ǰ 
̽ ʷ ּ йи Լ ȣν ̵ ϴ 
ּ йи Ѵ. 


10.4.2 ּҿ INET BSD  εϱ(binding)

 ͳ  䱸 ٸ  (listen) ,   
INET BSD   ̸  ּҿ ε ־ Ѵ.  
ε ۾ κ INET ϰ Ʒ  TCP UDP  
κ    ޾ óѴ. ּҿ ε Ǿִ  
 ٸ   ؼ     . ̴ socket ´ 
TCP_CLOSE߸ Ѵٴ  Ѵ. ε  Լ ޵ sockaddr
 ε IP ּҿ, ɼ Ʈ ȣ   ִ.  INET 
ּ йи ϸ   ̽   ִ Ʈũ 
ġ Ҵ IP ּҰ, ⼭ ε Ǵ IP ̴ּ.  ý
  Ʈũ ̽ ȰȭǾ ִ ifconfig  
Ͽ   ִ. IP ּҴ  1̰ų  0 IP εĳƮ
(broadcast) ּ  ִ. ̵ Ư ּҷμ " 
" ǹѴ. , 谡  Ͻó ȭ ϰ 
ִٸ,  IP ּϰ ε  ִ. ׷   
 μ ƹ IP ּҿ ε   ִ. ε IP 
ּҴ recv_addr ִ sock ڷᱸ saddr ׸ ȴ. ̵
ؽ÷ ã  ̸,  IP ּҷε δ. Ʈ ȣ ɼ
̸  ̸   ̸ ϴ Ʈũ ƹ̳ 
ִ   ޶ ûѴ.  1024  Ʈȣ 
     μ   .  Ʒ 
Ʈũ  Ʈ ȣ ҴѴٸ, ̴ ׻ 1024 ū  
Ҵ ̴. 

Ʒ Ʈũ ġ Ŷ , ̸ ùٸ INET BSD 
 Ͽ ó  ֵ ؾ Ѵ. ̷  UDP TCP  
 IP ޽ ִ ּҸ ȸϿ ùٸ socket/sock  
ϴµ    ֵ ؽ ̺ Ѵ. TCP   
̹Ƿ UDP Ŷ ó  TCP Ŷ óϴµ   
 ȴ. 

UDP Ҵ UDP Ʈ ؽ ̺  udp_hash ̺ Ѵ. 
̴ sock ڷᱸ ͷμ Ʈ ȣ  ؽ Լ ε
Ǿ ִ. 
UDP ؽ ̺ Ǵ Ʈ ȣ ٴ ξ Ƿ
(udp_hash 128 Ǵ UDP_HTABLE_SIZE  ŭ Ʈ ´), 
̺  Ʈ sock ڷᱸ  (̵ sock next
ͷ  ȴ) Ų. 

TCP    ؽ ̺ ϹǷ  ξ   ϴ. ·
TCP ε ۾ ȿ εϴ sock ڷᱸ  ؽ ̺
  ߰ ʰ,  䱸 Ʈȣ  ǰ ִ
 ˻Ѵ. sock ڷᱸ  ۾ ϴ ߿ TCP ؽ 
̺ ߰ȴ 

REVIEW NOTE : Է Ʈ  Ǵ°? 


10.4.3 INET BSD  ϱ 

 , ̰ η  䱸  ޱ  뵵 
 ʾҴٸ, ̴ ܺη  䱸   ִ. UDP  
񿬰 (connectionless protocol) ̷ ۾   
ϴ  , TCP  (connection oriented 
protocol) ̴     α׷  ȸθ  
 Ѵ. 

ܺη   ¿ ִ INET BSD Ͽ ̷  
ִ : ڸ ̹  Ǿ ְų, η  ٸµ 
ϰ ִ  ȵȴٴ ̴. ̴ BSD  ڷᱸ 
SS_UNCONNECTED ¿ ִٴ  ǹѴ. UDP  α
     ʴ´.  ޽  ͱ׷
̸, ޽  κ    ,    
ִ. ׷ ,  BSD  Լ  Ѵ. UDP INET BSD  
Ͽ  ۾ ܼ  α׷ ּ - IP ּҿ 
Ʈ ȣ -    ̴. ߰  ̺ Ʈ  
ĳø ¾Ͽ,  BSD   UDP Ŷ ٽ  
̽ ˻ ʿ䰡  ( Ʈ  Ʋ  Ǳ ) 
Ѵ. ĳõ   INET sock ڷᱸ ip_route_cache 
Ű ִ.  ƹ ּ   ʴ´ٸ,  ĳõ 
ð IP ּ  ڵ BSD  Ͽ  ޽ 
Ѵ. UDP sock ¸ TCP_ESTABLISHED ٲ۴. 

TCP BSD Ͽ  ۾, TCP    TCP ޽
 ϳ  ̸ ־ IP   Ѵ.   TCP ޽
 ӿ õ    ִ.   ޽  
ȣ ϴ (initiator) ȣƮ ó  ִ ޽ ִ 
ũ,  ޴  ũ,  װ̴. TCP  ޽
 ȣ , ʱ   ȣ ù° ޽ ȣ Ѵ. 
    ϱ  ϴ   
  . 
ʿ  ޽ ٸ ʿ  ,  ޽ 
 װ   ʰ ߴٴ  ϴ  ־
 Ѵ.   ޽ ٽ  ȴ. ۼ  ũ
   ʰ    ִ ޽ ̴ (̸ŭ ޽
   ACK  ʾƵ ȴ). ִ  ޽ ũ û 
 ʿ ϰ ִ Ʈũ ġ .   ޴  
Ʈũ ġ ̺  ִ ޽ ũ⸦ Ѵٸ, ӿ  
 ߿ ּҰ ϰ  ȴ.  TCP  û ϴ 
α׷  α׷   䱸 ްų źѴٴ 
   ٷ Ѵ. TCP sock  ޽  
 ϹǷ, tcp_listening_hash ߰Ͽ,  TCP  ޽ 
sock ڷᱸ   ְ Ѵ. TCP   α׷ 䱸
    ʴ    䱸 ŸӾƿ   
ֵ Ÿ̸Ӹ Ѵ. 


10.4.4 INET BSD Ͽ (listening) 

Ͽ ּҸ ε Ͽٸ, ε ּҸ Ͽ   
䱸 ٸ  ִ. Ʈũ α׷  ּҸ ε 
 ʰ  ٸ  ִµ, ̷  INET     
ݿ  ʰ ִ Ʈ ȣ ã ̸ Ͽ ڵ  
ε ش.    Լ   ¸ TCP_LISTEN ٲٰ 
  㰡ϴµ ʿ Ʈũ Ư ۾ Ѵ. 

UDP Ͽ ־  ¸ ٲٴ ε , TCP 
 sock ڷᱸ ΰ ؽ ̺ ߰Ͽ Ȱȭǵ 
Ѵ.    ؽ ̺ tcp_bound_hash tcp_listening_hash 
̴̺.   IP  Ʈ ȣ  ؽ Լ Ͽ ε
Ǿ ִ. 

Ȱȭ  Ͽ  TCP  䱸 , TCP ̸ Ÿ
  ο sock ڷᱸ .  sock ڷᱸ  TCP 
 ᱹ ޾Ƶ鿩ٸ TCP  Ϲݺΰ ȴ.   䱸
ϰ ִ  sk_buff Ͽ, ٸ sock ڷᱸ 
receive_queue ڿ ̸ ߰Ѵ.  sk_buff   sock 
ڷᱸ  ͸ ´. 


10.4.5  䱸 㰡ϱ(accepting)

UDP ̶   Ƿ, INET    ϴ 
 TCP ݿ  Ǹ,  ٸ Ͽ  
ϴ   ٸ Ͽ socket ڷᱸ Ͽ 
ο socket . 㰡 ۾ ڽ ϴ  , 
  INET  Ѿ    䱸 ޾Ƶ̶ 
Ѵ.  Ʒ   UDP   ʴ 
̶   㰡  Ѵ. ׷   㰡  
 ,   TCP ޵ȴ.   㰡 ۾ ŷ 
ϼ, ŷ 尡 ƴҼ ִ. ŷ 尡 ƴ , 
 ƹ   ,   ۾ ϰ,  
 socket ڷᱸ  ̴. ŷ   , 
㰡 ϴ Ʈũ α׷  ť  TCP  䱸
   ߴܵȴ.  䱸 ,  䱸  ִ 
sk_buff õǰ, sock ڷᱸ    socket ڷᱸ 
Ǿ ִ INET   ǵư. Ʈũ α׷ 
    (fd) ְ,  α׷  
 BSD    ۾ ϴµ    ڸ 
  ִ. 


10.5 IP  

10.5.1  (Socket Buffer) 

 Ʈũ   ,   ٸ  񽺸 
ϴ    ϳ,    ϴ Ϳ  
   ̰,  ͸ ó  ̸ ؾ Ѵ
 ̴. ̴    Ư    
ãƾ ϹǷ  ̿  ۸ ϴ  ư 
. 
 ϳ   ۸ ϴ , ̴ ſ 
ȿ̴.     ̿ Ʈũ ̽ 
̹  ͸ ϱ  sk_buffs  ۸ 
Ѵ. sk_buffs Ϳ   ׸  ־   
 ǥ Լ  α׷ ͸ ٷ  ְ Ѵ. 

׸ 10.4 sk_buff ڷᱸ ش.  sk_buff ڽŰ 
   ִ. sk_buff װ   ͸  
ִµ, ̵   ͸ ٷ ϴµ ȴ. 

     (head) : ޸𸮿   Ų. ̴ sk_buff
       ̿Ͱõ   Ҵ  ȴ. 

     (data) :     Ų.  
         sk_buff ϰ ִ    ޶.

     (tail) :    Ų. , 
       ϰ ִ    ޶. 

     (end) : ޸𸮿     Ų. sk_buff 
       Ҵ  ȴ. 




                      sk_buff
                  +-------------+
                  | next        |
                  +-------------+
                  | prev        |
                  +-------------+
                  | dev         |
                  +-------------+
                  |             |
                  |             |
                  +-------------+
                  | head        |---+
                  +-------------+   |
                  | data        |-------+   
                  +-------------+   |   |
                  | tail        |---|---|---+
                  +-------------+   |   |   |
                  | end         |---|---|---|---+
      ^           +-------------+<--+   |   |   |
      |           |             |       |   |   |
      |           |             |       |   |   |
      |           +-------------+<------+   |   |
      |       ^   |             |           |   |
      |       |   | Packet      |           |   |
   truesize  len  | to be       |           |   |
      |       |   | transmitted |           |   |
      |       v   |             |           |   |
      |           +-------------+<----------+   |
      |           |             |               |
      |           |             |               |
      |           |             |               |
      v           +-------------+<--------------+


     ׸ 10.4 : The Socket Buffer (sk_buff)



̸ Ÿ ׸δ len truesize ΰ , ̵  
  Ŷ ̿,    ü  ũ⸦ Ÿ
. sk_buff ٷ ڵ α׷ Ϳ   
 ̰ ϴ ǥ  Ѵ. ̵ ϰ 
sk_buff ִ  data,  tail, ׸ len ׸ ٷ. 

     push : data ͸    ̵ϰ, len ׸
        Ų. ̴   ۺκп ͳ 
         ̴µ ȴ. 

     pull : data ͸ ۺκп  ,   
        ̵ϰ, len ׸ ҽŲ. ̴   
       ۺκп ͳ   ϴµ ȴ. 

     put : tail ͸    ̵ϰ len ׸ 
       Ų. ̴    ͳ  
       ߰ϴµ ȴ. 

     trim : tail ͸    ̵ϰ len ׸
        ҽŲ. ̴  Ŷ ͳ   
       ϴµ ȴ. 

sk_buff ڷᱸ  ó߿ sk_buff     Ʈ 
ϴµ ϴ ͵  ִ. ׸ sk_buffs ̵ 
Ʈ ̳ ڿ ߰ϰ ϴµ ϴ Ϲ sk_buff 
ƾ鵵 ִ. 


10.5.2 IP Ŷ ϱ 

Ŀο  ̹   ʱȭǴ 8忡 
ߴ.  ʱȭ  dev_base Ʈ  Ǿ ִ 
Ϸ device ڷᱸ̴. 
 device ڷᱸ ġ ϰ, Ʈũ   Ʈ
ũ ̹   ؾ   θ  ִ ݹ ƾ Ʈ
 Ѵ. ̵ Լ κ  ۰ Ʈũ ġ ּ
 õǾ ִ.  Ʈũ ġ Ʈũκ Ŷ ϸ  
 ͸ sk_buff ڷᱸ ٲپ Ѵ. Ʈũ ̹ 
̵   backlog  ť  sk_buff ߰Ѵ.  
backlog ť ʹ Ŀ,  sk_buff  õȴ.  ؾ 
 Ƿ  غ Ǿٰ Ʈũ Ϲݺ(bottom half) 
ǥѴ. 

ٷ Ʈũ Ϲݺ ڵ鷯 ϸ, ̴sk_buff backlog
ť óϱ   Ŷ      
ϸ ۵Ǳ ٸ ִ Ʈũ Ŷ óѴ.  
Ʈŷ  ʱȭ    packet_type ڷᱸ 
ptype_all Ʈ ptype_base ؽ̺  ߰μ ڽŵ 
ߴ. packet_type ڷᱸ  Ÿ԰ Ʈũ ġ  
,    ó ƾ, ׸   Ʈ
ؽ  ִ  packet_type ڷᱸ  ͸  
ִ. ptype_all   Ʈũ ġ̵ ŵǴ  
Ŷ µ(snoop)    ʴ´. 
ptype_base ؽ ̺  ĺڷ  ؽõǾ , 
Ʈũ Ŷ     ϴµ ȴ. Ʈ
ũ Ϲݺδ  sk_buff  Ÿ԰  ̺ ִ 
ϳ ̻ packet_type Ʈ ġŲ.  ϳ ̻ 
Ʈ  ġ  ִµ,     Ʈũ Ʈ   
 ̸,   sk_buff   ȴ. sk_buff ġǴ 
 ó ƾ ޵ȴ. 


10.5.3 IP Ŷ ϱ 

Ŷ α׷ ͸  ȯϰų, Ʈũ   ̹
 ̳      . 
  Ͱ   ͸ ϰ ִ 
sk_buff  ,    ϸ鼭   
پ  δ. 

sk_buff  Ʈũ ġ ޵Ǿ Ѵ.  IP  
̶  Ʈũ ġ  ؾ Ѵ. ̴ Ŷ 
 ´ Ʈ  ٸ. 
PPP ݰ    ϳ  Ʈũ  ǻ
 ־  Ʈ ϴ  . Ŷ  ġ  
ȣƮ, PPP    ִ Ʈ   ϳ 
 ̴. ̴ Ǿ ִ ǻͿ ־, Ʈũ 
 ǻͰ Ǿ Ƿ    ƴ. 

IP Ŷ   ׻ IP  IP ּҷ  Ʈ(route) 
ذϱ   ̺(routing table) Ѵ.  IP  
 ̺  ã Ǿ,  Ʈ ϴ rtable 
ڷᱸ ش. ̴   IP ּҿ, Ʈũ device 
ڷᱸ ּ,   ̸  ϵ  Ѵ. 
 ϵ  Ʈũ ġ ٸ μ    
ϵ ּҿ, Űü ٸ   ִ.  Ʈũ 
ġ ̴ ġ̶, ϵ  ׸ 10.1  ٿ 
 ̸,   ּҴ   ̴ ּ ̴. 
ϵ  Ʈ Բ ĳõǴµ, ̴   ϵ   
Ʈ Ͽ ϴ  IP Ŷ ߰Ǿ ϴµ, ̸ ٽ 
  ð ɸ ̴. ϵ  ARP  ݷ 
ذǾ ϴ  ּҸ   ִ.     
Ŷ ּҰ ذ  ¦ϰ ٸ ־ Ѵ. ѹ 
ּҰ ذǰ , ϵ  ,   ̽ 
ϴ IP Ŷ ٽ ARP  ʿ䰡   ϵ  
ĳѴ. 


10.5.4   (data fragmentation) 

 Ʈũ ġ ִ Ŷ ũ⸦  , ̺ ū ũ 
͸ ų   . IP  ̷ 츦 Ͽ 
͸ Ʈũ ġ ó  ִ Ŷ ũ ͸ ߰ 
ɰ. IP   ÷׿   ɼ   ׸ 
 ִ. 

IP Ŷ  غ Ǹ, IP  IP Ŷ   Ʈũ 
ġ ã´. ġ IP  ̺ ã ȴ.  device 
ִ    Ÿ ׸  ִµ (Ʈ ), ̴ 
mtu ׸̴.  ġ mtu Ϸ IP Ŷ ũ⺸ , 
IP Ŷ    ũ(mtu ũ)  ɰ Ѵ. 
 sk_buff ǥȴ. IP  ̰ ̸,   Ŷ 
  ɼº  ִ ǥõȴ.   Ŷ   IP 
̶  ǥõȴ. 
,  ɰ ߿ IP sk_buff Ҵ Ѵٸ  
ϰ ȴ. 

IP  ϴ   ϴ ͺ  ,  ̴ IP  
ƹ γ   Ƿ  Ź޾ƾ   ֱ 
̴. IP Ŷ   ̰ IP  ˻Ѵ. ޽ 
 ó ϸ, IP  ipq ڷᱸ , ̸  
ٸ  IP  Ʈ ipqueue  Ѵ. 
IP   ŵǸ ´ ipq ڷᱸ ã   Ÿ
ipfrag ڷᱸ  .  ipq ڷᱸ  IP  
   IP ּҿ Բ ϰ ϸ,   
 ĺڿ  IP  ĺڸ Ѵ.   ϸ,
̵ ϳ sk_buff  ó    
ȴ.  ipq      ٽ ۵Ǵ Ÿ̸Ӹ 
 ִ.   Ÿ̸Ӱ Ǹ, ipq ڷᱸ ̰ ipfrag
 ҸǸ, ޽  ߿   ֵȴ.  ޽  
ٽ ϴ       ϴ ̴. 


10.6 ּ  (Address Resolution Protocol, ARP) 

ּ    IP ּҿ ̴ ּҿ    
ϵ ּҷ ȯ ϴ ̴. IP ͸  
 ̹ ϱ (sk_buff ·) ٷ  ̷ ȯ 
ʿ Ѵ. ̴  ġ ϵ  ʿ ϴ,  ׷
ٸ  Ŷ ϵ   ٽ  ϴ ˱  
 ˻縦 Ѵ.  ϵ   ٽ  
ʵ ̸ ĳѴ.  ϵ  ٽ  ʿ䰡 ִٸ, 
ġ  ϵ   ƾ ȣѴ.  ̴ ġ 
Ȱ Ϲ   ƾ ϸ,  ƾ  IP ּ
  ּҷ ٲٱ  ʷ ARP 񽺸 Ѵ. 

ARP   ü ſ ܼϸ,  ARP 䱸 ARP  ΰ 
޽ · ̷ ִ. ARP 䱸 ȯ ʿ ϴ IP ּҸ 
 ְ,  (ٶǵ) ȯ IP ּ ϵ ּҸ 
 ִ. ARP 䱸 Ʈũ   ȣƮ (εĳ
Ʈ) ǹǷ, ̴ Ʈũ ̴ݿ     
 ARP 䱸 ް ȴ.  䱸 ִ IP ּҸ ϰ ִ 
  ARP 䱸 Ͽ ڽ  ּҸ  ִ ARP 
 ϰ ȴ. 

 ARP    IP ּҷ ȯ Ÿ
 arp_table ڷᱸ ̺  ̷ ִ. ̵ Ʈ
 IPּҰ ȯ ʿ䰡   , ð    
ŵȴ.  arp_table  ڷᱸ   ׸  : 
 
    (last used) ARP Ʈ   ð 

    (last updated) ARP Ʈ  ŵ ð 

   ÷(flags) Ʈ ϷǾ  Ʈ ¸ Ÿ. 

   IP ּ Ʈ Ÿ IP ּ 

   ϵ ּ ȯ ϵ ּ 

   ϵ  ĳõ ϵ    

   Ÿ̸(timer)  ʴARP 䱸 ŸӾƿ  Űµ ϴ 
     timer_list Ʈ 

   õ(retries)  ARP 䱸 õ Ƚ 

   sk_buff ť  IP ּҸ ذϱ ٸ sk_buff Ʈ Ʈ 

ARP ̺ arp_table Ʈ ձ   ̺ Ǿ
ִ (arp_tables ). Ʈ ̵鿡   ӵ ̱ 
 ĳõǸ,  Ʈ IP ּ   Ʈ  ̺ 
 ε ϰ, ϴ  ã  ؽ ̺ Ʈ
    ã ȴ.   ̸  ϵ 
 hh_cache ڷᱸ · arp_table Ʈ ĳýŲ. 

IP ּҺȯ 䱸ߴµ ġϴ arp_table Ʈ  , ARP 
ARP 䱸 ޽  Ѵ. ARP arp_table  arp_table 
Ʈ , ּ ȯ ʿ ϴ Ŷ ϰ ִ 
sk_buff    Ʈ sk_buff ť ťŲ. ARP ARP 
䱸  ARP  Ÿ̸Ӹ Ѵ. ƹ  ٸ ARP 
 õ ϰ,   ٸ ARP arp_table Ʈ 
Ѵ. IP ּҰ ȯǱ⸦ ٷ ťǾ ִ  sk_buff ڷ
̵   ް ǰ, ̷ п ϴ  ̵ 
Ϸ   ̴. UDP Ҿ Ŷ ؼ Ű 
 , TCP  TCP ũ Ͽ Ϸ õ 
.  IP ּ ڰ  ϵ ּҸ ָ Ѵٸ, 
arp_table Ʈ Ϸ  ǥõǰ, ťǾ ִ   sk_buff
 ť ŵǰ ۵ ̴. ϵ ּҴ  sk_buff ϵ
  ϵȴ. 

ARP   ڽ IP ּҸ ϰ ִ ARP 䱸 ݵ 
ؾ Ѵ.   ڽ  Ÿ  (ETH_P_ARP) 
ϰ, packet_type ڷᱸ Ѵ. ̴ Ʈũ ġ  
 ARP Ŷ ޹ް ȴٴ  ǹѴ. ̴ ARP Ӹ ƴ
 ARP 䱸 Ѵ. ̴   ġ device ڷᱸ 
Ǿ ִ ϵ ּҸ Ͽ ARP  . 

Ʈũ  ð 鼭   , IP ּҴ ٸ ϵ
 ּҷ ٽ Ҵ  ִ.  ,   ȭ 񽺴 
    ٸ IP ּҸ Ѵ. ARP ̺  ֱ
 Ʈ   ֵ, ARP  Ÿ̸Ӹ   
arp_table Ʈ  ŸӾƿ  ʾҴ  캻. 
̴ ϳ ̻ ĳõ ϵ    ִ Ʈ 
 ʵ ſ Ѵ. ̵ Ʈ   ٸ ڷᱸ
 ̿ ϰ Ƿ ſ ϴ.  arp_table Ʈ 
̸, ̵ Ҵ  ʵ ǥð ȴ. ARP ̺ 
ʹ Ŀ ȵȴ.  arp_table Ʈ  Ŀ ޸𸮸 
Ա ̴.  Ʈ ҴǾ ϰ ARP ̺ ִ ũ⿡ 
 , ̺   Ʈ ã ̸ Ѵ. 


10.7 IP (routing)

IP  Լ Ư IP ּҸ   IP Ŷ  
 Ѵ. IP Ŷ       ִ.  
ᱹ   ?    ִٸ, ϴµ  Ʈ
ũ ġ  ΰ?  ϴµ   ִ Ʈ
ũ ġ ϳ  ̻ ִٸ,      ΰ? IP  
ͺ̽ ̵    ִ  Ѵ. ⿡ 
ΰ ͺ̽ ִµ,   ߿      
̽(Forwarding Information Database)̴. ̰ IP ּҿ  
 濡 ؼ ˷ ͵  Ҹ ̴. IP   
 ã ,  ۰   ͺ̽ Ʈ ĳ(route cache)
 ȴ. ٸ  ĳó ̴  ϴ 鿡 ؼ 
 ־ Ѵ; ̰    ͺ̽  
̴. 

Ʈ BSD  ̽ IOCTL 䱸 ν ߰ǰų 
ȴ. ̵ ݿ μ ޵ȴ. INET   
IP Ʈ ߰ϰų ϴµ  ȯ  μ 
㰡Ѵ. ̵ Ʈ   ְ, ð 鼭  
   ִ. κ ý  Ͱ ƴ϶  Ʈ 
Ѵ. ʹ   ˷ IP     
ȿ ˻ϴ   Ѵ. Ͱ ƴ ý۵
 ܸ ý̶ Ѵ.   GATED  
Ǿ ,   IOCTL BSD  ̽ Ͽ Ʈ 
߰ϰų Ѵ. 


10.7.1 Ʈ ĳ(Route Cache)

IP Ʈ ȸϸ ġϴ Ʈ ã  Ʈ ĳø  ˻
Ѵ. Ʈ ĳÿ ġϴ Ʈ ٸ   ͺ̽ 
Ʈ ã´.  ƹ Ʈ ã  ٸ, IP Ŷ ۿ 
ϰ ̸ α׷ ˸. 

 Ʈ   ͺ̽ ְ Ʈ ĳÿ ٸ,  Ʈ
 شϴ  Ʈ  Ʈ ĳÿ ߰Ѵ. Ʈ ĳô 
rtable ڷᱸ    ͸  ִ ̺
(ip_rt_hash_table)̴. Ʈ  ̺ ε IP ּ ϴ  
Ʈ  ؽԼ̴. ̵  Ʈ   ޶ 
ؽð   л   ִ ̴.   rtable Ʈ Ʈ
   -  IP ּҿ  IP ּҿ ϴµ  Ʈũ 
device,   ִ ޽ ִ ũ  -   ִ. ̴ 
 Ƚ  ִµ, ̴  Ƚ ̰   
ð Ÿӽ  ִ (jiffies  ). Ƚ  Ʈ
   Ͽ,  Ʈ ϴ  Ʈũ  ڸ  
ش. 
̴ α׷  Ʈ ϱ⸦ ׸θ Ѵ. Ƚ
  Ʈ ã  ϸ, rtable ؽ   Ʈ 
 ϴµ ȴ. Ʈ ĳÿ ִ  Ʈ ִ 
  Ÿӽ  ˻Ͽ   rtable ʹ  
ʾҴ ɴ.  Ʈ  ֱٿ  ʾҴٸ  Ʈ ĳÿ
 ȴ.  Ʈ Ʈ ĳÿ ִٸ,  Ʈ   
 Ʈ ؽ   տ  ġȴ. ̴ Ʈ ȸ 
  ã ȴٴ  ǹѴ. 


10.7.2   ͺ̽(Forwarding Information Database) 

  ͺ̽(׸ 10.5 ְ ִ)   ð 
ýۿ   ִ Ʈ IP   ִ. ̴ ſ 
 ڷᱸ̸,  ȿ ġǾ , ϱ⿡  
 ͺ̽ ƴϴ. Ư, ϴ  IP Ŷ  
 ͺ̽ ã ȴٸ  ſ  ̴. ̴ Ʈ ĳð 
ִ ̱⵵ ϴ - ˰ ִ  Ʈ Ͽ IP Ŷ 
ϴ    ϱ. Ʈ ĳô   ͺ̽ Ļ
   ϴ Ʈ ǥѴ. 

 IP  fib_zone ڷᱸ ǥѴ. ̵ δ fib_zones 
ؽ ̺ Ű ִ. ؽ ε IP  Žũ 
. Ȱ   Ʈ fib_node  
Ÿ, fib_info  ڷᱸ   fib_zone ڷᱸ fz_list   
ťȴ.   ݿ ִ Ʈ ڰ Ŀ, fib_node ڷᱸ
  ã  ؽ̺ . 


fib_zones     
+-------+     
|       |                         
+-------+         fib_zone            
|       |      +-------------+        
+-------+  +-->|fz_next      |           fib_node
|       |  |   +-------------+         +----------+
+-------+  |   |fz_hash_table|--+  +-->|fib_next  |
|       |  |   +-------------+  |  |   +----------+
|       |  |   |fz_list      |  |  |   |fib_dst   |
|       |  |   +-------------+  |  |   +----------+
+-------+  |   |fz_nent      |  |  |   |fib_use   |     fib_info  
|       |--+   +-------------+  |  |   +----------+   +-----------+
+-------+      |fz_logmask   |  |  |   |fib_info  |-->|fib_next   |
|       |      +-------------+  |  |   +----------+   +-----------+
|       |      |fz_mask      |  |  |   |fib_metric|   |fib_prev   |
|       |      +-------------+  |  |   +----------+   +-----------+
|       |                       |  |   |fib_tos   |   |fib_gateway|
|       |  +--------------------+  |   +----------+   +-----------+
+-------+  |                       |                  |fib_dev    |
|       |  |   +-------+           |                  +-----------+
+-------+  +-->|       |           |                  |fib_refcnt |
|       |      +-------+           |                  +-----------+
+-------+      |       |           |                  |fib_window |
               +-------+           |                  +-----------+
               |       |           |                  |fib_flags  |
               +-------+           |                  +-----------+
               |       |           |                  |fib_mtu    |
               |       |           |                  +-----------+
               |       |           |                  |fib_irtt   |
               +-------+           |                  +-----------+
               |       |-----------+
               +-------+
               |       |
               |       |                 fib_node  
               +-------+               +----------+
               |       |-------------->|fib_next  |   
               +-------+               +----------+   
               |       |               |fib_dst   |
               |       |               +----------+
               |       |               |fib_use   |     fib_info  
               +-------+               +----------+   +-----------+
               |       |               |fib_info  |-->|fib_next   |
               +-------+               +----------+   +-----------+
               |       |               |fib_metric|   |fib_prev   |
               +-------+               +----------+   +-----------+
                                       |fib_tos   |   |fib_gateway|
                                       +----------+   +-----------+
                                                      |fib_dev    |
                                                      +-----------+
                                                      |fib_refcnt |
                                                      +-----------+
                                                      |fib_window |
                                                      +-----------+
                                                      |fib_flags  |
                                                      +-----------+
                                                      |fib_mtu    |
                                                      +-----------+
                                                      |fib_irtt   |
                                                      +-----------+


          ׸ 10.5 : The Forwarding Information Database



Ȱ IP ݿ  Ʈ   , ̵ Ʈ  
Ʈ  ϳ ϰ ȴ. IP    Ȱ Ʈ
̸ Ͽ ϳ    Ʈ ִ  㰡
ʴ´. ٸ ϸ,   Ʈ   ִٸ,  
Ʈ ٸ Ʈ̸  ϵ Ͽ  ٴ ̴.  Ʈ 
Ǿ ִ  װ Ÿ(metric)̴. ̰  ΰ 󸶳 
 ϰ ϴ ̴.  Ʈ Ÿ  ϴ 
ݿ ϱ ľ ϴ IP  ̴.    
Ŭ     Ʈ̴. 


 : 輺, ȣ, ȫ漱
 : ɸ, ȣ

=====================================================================



11 

Ŀ Ŀ (Kernel Mechanism)



<< 忡 Ŀ  κе Բ ȿ   ֵ 
   Ŀ ϴ  Ϲ ۾ Ŀ ؼ 
  Ѵ.>>


11.1 Ϲݺ ó(Bottom Half Handling) 

Ŀο      óϱ ٶ ʴ 찡 ִ. 
 ǥ  ͷƮ óϴ ̴. ͷƮ ߻
 μ ڽ ϴ  ϰ ü ͷƮ ش
ϴ ̽ ̹  Ѵ. ͷƮ óϴ ȿ 
ý ٸ κ   Ƿ, ̽ ̹ ͷƮ
ó ʹ  ð  ȵȴ.  ⿡  ƴ϶ ߿ 
óص Ǵ ϵ  ִ.  Ϲݺ ڵ鷯(bottom half
handler)   ̽ ̹  Ŀ ٸ κе,   
߿  Ǵ ť   ֵ ϱ  ߵǾ. ׸ 11.1
 Ϲݺ ó  õ  Ŀ ڷᱸ ش. 
 32  ٸ Ϲݺ ڵ鷯   ִ . bh_base 
Ŀ Ϲݺ ڵ鷯 ƾ Ű ִ ͵ ̴. 
bh_mask bh_active  ڵ鷯 ġǾ ְ Ƽ   Ÿ
 Ʈ  ̴. bh_mask Ʈ N  Ǿ ִٸ bh_base
 N° Ϲݺ ƾ   ִ ̴. bh_active N° Ʈ
Ǿ , 췯 ϴٰ Ǵ  N° Ϲݺ ڵ鷯 
ƾ ǵ  ҷ־ Ѵٴ ̴. ̵ ε  
ǵ ̴. Ÿ̸ Ϲݺ ڵ鷯   켱 
(ε 0), ܼ Ϲݺ ڵ鷯  켱(ε 1) . 
Ϲ Ϲݺ ڵ鷯 ƾ ڽŰ  ۾  
 ִ.  , ý(immediate) Ϲݺ ڵ鷯 ٷ ؾ 
ϴ ۾  ý ۾ ť(tq_immediate)  
Ѵ. 

Ŀ Ϲݺ ڵ鷯 ߿  ͵ ġ Ǿ  ٸ 
  Ϲ   ִ  : 


         bh_active      
31                      0         bh_base
+-----------------------+     +-------------+
|                       |   0 |             |--> Bottom half handler
+-----------------------+     +-------------+    (times)
                              |             |
         bh_mask              +-------------+
31                      0     |             |
+-----------------------+     |             |
|                       |     |             |
+-----------------------+     |             |
                              |             |
                              |             |
                              |             |
                              +-------------+
                              |             |
                              +-------------+
                           31 |             |
                              +-------------+


          ׸ 11.1 : Bottom Half Handling Data Structures



     TIMER :  ڵ鷯 ý ֱ ߻ϴ Ÿ̸ ͷƮ
        ߻  Ƽ ǥð ǰ, Ŀ Ÿ̸ ť Ŀ
         ȴ. 

     CONSOLE :  ڵ鷯 ܼ ޽ óϴµ ȴ. 

     TQUEUE :  ڵ鷯 tty ޽ óϴµ ȴ . 

     NET :  ڵ鷯 Ϲ Ʈ ó ȴ. 

     IMMEDIATE : ̴  ̽ ̹  ߿  ۾
         ׾Ƶδµ ȴ. 

̽ ̹ Ŀ  κ ߿  ۾ 
ʿ䰡  , ̵ ۾  ý ť -   Ÿ̸ 
ť - ְ, Ŀο Ϲݺ ڵ鷯  ʿ䰡  ִٰ ȣ 
. ̴ bh_active شϴ Ʈ ϰ ȴ.  ̹
   ý  ť ְ  ý Ϲݺ ڵ鷯 Ǿ
̸ óϱ ٶٸ 8 Ʈ  ̴.  ý  
  ̸ θ μ ư ٷ  bh_active Ʈ
ũ ˻ϸ,   Ʈ Ǿ , Ƽ ǥõ
Ϲݺ ڵ鷯 ƾ  Ҹ. 
Ʈ 0  ˻ϰ, 1 , ̷  31  Ʈ ˻
Ѵ.   Ϲݺ ڵ鷯 ƾ θ  Ŀ bh_active ش Ʈ 
0 ȴ. bh_active Ͻ ̴. 
̴ ܽ 췯 ȣ ̿ ǹ̰  , Ϲݺ ڵ鷯 
̻     ̵ θ ʰ ϴ ̴. 



                 tq_struct              tq_struct    
task queue   +---------------+      +---------------+
------------>| next          |----->| next          |----->
             +---------------+      +---------------+
             | sync          |      | sync          |
             +---------------+      +---------------+
             | *routine()    |      | *routine()    |
             +---------------+      +---------------+
             | *data         |      | *data         |
             +---------------+      +---------------+


               ׸ 11.2 : A Task Queue



11.2 ۾ť(Task Queue)

۾ť Ŀ ۾  ̷µ  ϴ ̴. 
۾ ť ׾Ƶΰ ̸ ߿ ó  ֵ ϴ Ϲ Ŀ
  ִ. ۾ť  Ϲݺ ڵ鷯 Ǿ ̱⵵ 
Ѵ. Ÿ̸ ۾ť Ÿ̸ Ϲݺ ڵ鷯   óȴ. 
۾ť ׸ 11.2  Ͱ , Լ ּҿ ٸ ͸ 
Ű ͸  tq_struct ڷᱸ   Ʈ ̷
   ڷᱸ̴. ۾ť ִ  Ұ ó   
 Ϳ Բ ⿡  Լ Ҹ. 

Ŀο ִ  ̵ (  ̽ ̹) ۾ť 
   ,  Ŀ  ϴ ۾ťδ 
  ִ . 

     Ÿ̸(timer) :  ť  ý Ŭ ƽ ߻Ͽ  
         óǾ ϴ ϵ ť ֱ ؼ ȴ. 
        Ŭ ƽ ߻  ⿡  ִ ˻ϸ, 
        ť  ִٸ Ÿ̸ ť Ϲݺ ڵ鷯  Ƽ ·
       ٲ ȴ. Ÿ̸ ť Ϲݺ ڵ鷯  ٸ Ϲݺ ڵ鷯
        췯    ó ȴ.  ť 
       ξ    ִ ý Ÿ̸ϰ ȥ 
        Ѵ . 
     
     ý(immediate) :  ť  췯 Ƽ Ϲݺ ڵ鷯
        ó   ó ȴ. ý Ϲݺ ڵ鷯 Ÿ̸ 
       ť Ϲݺ ڵ鷯 켱 Ƿ ̺ٴ  ʰ 
        ȴ. 



     time_table              timer_struct 
   +-------------+          +------------+
0  |             |--------->| expires    |
   +-------------+          +------------+
   |             |          | *fn()      |
   +-------------+          +------------+
   |             | 
   |             |           timer_struct 
   +-------------+          +------------+
   |             |--------->| expires    |
   +-------------+          +------------+
   |             |          | *fn()      |
   |             |          +------------+
   |             | 
   +-------------+ 
   |             |      31      timer_active      0
   +-------------+      +-------------------------+
31 |             |      |                         |
   +-------------+      +-------------------------+


     timer_head            timer_list            timer_list
   +-------------+       +-------------+       +-------------+
   | next        |------>| next        |------>| next        |
   +-------------+       +-------------+       +-------------+
   | prev        |<------| prev        |<------| prev        |
   +-------------+       +-------------+       +-------------+
   | expries     |       | expries     |       | expries     |
   +-------------+       +-------------+       +-------------+
   | data        |       | data        |       | data        |
   +-------------+       +-------------+       +-------------+
   | *function() |       | *function() |       | *function() |
   +-------------+       +-------------+       +-------------+


                  ׸ 11.3 : System Timers



     췯(scheduler) :  ť 췯   óȴ. 
       ̴ ýۿ ִ ٸ ۾ť ϱ ؼ Ǹ, 
        Ǵ ۾ ̽ ̹ ͵  ۾ť
        óϴ ƾ ̴. 

۾ť óǸ ť ִ ù° ҿ  ʹ ť 
Ǿ null ͷ ٲ. ,  ϴ  ϳ ɰ  
  óǸ, ߴܵ   ̴. ̷ ť ִ 
 ҵ鿡 ϵ ó ƾ ʷ ȣ ȴ. 
ť ִ  Ҵ   ͸ Ҵޱ⵵ Ѵ. ׷ 
⿡ Ҵ ޸𸮸 ˾Ƽ ϴ Ŀ  ԵǾ 
 ʴ. ۾ť óϴ ƾ  Ʈ  ҷ ̵ 
̴. Ҵ Ŀ ޸𸮸  ϴ  ť ִ ۾ 
ؾ  ̴. 


11.3 Ÿ̸(Timer)

ü ̷  ð ؾ ൿ   ִ ɷ 
ʿ Ѵ. ̵ ൿ ð Ȯϰ 󸶰 ð Ŀ  
ϵ ϱ  Ŀ ʿϴ. ü ϱ
 ٶ ũμ, ݵ  μ 
Ʈ ߻ϴ α׷   Ÿ̸(interval timer) 
 ־ Ѵ. ̷  ߻ϴ ͷƮ ý Ŭ 
ƽ(clock tick)̶ ϸ, ̴ ý ൿ Ű Ʈγ
   ϴ ̴. 
  ð  ܼϰ ǥѴ.  ð ý 
  ߻ Ŭ ƽ Ƚ  ǥѴ.  ý ð
   Ǿ , ̴ jiffies ϸ, ̿ Ȱ ̸ 
  Ѵ . 



         wait_queue

         +--------+
         | *task  |
         +--------+
         | *next  |
         +--------+


   ׸ 11.4 : Wait Queue



 ΰ  ý Ÿ̸Ӹ  ,   ť ƾ
 Ȱ ý Ÿӿ ȣ, Ŀ ־ ణ ̰ 
ִ. ׸ 11.3  ΰ Ŀ ش.      
Ÿ̸ μ,  timer_struct ڷ    32
 迭   , Ƽ Ÿ̸ ũ timer_active 
 ִ. Ÿ̸Ӱ Ÿ̸ ̺    ǵȴ
(Ϲݺ ڵ鷯 ̺ bh_base    ).  ׸ ý 
ʱȭ  κ  ̺ ߰ȴ. ι°   ο 
 timer_list ڷᱸ ð ø  ִ  
Ʈ Ѵ. 

 ΰ   ð jiffies   ִ ð ̿
ϹǷ, 5 Ŀ Ǳ ٶ Ÿ̸Ӷ, 5ʸ jiffies  
ȯ   ý ð Ͽ ð ý ð jiffies
 Ÿ Ѵ.   ý Ŭ ƽ Ÿ̸ Ϲݺ ڵ鷯  
Ƽ ǥõǰ,   췯   Ÿ̸ ť ó  
ֵ Ѵ. Ÿ̸ Ϲݺ ڵ鷯   ΰ  ý Ÿ̸Ӹ 
 óѴ.    ý Ÿ̸ӿ ؼ  timer_active 
Ʈũ ˻Ͽ  Ǿ ִ Ʈ ˻ϰ ȴ.  
 Ƽ Ÿ̸ ð  (ð  ý 
jiffies  ), Ÿ̸ ƾ  ȣǰ, Ƽ Ʈ 
ȴ. ο  Ÿ̸ӿ, timer_list ڷᱸ   Ʈ
 ִ  Ҹ ˻Ͽ,    Ÿ̸ӵ Ʈ 
ǰ, ϵ Լ ȣȴ. 
ο Ÿ̸  Ÿ̸ ƾ ڸ ѱ  ִٴ  ִ. 


11.4 ť(Wait Queue)

μ ý ڿ ٷ ϴ  찡  ִ.  ,
μ  ýۿ ִ   丮  Ÿ VFS  inode  
ʿ ϴµ   inode  ĳ   , μ  
ý   ִ  ġ  inode   
ٷ Ѵ. 

 Ŀ ť(׸ 11.4 ), μ  task_struct 
 Ϳ ť ִ  ҿ  ͸  ִ, 
 ܼ ڷᱸ Ѵ. 

μ ť  ߰ Ǹ, ̵ ͷƮ 
(interruptible), Ǵ ͷƮ Ұ(uninterruptible) ° ȴ. 
ͷƮ   μ ť ִ  ߻ϴ Ÿ̸ ᳪ 
ñ׳ΰ ̺Ʈ鿡 ؼ  ͷƮ   ִ. 
 μ ´ ̸ ݿϿ INTERRUPTIBLE Ǵ 
UNINTERRUPTIBLE   ϳ  ̴.  μ   
     췯 Ǿ,   μ
 ϰ Ǹ  μ ߴ ȴ . 

ť ó   ť ִ  μ ´ RUNNING
 ٲ ȴ.   μ  ť ŵ ̾ٸ  
ٽ ť ְ ȴ.  췯   ť ִ 
μ,   ̻ ٸ ִ  ƴϱ    
ִ ĺ ȴ. ť ִ μ  Ǹ   
ϴ  ڽ ť ϴ ̴.  ť ý ڿ 
  ȭϴµ    ְ,   
ϴµ  Ѵ. (Ʒ )


11.5 (Buzz Lock) 

̰ ɶ(spin lock)̶    ˷ ִµ, ڷᱸ  ڵ
  κ ȣϴ  ⺻ ̴. ̰ ڵ Ӱ 
ȿ ÿ ϳ μ ֵ Ѵ.  ϳ 
 ׸  Ͽ ڷᱸ ִ ׸   
ϴ  Ѵ . Ӱ  ϴ  μ
  ʱⰪ 0 1 ٲٷ Ѵ.    1̶ 
, ڵ  ȿ  ۺ 鼭 ٽ õϰ ȴ. 
  ִ ޸ ġ   ݵ ѹ ̷ 
Ѵ(atmoic).  а   0 Ȯϰ, 0̸  1 ٲٴ
 ٸ  μ ؼ ߴܵǾ ȵȴ. κ CPU 
 ̸ Ư ɾ , ĳõ   ޸𸮸 
̿Ͽ    ִ. 

 ϰ ִ μ ڵ Ӱ    
 ҽ 0 ǰ Ѵ.  ˻ϸ   ִ  
   0    ְ, ó  μ ̸ 
1 ϰ Ӱ   ̴. 


11.6 (Semaphore) 

 ڵ峪 ڷᱸ Ӱ豸 ȣϴµ ȴ. 丮
 Ÿ VFS inode  Ӱ ڷῡ ϴ ,  μ 
ٸ   ư Ŀ ڵ忡 ؼ ̷.  μ 
ϰ ִ ̷ ߿ ڷᱸ ٸ μ ĥ  ְ 
ϴ  ſ ϴ. ̷   ޼  ִ   Ӱ
ڷῡ ϴ    ϴ  , ̴ ״ 
ý ȿ   ܼ  ̴.   ÿ 
 μ ڵ峪  Ӱ豸   ֵ 
 Ѵ.    Ϸ ٸ  μ   
  ٸ  ̴. ϰ Ǵ μ ߴܵ
, ý ٸ μ     ִ. 

 semaphore ڷᱸ     ִ . 

     īƮ(count) :  ׸  ڿ Ϸ ϴ μ
        Ѵ.   ڿ 밡ϴٴ  ǹ
       Ѵ.  Ǵ 0 μ װ Ǳ⸦ ٸ 
       ִٴ  ǹѴ. ʱⰪ 1 ִ    ÿ  
       μ  ڿ   ִٴ  Ѵ. μ
        ڿ  ϸ īƮ 1 ҽŰ, ڿ  
        īƮ 1 Ų. 

     (waking) :  ڿ ٸ ִ μ ̸,  
       ڿ     μ ̱⵵ ϴ. 

     ť(wait queue) : μ  ڿ ٸ  ڿ 
       ť . 

     (lock) : waking ׸   ϴ ̴.

 ʱ īƮ 1̶   , ó  ϴ μ 
    ˰, 1 ҽ 0 .  μ 
   ȣǴ, ڵ峪 ڿ Ӱκ ""ϰ  
ȴ. μ Ӱ  Ǹ  īƮ 
Ų.  ּ  Ӱ ϰ ϴ ٸ μ
 ̴.    (  ̱⵵ ϴ)
  ȿ ϵ Ǿ . 

 ٸ μ ϰ ִ Ӱ   μ 
  ,  μ  īƮ 1 ҽŲ.  ̹ īƮ 
(-1)̹Ƿ μ Ӱ  Ѵ.   
ϰ ִ μ    ٷ Ѵ. 
 ٸ μ , Ӱ ϰ ִ μ
 Ӱ   ̸ 쵵  Ѵ. ٸ μ 
ڽ  ִ ť ߰ϰ,   鼭  waking ׸
   ˻ϰ, waking 0 ƴ    췯 ȣ
ϴ  ݺѴ . 

Ӱ ڴ   īƮ Űµ,    0 
۰ų    ڿ ٸ μ ִٴ ̴.
 ּ   īƮ ٽ ʱⰪ 1 Ǿ, 
̻ ʿ    ̴. ϴ μ waking ī͸
Ű,  ť  ִ  μ . 
ٸ μ   waking īʹ   1 Ǿ  
̰,  μ  Ӱ   ְ ȴ.  
 waking ī͸ 0 ҽŰ, ڽ ۾ ϰ ȴ.
 waking ׸     ׸ ̿ 
  ȣȴ. 


 : ȣ, ɸ
 : ȣ

=====================================================================



12 

 (Modules)



<< 忡  Ŀ   ý۰ Լ ڽ ʿ 
  Ҷ  εϴ  Ѵ.>>

 (monolithic) Ŀ̴.  Ŀ   ҵ
ڽ  ڷᱸ Լ鿡    ִ ϳ Ŵ 
α׷̴. ü  ٸ δ Ŀ   κ
    ɰ,  ̿   Ŀ 
Ǵ ũĿ(micro-kernel)  ִ. ̴ ð ҸǴ 
μ ƴ ȯ  μ Ͽ ο Ʈ Ŀο
߰  ְ Ѵ. 
 ڰ NCR 810 SCSI ̹ Ϸ ϴµ ̰ 
Ŀο ԵǾ  ʴٰ . ׷ Ŀ  ٲٰ ٽ
ؾ NCR 810 SCSI   ְ  ̴. ׷ ⿡
ٸ  ִ.   ü ϴ Ʈ ʿ 
   ε Ǵ ε  ְ Ѵ.   ý
 õ  Ŀο  ũ  ִ ڵ ̴.
  ̻ ʿ   Ŀΰ  ϰ 
 ִ.  Ŀ  ̽ ̹, Ʈ ̹
 Ͻý   ̽ ̹(pseudo device driver)̴.

ڴ insmod rmmod   Ŀ  Ȯϰ 
ε Ǵ ε带   , Ǵ Ŀ ڽ ڽ ʿ    
Ŀ (kerneld)  ε/ε    䱸  ִ. 
ʿ   ڵ带  εϴ  Ŀ ũ⸦ ּȭ  
ְ, Ŀ ſ  ϰ   ־ ŷ̴. ڰ ϴ 
 Ŀ  ϰ Ͽ ũⰡ ܿ 406 Kbyte ۿ 
 ʴ´.  VFAT  ý   ̹Ƿ,  
VFAT Ƽ Ʈ    Ŀ VFAT  ý 
ڵ ø ߴ.  ׸  VFAT Ƽ Ʈ ϸ 
ý ̻ VFAT  ý  ʿ ʴٴ  ˾
 ýۿ ϵ ߴ.   ο Ŀ ڵ带 ٽ 
ϰ Ŀ  ʰ ׽Ʈ غ   ϴ.
 ƹ 񰡵   ƴ, Ŀ  Ͽ ɰ
޸𸮿 ణ ذ  ̴. 
̰ ε  ֵ  ؾϴ ణ ڵ尡 ְ, 
 ڷᱸ ޸𸮸  ϱ ̴.  Ŀ ڿ 
   ܰ踦 ľ ϹǷ  ȿ    
ȴ.
 
ε   ٸ  Ŀ ڵó Ŀ  κ ȴ.
 Ŀ ڵ Ȱ Ѱ å . ٸ ϸ, 
Ŀ   Ŀ ڵ峪 ̽ ̹ó Ŀ ߸ 
 ִٴ ̴. 

 ڽ ʿ   Ŀ ڿ   , װ
 ִ ã  ־ Ѵ.   Ŀ ޸𸮸 Ҵϴ
Լ kmalloc() ȣؾ Ѵٰ .    ޸
  ġ  kmalloc() ִ 𸣹Ƿ,  ε  Ŀ
     ֵ kmalloc()   ־ 
Ѵ. Ŀ Ŀ  ڿ  Ŀ ɺ ̺(symbol 
table) ϸ, ̸ ̿  ε  ̵ ڿ  
 ذ  ִ. 
   ٸ  񽺸 ʿ ϴ ,  
 ׾  ֵ Ѵ.  , VFAT  ý  FAT  
ý  񽺸 ʿ Ѵ. ̴ VFAT  ý FAT 
ý ټ Ȯ ̱  ̴. ̷   ٸ 
ϴ 񽺳 ڿ ʿ ϴ ,  Ŀ ü 
 ڿ ʿ ϴ  ſ ϴ.  ⼭ ʿ ϴ 
񽺰 ٸ,  ε ⿡ ִ  ̴.   ε
 , Ŀ  εǴ ⿡ ܺη ִ ڿ ɺ 
 Ŀ ɺ ̺ ߰Ѵ. ̴  εǴ  ̹ 
ε  񽺸 ̿  ֵ ϱ  ̴.  

 εϷ   Ŀ   ǰ ʰ ִ ˾
 ϸ, ⿡ ڽ εǷ Ѵٴ  ˷  ־ 
Ѵ. ̷ ؼ  Ŀο ŵ , ڽ Ҵ Ŀ 
޸𸮳 ͷƮ  ý ڿ   ִ.  ε
 Ŀ  Ŀ ɺ ̺ ߰  ɺ  Ѵ. 

ε  ߸  ̾ ü Ʈ ɼ 
, ٸ  ɼ ִ.   ϰ ִ Ŀκ 
 ̳       εϷ Ѵٸ 
 ɱ?  Ŀ ƾ ȣ  ߸ ڸ Ѱشٸ 
    ̴. Ŀ  ε    ˻
 Ͽ ̷     ִ . 


12.1  εϱ

Ŀ  εϴ  ΰ ִ. ϳ insmod  
Ͽ   Ŀο ߰ϴ ̴. ι° ̺  ȶ
   ʿ   εϴ , ̸ 䱸 ε
(demand loading)̶ Ѵ. Ŀ   ʿ Ѵٴ  
߰ϸ (  ڰ Ŀο   Ͻý Ʈ  
), Ŀ Ŀ (kerneld) ´  ε϶ 䱸Ѵ.

Ŀ      ֱ   
μ̴.  μ  ý   Ͽ, Ŀΰ 
μ (IPC) ä ϳ .   Ŀ kerneld
 ۾ ûϱ  ޽ µ Ѵ. kerneld 
ֵ  Ŀ  εϰ εϴ , ʿ  
  PPP  ϰų, ʿ   ̸ ݴ  
ٸ ۾   ִ ɷµ ִ. kerneld   ̷ ϵ ϴ
 ƴ϶, ̷  ϱ  ʿ α׷(insmod  ) 
Ѵ. kerneld  Ŀ 븮̸, Ŀ ٸ  
층Ѵ. 



                 module                        module
module_list  +------------+                +------------+
------------>| next       |--------------->| next       |
             +------------+                +------------+
             | ref        |            +-->| ref        |          
             +------------+            |   +------------+          
             | symtab     |---------+  |   | symtab     |---------+
             +------------+         |  |   +------------+         |
             | name       | "fat"   |  |   | name       | "vfat"  |
             +------------+         |  |   +------------+         |
             | size       |         |  |   | size       |         |
             +------------+         |  |   +------------+         |
             | addr       |         |  |   | addr       |         |
             +------------+         |  |   +------------+         |
             | stste      |         |  |   | stste      |         |
             +------------+         |  |   +------------+         |
             | *cleanup() |         |  |   | *cleanup() |         |
             +------------+         |  |   +------------+         |
                                    |  |                          |
                  +-----------------+  |        +-----------------+
                  |                    |        |                  
                  |     symbol_table   |        |     symbol_table 
                  |    +------------+  |        |    +------------+
                  +--->| size       |  |        +--->| size       |
                       +------------+  |             +------------+
                       | n symbols  |  |             | n symbols  |
                       +------------+  |             +------------+
                       | n_refs     |  |             | n_refs     |
                       +------------+  |             +------------+
                       |            |  |             |            |
                       |            |  |             |            |
                       | symbols    |  |             | symbols    |
                       |            |  |             |            |
                       |            |  |             |            |
                       +------------+  |             +------------+
                       | references |--+             | references |
                       +------------+                +------------+


               ׸ 12.1 : The List of Kernel Modules



insmod α׷ ڽ εؾ ϴ û Ŀ  ã  
־ Ѵ. 䱸 εϴ Ŀ   
/lib/modules/kernel-version  ִ. 
Ŀ  ýۿ ִ ٸ α׷ ϸ ũ Ʈ 
̶  , ġ ̹ ũǾ ִٴ   
ٸ. , Ư  ּҿ ϵ ũǾ  ʴٴ ̴. 
 ̹ a.out ̳ ELF  Ʈ   ִ. 
insmod Ŀ ͽƮ(export)ϴ ɺ ã  Ư ý 
 Ѵ. 
Ŀ ͽƮ ɺ ɺ ̸  װ (ɺ ּҰ) 
  ִ. 
Ŀ ͽƮ ɺ ̺, Ŀ ϴ   
module_list Ͱ Ű ִ, ù° module  ڷᱸ  
ִ. Ŀο ִ  ɺ ⿡ ͽƮ Ǵ  ƴϴ. 
 Ŀ ϰ ũ  Ư  ɺ  ̺ 
. ̹ ý Ư  ͷƮ     
ȣؾ ϴ Ŀηƾ "request_irq" ɺ  . ڰ
 ִ  Ŀο ̰  0x0010CD30̴. Ŀ ͽƮ
ɺ  /proc/ksyms 캸ų ksyms α׷ Ͽ 
 ִ. ksyms α׷ ̿Ͽ Ŀο ִ  ͽƮ ɺ 
  ְ,  ε  ͽƮϴ ɺ ϸ   
ִ. insmod  ڽ  ޸  о̰,  
ذ  Ŀ ƾ ڿ   Ŀο ִ ͽƮ 
ɺ Ͽ ߾ش. ̷ ġ ϴ  ޸𸮻 ִ
 ̹ ϴ · ̷. insmod ⿡ ִ ش
ϴ ġ  ɺ ּҸ ִ´. 

insmod  ͽƮ Ŀ ɺ    ذϿٸ,
Ư ý  ̿Ͽ Ŀο ο Ŀ   ִ 
  ִ ´. Ŀ  module ڷᱸ,   
   ִ ũ  Ŀ ޸𸮸 Ҵϰ,  ü 
Ŀ  Ʈ  ִ´.   ʱȭ ʾҴٰ 
(UNINITIALIZED) ǥõȴ. ׸ 12.1 FAT  VFAT   Ŀο 
ε  Ŀ  Ʈ ش.  ׸ Ÿ ʾ
, Ʈ ִ ù°   (pseudo  module)μ 
Ŀ  ͽƮ ɺ ̺   Ѵ. 
ε Ŀ ϰ ׵ 踦   lsmod ɾ 
 ȴ. lsmod   Ŀ module ڷᱸ Ʈκ 
 /proc/modules  ٲپ ִ  ̴. Ŀ 
   Ҵ ޸𸮴 insmod ̿   ֵ insmod 
μ ּҰ  ȴ. insmod  Ҵ 
縦 ϰ ̸ ġϿ, Ҵ Ŀ    ֵ
Ѵ. ̴   ٸ  ýۿ Ȱ ּҿ ε
ǰų ι   ּҿ εȴٴ    ݵ 
ʿϴ. ٽ ѹ, ̷ ġϴ   ̹ ùٸ 
ּҷ ϴ  Ѵ. 

   Ŀο ɺ ͽƮϱ , insmod ̷
ͽƮ ̹ ̺ .  Ŀ   ʱȭ
  ƾ  ־ Ѵ.   ɺ ͽƮ  
, insmod   ּҸ ˾Ƴ Ŀο Ѱܾ Ѵ.   
 Ǿٸ, insmod   ʱȭ غ Ǿ ְ, Ư 
ý  ҷ Ŀο  ʱȭ ƾ  ƾ ּҸ 
ѱ. 

  Ŀο ߰Ǹ, Ŀ ɺ  ϰ   
ϴ  ؾ Ѵ. ڽſ ϴ ٸ   ,
ڽ module ڷᱸ Ͱ Ű ִ ڽ ɺ ̺ 
 Ǵ  Ͽ Ѵ. ׸ 12.1 VFAT  ý 
 FAT  ý ⿡ ϰ  ش.  FAT 
 VFAT ⿡   ϰ ִ.   VFAT  
ε  ߰ ̴. Ŀ  ʱȭ  ƾ θ, ̰
ϸ  ġ  ϰ ȴ.   ƾ ּҴ 
module ڷᱸ Ǹ,  ε  Ŀο  ȣȴ.
  ´ (RUNNING) ȴ. 


12.2  εϱ

 rmmod  Ͽ   , 䱸 ε  
̻    kerneld  ýۿ ڵ  ŵȴ.
kerneld Ÿ̸Ӱ  , kerneld  ʴ 䱸 ε
   ýۿ ϴ ý  θ. Ÿ̸  
kerneld   Ǵµ,.   ýۿ 180ʸ ˻
ϵ Ǿ ִ. ׷,   ISO9660 Ͻý  
Ǿ ִ  ISO9660 CDROM Ʈߴٸ, CDROM 𸶿Ʈ 
  ISO9660  Ŀο ŵȴ. 

 Ŀ ٸ κ ڽſ ϰ   ε  
.  , ϳ ̻ VFAT  ý ƮǾ ִ 
 VFAT  ε  . 
lsmod  ܺ, ⿡ ڰ  پ    
 ̴.   : 

Module : #pages: Used by 

msdos 5 1 

vfat 4 1 (autoclean) 

fat 6 [vfat msdos] 2 (autoclean) 

īƮ  ⿡ ϰ ִ Ŀ  ̴.  , 
vfat msdos  fat ⿡ ϰ Ƿ īƮ 2 ȴ.
vfat msdos    1  ִµ  ̰ Ʈ 
ý̴.  ٸ VFAT  ý о̸, vfat  
īƮ 2  ̴.  īƮ   ̹ ù° longword
 ȴ. 

 ׸񿡴  AUTOCLEAN VISITED ÷װ  ִ.   ÷״ 
䱸 ε ⿡ ȴ. ̵   ڵ 𵵵  
ִٴ  ý   ֵ AUTOCLEAN̶ ǥõȴ. VISITED 
÷״  ϳ ̻ ٸ ý ҿ  ǰ 
 Ѵ. ̴  ٸ Ұ      
ȴ. kerneld ýۿ  ʰ ִ 䱸 ε  
϶ û , ý ڽſ ִ     ׷ 
ĺ 󳽴. ̴  AUTOCLEAN̶ ǥõǾ ְ RUNNING 
¿ ִ ⸸ ã´.   ĺ VISITED ÷װ Ǿ
 ʴٸ   ϰ, ׷ ʴٸ VISITED ÷׸ 
ý ٸ   캻. 

  ε ϴٰ Ѵٸ,   Ҵ Ŀ ڿ
  ֵ   ƾ ȣȴ.  ڷᱸ  
DELETED ǥõǰ, Ŀ  Ʈ  ´.   
ϰ ִ  ٸ   ̻ ڽſ  ʴٴ  Ÿ
  ȴ.   ʿ ߴ  Ŀ ޸𸮴 
ȴ. 


 : ȣ
 : ȣ

=====================================================================



13 

μ (Processors)



<<  μ ȴ.   ̵  
  Ѵ.>>


13.1 X86 

TBD 


13.2 ARM

ARM μ   32Ʈ RISC Űó̴. ARM ̵ 
ȭ, PDA(Personal Data Assistant)  Ӻ(embedded) ġ
θ ǰ ִ. ARM 31 32Ʈ ͸    
忡 16   ִ. ɾ ܼ load store 
(޸𸮿  , ϰ,  ޸𸮿 Ѵ) ַ
Ǿ ִ.  Ѱ ִ Ư¡    Ǻ ̶
̴. 
     ׽Ʈ , ٽ   ׽Ʈ 
, ׽Ʈ   ϴ  Ǻ    ִ.
Ǵٸ ִ Ư¡  ޸𸮿 εϸ鼭 /Ʈ 
ÿ     ִٴ ̴. 
ARM  , ⼭ SWI(Ʈ ͷƮ)   
ִ ý 带 Ͽ  忡 Ѵ. 

ARM ռ  ٽ̸, ARM  μ  
ʴ´. ſ ARM Ʈ(̳ LSI ) ARM Űó Ǹ
 Ѵ.   ٸ μ μ ̽  
 ϰ յ   ֵ ϸ,   ޸  
(memory management unit, MMU)   ִ. ̵ ܼ 
޸ ȣ å    ̸. 


13.3  AXP μ 

 AXP Űó 64Ʈ load/store RISC Űóμ ӵ ο
ΰ Ǿ.  ʹ 64Ʈ, 32  Ϳ 
32 Ǽ Ͱ ִ. 31  Ϳ 31 Ǽ 
 null    ȴ. 
̵ ͸  0 ƿ, ̵鿡    ƹ 
ȿ .   32Ʈ̸ ޸  б ƴϸ 
̴.  Űó  Űó     
Ѵ. 

⿡ ޸𸮿      ϴ  .
 Ÿ ó Ͱ ̷.  ޸ ī
 Ű   Ϳ о   ϰ
޸𸮿 ؾ Ѵ. ɵ鰣 ȣۿ    
 ޸𸮿 , ٸ   ͳ ޸𸮿 о 
 ̷.  AXP Ѱ ִ Ư¡,   
 ׽Ʈϴ Ͱ  ÷׸ ߻Ű  , 
  Ϳ Ǵ  ƴ϶ 3 Ϳ  
ִ  ִٴ ̴. ó ⿡ ̻  Ϳ
  ν  Ŭ     ִ 
 Ⱑ  .    ͸ ϴ 
 ϳ  Ͱ  ó   θ ٸ
ʿ䰡 . ޸𸮿     Ͱ,   
 ͵   ÿ ϴµ  ȴ. 

 AXP Űó PALcode(Ư Űó ̺귯 ڵ) Ҹ
 ƾ Ѵ. PALcode ü,  AXP Űó 
 CPU , ý ϵ  ٸ. ̵ ƾ ؽ
Ʈ Ī(context switching), ͷƮ, (exception), ޸  
 ü Ƽ긦 Ѵ. ̵ ƾ ϵ 
CALL_PAL ɿ  ȣ  ִ. PALcode  μ 
   ϵ ɿ    ϱ , 
 ణ Ȯ  ǥ  AXP  ۼȴ. PALcode
 PALmode ȴ.    ý ̺Ʈ ߻ 
Ű PALcode  ý ϵ   Ϸϵ ϴ
Ư ̴. 


 : ɸ
 : ȣ

=====================================================================



14 

 Ŀ ҽ (The Linux Kernel Sources)



<<  Ư Ŀ Լ ã ؼ  Ŀ ҽ 𼭺 
  ؾ ϴ ̾߱Ѵ.>>

 å C    䱸   Ŀ  
  Ϸ  Ŀ ҽ  ִ   . ٽ
ϸ, Ŀ ҽ α׷  ü ɵ ϴµ
־ ȿ ̴.   Ŀ ҽ ݿ  Ѵ.  
Ŀ ҽ  迭Ǿ ִ, Ư ڵ带 ã  
ؾ ϴ Ѵ.


  Ŀ ҽ   ִ°

ֿ  ǵ(Craftworks, Debian, Slackware, Red Hat ) 
  Ŀ ҽ ϰ ִ. Ϲ   
ýۿ ġ  Ŀ  ҽ ڵ带 Ͽ  
̴.   ݻ, ҽ  ǹǷ  ýۿ
ġ     ǰ  . ֽ  ҽ α׷ 
η B ޵  Ʈ   ִ. ̵ 
ftp://ftp.cs.helsinki.fi ̸ ׸ó ϴ ٸ  Ʈ
   ִ. Ű  Ʈ  ֽ  ҽ 
, MIT Sunsite  Ʈ  ֽ  ҽ 
Ѵ. 

 Ʈ   ٰ ϴ,   ֿ  Ʈ
ִ  CD ROM · ſ    ϰ Ƿ,
̸ ̿ϸ  ̴. 1⿡ ׹ Ȥ Ŵ  ׷̵
 ִ   񽺵 ִ.    ׷쵵 ҽ 
ϴµ  ̴ . 

 Ŀ  ´  ſ ܼϴ. ¦   Ŀ( ڸ 
2.0.30) ̰ ǥ ̰, Ȧ  Ŀ( ڸ 
2.1.42)  ߿ Ŀ̴. å  2.0.30 ҽ Ʈ 
  ϰ ִ. ߿ Ŀ  ֽ ɵ  ϰ 
  ֽ ̹鵵   Ѵ.  Ŀ Ҿ 
 ְ, ̴ ڰ ٶ ʴ ̰, ֽ  Ŀ 
   ü ־ ߿ ̴. ׷ ü ü 
  ׽Ʈ   ִ.  ǰ  Ŀ ƴ  Ẹ
   ý ü صδ  ٴ  ϱ ٶ. 

Ŀ ҽ ٲ ͵ ġ(patch) Ϸ  ȴ. patch 
׷ ҽ ϵ鿡  ͵ ϴµ ȴ. , 
 2.0.29 Ŀ ҽ  ְ, ̸ 2.0.30 ҽ ٲٰ ʹ
, 2.0.30 ġ   ؼ ġ ҽ Ʈ ϸ ȴ. 

$ cd /usr/src/inux

$ patch -p1 < patch-2.0.30

̴ ü ҽ Ʈ  ʿ䰡 ,     ϴ 
  ϴ. 
Ŀ ġ ϱ  (̴ ̴) 
http://www.linuxhq.com  Ʈ̴ . 


Ŀ ҽ  迭Ǿ ִ°

ҽ Ʈ  /usr/src/linux   丮 ִ. 

     arch : arch 丮  ŰĿ  Ŀ ڵ带
       ϰ ִ. ⿡ 丮  ִµ,  
       ϴ Űĺ ִ.   i386, alpha ̸ 
       丮 Ѵ.

     include : include 丮 Ŀ ڵ带 ϴµ ʿ 
        Ŭ(include) ϵ κ  ִ. ⿡
       ϴ Űĺ ϳ 丮 ִ. /include/asm 
       丮  ŰĿ ʿ  丮 ( 
       , include/asm-i386) Ʈ ũǾ ִ. Űĸ ٸ
        ٲٷ Ŀ makefile ϰ  Ŀ ȯ漳
       α׷ ƿ; Ѵ. 

     init :  丮 Ŀ ʱȭ ڵ带  , Ŀ
        ϴ  ϱ⿡  ̴. 

     mm :  丮  ޸  ڵ带  ִ. Ű
        ޸  ڵ arch/*/mm/ Ʒ ִ.  ,
       arch/i386/mm/fault.c    ִ. 

     drivers :  ý ̽ ̹  丮 ִ.
       ̵ ̽ ̹   ȭ  Ǹ.  
         ̽ ̹ block ִ.

     ipc :  丮 Ŀ μ  ڵ带  ִ.

     modules : ̴ ܼ   ϱ  丮̴.

     fs :   ý ڵ带  ִ.  ýۺ ϳ 
       丮 ȭȴ.   vfat, ext2  丮
        ִ.

     kernel :  Ŀ ڵ尡  ִ. Ű  Ŀ ڵ
        arch/*/kernel ִ. 

     net : Ŀ Ʈŷ ڵ尡  ִ. 

     lib :  丮 Ŀ ̺귯 ڵ带  ִ. Ű
         ̺귯 ڵ arch/*/lib/ ִ. 

     scripts :  丮 Ŀ ϴµ  Ǵ ũƮ(
         awk tlk ũƮ)  ִ. 


𼭺   ̰

 Ŀó ϰ  α׷ 鿩ٺ⿡  
 ִ. ̴ Ƿ  Ŀٶ ó   ʴ ̱⵵ ϴ.
Ŀ  κ   õ ٸ  ϵ Եǰ, 
ʾ   ã ߴ ؾ ȴ.    
  Ҷ ҽ Ʈ  °  Ʈ  
̴.

ý ۰ ʱȭ

  ýۿ, Ŀ loadlin.exe LILO  Ŀ 
޸𸮷 о  Ŀο  Ѱν Ѵ.   
 κп ؼ arch/i386/kernel/-head.S   ٶ. head.S  
Ű  ¾   init/main.c ִ main() ƾ 
Ѵ.

޸ 

 ڵ κ mm , Ű   ڵ arch/*/mm 
ִ.  Ʈ ó ڵ mm/memory.c ְ, ޸ ΰ 
 ĳ ڵ mm/filemap.c ִ.  ĳô  mm/buffer.c,  
 ĳô mm/swap_state.c mm/-swapfile.c Ǿ ִ. 

Ŀ

 Ϲ  ڵ kernel ְ, Ű  ڵ
 arch/*/kernel ִ. 췯 kernel/sched.c ְ, fork ڵ
  kernel/fork.c ִ. Ϲݺ ڵ鷯 ڵ 
include/linux/interrupt.h ִ. task_struct ڷᱸ 
include/linux/sched.h ã   ̴.

PCI

PCI   ̹ drivers/pci/pci.c ְ, ý  ǵ
 include/-linux/pci.h Ǿ ִ.  Űĵ Ư PCI BIOS 
ڵ带  ִµ,  PCI BIOS ڵ 
arch/alpha/kernel/bios32.c ִ.

μ 

̰  ipc  ִ.  ý V IPC Ʈ  ipc_perm 
ڷᱸ  ְ, include/linux/ipc.h ã  ִ. ý
V ޽ ipc/msg.c,  ޸𸮴 ipc/shm.c,  
ipc/sem.c Ǿ ִ.  ipc/pipe.c Ǿ ִ. 

ͷƮ ó

Ŀ ͷƮ ó ڵ κ  ũμ ( ÷
) ̴.  ͷƮ ó ڵ arch/i386/kernel/irq.c  
ְ, Ǵ include/asm-i386/irq.h Ǿ ִ.̽ ̹

 Ŀ ҽ ڵ κ ̽  ̹ ִ.  
 ̽ ̹ ҽ drivers , ̵ ġ  
ȭ ȴ.

     /block :  ̽ ̹.   IDE ̽ ̹
        ide.c ִ.  ġ   ý   
       ,  ʱȭǴ  ʹٸ drivers/block/genhd.c
        ִ device_setup()  ٶ. ̴ ϵ ũ ʱ
       ȭϴ  ƴ϶, Ʈ nfs  ýۿ ƮϷ 
       Ѵٸ Ʈ ʱȭѴ.  ġ IDE SCSI  ġ
        Եȴ.

     /char : ttys, ø Ʈ 콺   ġ  
       ִ.

     /cdrom :   CDROM ڵ尡   ִ. Ư CDROM 
       ġ(Soundblaster CDROM ) ⼭ ã  ִ. IDE CDROM
       ̹ drivers/block ִ ide-cd.c ְ, SCSI CDROM 
       ̹ drivers/scsi ִ scsi.c ִٴ  ϱ 
       ٶ.

     /pci : ⿡ PCI  ̹ ҽ ִ. PCI ý
         εǰ ʱȭǴ   ̴.  AXP PCI
       Ȯ ڵ arch/alpha/kernel/bios32.c ְ, ̴  
       ġ ִ.

     /scsi :  SCSI ڵ Բ  ϴ  SCSI ġ
        ̹ ִ ̴. 

     /net : Ʈ ġ ̽ ̹   ִ ̴. 
       DECChip 21040 PCI ̴ ̹ tulip.c ִ.

     /sound :   ī ̹ ִ ̴.

 ý

EXT2  ý ҽ fs/ext2/ 丮 ְ ڷᱸ 
include/linux/-ext2_fs.h, ext2_fs_i.h, ext2_fs_sb.h ǵǾ ִ.
  ý ڷᱸ include/linux/fs.h ǵǾ ְ, ڵ
 fs/*  ִ.  ĳÿ update Ŀ  fs/buffer.c 
Ǿ ִ.

Ʈ

Ʈŷ ڵ net ְ, Ŭ(include) ϵ κ 
include/net ִ. 
BSD   ڵ net/socket.c  ְ, IP   4  INET   ڵ 
inet/ipv4/-af_inet.c ִ. Ϲ   ڵ (sk_buff  
ó ƾ Ͽ) net/core/, TCP/IP Ʈŷ ڵ net/ipv4/ 
ִ. Ʈũ ̽ ̹ drivers/net ִ. 



Ŀ  ڵ Ϻκ Ŀο, Ϻκ modules Ű ִ. 
Ŀ ڵ  kernel/modules.c ְ, ڷᱸ Ŀ 
kerneld ޽ include/-linux/module.h include/linux/kerneld.h 
ִ. ELF Ʈ    include/linux/elf.h   ִ. 

 : ȣ, ̴, , ɸ
 : ȣ


=====================================================================


 (Glossary)



 : (Argument) Լ ƾ ó ڰ ޵ȴ. 

ARP : Address Resolution Protocol, ּ  . IP ּҸ 
   ϵ ּҷ ȯϴ  Ѵ. 

ƽŰ (ASCII) : American Standard Code for Information Interchange, 
  ȯ   ǥ ڵ. ĺ  ڴ 8Ʈ ڵ 
  ǥѴ. ƽŰ ڵ ϴ    Ǵ ڵ
  ̴. 

Ʈ (Bit) : 0̳ 1( ¿  ) Ÿ  Ʈ 
  

Ϲݺ ڵ鷯 (Bottom Half Handler) : Ŀ ο ִ ť  ۾
   ϴ ڵ鷯 

Ʈ (Byte) : 8 Ʈ Ͱ 𿩼 Ʈ ̷. 

C :  α׷  .  Ŀ κ C Ǿ ִ.

CISC : Complex Instruction Set Computer,  ɾ Ʈ ǻ. 
  RISC ݴ ,     ɾ ϴ 
  μ̴. X86  CISC ̴. 

CPU : Central Processing Unit, ߾ ó ġ. ǻ ó̴. 
     ũμ, μ  

ڷᱸ (Data Structure) :  ׸ ̷, ޸𸮻 ִ 
  ڷ .

̽ ̹ (Device Driver) : Ư ġ ϴ Ʈ. 
   , NCR 810 ̽ ̹ NCR 810 SCSI ġ 
  Ѵ. 

DMA : Direct Memory Access,  ޸ 

ELF : Executable and Linkable Format, డϰ ũ  ִ 
  .  Ʈ   н ý (Unix System 
  Laboritories) ߵǾ,    Ϲ 
   ǰ ִ. 

EIDE : Extended IDE, Ȯ IDE

 ̹ (Executable Image) :  ɰ ͸  ִ 
  ȭ .   μ  ޸𸮿 εǾ 
    ִ. α׷ 

Լ (Function) :    ϴ Ʈ Ϻκ.  
   ΰ  ū  ִ Լ  ̴. 

IDE : Integrated Disk Electronics,  ũ ġ 

̹ (Image) :  ̹ . 

IP : Internet Protocol, ͳ  

IPC : Interprocess Communication, μ  

̽ (Interface) : ƾ θ ڷᱸ ϴ ǥ . 
     ڵ   ̽ Ư ڷᱸ ϰ
  ִ ƾ ǥ  ִ.  VFS ̽  
  ̴. 

IRQ : Interrupt Request Queue, ͷ 䱸 ť

ISA : Industry Standard Architecture,  ǥ .   
  Ǳ , ÷ ũ ̺갰 ý Ҹ  
  ǥ   ̴̽. 

Ŀ  (Kernel Module) :  ý̳ ̽ ̹ 
   ε  ִ Ŀ Լ

ųιƮ (Kilobyte) : Kbyte  1000 Ʈ Ѵ. 

ްƮ (Megabyte) : Mbyte  1000000 Ʈ Ѵ. 

ũμ(Microprocessor) : е  CPU. κ  
  CPU ũμ̴. 

 (Module) :  ɾ C ޾ · CPU 
    . 

Ʈ  (Object File) :  ̹  , ٸ 
  Ʈ ̳ ̺귯 ũ ,  ڵ 
    ִ .  

 (Page) :  ޸𸮴  ũ  ҵȴ. 

 (Pointer) : ޸𸮻 ٸ ġ ּҸ  ִ ޸
    ġ ()

μ (Process) : α׷   ִ  ü̴. μ
    α׷   ִ. 

μ (Processor) : CPU  ũμ  ̴. 

PCI : Peripheral Component Interconnect, ֺġ ȣ. ǻ 
  ý ֺġ ϴ   ǥ. 

ֺġ (Peripheral) : ýۿ ִ CPU ϴ  
  . IDE Ʈѷ Ĩ   ̴. 

α׷ (Program) : "hello world" ϴ ó,  ۾ 
  ϴ յ CPU ɾ .  ̹ .

 (Protocol) :  ȣ ϴ   μ, 
  Ʈ  ̿ α׷ ͸ ϴµ ϴ Ʈ
   ̴. 

 (Register) :  ɾ ϴ  Ǵ, Ĩ  
   ġ. 

  (Register File) : μ   . 

RISC : Reduced Instruction Set Computer,  ɾ Ʈ ǻ. 
  CISC ݴ ,  ɾ  ,  ɾ
    길 ϴ μ̴. ARM  μ Ѵ 
  RISC  Ǿ ִ. 

ƾ (Routine) : Լϰ ,  ϰ ϸ ƾ  
    ʴ´. 

SCSI : Small Computer Systems Interface,  ǻ ý 
  ̽ 

 (Shell) : ü  ̿ ̽  ִ 
  ׷. ɽ(command shell)̶ Ѵ.   
   ϴ  bash ̴. 

SMP : Symmetrical Multiprocessing, Ī Ƽμ.  ̻ 
  μ  ϰ  ý. 

 (Socket) : Ʈ    Ÿ.  BSD  
  ̽ Ѵ. 

Ʈ (Software) : CPU ɾ( C ޾ ) 
  . 밳 α׷  ǹ̸ ´. 

ý V(System V) : 1983⿡  н . ٵ System 
  V IPC Ŀ ϰ ִ. 

TCP : Transmission Control Protocol,   .

۾ť (Task Queue) :  Ŀ ο  ϴµ ϴ 
  Ŀ.

UDP : User Datagram Protocol,  ͱ׷  

 ޸ (Virtual Memory) : ýۿ ִ  ޸ ũ⸦
   ũ ̰ ִ ϵ, Ʈ Ŀ.

=====================================================================

)  "hackers" (sic) ϰ ִµ, sic  ""  
     ǹ̷ ǽɳ  ״ ο   ǥ̴. (flyduck)

) HOWTO ״ 𰡸  ϸ Ǵ  ̴.
      HOWTO    ϸ, ̵  
     ϴ.

) Altair ڸ ĺ ̸ 츮 ߿켺̶ 
     Ѵ. (jhlee)

) IBM PC â⿡ ߴ ÷ ׷ ī (flyduck)

)  8086 CPU  1M Ʈ Ÿ  ִ 20Ʈ 巹
      忡 ϸ,  80386  CPU (Ƽ 
     Ͽ) 32Ʈ 巹 忡 4G Ʈ ޸𸮸   
      ó   8086  20Ʈ 巹 
      Ѵ. (flyduck)

) 486  ̽ ͺ 带 Ͽ Ŭ ӵ ִ 
     LED ޷ ־µ,  PC ͺ °   
       ̽ ޷ ʴ. (flyduck)

) ޸𸮸  ׼ϰ CPU Ŭ  ΰ, Ǵ ޸ 
     ׼ ϰ CPU Ŭ   ΰ ϴ 濡 
      Ÿ ã  Ѵ. (flyduck)

) Ŀ Ͷ  迭  ǹ̷ δ. (flyduck)

)   80386 ޸𸮸 4KB   ٷ , 
       ũ ϵ ϴ ũ⸦  ̴. 
     (flyduck)

) 4KB 212̹Ƿ   ּҸ Ÿµ 12Ʈ ʿ
     ϴ.  80385 CPU   ȣ 20Ʈ, ¿ 
     12Ʈ Ͽ  32Ʈ ּҰ  4GB ּҰ 
     ´. (flyduck)

)   ּҴ Physical PFN * PAGE_SIZE + offset̴. 
     (flyduck)

)    ϴ ũ ϰ  ۾ 
      ʴ  (ɸ)

) ̵   丮(page directory),  ߰ 
     丮(page middle directory),   ̺(page table)̶  
     ϸ,  pgd_t, pmd_t, pte_t Ÿ ǵǾ ִ. (flyduck)

 ) 򰥸Ե  ü (page) ü θ. 

 ) ⿡    .

)   ̷  Ʈ,     ̸  
     ȴ. (ɸ)

) Segmentation Fault. (flyduck)

)  ۿ min_free_pages   ִµ, ̴ Ŀ ʿ 
     ϴ° ٷ     ֵ,    
       Ϸ  ʵ Ѵ.    ýÿ  
     ȴ. (flyduck)

) vm_area_struct ڷᱸ ش  ޸    
        Լ鿡  Ͱ  ִ. ̰ NULL 
      ⺻  ,    ִٸ شϴ 
     Լ θ ȴ. swapout̳ swapin Լ ⿡ , 
       nopage굵 ⿡ Լ ͷ ִ. ⼭
      swapout 꿡  Ͱ ȴ. include/linux/mm.h 
     struct vm_area_struct, struct vm_operations_struct .
     (flyduck)

) տ  ٿ  μ õ ޸𸮸 Ÿ 
     mm_struct vm_area_struct  Ʈ Բ AVL Ʈ 
       ִ. AVL Ʈ ϴ  ణ 尡 
       Ʈ  óϱ ؼ ̸ ؾ Ѵ. 
     (flyduck)

)  swapout   vm_area_struct ڷᱸ ִ 
     vm_ops Ϳ(vm_operations_struct ü)  Ͱ  
     ִ. (flyduck)

)  ĳÿ ¹ٿ   Ͽ ִ  ޸𸮿 
     ִ  ޶ 쿡  ĳÿ   ֵ, 
     ù°  Ʈ ޸𸮷 ⸸ ϰ, ι°  
     Ʈ ߻   ĳÿ ϰ ȴ. (flyduck)

)   ּҴ Ŀο ϴ  ּҿ  ̶ 
     ϸ ȴ. (flyduck)

) ǽð̶ ǹ̴   ߻Ͽ  ̰  ð 
     ̳ óǾ Ѵٴ ̴.   ߿  ߻ϸ  
     ߿  ׸ΰ ̸  ð  óϴ ̴. ̸ 
      ǽð ó ϴ ü(real time operating system, 
     RTOS) 켱(priority) Ͽ,  μ ϰ 
     ִ 켱   μ ϸ ϴ  ߰ 
     ش μ ϰ Ǹ,  μ ǰų 켱
      ų   켱  μ  ʴ 
     ̻   μ ϰ ȴ. ̷  ־  
     ǽð μ Ϲ μ  Ǳ , ǽð 
     μ  μ ߴ ʰ,   켱 
     μ Ҵ ð  층 ǹǷ RTOS 
       . (flyduck)

 ) REVIEW NOTE : SWAPPING ´  ʴ   
      ߴ.

)  ٸų    ְ Ǳ ٸ ó 
      ڿ ٸ Ϲ ´ 밳 ͷƮ  
      ̴. ͷƮ Ǵ ´ Ͽ ޸𸮷 
       о̴ Ͱ  Ӱ  ġ ٸ
       ִ ̴. (flyduck)

)   Ʒ groups  ũ⿡  ѵȴ.   
      NGROUPS ǵǾ ִ. include/linux/sched.h  (flyduck)

) setuid passwd α׷ Ϲ ڰ Ͽ 
      root  ȹϿ /etc/passwd Ǵ /etc/shadow  
        ְԵ , ݴ (httpd) α׷ root 
      Ͽ nobody  ٲپ ٸ ý Ͽ 
       ϰ ϱ⵵ Ѵ. (flyduck)

)   ظ   ִ ̴.     
      층 Ѵٴ  ƴϴ. ڿ   μ 
       Ÿ ̽ ʰؼ ϸ,  μ ߴܽ 
      ٸ μ ϴ  층 Ѵ. ⼭ 
       ʴ´ٴ ǹ̴ ٷ ϴ Ȳ ߻Ͽ ߾ 
      ϴ 찡 ߻Ͽ ڹ CPU   ̻  
      Ÿ ̽  ȴٴ ̴.   Ŀ 
      忡 ̴. ̴ Ŀ ڵ尡 ԰ ʰ 
       ̴. ϴ ý  Ҹ ý  ڹ
       CPU   ̻ (schedule(), sleep_on(), 
      interruptible_sleep_on()  Լ ҷ 층 Ͼ 
       ʴ ̻), ý  ٸ μ  ߴܵ 
      ʴ´. (flyduck)

) 200ms 0.2ʷ CPU 忡  ª ð ƴϴ.  
      밳  μ Ǵ   I/OӸ ƴ϶, 
      Ͽ  д ̳, 
      ޸ ʵ  ũ ޸𸮷 о̴ ó ٷ
       ϴ 찡  ߻Ͽ  ð     
      ʴ. (flyduck)

) idle μ CPU   ƹ͵   ϴ 
      ̴. idle μ  ״ ƹϵ  ʰ, CPU 
         Ҹϴ  Ͽ Ѵ. (flyduck)

 )  غ, Ŀ    ִ κ̰,  ̸ 
      ѷ ΰ ִ  ̽ Ѵ. 

 ) REVIEW NOTE : μ ׷  

) ̷  ñ׳ ߻ߴ Ȯϴ  Ŀ 忡
      ̰, ñ׳ ڵ鷯  忡 Ǿ ϱ , 
      Ŀ 忡 ٷ ñ׳ ڵ鷯 θ   ߻Ѵ. 
      ̿   ٲپ ñ׳ ڵ鷯 θ ̰ 
        ġ ý   ó Ŀ  ٽ ƿ 
      ϴ   ̴. (flyduck)

)     ýۿ  ϴ  ƴ϶, 
      ޸   ޸   VFS inode ̸ 
      ϰ ϴ ̸, ̴  ӵ  Ѵ. 
      (flyduck)

) VFS inode f_op ׸ б, ⸦ Ͽ Լ õ 
        迭̸,    ׸ ִ Լ 
      ͸ θν ̷. ⼭  о̴  
      Ÿ file ڷᱸ  Ͽ д Լ  Ͱ 
      ƴ϶  о̴ ͸ Ű ϴ, ý 
      ݿ ־ ¥ f_op ׸ Լ ͸ ̿ϹǷ 
      ƹ ̰  ̴. ̰   file ڷᱸ 
      ־ , ̷   Ŀ  ̰ 
      ִ. (flyduck)

) task_struct   Ͽ õ  ڷᱸ  struct  files_struct
      files ׸  , files_struct struct file 
      *fd[NR_OPEN] ׸  ִ. 
       fd ε  ̸, fd ׸ μ 
       Ͽ    ִ. (flyduck)

) file ڷᱸ f_flags ׸ Ͽ õ ÷׸  
      ִµ, ⿡ O_NONBLOCK  Ǿ  ŷ  ʴ 
      ̴. ̴    , ioctl̳  fcntl 
      ý  ؼ ٲ  ִ. (flyduck)

)  ls | pr   Ѵٸ, 켱 mkfifo fifo (
      ̸ ٸ ص ȴ)     , ls 
      > fifo & pr < fifo ϸ ȴ. (flyduck)

) FIFO     Ͽ ϴ  
      ƴ϶ ޸𸮿   .  а   
       Ȱ  ϰ ȴ. 
      FIFO    ӽ÷ Ǵ ε  
      FIFO ̹  ִ ̹Ƿ   μ open(), 
      close() Լ Ͽ ó   Ƿ   
      ʾƵ   ִٴ ̴. (flyduck)

)  Ʈŷ ̾߱ϴ ̴.   ǻ 
       μ ̿    ְ  Ӹ ƴ϶ Ʈ 
      ִ ٸ ǻͿ ִ μ͵  ϰ Ѵ. 
        н  ϴ  (file 
      descriptor) Ͽ Ѵ.  socket() Լ θ  
      Ÿ  ڰ ƿ ̸  bind, listen, 
      connect, accept     , ϰ  
      read, write, close    ִ. (flyduck)

) Ű ƴ϶ οŰ ϴ  ipc_perm key ׸
       IPC_PRIVATE Ǵµ, ̸   ĺڸ ã 
       . οŰ ϴ IPC ü ü ȣ ؼ 
        ִ. (flyduck)

) ˻縦 ϰ ϴ ̿ ߴ Ǿ ٸ  Ǿµ 
      ⼭   ˻ϰ Ѵٸ, ٽ  ƿͼ 
      Ϸ   ̹  ٲ İ Ǿ  ߻ ̴. 
        ˻    ߴܵǾ ȵǸ, CPU 
      ϴ Ư ɾ ̿ϰų ü ڵ带 Ͽ 
      ȴ.  Ŀθ忡 ̹Ƿ   ߴ
       ʴ´ٰ ϰ Ϲ  óѴ. Ŀ ڵ忡 
        ˻ϴ Լ try_semop()̸,   
      ٲٴ Լ do_semop()̴. ̵ ipc/sem.c ִ. 
      (flyduck)

) ù° μ   0 ٲ Ŀ  
       ˻ܰ迡 ϹǷ    , 
      ù° μ   1 ٲ Ŀ ٸ ִ 
       ̸ ٲܼ ְ ȴ. ׷   ׻ 0 
      ũų  ȴ. (flyduck)

) ϳ  ü   迭(sem 迭) 
      , ý    Ϻθ ˻ϰ   ִ. 
      Ӱ   ʿϴ   ߿ ʿ 
      ϴ ͵鸸   ִ. (flyduck)

)   ϴ ý  sys_semop(int semid, struct 
      sembuf *sops, unsigned nsops)̸, ⼭ ϳ  
      Ű sembuf sem_num, sem_op, sem_flg  ҷ ̷ 
      ִ.      ҽų , ų 
       ִ. (flyduck)

) ޽ ť  ť task_struct  ִ ܼ 
      wait_queue  Ʈ Ǿ ,  ť 
      sem_queue  Ʈ Ǿ ִ. ̴ ޽ ť  
      б⸦ ٸ, ⸦ ٸ ϸ , 
          Ѱ ڵ  ϰ 
      ־ ϰ     ʿϱ     
      sem_queue ϴ ̴.(flyduck)

)   Ӹ ƴ϶  μ ʿ ϴ ڿ 
      ٸ μ ϰ ־  · µ, ߿  
      μ  μ ϰ ִ ڿ ʿ ϰ 
      Ǿ μ  밡 ڿ  ϱ⸸ ٸ 
      Ǵ µ Ѵ. ̰ ܼ  μ ƴ϶  
      μ      ϰ ̷  
      ִ. ܼ  Ͽ ̾߱Ѵٸ, μ 
       ̿Ͽ Ӱ   ٽ   
       ʴ´ٸ ̷  ߻  ̴. (flyduck)

)  ޸𸮸  ޸𸮿 ϰ   Ѵ. 
      (flyduck)

)  μ 忡  Ͱ   μ Ҵ 
      ޸𸮵 vm_area_struct Ʈ AVL Ʈ Ǵµ, 
      ̴  Ʈ ߻  ش   μ 
      ϴ ޸,       ˱ 
       ȴ. (flyduck)

) nopage  (flyduck)

)    з Ϲ ü   ɿ 
       ڼϰ  ̴. ̴ PCI BIOS   óϴ 
        PCʹ ޸, ٸ ýۿ PCI  ü 
        ؾϸ, ڰ ַ  AXP  ýۿ 
      ۾ ߱   .     ش  
      ϵ õ ۾ ־ ū  ָ Ѵ. 
      (flyduck)

) ϳ PCI    ִ ġ  Ǿ ֱ 
      ,   ġ Ϸ  ߰ϰ ̸ PCI-PCI 
      긴 ؾ Ѵ.  Ϲ PC PCI-PCI 긴 
      ,  迡 PCI-PCI 긴 ־, 򿡴 Ϲ 
      PC ε PCI-PCI 긴 ִ 尡  ִ. MS 
      Windows ü ϰ ִٸ ý  ġ
      ڿ ý ġ   Ǿ ִ Ȯغ  
      ̴. CPU  PCI  ϴ 긴, PCI-ISA 
      긴, PCI-PCI 긴  Ȯ   ̴. (flyduck)

) CPU 忡 Ѵٸ 0  CPU ٷ  ̱ 
      , 1  0      ̹Ƿ 
      Ʈ, 0  1    ٿƮ ȴ. 
      (flyduck)

) PCI Ծ࿡  ϳ PCI ī尡 ִ 8   
      ִ. (flyduck)

) ó IBM PC   ⿡ ޸ ܿ I/O  
      ִ Ʈ  ־. ̴  ޸   ƴ 
      Ư Ʈ   ߴµ  CPU ִ in, out 
       װ̴. ISA ī忡 ġ Ϳ ϴµ 
      ̷ Ʈ I/O Ͽ, ū  Ϳ  ( 
       ׷ ī ޸) ޸  Ͽ.  
       CPUʹ ޸  CPU Ʈ I/O  ʴ´. 
       PCI Ծ I/O  ϱ , ̸  ʴ 
      PCI ī鵵 , ⼭ Ĩ ͵  ޸ 
       Ѵ. ISA ī忡 64KB I/O  640KB-1MB, 
      15MB-16MB(  ϴ ġ  幰) ޸ 
       ϰ ִ. ̴ ݱ ȿѵ,   
      ߱ϰ ִ. PCI 4GB I/O , 32Ʈ Ǵ 64Ʈ 
      ޸  Ѵ. (flyduck) 

) ⼭ ڴ, PCI ī ڶ ٴ ī忡 ִ PCI 
        ϴ Ĩ ̴. (flyduck)

)  ̸ IRQ A-D ϸ, PCI ī ɿ  ̸̴. 
      (flyduck)

) PCI  â⿡   ӵ ʿ ϴ ġ鸸 
      PCI ī , PCI       
      ī尡 PCI  ۵ǰ ִ. ISA ī  忡 
       ٴ  ,  忡 ϱⰡ 
      ٷӴٴ    ãƺ  ִ. 
      (flyduck)

) ISA ġ  ū  ϴ I/O  ޸ , IRQ 
       ϵ Ǿ ִٴ ̴.  ġ 
      ó Ǿ ״ ̾ , ٸ ġ ϵ
       ִ ۷ ϰų, EPROM  س ִ.  
      (flyduck)

)  Ŭ̶ PCI ʱȭ  ʾ  PCI ġ 
      ϱ Ͽ ϴ Ư ּҸ Ѵ. (flyduck)

)  ̽ ̹  ƴ϶, ̽ ̹ó 
      ġ ϴ   ̽ ̹ ¸  
       ̹Ƿ  ̽ ̹ Ѵ. ̷ δ 
        ý̳ Ʈ ̹ ִ. (flyduck)

) IBM PCܿ BIOS ִ ý ã , ̷ ýۿ
       ü ڵ尡   þƾ Ѵ. (flyduck)

) ISA ġ ͷƮ ϵ ִ ۷ ϰų 
      EPROM  ν ϵ Ǿ ִ.  ̵ 
       ü ˾Ƴ  ִ  . (flyduck)

) Ŀο ̸   probe_irq_on() probe_irq_off() Լ 
      ִ.  Լ ҷ Ҵ  ͷƮ ϰ  , 
      ͷƮ ߻ ,  Լ θ ߻ ͷƮ 
      ְ, ͷƮ ¸ · Ѵ. probe_irq_off() Լ 
      ͷƮ ߻  0, ϳ ͷƮ ߻ϸ ش 
      ͷƮ ȣ,  ̻ ͷƮ ߻Ͽ ȣ  
       ش. (flyduck)

)  PCI Ծ ͷƮ  ϵ Ǿ , 
      ISA ؼ ͷƮ     ƴϴ.  ISA 
      Ծ࿡ ͷƮ     â⿡  ī 
        ͷƮ   ־  ִ 
       ISA ī ϵ ͷƮ   . 
       ͷƮ   κ Ʈ ̸, 
       ISA ̽ ̹ ϴ ͷƮ ڵ鷯 
        ͷƮ   ִ   ִ. (flyduck)

)  ͷƮ ͷƮ  ʴ ͷƮ ڵ鷯 ġ
      Ǿ ִٸ ͷƮ ϴ ڵ鷯    ̸, 
      ݴ 쵵 . (flyduck)

)  ڽ óϴ ġ ͷƮ ߻ ʾҴ 
      Ʈ ϴ ٸ ġ ߻ ͷƮ  ڽ 
      ͷƮ ڵ鷯 Ҹ  ִٴ ̴. ̴ ڽ ϴ 
      ġ ִ ͷƮ  ͸ о ͷƮ ߻ 
       ̸ óϰ, ׷  쿡 ׳ ϸ ȴ. 
      ׷  ͷƮ ߻ ġ ̽ ̹ ̸ 
      ó ̴. (flyduck)

 )  ÷ Ʈѷ ʻ PC ýۿ ͷƮ  
      ġ  ϳ̴. 
      ÷ Ʈѷ ׻ ͷƮ 6 ȴ. 

) ̷  Ϲݺ ڵ鷯(bottom half handler) ۾ť(task 
      queue) ִ. (flyduck)

) ͷƮ óϴ ߿ ٸ ͷƮ ߻ ϵ 
      ϱ  ( ͷƮ̵, 켱  ͷƮ̵), 
      ͷƮ ó ¿  ִ   ʴ. (flyduck)

)  ͷƮ(fast interrupt)  ͷƮ(slow interrupt) 
      ͷƮ ó  ̴.  ͷƮ ͷƮ ó 
      (atomic) ̷ ̰,  ͷƮ ׷ 
      ʴ.  ̴  ͷƮ  μ 
      Ʈ  ó ٸ ͷƮ ظ  ,  
      ͷƮ ٸ ͷƮ    ִ. ׸  
      ͷƮ ͷƮ ڵ鷯 յڿ ϴ    . 
      ĳ Sparc ̷ ̴ , ڿ 2.1.37  
      Ŀ  ̴ . (flyduck)

) ̷ ġ Ϸ ǥϴ  Windows ü 
       , Windows 95 ̽ ̹ Ϸ   
      , Windows NT 迭 н   ̽ 
      ̹ ġ   · Ǿ ִ. (flyduck)

)    ġ  ġ  ġ  ʴ 
      ġ Ư  Ѵ. ̴  ýۿ ġ  ʴ
      , /dev 丮  ġ  ϴ ̴. 
       Ʈ ġ   ġ ϴ 쿡 
      .   ýۿ ̴ ġ ־ /dev/eth0̶ 
      ġ Ư  . (flyduck)

)   ġ ȣ ̽ ̹ οǴ ̴. 
      ׷Ƿ  ٸ ̽ ̹ ʿ ϴ CD-ROM 
      ̽ ̹  ٸ  ȣ ,  
       ýۿ  CD-ROM ̽ ̹   
      ȣ ҴǾ ִ    ִ.  ýۿ ο 
      ̽ ̹ ߰ҷ ǰ    ȣ 
      Ҵ޾ƾ Ѵ. ̳ ȣ ̽ ̹ ڽ   
      ϴ ġ ϱ ؼ ̴ ̹Ƿ,  ȣ ο
      ϴ ̽ ̹  ̴.  ýۿ ִ 
      ġ  ȣ ̳ ȣ ǹ̴ DOCUMENTATION
      /Device.txt Ͽ Ǿ ִ. ⼭ Ư  SCSI 
      CD-ROM̳ SCSI ũ  ϳ  ȣ 
      ٴ ̴. ׷ٰ ϳ ̽ ̹   
      SCSI ͸ Ѵٴ  ƴϴ. ̴ SCSI Ŭ 
       ̹ ־ ̰  ̽ ̹ 
      ϰ,  SCSI Ϳ شϴ ̽ ̹  
       SCSI Ŭ ̹  ̽ ϴ · 
      Ǿ ֱ ̴. 
      ̴ ߿  ġ ٽ ̾߱Ѵ. (flyduck)

)  Ư  Ŀ  ʴ ġ ߰Ǿ, Ŀ
         ʰ شϴ ̽ ̹ ߰Ͽ 
      εν ġ   ְ Ѵ. (flyduck)

) Ŀ ϱ  make menuconfig, Ǵ X  󿡼 
      make xconfig  ؼ, Ŀο  ϰ  
           ִ. (flyduck)

) ̴ 11.3 忡 ϰ ִ Ÿ̸ Ŀ̴. (flyduck)

) ͷƮ ڿ ûϴ   ̹ ʱȭ  ƴ϶ 
        ִ. 
        ̹ ʱȭ   ͷƮ ϰ 
      ִ Ȯθ ϰ,  ͷƮ ûϴ  ġ  
       ϸ,    ͷƮ ڿ ݳϴ  
      ٰ ϴ  ִ. (flyduck)

) μ  ޸𸮸 ϹǷ Ҵ ޸𸮴  ޸
       󿡼 ӵǾ ִ  ӵ  ƴϴ. 
      ׷  Ŀ DMA  Ư ޸ Ҵ Լ 
      Ѵ. (flyduck)

)  "lock" ǹ̴  ޸𸮰  ε ϰ 
      ,  ʵ ٴ ̴. Ϲ ޸𸮴 
      Ҵ ޴  Ҵ޴  ƴϱ (䱸 
      ¡), DMA   ֵ   ޸𸮰 
      ϰ ϰ  ƿ ʰ Ѵٴ ǹ̴. (flyduck)

) ̸ ͷƮ Ÿ(interrupt time) ǰ ִٰ Ѵ. 
      ̽ ̹ Ϲ 񽺵  񽺸 û μ
        μ  ( current   μ 
      task_struct Ű  ) , ͷƮ ڵ鷯 
      Ϲݺ ڵ鷯, ۾ť ó   μ  
       μ ϼ ִ (۾ť tq_scheduler ͷƮ 
      Ÿӿ ó ʴ´). ׷ ̵ ó ƾ  
      μ   .  Ŀο current  
       task_struct Ų. (flyduck)

)  Ŀ ̿    ޸ Ҵ(page-oriented 
      memory allocation) Ѵ. C malloc ޸ Ҵ
        ޸ Ҵ(linear memory allocation)̶ ϴµ,  
       Ŀ ̸  ʴ´. (flyduck)

) ̷  ϴ ý  register_chrdev(), ⿡ ġ
        ȣ ̽ ̹ ̸, ׸   
       ޵ȴ. include/linux/fs.h Լ Ÿ
      (prototype)   ִ.(flyduck)

)     Ÿ ڷᱸ file_operations, 
       open, close, read, release  ⺻  ܿ 
      lseek, ioctl, fsync     ִ.  ڷᱸ  
       ġ ̽ ̹ ȴ. (flyduck)

) ̴  ý ü  ٸ    ְ Ͽ, 
       ϰ Ȱ  ü ̽   
      ٸ  ϴ  ϰ Ѵ. (flyduck)

) ̽ ̹   ޵Ǵ file_operations ü
        ĳÿ õ Լ . ׷  ġ 
       ڷᱸ ʿϰ Ǿ,  ĳÿ õ blk_dev_struct  
      ü  迭 blk_dev ϰ ȴ. 
       ġ   ġ ϴ Լ 
      register_blkdev()  ȣ, ̸, ׸   
      ޵Ǹ,  ĳÿ õ   blk_dev_struct ڷ
       ִ request_fn Լ ͸ ڽ  ν 
      ̷ . (flyduck)

)  Ǹ ũ   *   *  ũ̹Ƿ 
       64 * 32 * 512 = 1048576,  1MB̴. (flyduck)

) SCSI ⿡ ũ ܿ ĳʰ ٸ ܺġ   
      ִ I/O  ԰, IDE  ũ  ̽
      ̴. (flyduck)

)  Scsi_Cmd Ǿ  Scsi_Cmnd ´. (flyduck)

) տ ѹٿ    ġ   ̸ 
      ٴ ̴. (flyduck)

) IP ⺻ ּ ϳ  ּ ϳ  ִ.  
         ϳ θ IP Ŷ   ִٴ 
      ̴. ̴ ȭȸǰ  Ŷ     
      ߺ  ϴ ڸŭ     
      ϹǷ  뿪(bandwidth) Ƹ԰ ȴ. ̿  IP 
      ƼĳƮ      ְ Ͽ Ŷ ϳ 
        Ŷ ϵ   Ŷ ϰ  ִ 
      ̴. (flyduck)

) ġ  ɼ   Ȯ  ƴϱ⿡ 
       Ѵ. (flyduck)

 ) , Ǵ ƴϾ,    ں  ȣ
        ü Դ.

 ) "maximal mount count reached, running e2fsck is recommended"

)  ⺻ ġϸ  ũ 512Ʈ̴. (ɸ)

) 11 ̴. (ɸ)

) chmod ϴ ׸ ̴̰. (ɸ)

) ̽ ̹ Ͽ ٸ Ŀ κе 
      proc_register_dynamic()Լ  ڸ ϰ,  
         ִ Լ ν proc  ýۿ Ʈ
         ִ. (flyduck)

) н  ġ ȣ ϴµ dev_t ڷ
       ϸ, ̴ 16Ʈ   ȣ ̳ ȣ 
       8Ʈ ´. ׷ ̴ 256  ȣ ̳ 
      ȣۿ     µ, ׷ٰ  ڷ 
      ٲٴ  ġȣ 16Ʈ ϰ ִ Ʈ 
       ų  ִ. ׷  ġ ȣ Ÿµ 
      kdev_t ο ڷ ϰ ̸ ϰ ִ.  ڷ
        ȣ ̳ ȣ  16Ʈ ũ⸦ ´. 
      include/linux/kdev_t.h  (flyduck)

)  θ Ǵ   ġ  ̻  
      ̴. (ɸ)

 )   (National Science Foundation)

) ̴   ϰ,   ȼ  
       ִ 
      (ɸ)

 )  б  ޸(Synchronous Read Only Memory)

) Ϲݺ(bottom half)  ͷƮ ڵ鷯 ݺ(top half)
       Ͽ ͷƮ ڵ鷯 ó ʰ  ̷ 
      ۾   ̸̴. (flyduck)

) ̴ Ϲݺ ó õ ڷᱸ 4Ʈ ũ ũ 
       ũ 迭 Ǿ ֱ ̴.  Ϲݺ ó 
        ִ  Ǿ , ̰ͺ    
       ۾ť  ȴ. (flyduck)

) (static) ǵǾٴ ǹ̴, Ϲݺ ڵ鷯 
      ϰڴٰ  ε  ϴ  ƴ϶, ̸ 
       ε  ̸  ε ϴ (Ʒ
       ) ǵǾ ִٴ ̴. (flyduck) 

) Ʒ  Ϲݺ ڵ鷯  TIMER_BH, CONSOLE_BH, 
      TQUEUE_BH, NET_BH, IMMEDIATE_BH ǵǾ ִ. ̵ ܿ 
      ٸ Ϲݺ ڵ鷯 , include/linux/interrupt.h 
      Ȯ  ִ. (flyduck)

) ̴   Ʋ ̶ , TQUEUE  
      Ÿ̸ ƽ ȰȭǴ Ϲݺ ڵ鷯, tq_timer ۾ť 
      ó ϴ  Ѵ.  TIMER Ϲݺ ڵ鷯   Ÿ̸
      ƽ Ȱȭ 11.3  Ŀ Ÿ̸Ӹ óϴ 
       Ѵ.    Ÿ̸ ƽ ߻  Ȱȭȴٴ 
          ٸ. (kernel/sched.c 
      do_timer() ) (flyduck)

) ̴ mark_bh() Լ شϴ Ϲݺ ڵ鷯  Բ 
      θ ȴ. (flyduck)

) ̷ 뵵 տ Ϲݺ ڵ鷯 ߴµ,   
       Ŀ ϴ   ٸ. Ϲݺ ڵ鷯 
       ڿ ݸ鿡, ۾ť ۾   Ʈ 
       ,  ۾ť Ͽ   ֱ  Ȯ
       ϴ. ۾ť Ÿ̸Ӱ Ÿ̸ ͷƮ ߻ 
      ó ۾  ׾Ƶα ؼ Ǳ⵵ ϰ, ̽ 
      ̹ ۾ ̷ ؼ Ѵ.   
      ̽ ̹ Ϲݺ ڵ鷯   , ۾ť 
      Ŀ ؾ Ѵ. (flyduck)

) ۾ť óϴ Լ run_task_queue()̸, kernel/sched.c
        schedule() Լ run_task_queue(&tq_scheduler)
      θ, TQUEUE Ϲݺ ڵ鷯 tq_timer, IMMEDIATE Ϲݺ
      ڵ鷯 tq_immediate óϴ    ִ. (flyduck)

) Ʒ    ۾ť ܿ tq_disk   ̴ ޸ 
       ýۿ  ϴ ̸, ٸ κп  
         ̴.  ۾ť  tq_timer, 
      tq_immediate, tq_schedule ǵǾ ִ. (flyduck)

)    Ÿ̸ ť  Ϲݺ  ڵ鷯 տ  ̾߱  ٿ  
      TQUEUE_BH̴. (flyduck)

) ý Ÿ̸Ӵ TIMER_BH óϴ 11.3忡  
      Ÿ̸Ӹ Ѵ. (flyduck)

)  jiffies  ð Ȯ   ð ý
       ٸ. 
      arch/*/param.h HZ  ǵǾ ִµ, Ŭ ƽ ʴ 
       HZ Ƚŭ ߻ϹǷ 1 jiffie = 1 / HZ ʶ   ִ. 
       Ŀο HZ  ýۿ 1024 ٸ ýۿ 
      100 ǵǾ ִ.   ٲپ    ִµ,  
       Ŀ  ý ӵ    ӵ   
      ̸,  ۾ ӵ   ӵ   
      ȴ. (flyduck)

)  Ÿ̸Ӵ run_old_timer(), ο Ÿ̸Ӵ 
      run_timer_list() óϸ, Ѵ timer_bh() Ҹ.  
      kernel/sched.c  (flyduck)

)  ٸ  Ÿ̸Ӵ   ǵǰ ýÿ 
      ڵ鷯 ϵǴ Ϲݺ ڵ鷯, ο Ÿ̸Ӵ  
      ϴ ۾ť ϴٰ   ִ. (flyduck)

)  jiffies( ð Ÿ ) + ϴ  * HZ 
      Ѵ. (flyduck)

 ) REVIEW NOTE :  췯    INTERRUPTIBLE 
      ¿ ִ ½ũ Ǵ    ΰ? ť 
      μ      ʴ´.

) ť ó    , ٸ  ִ ڿ Ҽ
      ְ Ǿ  ڿ ٸ ť ó  ̴. 
      (flyduck)

)    ɶ semaphore ڷᱸ waking ׸
           ϴ    ִ. (flyduck)

)    IPC   ٸ.    
      SMP  μ Ŀ    ֵ ϴ 
      ̴.  SMP  ȿ  ʾҴ. 
       Ŀ, Ŀ 忡 ڽ   ʴ  ٸ 
      μ  ߴܵ , ͷƮ ó ƾ ڽź 
       켱  ͷƮ ƴ ٸ μ  ߴ
       ʴ´ٴ   ִ. 
       Ŀθ忡 ڷᱸ ϴ  ٸ Ϳ  ߴ
       ʴ´ٴ   ִ ̴. ̴ SMP  
      Ǵµ, ֳϸ  μ Ŀ   ڷᱸ  
      ϰ  ,  ٸ μ Ŀθ  Ŀ 
      ϴ ڷᱸ ÿ  μ ϰ Ǳ 
      ̴.   ùٸ ذå 翬 ڷᱸ ϱ  
      Ӱ ǥϰ ٸ μ  ϰ ϴ 
      , ̴   ʹ  ۾ ʿ Ѵ. ׷ 
       SMP  ϳ   Ͽ ÿ  μ
       Ŀθ忡   ְ ϸ,  忡 ϴ 
       ̷ 뵵  ϴ ̴. 
      ׷ SMP Ŀ 忡 ϴ μ ٸ 
        ߴܵ ʰϴ ̴. ̴ Ŀ 忡 
      Դ CPU  ð ü ý ȿ  ۵ϰ Ǹ, 
      Ŀ 忡  ϴ I/O ߽ ýۿ  
         ȴ.  ȿ SMP ý Ϸ 
      ʿ 쿡  ɼ ֵ Ǿ Ұ̴.(flyduck)

)  å  2.0.33 ҽ lock ׸ ,  2.0.2x 
      ̳ 2.2.x  lock ׸ ã  . (flyduck)

)   μ Ŀ 忡    ȿ 
      ϵ Ǿٴ ̴. (flyduck)

) Ŀ 忡 ϱ Ͽ   ߴµ ̸ 
        ٸ, ڽ    ְ   
      췯 ȣϸ(̰ ٸ μ ڽ ſ   
      ְ ),      ٸٴ ̴. 
      (flyduck)

) Ŀ  ϴ  Ų. (flyduck)

) ̸ module stacking̶ Ѵ. (flyduck)

)     Ŀ      ִ   
      insmod  ε   ˻縦 Ͽ,    
       ε   . insmod -f ɼ ϸ   
      ʴ  εϰ       ̴. 
            ϴ Ŀ 񽺿 Ѱִ  
      ڵ ޶ 쿡  ε     ִ.  
          ϴ 񽺰  Ŀο ϴ 
      񽺿 ޶  ٸ    , ̸ ؼ 
      Ŀΰ  ʿ  ɺ   üũ   
      ֵ ؾѴ. (flyduck)

) kernel/ksymc.c  Ŀ ͽƮ  ɺ  
      ִ. ̿     ⿡ ִ  ɺ 
      ͽƮ ʰ ʿ ͸ ͽƮϵ   ִ. ̴ 
      ʹ   ɺ ɺ ̺  ߻  ִ  
      ̸   ̴. (flyduck) 

) ̵ ̸  init_module(), cleanup_module()  
      ִ. 
      ̵ ɺ ̺  ʴ  Լ Ǿ ִٸ  
       ּҸ ˾Ƴ  ִ. (flyduck)

)   Ŭ   ִ   21264 ٸ 
      RISC CPU  Ŭ  鿡  ߴ. (ɸ)

)  ǻ  η µ ū  ϰ ִ. 
      (ɸ)

) ͳ ּ   http://www.kernelnotes.com  
      ް ִ. http://www.linuxhq.com  󵵰  ʴ. 
      (ɸ)
