Zerokaratsukuru OS kaihatsu 004 kernel-hen the interrupt - IDT to PIC to PIT - (Japanese Edition)
Book Details
Author(s)yabusame2001
Publisheryabusame2001
ISBN / ASINB00FIL5ZBA
ISBN-13978B00FIL5ZB7
Sales Rank99,999,999
MarketplaceUnited States 🇺🇸
Description
C言語ã§ï¼ã‹ã‚‰ä½œã‚‹OSを開発ã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ãã¾ã™ã€‚ã“ã®ã‚·ãƒªãƒ¼ã‚ºã§ã¯ã‚«ãƒ¼ãƒãƒ«ã®é–‹ç™ºã«ã¤ã„ã¦èª¬æ˜Žã—ã¦ã„ã¾ã™ã€‚
今回ã¯ã€å‰²ã‚Šè¾¼ã¿ã«ã¤ã„ã¦è¦‹ã¦ã„ãã¾ã™ã€‚割り込ã¿ãƒ™ã‚¯ã‚¿ãƒ¼ã‚’IDTã§ä½œæˆã—ã¦ãƒ—ãƒã‚»ãƒƒã‚µãƒ¼ãŒå‰²ã‚Šè¾¼ã¿ã‚’å—ã‘ä»˜ã‘æº–備を行ã„ã¾ã™ã€‚ãã—ã¦ã€å¤–部デãƒã‚¤ã‚¹ã‹ã‚‰ã®IRQを統括ã™ã‚‹ICã§ã‚ã‚‹PICã«ã¤ã„ã¦åˆ¶å¾¡ã‚’行ã„ã¾ã™ã€‚ã¾ãŸã€æ˜”ã«ã‚¿ã‚¤ãƒžãƒ¼ã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ãŸPITã®åˆ¶å¾¡ã¨ã‚¿ã‚¤ãƒžãƒ¼å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’作æˆã—ã¦å®Ÿéš›ã«ã‚¿ã‚¤ãƒžãƒ¼å‰²ã‚Šè¾¼ã¿ãŒå…¥ã£ã¦ãã‚‹ã¨ã“ã‚ã¾ã§è¦‹ã¦ã„ãã¾ã™ã€‚
補足ã§GDTã‚’Cè¨€èªžã§æ§‹ç¯‰ã™ã‚‹å ´åˆã«ã¤ã„ã¦ã®èª¬æ˜Žã‚‚ã—ã¦ã„ãã¾ã™ã€‚
[目次]
å‰å›žã¾ã§ã®å†…容
割り込ã¿
  例外(Exception)
  割り込ã¿è¦æ±‚(IRQ:InterRupt Request)
  ソフトウェア割り込ã¿
割り込ã¿ãƒ™ã‚¯ã‚¿ãƒ¼ã¨å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼
割り込ã¿ãƒ™ã‚¯ã‚¿ã¨ä¾‹å¤–
IDT(Interrupt Descriptor Table)
  IDTã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ター
  IDTR(Interrupt Descriptor Table Register)
IDTã‚’Cè¨€èªžã§æ§‹ç¯‰ã™ã‚‹
  ゲートディスクリプターã‹ã‚‰IDTを作る
  IDTRã®å®šç¾©
  ゲートディスクリプターをセットアップã™ã‚‹
    ゲートディスクリプターã®ãƒ•ラグ定義
    割り込ã¿ã‚²ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—
  IDTRã«èªã¿è¾¼ã¾ã›ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’è¨å®šã™ã‚‹
IDTã‚’LIDT命令ã§èªã¿è¾¼ã‚€
GDTã‚’Cè¨€èªžã§æ§‹ç¯‰ã™ã‚‹
  セグメントディスクリプタã®å®šç¾©
  セグメントディスクリプターã‹ã‚‰GDTを作る
  セグメントディスクリプターをセットアップã™ã‚‹
    グãƒãƒ¼ãƒãƒ«ãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ãƒ•ラグ定義
  セグメントディスクリプタã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—
  GDTRã®å®šç¾©
  GDTRã«èªã¿è¾¼ã¾ã›ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’è¨å®šã™ã‚‹
GDTã‚’LGDT命令ã§èªã¿è¾¼ã‚€
GRUBã‹ã‚‰ã‚«ãƒ¼ãƒãƒ«ã‚’ãƒãƒ¼ãƒ‰ã™ã‚‹å ´åˆã«ã¤ã„ã¦
PIC(Programmable Interrupt Controller)
割り込ã¿ã¨PIC
PICã®ç‰¹å¾´
8259Aã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢
  8259Aをカスケード接続ã™ã‚‹
ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒå‰²ã‚Šè¾¼ã¿ã‚’è¦æ±‚ã—ãŸã¨ãã®å‹•作
  ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒå‰²ã‚Šè¾¼ã¿ã‚’è¦æ±‚
  CPUã¯PICã‹ã‚‰å‰²ã‚Šè¾¼ä¿¡å·ã‚’å—ã‘付ã‘ã¾ã™
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ã‚’実行ã™ã‚‹
  ãã—ã¦å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒå®Ÿè¡Œã•れる
8259Aã®ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼æ§‹æˆ
  コマンドレジスター
  ステータスレジスター
  割り込ã¿è¦æ±‚レジスター(IRR:Interrupt Request Register)
  割り込ã¿ä¸ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼ï¼ˆISR)
  割り込ã¿ãƒžã‚¹ã‚¯ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼ï¼ˆIMR)
8259Aã®ãƒãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹
ãƒãƒ¼ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹é–¢æ•°ã‚’作る
  OUT命令
  IN命令
8259Aã®åˆæœŸåŒ–コマンド
ã€€ã€€åˆæœŸåŒ–制御コマンドICW(Initialization Control Words)
  ICW1(Intialization Control Word1)
  ICW2(Initialization Control Word2)
  ICW3(Initialization Control Word3)
  ICW4(Initialization Control Word4)
    (補足)ãƒã‚¹ãƒˆãƒ¢ãƒ¼ãƒ‰ã«ã¤ã„ã¦
    (補足)AEOIã«ã¤ã„ã¦
8259Aã®æ“作コマンド
  OCW1(Operation Command Word1)
  OCW2(Operation Command Word2)
    EOIコマンド
    (補足)自動ãƒãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚³ãƒžãƒ³ãƒ‰
    (補足)特定優先度ãƒãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³
  OCW3(Operation Command Word3)
    8259Aã®å†…部レジスターèªã¿è¾¼ã¿
    スベシャルマスクã«ã¤ã„ã¦
    ãƒãƒ¼ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã«ã¤ã„ã¦
PICã®åˆæœŸåŒ–コマンドをプãƒã‚°ãƒ©ãƒ ã™ã‚‹
IRQã®å‰²ã‚Šè¾¼ã¿ãƒ™ã‚¯ã‚¿ãƒ¼
  IRQをマスクã™ã‚‹
PIT(Programmable Interval Timer)
8253ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢
8253ã®ã‚¿ã‚¤ãƒžãƒ¼
  カウンター
  CLK
  OUT
  GATE
  ãƒãƒ£ãƒ³ãƒãƒ«0
  ãƒãƒ£ãƒ³ãƒãƒ«1
  ãƒãƒ£ãƒ³ãƒãƒ«2
8253ã®ãƒ¢ãƒ¼ãƒ‰
  モード0(タイマー)
  モード1(ワンショットタイマ)
  モード2(パルス生æˆãƒ¢ãƒ¼ãƒ‰ï¼‰
  モード3(矩形波生æˆãƒ¢ãƒ¼ãƒ‰ï¼‰
  モード4(ソフトウェアトリガーモード)
  モード5(ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒˆãƒªã‚¬ãƒ¼ãƒ¢ãƒ¼ãƒ‰ï¼‰
8253ã®ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼
  カウンターレジスター
  制御コマンド(Control Word)レジスター
PITã®ã¾ã¨ã‚
割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼
  割り込ã¿ãƒ»ä¾‹å¤–ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å®Ÿè¡Œ
    ç¾åœ¨å®Ÿè¡Œä¸ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ã‚ˆã‚Šã‚²ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ã®æ–¹ãŒä½Žã„å ´åˆ
    ç¾åœ¨å®Ÿè¡Œä¸ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ã¨ã‚²ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ãŒåŒã˜å ´åˆ
  割り込ã¿ãƒ»ä¾‹å¤–時ã®ã‚¹ã‚¿ãƒƒã‚¯æ“作
  エラーコード
  割り込ã¿ãƒ»ä¾‹å¤–処ç†ã‹ã‚‰ã®å¾©å¸°
タイマー割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å…¥ã‚Šå£
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ï¼ˆIRQ)ã®çµ‚了通知
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å‡ºå£
  タイマー割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ã¾ã¨ã‚
    タイマー割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®IDTã¸ã®ç™»éŒ²
今回ã¯ã€å‰²ã‚Šè¾¼ã¿ã«ã¤ã„ã¦è¦‹ã¦ã„ãã¾ã™ã€‚割り込ã¿ãƒ™ã‚¯ã‚¿ãƒ¼ã‚’IDTã§ä½œæˆã—ã¦ãƒ—ãƒã‚»ãƒƒã‚µãƒ¼ãŒå‰²ã‚Šè¾¼ã¿ã‚’å—ã‘ä»˜ã‘æº–備を行ã„ã¾ã™ã€‚ãã—ã¦ã€å¤–部デãƒã‚¤ã‚¹ã‹ã‚‰ã®IRQを統括ã™ã‚‹ICã§ã‚ã‚‹PICã«ã¤ã„ã¦åˆ¶å¾¡ã‚’行ã„ã¾ã™ã€‚ã¾ãŸã€æ˜”ã«ã‚¿ã‚¤ãƒžãƒ¼ã¨ã—ã¦ä½¿ç”¨ã•れã¦ã„ãŸPITã®åˆ¶å¾¡ã¨ã‚¿ã‚¤ãƒžãƒ¼å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã‚’作æˆã—ã¦å®Ÿéš›ã«ã‚¿ã‚¤ãƒžãƒ¼å‰²ã‚Šè¾¼ã¿ãŒå…¥ã£ã¦ãã‚‹ã¨ã“ã‚ã¾ã§è¦‹ã¦ã„ãã¾ã™ã€‚
補足ã§GDTã‚’Cè¨€èªžã§æ§‹ç¯‰ã™ã‚‹å ´åˆã«ã¤ã„ã¦ã®èª¬æ˜Žã‚‚ã—ã¦ã„ãã¾ã™ã€‚
[目次]
å‰å›žã¾ã§ã®å†…容
割り込ã¿
  例外(Exception)
  割り込ã¿è¦æ±‚(IRQ:InterRupt Request)
  ソフトウェア割り込ã¿
割り込ã¿ãƒ™ã‚¯ã‚¿ãƒ¼ã¨å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼
割り込ã¿ãƒ™ã‚¯ã‚¿ã¨ä¾‹å¤–
IDT(Interrupt Descriptor Table)
  IDTã®ãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ター
  IDTR(Interrupt Descriptor Table Register)
IDTã‚’Cè¨€èªžã§æ§‹ç¯‰ã™ã‚‹
  ゲートディスクリプターã‹ã‚‰IDTを作る
  IDTRã®å®šç¾©
  ゲートディスクリプターをセットアップã™ã‚‹
    ゲートディスクリプターã®ãƒ•ラグ定義
    割り込ã¿ã‚²ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—
  IDTRã«èªã¿è¾¼ã¾ã›ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’è¨å®šã™ã‚‹
IDTã‚’LIDT命令ã§èªã¿è¾¼ã‚€
GDTã‚’Cè¨€èªžã§æ§‹ç¯‰ã™ã‚‹
  セグメントディスクリプタã®å®šç¾©
  セグメントディスクリプターã‹ã‚‰GDTを作る
  セグメントディスクリプターをセットアップã™ã‚‹
    グãƒãƒ¼ãƒãƒ«ãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ãƒ•ラグ定義
  セグメントディスクリプタã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—
  GDTRã®å®šç¾©
  GDTRã«èªã¿è¾¼ã¾ã›ã‚‹ãƒ‡ãƒ¼ã‚¿ã‚’è¨å®šã™ã‚‹
GDTã‚’LGDT命令ã§èªã¿è¾¼ã‚€
GRUBã‹ã‚‰ã‚«ãƒ¼ãƒãƒ«ã‚’ãƒãƒ¼ãƒ‰ã™ã‚‹å ´åˆã«ã¤ã„ã¦
PIC(Programmable Interrupt Controller)
割り込ã¿ã¨PIC
PICã®ç‰¹å¾´
8259Aã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢
  8259Aをカスケード接続ã™ã‚‹
ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒå‰²ã‚Šè¾¼ã¿ã‚’è¦æ±‚ã—ãŸã¨ãã®å‹•作
  ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãŒå‰²ã‚Šè¾¼ã¿ã‚’è¦æ±‚
  CPUã¯PICã‹ã‚‰å‰²ã‚Šè¾¼ä¿¡å·ã‚’å—ã‘付ã‘ã¾ã™
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ã‚’実行ã™ã‚‹
  ãã—ã¦å‰²ã‚Šè¾¼ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ãŒå®Ÿè¡Œã•れる
8259Aã®ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼æ§‹æˆ
  コマンドレジスター
  ステータスレジスター
  割り込ã¿è¦æ±‚レジスター(IRR:Interrupt Request Register)
  割り込ã¿ä¸ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼ï¼ˆISR)
  割り込ã¿ãƒžã‚¹ã‚¯ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼ï¼ˆIMR)
8259Aã®ãƒãƒ¼ãƒˆã‚¢ãƒ‰ãƒ¬ã‚¹
ãƒãƒ¼ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹é–¢æ•°ã‚’作る
  OUT命令
  IN命令
8259Aã®åˆæœŸåŒ–コマンド
ã€€ã€€åˆæœŸåŒ–制御コマンドICW(Initialization Control Words)
  ICW1(Intialization Control Word1)
  ICW2(Initialization Control Word2)
  ICW3(Initialization Control Word3)
  ICW4(Initialization Control Word4)
    (補足)ãƒã‚¹ãƒˆãƒ¢ãƒ¼ãƒ‰ã«ã¤ã„ã¦
    (補足)AEOIã«ã¤ã„ã¦
8259Aã®æ“作コマンド
  OCW1(Operation Command Word1)
  OCW2(Operation Command Word2)
    EOIコマンド
    (補足)自動ãƒãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ã‚³ãƒžãƒ³ãƒ‰
    (補足)特定優先度ãƒãƒ¼ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³
  OCW3(Operation Command Word3)
    8259Aã®å†…部レジスターèªã¿è¾¼ã¿
    スベシャルマスクã«ã¤ã„ã¦
    ãƒãƒ¼ãƒ«ã‚³ãƒžãƒ³ãƒ‰ã«ã¤ã„ã¦
PICã®åˆæœŸåŒ–コマンドをプãƒã‚°ãƒ©ãƒ ã™ã‚‹
IRQã®å‰²ã‚Šè¾¼ã¿ãƒ™ã‚¯ã‚¿ãƒ¼
  IRQをマスクã™ã‚‹
PIT(Programmable Interval Timer)
8253ã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢
8253ã®ã‚¿ã‚¤ãƒžãƒ¼
  カウンター
  CLK
  OUT
  GATE
  ãƒãƒ£ãƒ³ãƒãƒ«0
  ãƒãƒ£ãƒ³ãƒãƒ«1
  ãƒãƒ£ãƒ³ãƒãƒ«2
8253ã®ãƒ¢ãƒ¼ãƒ‰
  モード0(タイマー)
  モード1(ワンショットタイマ)
  モード2(パルス生æˆãƒ¢ãƒ¼ãƒ‰ï¼‰
  モード3(矩形波生æˆãƒ¢ãƒ¼ãƒ‰ï¼‰
  モード4(ソフトウェアトリガーモード)
  モード5(ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒˆãƒªã‚¬ãƒ¼ãƒ¢ãƒ¼ãƒ‰ï¼‰
8253ã®ãƒ¬ã‚¸ã‚¹ã‚¿ãƒ¼
  カウンターレジスター
  制御コマンド(Control Word)レジスター
PITã®ã¾ã¨ã‚
割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼
  割り込ã¿ãƒ»ä¾‹å¤–ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å®Ÿè¡Œ
    ç¾åœ¨å®Ÿè¡Œä¸ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ã‚ˆã‚Šã‚²ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ã®æ–¹ãŒä½Žã„å ´åˆ
    ç¾åœ¨å®Ÿè¡Œä¸ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ã¨ã‚²ãƒ¼ãƒˆãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターã®ç‰¹æ¨©ãƒ¬ãƒ™ãƒ«ãŒåŒã˜å ´åˆ
  割り込ã¿ãƒ»ä¾‹å¤–時ã®ã‚¹ã‚¿ãƒƒã‚¯æ“作
  エラーコード
  割り込ã¿ãƒ»ä¾‹å¤–処ç†ã‹ã‚‰ã®å¾©å¸°
タイマー割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å…¥ã‚Šå£
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ï¼ˆIRQ)ã®çµ‚了通知
  割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®å‡ºå£
  タイマー割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®ã¾ã¨ã‚
    タイマー割り込ã¿ãƒãƒ³ãƒ‰ãƒ©ãƒ¼ã®IDTã¸ã®ç™»éŒ²

