2011-12-18 :-)
_ 午後
1400 KOZOS
_ 夜
2130 飯。たらのフライというか 白身魚のコーンフレークス揚げ のようなことをやろうとしたら結局普通にフライになった。
_ ,
細江慎治さんの(ブログの)言葉使いがどうも馴染みあるなあと思ってたら ohguchi と同じような言葉使いなのだった
_ [KOZOS]KOZOS 9章
いつものアライメント
--- C:/home/rin/work/OS/KOZOS/osbook_03/09/os/kozos.c Sat Mar 20 15:02:12 2010 +++ C:/home/rin/work/OS/KOZOS/osbook/src/09/os/kozos.c Sun Dec 18 17:11:34 2011 @@ -35,6 +35,9 @@ } syscall; kz_context context; /* コンテキスト情報 */ + + char dummy[8]; + } kz_thread; /* スレッドのレディー・キュー */ @@ -233,10 +236,11 @@ return old; } +static void thread_intr(softvec_type_t type, unsigned long sp); + /* 割込みハンドラの登録 */ static int setintr(softvec_type_t type, kz_handler_t handler) { - static void thread_intr(softvec_type_t type, unsigned long sp); /* * 割込みを受け付けるために,ソフトウエア・割込みベクタに
手で数えるのが面倒なので kozos.c 冒頭の構造体定義をコピペして sizeof することにした。printf は kozos の lib.h にも宣言されてるのでちゃんと stdio.h のほうを使う。
#include <stdio.h> #include "defines.h" #include "kozos.h" #include "intr.h" #include "interrupt.h" #include "syscall.h" //#include "lib.h" #define THREAD_NUM 6 #define PRIORITY_NUM 16 #define THREAD_NAME_SIZE 15 /* スレッド・コンテキスト */ typedef struct _kz_context { uint32 sp; /* スタック・ポインタ */ } kz_context; /* タスク・コントロール・ブロック(TCB) */ typedef struct _kz_thread { struct _kz_thread *next; char name[THREAD_NAME_SIZE + 1]; /* スレッド名 */ int priority; /* 優先度 */ char *stack; /* スタック */ uint32 flags; /* 各種フラグ */ #define KZ_THREAD_FLAG_READY (1 << 0) struct { /* スレッドのスタート・アップ(thread_init())に渡すパラメータ */ kz_func_t func; /* スレッドのメイン関数 */ int argc; /* スレッドのメイン関数に渡す argc */ char **argv; /* スレッドのメイン関数に渡す argv */ } init; struct { /* システム・コール用バッファ */ kz_syscall_type_t type; kz_syscall_param_t *param; } syscall; kz_context context; /* コンテキスト情報 */ char dummy[8]; } kz_thread; int main(int argc, char** argv) { printf( "kz_thread: %d byte\n", sizeof(kz_thread)); return 0; }
そんだけ
% gcc -I./09/os kz_thread.c % ./a.exe kz_thread: 64 byte
[ツッコミを入れる]