&組込プログラミング&

このエントリーをはてなブックマークに追加
1ヨッシ
ハンドアセンブルもよし、クロスコンパイラ環境もよし、
ドライバ、ブートローダ、カーネル等OSからみでもよし。
2名無しさん@お腹いっぱい。:04/01/08 16:50 ID:jIiHBoqC
2get
3名無しさん@お腹いっぱい。:04/01/08 20:17 ID:I5sSPDae
この板はソフト屋少ないよ。
4東葛技研 ◆s6tAuTPLb2 :04/01/08 21:20 ID:yFa8LmmY
マイコンでマルチスレッドを考えているのだが
どうすればいいんだろう…
53:04/01/08 22:53 ID:pbKMlCkI
>>4
CPUはなんだ?
6東葛技研:04/01/09 08:02 ID:4SKCm/ut
いやCPUってか、
マルチスレッドはどうやってプロセス切り替えているのだろうとか、
その時レジスター値はどういう保存の仕方がされているのだろうとか、
フツーにやったらプロセス切り替えだけで相当な負荷になっちゃうじゃん。
ちなみにZ80しか知りません。
7東葛技研 ◆s6tAuTPLb2 :04/01/09 10:38 ID:vhBsfuqB
どうやら割り込みを使うらしい、
一定時間毎に割り込み信号を入力し、割り込み先に切り替えプログラムを書いておいて
レジスター値はその都度プロセスごとに退避保存しておくしかない模様。
PC用CPUはその辺うまく出来ているのであろうか?
8名無しさん@お腹いっぱい。:04/01/09 12:26 ID:KaPgKX03
>>7
>PC用CPUはその辺うまく出来ているのであろうか?
同じですよ。
例えば、
/*
* linux/arch/i386/entry.S
*
* Copyright (C) 1991, 1992 Linus Torvalds
*/
    ・
    ・
#define SAVE_ALL \
    cld; \
    pushl %es; \
    pushl %ds; \
    pushl %eax; \
    pushl %ebp; \
    pushl %edi; \
    pushl %esi; \
    pushl %edx; \
    pushl %ecx; \
    pushl %ebx; \
    movl $(__KERNEL_DS),%edx; \
    movl %edx,%ds; \
    movl %edx,%es;

#define RESTORE_ALL   \
    popl %ebx;   \
    popl %ecx;   \
    popl %edx;   \
    popl %esi;   \
    popl %edi;   \
    popl %ebp;   \
    popl %eax;   \
1:   popl %ds;    \
2:   popl %es;    \
    addl $4,%esp;  \
3:   iret;\
    ・
    ・
9名無しさん@お腹いっぱい。:04/01/09 23:14 ID:taTSJ5HG
>>8
タスクゲートをコールすれば勝手にやるじゃん。
10名無しさん@お腹いっぱい。:04/01/10 00:37 ID:Ei9FcI60
>>9
そんな便利なもんx86にしかねーべ。
11sage:04/01/10 01:04 ID:cPBgwI7x
>>9
タスクゲート使う奴は素人。
12名無しさん@お腹いっぱい。:04/01/13 10:38 ID:wPqxAEh/
>>11
Linuxではtaskgateは使用しない。
13名無しさん@お腹いっぱい。:04/01/13 17:04 ID:urWz7Hfl
>>12
GDTに置けるディスクリプタ数の制限からそうしてるの?
プロセス数が8192?で決まっちゃうって言うか。
14名無しさん@お腹いっぱい。:04/01/16 18:27 ID:hmRJTm9f
Z80なら裏レジスタに切り替えれば高速。
オリジナルは2プロセスだけど互換のには裏の裏とかあったよね。
15名無しさん@お腹いっぱい。:04/01/19 17:34 ID:e7QDeTzl
>>12
どういう理由ですか?
16名無しさん@お腹いっぱい。:04/01/19 17:37 ID:bCsniI7k
>>15
Linusくんが86系CPUを(つーか、ハード全般を)わかってなかったから。
17名無しさん@お腹いっぱい。:04/01/19 21:10 ID:Yglv0G64
>>16
でもあんなの分かりたくないよな。
普通の(x86以外のCPUでもできる)やり方で書けるし、少なくともPentium
以降はそっちのほうが速いし。
18名無しさん@お腹いっぱい。:04/01/20 13:51 ID:LZJga6ay
>>16
タスクゲート使わないのはTSSメカニズムが糞だからでしょ。
糞を糞と(以下ry

Linuxも2.0くらいまではタスクゲート使ってたんじゃなかったか?
今でも2重フォールトのハンドリングには使っているはず。この辺は
FreeBSDでも同じだと思った。
19名無しさん@お腹いっぱい。:04/01/20 17:06 ID:V831guRi
>>15
arch/i386/kernel/process.cの__switch_toのコメント

* NOTE! We used to use the x86 hardware context switching. The
* reason for not using it any more becomes apparent when you
* try to recover gracefully from saved state that is no longer
* valid (stale segment register values in particular). With the
* hardware task-switch, there is no way to fix up bad state in
* a reasonable manner.
*
* The fact that Intel documents the hardware task-switching to
* be slow is a fairly red herring - this code is not noticeably
* faster. However, there _is_ some room for improvement here,
* so the performance issues may eventually be a valid point.
* More important, however, is the fact that this allows us much
* more flexibility.

FreeBSDは元々からソフトウエアスイッチ。
20774ワット発電中さん:04/02/17 20:55 ID:iwnvmnFh
TCP/IPプロトコルのフリーのやつってあるのかな。
21名無しさん@お腹いっぱい。:04/02/20 15:50 ID:XTpcHNZG
UNIX系ならみんな実装してるじゃん
22774ワット発電中さん:04/02/23 22:55 ID:rTTcUjEF
2320
>>22
結構ありますね。情報サンクス。