Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
sandai
PDF, PPTX
2,138 views
【学習メモ#9th】12ステップで作る組込みOS自作入門
12ステップで作る組込みOS自作入門 http://www.amazon.co.jp/dp/4877832394/ 坂井 弘亮(著) カットシステム
Technology
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 25
2
/ 25
3
/ 25
4
/ 25
5
/ 25
6
/ 25
7
/ 25
8
/ 25
9
/ 25
10
/ 25
11
/ 25
12
/ 25
13
/ 25
14
/ 25
15
/ 25
16
/ 25
17
/ 25
18
/ 25
19
/ 25
20
/ 25
21
/ 25
22
/ 25
23
/ 25
24
/ 25
25
/ 25
More Related Content
PDF
【学習メモ#8th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#11th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#6th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#1st】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#3rd】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#7th】12ステップで作る組込みOS自作入門
by
sandai
PDF
【学習メモ#5th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#8th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#11th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#6th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#1st】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#4th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#3rd】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#7th】12ステップで作る組込みOS自作入門
by
sandai
【学習メモ#5th】12ステップで作る組込みOS自作入門
by
sandai
What's hot
PPT
リアルタイムOsのカスタマイズ
by
Kazuhiro Takahashi
PDF
[Basic 8] プロセスとスレッド / 入出力 / シェル
by
Yuto Takei
PDF
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
by
Yuto Takei
PDF
[Basic 9] 並列処理 / 排他制御
by
Yuto Takei
PPTX
リアルタイムOSの必要性とTOPPERS/SSPの紹介
by
NSaitoNmiri
PDF
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
by
Hiraku Toyooka
PDF
プロセスとコンテキストスイッチ
by
Kazuki Onishi
PDF
さわってみようTOPPERS/SSP
by
NSaitoNmiri
PDF
ラズパイでデバイスドライバを作ってみた。
by
Kazuki Onishi
PDF
あるコンテキストスイッチの話
by
nullnilaki
PDF
x86とコンテキストスイッチ
by
Masami Ichikawa
PDF
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
by
Yahoo!デベロッパーネットワーク
PDF
X86opti01 nothingcosmos
by
nothingcosmos
PDF
systemd 再入門
by
Kazuhiro Nishiyama
PPTX
Completely Fair Scheduler (CFS)
by
gokzy
PDF
Minix Learning
by
榎本 優樹
ODP
Read daemon on 20121110 by shinaisan
by
shinaisan
PPTX
ぼくnmonです
by
洋史 東平
PPTX
x86-64/Linuxに独自メモリ空間を勝手増設
by
Minoru Nakamura
PDF
Intel TSX について x86opti
by
Takashi Hoshino
リアルタイムOsのカスタマイズ
by
Kazuhiro Takahashi
[Basic 8] プロセスとスレッド / 入出力 / シェル
by
Yuto Takei
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
by
Yuto Takei
[Basic 9] 並列処理 / 排他制御
by
Yuto Takei
リアルタイムOSの必要性とTOPPERS/SSPの紹介
by
NSaitoNmiri
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
by
Hiraku Toyooka
プロセスとコンテキストスイッチ
by
Kazuki Onishi
さわってみようTOPPERS/SSP
by
NSaitoNmiri
ラズパイでデバイスドライバを作ってみた。
by
Kazuki Onishi
あるコンテキストスイッチの話
by
nullnilaki
x86とコンテキストスイッチ
by
Masami Ichikawa
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
by
Yahoo!デベロッパーネットワーク
X86opti01 nothingcosmos
by
nothingcosmos
systemd 再入門
by
Kazuhiro Nishiyama
Completely Fair Scheduler (CFS)
by
gokzy
Minix Learning
by
榎本 優樹
Read daemon on 20121110 by shinaisan
by
shinaisan
ぼくnmonです
by
洋史 東平
x86-64/Linuxに独自メモリ空間を勝手増設
by
Minoru Nakamura
Intel TSX について x86opti
by
Takashi Hoshino
Viewers also liked
PDF
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
by
Kishi Shundo
PDF
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
by
Hirotaka Kawata
PDF
QEMUでARM64bitベアメタルプログラミング
by
Yuma Ohgami
PDF
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
by
kozossakai
PDF
やってよかったOS作り
by
Hidemi Kawai
PDF
低レイヤー入門
by
demuyan
PPTX
人工知能概論 1
by
Tadahiro Taniguchi
PPTX
ゼロから始める自作 CPU 入門
by
Hirotaka Kawata
PDF
【2000行弱!】x86用自作カーネルの紹介
by
Yuma Ohgami
PDF
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
by
Nisei Kimura
PDF
C++でできる!OS自作入門
by
uchan_nos
PDF
Ctfのためのpython入門
by
shiracamus
PDF
ハッキング実演
by
Ken Ogura
PDF
CTF超入門 (for 第12回セキュリティさくら)
by
kikuchan98
組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング -
by
Kishi Shundo
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
by
Hirotaka Kawata
QEMUでARM64bitベアメタルプログラミング
by
Yuma Ohgami
組込みOSを作ってみよう!(オープンソースカンファレンス内セミナー資料)
by
kozossakai
やってよかったOS作り
by
Hidemi Kawai
低レイヤー入門
by
demuyan
人工知能概論 1
by
Tadahiro Taniguchi
ゼロから始める自作 CPU 入門
by
Hirotaka Kawata
【2000行弱!】x86用自作カーネルの紹介
by
Yuma Ohgami
Web系だって低レイヤーがやりたいんだよ! コンパイラことはじめ
by
Nisei Kimura
C++でできる!OS自作入門
by
uchan_nos
Ctfのためのpython入門
by
shiracamus
ハッキング実演
by
Ken Ogura
CTF超入門 (for 第12回セキュリティさくら)
by
kikuchan98
Similar to 【学習メモ#9th】12ステップで作る組込みOS自作入門
PDF
PEZY-SC programming overview
by
Ryo Sakamoto
PDF
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
PDF
Kernel vm study_2_xv6_scheduler_part1_revised
by
Toshiaki Nozawa
PDF
2011.09.18 v7から始めるunix まとめ
by
Makiko Konoshima
PDF
kagamicomput201701
by
swkagami
PDF
2011.06.11 v7から始めるunix まとめ
by
Makiko Konoshima
PPTX
20200709 fjt7tdmi-blog-appendix
by
Akifumi Fujita
PDF
Cpuの速度向上はいかに実現されたのか
by
Joongjin Bae
PPTX
20分でわかった事にするパワーマネジメント
by
magoroku Yamamoto
PDF
CPUの同時実行機能
by
Shinichiro Niiyama
PDF
Code jp2015 cpuの話
by
Shinichiro Niiyama
PPTX
15(haifu)
by
TomonariMurata
PDF
Mt basic as-os_on_danbot
by
たけおか しょうぞう
PDF
Cpu pipeline basics
by
Shinichiro Niiyama
PDF
StackExchangeで見たシステムプログラミング案件
by
yaegashi
PPT
Bsd suki
by
yamori813
PDF
本当にわかる Spectre と Meltdown
by
Hirotaka Kawata
PDF
kagami_comput2016_01
by
swkagami
PDF
第4回 配信講義 計算科学技術特論B(2022)
by
RCCSRENKEI
PPTX
Stellaris を使った組み込みアプリ開発ガイド
by
ryos36
PEZY-SC programming overview
by
Ryo Sakamoto
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
Kernel vm study_2_xv6_scheduler_part1_revised
by
Toshiaki Nozawa
2011.09.18 v7から始めるunix まとめ
by
Makiko Konoshima
kagamicomput201701
by
swkagami
2011.06.11 v7から始めるunix まとめ
by
Makiko Konoshima
20200709 fjt7tdmi-blog-appendix
by
Akifumi Fujita
Cpuの速度向上はいかに実現されたのか
by
Joongjin Bae
20分でわかった事にするパワーマネジメント
by
magoroku Yamamoto
CPUの同時実行機能
by
Shinichiro Niiyama
Code jp2015 cpuの話
by
Shinichiro Niiyama
15(haifu)
by
TomonariMurata
Mt basic as-os_on_danbot
by
たけおか しょうぞう
Cpu pipeline basics
by
Shinichiro Niiyama
StackExchangeで見たシステムプログラミング案件
by
yaegashi
Bsd suki
by
yamori813
本当にわかる Spectre と Meltdown
by
Hirotaka Kawata
kagami_comput2016_01
by
swkagami
第4回 配信講義 計算科学技術特論B(2022)
by
RCCSRENKEI
Stellaris を使った組み込みアプリ開発ガイド
by
ryos36
【学習メモ#9th】12ステップで作る組込みOS自作入門
1.
12ステップで作る組込みOS自作入門
9thステップ @sandai
2.
【参考書籍】 12ステップで作る組込みOS自作入門 【内容】 1ステップずつ、実際に動かしながらプログラムを発展さ せていく方式で無理なく学べる。OSやハードウェアに詳 しくない方にも理解できるよう に十分な説明を提供 坂井 弘亮(著) カットシステム(2010/5) 【税込価格】 4,410円 【サポートページ】 http://kozos.jp/books/makeos/
3.
もくじ 1.優先度ベースのスケジューリング 2.優先度の実装 3.プログラムの実行 4.まとめ
4.
1.優先度ベースのスケジューリング
5.
優先度 ●
組込みのOSでは一般的に優先度をベースにスケ ジューリングが行われている ● 優先度の高いスレッドが常に動作する
6.
スレッドの状態 ●
ここまでのプログラムのスレッドは常に「動作 可能」の状態。常に動いているってこと ● これだと複数スレッド間で同期的な動作をさせ られない – あるスレッドが特定の処理を行うまで別スレッドが 待ち合わせする、といったことができない ● そこでスレッドに「待ち」という状態を追加す る – スレッドを待ちにするシステム・コールを作る ● 待ち状態にするにはレディー・キューからス レッドを抜けばいい
7.
スレッドにおける状態の呼び名 ●
スレッドが「待ち」状態に入ることをスリープ やウェイティングと呼ぶ ● スレッドがキューに繋がって動作可能の状態を レディーと呼ぶ ● スリープ状態のスレッドをレディー状態に戻す ことをウェイクアップと呼ぶ ● 動作中のスレッドはアクティブやランニングな どと呼ぶ ● このように、スレッドにはレディーとスリープ の2つの状態が存在する
8.
優先度とプリエンプション ●
ここまでのプログラムだと、実行可能なスレッ ドが複数ある場合はシステム・コールによって 順番に実行するようになっている ● しかし、組込みシステムではあるスレッドがレ ディー状態になったとき、別のスレッドをさし おいてでも動作させたい場合がある – たとえば車のエアバック制御は、衝突を検知したら 一番に処理したい部分 ● ある割込みが発生した場合に、必ず一定時間内 で処理を開始するという時間保証が行えるかど うかを、OSのリアルタイム性と言う
9.
リアルタイムOS ●
リアルタイム性を提供するOSをリアルタイムOS と呼ぶ ● ハードウェア制御だと、ある割込み発生から特 定の処理を一定時間内に必ず行う必要があるな どの時間制約がある場合がある。こういったと きにOSのリアルタイム性は重要 ● 複数のスレッドがレディー状態のとき、どれを 動作するのか選択する必要があり、それに優先 度が利用される
10.
プリエンプション ●
スレッドの動作が別のスレッドに強制的に切り 替わる動作を一般的にプリエンプションと呼ぶ – 優先度を持ったスレッドなら、優先度の低いスレッ ドの実行が中断され、優先度の高いスレッドが実行 されることでこのように動作する ● プリエンプションが可能であることをプリエン プティブと言い(先取り可能とも言う)、スレッ ドが突然中断するようなことが無いのであれば ノンプリエンプティブと呼ぶ ● KOZOSはプリエンプティブなOSとして開発して いく
11.
アイドル・スレッド ●
スレッドに優先度がつくと、やることがないと きにCPUを省電力モードにするアイドル・ス レッドが簡単に実装できる ● 今のプログラムだとレディー・キューが空にな るとシステムダウンしてしまうため、空になら ないよう一番低い優先度で「ムダななんらかの 処理」をするスレッドを常に動かしておく必要 がある while(1) { // なにもしない状態 }
12.
省電力モード ●
一般的なCPUには省電力モードという状態があ る – x86でいうところのHLT命令かな ● CPUを省電力モードにすると命令の実行を停止 し、割込みが入るまで待つ状態になる – クロックが止まるので省電になるようだ ● 他に動作する処理がないなら、アイドル・ス レッドを実行して待機状態にすれば良い while(1) { // ビジーループよりこうした命令を使うべきだね (CPUを省電力モードに遷移する命令); }
13.
2.優先度の実装
14.
プログラムの修正と追加 ●
追加ファイル – test09_1.c,test09_2,test09_3...スレッドとなる サンプルプログラム ● 修正ファイル – kozos.h,kozos.c...優先度を実装 – syscall.h,syscall.c...スレッド制御のシステム コール追加 – main.c...アイドル・スレッド追加 – Makefile
15.
プログラムの修正内容 ●
スレッドの状態を制御するシステム・コールの 追加 – kz_wait(),kz_sleep(),kz_wakeup(),kz_getid(),kz _chpri() ● 優先度の追加 – 構造体に値を持たせて ● readayqueを配列化 – 優先度のスレッド別にまとめる形 – ここのらへんのスケジューリングのアルゴリズムが 少し複雑かなってぐらいで、あとは8thステップの 延長
16.
3.プログラムの実行
17.
ビルドの失敗(kozos.c) ●
パディングのサイズを変更 typedef struct _kz_thread { . . kz_context context; char dummy[8]; ←dummy[16]からdummy[8]にした } kz_thread;
18.
プログラムの実行 /Users/sandai/12step/src/09/os% sudo cu
-l /dev/tty.usbserial-FTG6PQ4H kzload> run . . test09_3 started. test09_3 wakeup in (test09_1). test09_1 sleep out. test09_1 chpri in. test09_3 wakeup out. test09_3 wakeup in (test09_2). test09_2 sleep out. test09_2 chpri in. test09_1 chpri out. test09_1 wait in. test09_3 wakeup out. test09_3 wait in. test09_2 chpri out. test09_2 wait in. test09_1 wait out. test09_1 trap in. test09_1 DOWN. test09_1 EXIT. test09_3 wait out. test09_3 exit in. test09_3 EXIT. test09_2 wait out. test09_2 exit. test09_2 EXIT.
19.
4.まとめ
20.
まとめ1 ●
8thステップを理解していないと9thステップは 何をやっているのかわからないはず ● プログラムの修正部分に難しいコードはない ● システム・コールとスケジューリング部分のア ルゴリズムの処理の流れが難しいので、そこを まとめておこう
21.
まとめ2 ●
下記のkz_run()のうち、test09_1_id = ...の 処理の流れを記述しておく ● kz_start()でstart_threads()が起動した後の ことなので注意 static int start_threads(int argc, char *argv[]) { test09_1_id = kz_run(test09_1_main, "test09_1", 1, 0x100, 0, . .
22.
まとめ3 ●
kz_run() – kz_syscall()に渡すデータを構造体に保存 – kz_syscall()呼び出し ● kz_syscall() – current->syscall.xxxにシステムコールのタイプと kz_run()で受け取った構造体を設定 – asm volatile(“trapa #0”)で割込みが発生して thread_intr()呼び出し
23.
まとめ4 ●
thread_intr() – handlers[type]()によりsyscall_intr()呼び出し ● 最終的にthread_run()が呼び出されてp- >un.run.ret = にcurrentが代入される – schedule()呼び出し ● この部分でスケジューリングされるため、優先 順位の高い初期スレッドのidleスレッドが動作 対象。test09_1_mainには映らないので注意 – dispatch()呼び出し ● currentにあるidleスレッドのstart_threadsが 実行を再開
24.
まとめ5 ●
dispatch()が呼ばれると、割込みが発生した kz_syscall()にあるasm volatile(“trapa #0”)から続く ● 特に処理がないので、kz_run()に戻り、return param.un.run.retでtest09_1_idにその値が代 入され、test09_2_id = ...と処理が同じよう に続く
25.
まとめまとめ ●
kz_run()の流れは以上のような形 ● 優先順位によってschedlue()で動作するスレッ ドが決まるので、ここを気をつけてみる必要が ある ● あとはkz_sleep()が難しいかも。レディー・ キューから外した場合、test09_1_idにスレッ ドIDが保存されていて、kz_sleep()ではそれを 使ってレディー・キューに再度入れていること になっている – スリープさせたスレッドの管理が微妙な気がするけ れど、こういうものなんだろうか
Download