其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
Jicama OS成功建立微内核架构

作者:未知 来源:月光软件站 加入时间:2005-5-13 月光软件站

JICAMA OS由于技术上面的原因一直停留在类似LINUX的单内核架构中,为了更好的支持文件系统,设备驱动,和网络,建立了自己的微内核架构,同时与单内核调用并存,单内核的系统调用号是0x80,微内核的系统调用号为0x40,并用此模块来开发高度可移植的文件系统。

这里是开发中的一个范例:

服务端:
static inline int msgcall(int func, int task, msg_t *ptr)
{
  int return_value;
    __asm__ volatile ("int $0x40" \
        : "=a" (return_value) \
        : "0" ((long)(0x00)),"b" ((long)(func)),"c" ((long)(task)),"d" ((long)(ptr))); \
    return return_value;
}

int send(int task, msg_t *ptr)
{
 return msgcall(SEND, task , ptr);
}

int receive(int task, msg_t *ptr)
{
 return msgcall(RECEIVE, task , ptr);
}

int reply(int task, msg_t *ptr)
{
 return msgcall(REPLY, task , ptr);
}

void ser_init()
{
 printk("server_task1 init .....\n");
 printk("server_task1 RUNING .....\n");
}
void server_task1()
{
 int i;
 char buf[256];
 msg_t m;

 ser_init(); /*server init*/

 while(1){
  m.msg_addr=(u32_t)buf;
  receive(FIRST_KTASK, &m); /*receive message*/
  printk("receive OK\n");
  printk("MSG INFO: %s,Task=%d\n", buf, m.self); /*dump buffer!*/
  m.msg_addr=2; /*call result*/
 
  reply(m.self, &m); /*reply this message*/
 }
}
客户端:
int main (int argc, char *argv[])
{
 pid_t pid;
 int i = 0;
 u32_t b=0;
 int ret;
 char *str="First Message here!";
 msg_t m;

 m.self=0;
 m.func=1;
 m.message_len=strlen(str)+1;
 m.msg_addr= (u32_t)str;
 printf("\nMESSAGE SEND!\n");
 ret=send(32, &m);
 printf("Return Value is %d\n", ret);

 while (environ[i])
 {
  printf("%s\n", environ[i++]);
 }

    return 1;
}
在象册里面我保存了这里的开发快照,有兴趣的朋友可以看一看。




相关文章

相关软件