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
[ツッコミを入れる]




