
Linux初心者です。よろしくお願いします。
Cで記述された旧式のRTOSでのプログラム
をLinux環境に移植しようとしていて、
Timesys Linuxを購入予定ですがまだ入手で
きてないので、Vine Linux 2.6で試運転させて
います。
10ms毎の周期起床するタスクを旧記述では
カーネルコールのsleep()で起床待ちさせて
起床タイミングはカーネルのスケジューラに
任せていたため、同じように動かそうとタスク
をPosixThreadにしてその上でusleep(),
nanosleep()等を実行してみたのですが、
待機時間が2ms以下か、20m以上になってしま
って上手くスリープしてくれません。
(スケジューリング周期は10msです。)
標準のLinuxで10ms(毎のスケジューリング
タイミングまで)待たせる場合はどういう
方法をとるとよいでしょうか?
No.3
- 回答日時:
>スケジューリング間隔が10msであれば、毎回起床できそうな気がするのです
時間保証は無いでしょうから、毎回起床してもその時間間隔がどの程度正確かは状況次第です。
他に優先度の高い時間のかかる処理が合計10ms以上動くことも十分ありえますよね。
どの程度の精度で実行されるかは、OSとその設定やドライバのつくり、他に動いているプロセス、タスク、スレッドの処理内容やプライオリティによると思います。
逆にRTOSならプライオリティや割り込み意識して組んでいれば、sleep()相当の処理でもそれなりの精度がでますが。(sleepだと自身の処理時間が反映されないのでその分不正確)
通常のOSのユーザープロセスでの高精度の時間処理は無理と考えた方がいいと思いますが。
まあ、カーネルレベルでもそう簡単にはRTOSレベルにはいかないでしょうが。
仕事でWindowsで60Hzの処理をやることがありますが、開発途中までは時間精度は無視です。
ターゲットでは外部タイマーから割り込みかけて正確な時間間隔を得ています。
ありがとうございます。
FIFOで動く部分については、全ての処理の最大負荷
を実測して間に合うように設計しています。
確かに標準カーネルではタイミング精度はあまりよくな
いようですね。
タイミング精度はなくても周期性が確保できるようなら
十分なソフトの場合に採用しようかと考えています。
No.1
- 回答日時:
RTOSでないLinuxに無理な要求してませんか(^^;
ソース上は10msに書けても、まずその精度では動かないと思います。
http://www.mech.tohoku-gakuin.ac.jp/rde/contents …
そもそも、スケジューリングが10ms単位ぐらいのようですね。
また、プライオリティ等はどうしてますか?
通常ラウンドロビンしてると思いますので,
それなりの高いプライオリティにしないと精度以前の問題になりますが。
もし、そういう話がわからないのであれば、リアルタイム制御について、もう少し調べてから取り組んだ方がいいと思います。
私はLinux系でのリアルタイムは経験ないですが、pSOS+とvxWorksは使ったことがあります。
参考URL:http://www.mech.tohoku-gakuin.ac.jp/rde/contents …
回答、資料ありがとうございます。
スレッド優先度はpthread_setschedparam()
でセットしています。
(もちろんポリシはSCHED_FIFOです)
スケジューリング周期を5msにしてみた例を検索
で見つけて読みました。
Timesysであればsleep()のような遅延起床でなく
周期起床の予約関数が用意されてますし、起床タ
イミングの精度が必要なので、今回のソフトは標
準カーネルの使用をあきらめていますが、今後他
のソフトの移植を予定してますので、できそうな
ら標準カーネルでの動かし方を知っておきたいと
思って質問させていただきました。
スケジューリング間隔が10msであれば、毎回起床
できそうな気がするのですが、仕様的にsleep()
では無理なのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux mxlinux 起動時エラーについて 1 2023/01/28 23:05
- UNIX・Linux Zabbix監視エージェントをインストールしてもデータを収集できずアクティブにならない 1 2023/02/26 20:25
- デスクトップパソコン BIOSがIDE HDDを認識しない 5 2022/10/02 18:28
- UNIX・Linux ノートPCでUSBから起動しない 6 2022/05/05 09:34
- CPU・メモリ・マザーボード マザーボードM5A99FX PRO R2.0にCentOS7,Fedora32,Debian11等を 2 2023/05/24 05:08
- UNIX・Linux Kali Linuxで起動できない - Minimal BASH Like Line Editing 1 2022/06/03 13:14
- 中古パソコン 富士通 ESPRIMO B532/G のBIOSが表示されない 3 2023/01/03 16:42
- その他(OS) CloudreadyでLinuxのセットアップが出来無い 1 2022/04/06 12:36
- その他(プログラミング・Web制作) テキストデータ変換(プログラミング、linux、python) 8 2023/08/08 16:39
- UNIX・Linux Linuxサーバーのパーティション・ディレクトリの推奨見積もりについて 3 2023/01/17 00:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パフォーマンスモニタの%Proces...
-
RHL7.2でカーネルの再構築
-
Linuxカーネルは誰が動かしてい...
-
カーネルメモリをすべて物理メ...
-
linuxカーネルのダウングレード...
-
romfsってなんですか?
-
*長文となっております、予めご...
-
CentOS5.3でNICを認識しない
-
/dev/nvme0n1p2 clean と表示さ...
-
BSDでフォーマットされたHDDは...
-
OSの中身
-
Debian で時間が経つと画面が消...
-
/proc/sys/net/ipv4/route/flus...
-
パソコンでゲームをプレイしよ...
-
NET-BSDでLANカード...
-
アンドロイドスタジオでアプリ...
-
RPMでインストールがうまくでき...
-
turbopkgでパッケージの自動ア...
-
PUTTYでログインしたコンソール...
-
Debianでのmakeコマンドインス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SolarisとLinuxの違い
-
パフォーマンスモニタの%Proces...
-
カーネル再構築でのエラー
-
割り込み不可能?なプロセスを...
-
Linuxって何?
-
/dev/nvme0n1p2 clean と表示さ...
-
Linux 32Bitと64Bitのメモリー...
-
androidがIPadに劣る、Linuxだ...
-
カーネルバッファとは何でしょうか
-
apacheのプロセス数が不安定
-
Redhat9のカーネルのアップにつ...
-
Debian で時間が経つと画面が消...
-
CentOSのデスクトップ画面が立...
-
/proc/sys/net/ipv4/route/flus...
-
エラー”Illegal seek”はどんな...
-
UNIXとBSDとLinuxの違いを小学...
-
どうしてwindowsはMacと比べ動...
-
カーネルの再構築の方法
-
Linuxでcrcエラー?
-
ツインCPUでのLinuxインス...
おすすめ情報