예제 #1
0
파일: hd.c 프로젝트: yankaifyyy/Owindy-S
PUBLIC void task_hd()
{
    MESSAGE msg;
    init_hd();

    while (true) {
        send_recv(RECEIVE, ANY, &msg);
        int src = msg.source;

        switch (msg.type) {
        case DEV_OPEN:
            hd_identify(0);
            //hd_open(msg.DEVICE);
            break;
        case DEV_CLOSE:
            hd_close(msg.DEVICE);
            break;
        case DEV_READ:
        case DEV_WRITE:
            hd_rdwt(&msg);
            break;
        case DEV_IOCTL:
            hd_ioctl(&msg);
            break;
        default:
            kprintf("[KERNEL ERROR]HD driveer::unknown msg");
            break;
        }

        send_recv(SEND, src, &msg);
    }
}
예제 #2
0
파일: hd.c 프로젝트: wwssllabcd/myOS
/**
 * Main loop of HD driver.
 *
 *****************************************************************************/
PUBLIC void task_hd()
{
    MESSAGE msg;
    init_hd();
    while (1) {
        send_recv(RECEIVE, ANY, &msg);
        int src = msg.source;

        switch (msg.type) {
        case DEV_OPEN:
            hd_open(msg.DEVICE);
            break;

        case DEV_CLOSE:
            hd_close(msg.DEVICE);
            break;

        case DEV_READ:
        case DEV_WRITE:
            hd_rdwt(&msg);
            break;

        case DEV_IOCTL:
            hd_ioctl(&msg);
            break;

        default:
            dump_msg("HD driver::unknown msg", &msg);
            spin("FS::main_loop (invalid msg.type)");
            break;
        }

        send_recv(SEND, src, &msg);
    }
}
예제 #3
0
파일: hd.c 프로젝트: Zach41/OS
PUBLIC void task_hd() {
    MESSAGE msg;

    init_hd();
    printl("Task HD begins.\n");
    while (TRUE) {
	send_recv(RECEIVE, ANY, &msg);

	int src = msg.source;

	switch(msg.type) {
	case DEV_OPEN:
	    /* 获得硬盘的信息 */
	    /* hd_identify(0); */
	    hd_open(msg.DEVICE);
	    break;
	case DEV_CLOSE:
	    hd_close(msg.DEVICE);
	    break;
	case DEV_READ:
	case DEV_WRITE:
	    hd_rdwt(&msg);
	    break;
	case DEV_IOCTL:
	    hd_ioctl(&msg);
	    break;
	default:
	    panic("HD driver::unknown msg");
	}

	send_recv(SEND, src, &msg);
    }
}
예제 #4
0
파일: hd.c 프로젝트: 565407548/micro_os
/*
功能:
    处理硬盘相关请求的任务进程。初始化后,永久运行接收有关硬盘请求的信息
参数:
    (无)
返回值:
    (无)
*/
void task_hd(){
    MESSAGE message;
#ifdef DEBUG_HD
    printl("in task_hd\n");
#endif 
   //初始化硬盘
    init_hd();

    while(1){
        reset_message(&message);
        send_receive(RECEIVE,ANY,&message);
        
        int src=message.source_pid;
        switch(message.type){
        case INFO_FS_OPEN:
            hd_open(&message);
            break;
        case INFO_FS_CLOSE:
            hd_close(&message);
            break;
        case INFO_FS_READ:
        case INFO_FS_WRITE:
            hd_rdwt(&message);
            break;
        case INFO_FS_IOCTL:
            hd_ioctl(&message);
            break;
        case INFO_FS_DEVICE:
            hd_device_info(&message);
            break;
        default:
            //panic("unkonw message type(%d) in task_hd",src);
            break;
        }
        
#ifdef DEBUG_HD
        printl("in task_hd\n");
#endif
        /* message.source_pid=process2pid(p_process_ready); */
        send_receive(SEND,src,&message);
    }
}
예제 #5
0
파일: main.c 프로젝트: uping/prettyos
//init process pid = 0;
static void start_kernel()
{
//	init_trap();// define in kernel/start.c

	init_clock(); //clock interrupt init

	main_memory_end = (1<<20) + (EXT_MEM_K << 10);
	main_memory_end &= 0xfffff000;

	if(main_memory_end > 12 * 1024 * 1024)	//内存大于6M时
	{
		buffer_memory_start = 3 * 1024 * 1024;
		buffer_memory_end = 4 * 1024 * 1024;
	}
	else 
	{
		buffer_memory_start = 3 * 1024 * 1024 - 512 * 1024;
		buffer_memory_end = 3 * 1024 * 1024;
	}

	main_memory_start = buffer_memory_end;		//主内存的起始地址 = 缓冲区末端
	main_memory_start &= 0xfffff000;
	printk("start memroy = %d\t end memory = %d\n",main_memory_start,main_memory_end);
	
//	buffer_memory_end = (buffer_memory_end + BUFFER_SIZE) & (~BUFFER_SIZE)- 1;  //align BUFFER_SIZE 
	init_buffer(buffer_memory_start,buffer_memory_end); //buffer init
	paging_init(main_memory_start,main_memory_end);

	init_mem(main_memory_start,main_memory_end); //memeory management init

	init_hd(); //hard disk init

	init_fs(); //filesystem init


//	init_sock();

	move_to_user_mode();

	while(1){}

}
예제 #6
0
static void start_kernel()
{
    init_clock(); //clock interrupt init

    get_memsize(&main_memory_end);
    main_memory_end &= 0xfffff000;

    paging_init();
    init_mem(); //memeory management init
    buffer_init();
    /* scheduler init */
    init_sched(); 

    init_hd(); //hard disk init

    init_fs(); //filesystem init

    init_task();

    /*init_sock();*/

}