オペレーティングシステム2005 デバイス管理 (1)

Slides:



Advertisements
Similar presentations
1 オペレーティングシステム 2004 ファイル管理 (1) 2003 年 11 月 5 日 海谷 治彦.
Advertisements

Linuxを組み込んだマイコンによる 遠隔監視システムの開発
■プロセスとfileの関係 プロセスが一つファイルをオープンすると以下のようなデータ構造が作られる。
Linuxのデバイスファイルを意識して使ったこと が無い方へ入口の紹介。
情報検索概説II 第8回 パソコン組み立てと記憶装置 1999/11/25.
計算機工学III オペレーティングシステム #14 ファイル: より進んだファイルシステム 2006/07/21 津邑 公暁
ファイルキャッシュを考慮したディスク監視のオフロード
オペレーティングシステム i386アーキテクチャ(3)
入 出 力 管 理 オペレーティングシステム 6/26/09.
Linux インストール      のための基礎知識 物理実験 I 情報実験第9回 2003/12/12 中神 雄一.
1.コンピュータと情報処理 p.20 第1章第1節 3.ソフトウェア ソフトウェア 基本ソフトウェア
Android と iPhone (仮題) 情報社会とコンピュータ 第13回
組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)
UNIXマシン間のファイル転送 2002年10月20日 海谷 治彦.
ファイルシステムの構造 外部記憶装置のパーティション(区画) ファイルシステムとパーティション(区画) ファイルシステムのmount
中神 雄一 (北大・理) 最低限BIOS 中神 雄一 (北大・理)
最低限BIOS 物理実験1 情報実験第八回 2005/11/25
情報実習 情報実験第8回 最低限 BIOS 北海道大学 大学院理学院 宇宙理学専攻 博士課程二年 岩堀智子 37.
■デバイスドライバIF - ドライバの登録 ブロックデバイスのドライバの登録は、register_blkdev関数を用いて、ブロックデバイスドライバの 登録テーブルblkdev[ ]に、デバイス名とデバイス操作関数テーブルの登録を行う。 unregister_blkdev関数はその逆に登録を抹消する。
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
オペレーティングシステム (OSの機能と構造)
数値計算及び実習 第7回 プログラミングの基礎(5).
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
計算機システム概論・7回目 本日のトピック:やや先進的な話題 OSのネットワーク機能について OSを起動する仕組み 試験の実施方法について.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
第3回 CPUの管理と例外処理 OSによるハードウェアの管理 CPUの構成、動作 CPUの管理 例外処理、割り込み処理 コンテキストスイッチ
Linuxカーネルについて 2014/01.
オペレーティングシステム i386アーキテクチャ(2)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ネストした仮想化を用いた VMの安全な帯域外リモート管理
シグナル通信 普通の割込みとソフトウェア割込み ソフトウェア割込みとシグナル キーボードからのシグナル 例外 (exception)
デバイスからの異常注入が指定可能なCPUエミュレータ
情報実習 情報実験第8回 最低限 BIOS 北海道大学 大学院理学院 宇宙理学専攻 修士二年 近藤奨.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
専門演習Ⅰ 国際経済学部 国際産業情報学科 2年 石川 愛
インターネット技術特論 B:コマンドライン, shell 山口 実靖
第8回入出力制御 デバイスコントローラ ポーリングと割込み 入出力の方式 PIO DMA 入出力のためのソフトウェア技法.
前坂 たけし (北大院・理) 其の壱 はじめての BIOS 前坂 たけし (北大院・理)
前坂 たけし (北大院・理) 其の壱 はじめての BIOS 前坂 たけし (北大院・理)
FreeBSDの デバイスドライバについて
オペレーティングシステム2006 第1回 概要 2006年10月12日 海谷 治彦.
実行時情報に基づく OSカーネルのコンフィグ最小化
オペレーティングシステム イントロダクション
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
オペレーティングシステム 第2回 割り込みとOSの構成
演習2の解答例 2006年12月22日 海谷 治彦.
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング 第6回 システムプログラミング概要 プロセスの生成 担当:青木義満
情報実験第 7 回(2016/06/17) OS インストール・起動
オペレーティングシステムJ/K 2004年11月15日2時限目
オペレーティングシステム (ファイル) 2009年11月9日
オペレーティングシステム2006 ファイル管理 (3) 演習へのヒント他
オペレーティングシステム i386アーキテクチャ(1)
Linux の世界に 触れてみよう! 情報実験 第 3 回 (2005/10/21)
オペレーティングシステム (OSの機能と構造)
コンピュータアーキテクチャ 第 9 回.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
オペレーティングシステムJ/K 2004年10月4日
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
ネットワーク・プログラミング デバイスドライバと環境変数.
オペレーティングシステム (ファイル) 2006年11月16日
オペレーティングシステム (ファイル) 2008年11月17日
コンピュータアーキテクチャ 第 9 回.
高度プログラミング演習 (11).
ネットワーク・プログラミング TCPサーバ.
オペレーティングシステム (OSの機能と構造)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
ネットワーク・プログラミング プロセスとファイルシステム管理.
Presentation transcript:

オペレーティングシステム2005 デバイス管理 (1) 2005年12月8日 海谷 治彦

目次 i386におけるデバイス Linuxにおけるデバイスの抽象化 Linuxから見たデバイスの分類 デバイスドライバ

i386周辺の構造 第3回より再録 文献6 p.57

I/Oポートを使った入出力 CPUからは,I/Oポートというメモリのようなモノにデータを置いたり読んだりすることで,機器(ハード)にデータを送ることができる. i386の場合,65536個(216個)までのアドレスがI/Oポートにふられており,このアドレスで機器を区別する.

例 システムスピーカは0x0061のI/Oポートに接続されている. ⇒ ここになんかデータをおけばスピーカーが鳴る. キーボードは0x0060と0x0064のI/Oポートに接続されている. ⇒ これは制御に使われる?(未確認・後述)

例 ディスク関係 いわゆるIDEのディスク (昨今,もっとも一般的なハードディスク) 右はフロッピーディスクの制御用のI/Oポート

DMA その必要性 I/Oポートを使って,CPUが直接データを1個,もしくは数個づつ読んでいては,遅くてラチがあかない. Direct Memory Access の略.

DMAの概念図 わかる本 125の下

割り込み その必要性 前述のDMAでデータ転送が終わったら,そのことをCPUに通知しないといけない. このことを「割り込み」と呼んでいる.

割り込みの定義 「プロセッサ(CPU)が実行をする命令を変更するイベント」 同期割り込み 非同期割り込み CPUの制御回路が発生するイベント i386では「例外」と呼ばれる 非同期割り込み CPU以外のハードが発生するイベント i386では「割り込み」と呼ばれる. 文献5 p.115より

例外・割り込みの分類・特徴 例外 割り込み CPUが異常等を検出した際のイベント (i386では識別子 0~31の一部) ソフトウェア割り込み: 典型的な例は,システムコールによりカーネルコードに実行が移る際. 割り込み マスク可能割り込み ソフトウェア的な設定で割り込みを禁止できるもの.(32~47) マスク不能割り込み 禁止できないもの.ハードウェアの故障等に対応する.(i386では識別子の0~31の一部)

IRQとは i386のマスク可能割り込みを受け取る信号線. それぞれハードウェア機器に関連付けられている. それぞれのハードがCPUを使いたい場合に,IRQに対応した割り込みが発生する. 例: キーボードが打たれるとIRQ1番による割り込みがCPUにかかる. (前述のように)16個しかない. 左記のI/Oポートにどの割り込みが起きたかが書き込まれている. Interrupt ReQuest 文献5 p.119 文献7 p.95

典型的なIRQ 文献7 p.94 上記は典型例であり,特定の機器を外して,他の機器を割り当てることも少なく無い.

デバイスの抽象化 動機 前述のように,ポートだのアドレスだの一々叩いて機器をいじっていたのでは大変. 機器によって,実際,操作法は違うのだが,新しい機器(たとえばUSB2のディスクとか)が増える毎にプログラムを作り直さないといけないとラチがあかない. ⇒ 機器をほぼ全てファイルに見立て,ファイルの開閉,読書として機器をいじろう!

デバイスの抽象化 techi 13 p.17

デバイスファイルの例 /dev/ ディレクトリの下にある. /dev/hda IDEハードディスクその一 /dev/hda5 hda のパーティションその5 /dev/fd0 フロッピーディスク /dev/psaux PS/2マウス

デバイスドライバとは? 機器をファイルのように,open, close, read, write 等の処理が扱えるような仲介をしてくれる関数群. 通常はカーネルに組み込まれる. 機器に直接アクセスできるのはカーネルだけのため. 新しいハードウェア機器が開発される毎にデバイスドライバもそれにあわせて作らなければならない. しかし,名の通った機器(USBとかIEEE1294とか)のデバドラは大抵,すでに誰かが作成済である. しかも,Linuxの世界では大抵それが無償で使える.

アプリからデバスまで アプリケーション open(“/dev/xxx”, O_RDWR); OS xxx_open(…..); カーネル内 open, close, read, write 等のシステムコールを呼んで,デバイスにアクセス. open(“/dev/xxx”, O_RDWR); OS デバイスの種類を見て,該当するデバドラに処理を委譲する. xxx_open(…..); カーネル内 デバイスドライバ 機器に会わせた操作,例えば特定のポートを叩くとか,をして関数に対応した処理を実施する. ポート0x61に0xffを置く 機器(デバイス)

実際に利用可能なデバドラを見る /proc/devices ファイルに列挙されている. それぞれがある種類のデバイス用(共用もある.) # cat /proc/devices Character devices: 1 mem 2 pty 3 ttyp 4 ttyS 5 cua 7 vcs 10 misc 29 fb 36 netlink 128 ptm 136 pts 162 raw 180 usb 254 wildio /proc/devices ファイルに列挙されている. それぞれがある種類のデバイス用(共用もある.) 先頭にある番号で識別されている. 2種類の種別がある. Block devices: 1 ramdisk 2 fd 3 ide0 9 md 22 ide1

デバイスの種類 キャラクタ型 ブロック型 一度のI/Oで任意のデータが転送可能な機器. キーボードとかネットワークとか. 通常,順次アクセスしかできない. ブロック型 一度のI/Oで固定長のデータブロックを転送可能な機器. ディスク一般. ブロック内でランダムアクセスが可能.

デバイスの種類に関する補足 キャラ,ブロックに分けるのは歴史的背景からという話もある. それぞれに適用できるシステムコールの種類は異なる. もう一つの型「ネットワーク型」というのがあるが本講義では扱わない. 一般にブロック型のほうが複雑.本講義では以降,基本的にキャラクタ型のみを扱う.

個々のデバイスの認識 前述のように,個々のデバイスファイル /dev/なんとか は,OS内からは個々のデバイスそのものである. それぞれのデバイスが,何型でどのドライバを使っているかは,ls –l 等でデバイスファイルの属性を見れば,すぐにわかる.

例 抜粋 # cat /proc/devices Character devices: 10 misc Block devices: 3 ide0 例 抜粋 3番のデバイスドライバを使用, このドライバは共用されている. メジャー番号 3番のデバイスドライバを使用, このドライバは共用されている. メジャー番号 # ls -l /dev/hda1 brw-rw---- 1 root disk 3, 1 Oct 5 2000 /dev/hda1 # ls -l /dev/hdb1 brw-rw---- 1 root disk 3, 65 Oct 5 2000 /dev/hdb1 # ls -l /dev/psaux crw-rw---- 1 root root 10, 1 Oct 5 2000 /dev/psaux 10番のデバイスドライバを使用 同じドライバを使う異なるデバイスは番号をつけて管理する. マイナー番号 通常ファイルではサイズを表示 -rw-r--r-- 1 root root 52 Apr 11 2002 /etc/resolv.conf

ファイルに対するシステムコール open ファイルを開ける close 閉じる read ファイルからデータを読む. write ファイルにデータを書き込む. ioctl デバイスの属性を変更したり,制御したりするのに使用する. 例えば,通信ポートのスピードを変更するなど. これらはアプリケーションが利用する関数群である.

カーネルに特定機器を登録する 要はデバイスドライバを作るということである. ファイル管理の所で話した struct file_operations のメンバーに相当する関数がデバイスドライバの実体である. 全てのメンバーを定義する必要は無い. 上記の構造体を使って,新たに作成したドライバをカーネルに組み込む関数がLinuxには準備されている. モジュールの登録

構造体 file_operations include/linux/fs.h の810行目くらい struct file_operations { // Kernel 2.4版 struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*flush) (struct file *); int (*release) (struct inode *, struct file *); ・・・ 以下省略 }; include/linux/fs.h の810行目くらい 全てのファイルシステムに全ての関数が定義されているわけではない.