多进程的进程表初始化
来源:互联网 发布:ce6.0软件 编辑:程序博客网 时间:2024/06/06 00:54
多进程的进程表初始化
PUBLIC char task_stack[STACK_SIZE_TOTAL] //在global.c中task_stack其实是一个有着STACK_SIZE_TOTAL大小的数组。task_stack是这个数组名
用这个数组作为堆栈。
----------------------------------------------------------
TASK* p_task = task_table;
PROCESS* p_proc = proc_table;
char* p_task_stack = task_stack + STACK_SIZE_TOTAL; //进程堆栈,是一个数组。数组的起始地址+偏移量,此时p_task_stack指向堆栈底
u16 selector_ldt = SELECTOR_LDT_FIRST; //selector_ldt在后面自动加,使之指向下一个选择子
int i;
for (i = 0; i < NR_TASKS; i++) {
strcpy(p_proc->p_name, p_task->name); // name of the process
p_proc->pid = i; // pid
p_proc->ldt_sel = selector_ldt;
memcpy(&p_proc->ldts[0], &gdt[SELECTOR_KERNEL_CS >> 3],
sizeof(DESCRIPTOR));
p_proc->ldts[0].attr1 = DA_C | PRIVILEGE_TASK << 5;
memcpy(&p_proc->ldts[1], &gdt[SELECTOR_KERNEL_DS >> 3],
sizeof(DESCRIPTOR));
p_proc->ldts[1].attr1 = DA_DRW | PRIVILEGE_TASK << 5;
p_proc->regs.cs = ((8 * 0) & SA_RPL_MASK & SA_TI_MASK)
| SA_TIL | RPL_TASK;
p_proc->regs.ds = ((8 * 1) & SA_RPL_MASK & SA_TI_MASK)
| SA_TIL | RPL_TASK;
p_proc->regs.es = ((8 * 1) & SA_RPL_MASK & SA_TI_MASK)
| SA_TIL | RPL_TASK;
p_proc->regs.fs = ((8 * 1) & SA_RPL_MASK & SA_TI_MASK)
| SA_TIL | RPL_TASK;
p_proc->regs.ss = ((8 * 1) & SA_RPL_MASK & SA_TI_MASK)
| SA_TIL | RPL_TASK;
p_proc->regs.gs = (SELECTOR_KERNEL_GS & SA_RPL_MASK)
| RPL_TASK;
p_proc->regs.eip = (u32)p_task->initial_eip;
p_proc->regs.esp = (u32)p_task_stack;
p_proc->regs.eflags = 0x1202; /* IF=1, IOPL=1 */
p_task_stack -= p_task->stacksize; //p_task_stack减去本进程堆栈的大小,使之指向下一个进程的堆栈底
p_proc++;
p_task++;
selector_ldt += 1 << 3; //selector_ldt自动向后加。
}
proc_table[0].ticks = proc_table[0].priority = 15;
proc_table[1].ticks = proc_table[1].priority = 5;
proc_table[2].ticks = proc_table[2].priority = 3;
k_reenter = 0;
ticks = 0;
p_proc_ready = proc_table;
- 多进程的进程表初始化
- 进程创建的页表初始化
- 进程初始化
- busybox的init初始化进程
- busybox的init初始化进程
- Debian的init进程初始化工作原理
- Debian的init进程初始化工作原理
- Debian的init进程初始化工作原理
- Debian的init进程初始化工作原理
- Android多进程导致多次初始化Application
- Android 多进程会多次初始化 Application
- xp初始化系统进程
- 初始化0号进程
- 初始化0号进程
- 2.9 初始化进程0
- 初始化0号进程
- 守护进程及初始化守护进程
- 进程的退出exit() --多进程编程
- 在GeoServer设置文件编码格式GBK
- DX编程(1) — 创建D3D对象、D3D设备,渲染
- MongoDB java api for 插入和单collection基本查询使用示例
- DMA (wiki)
- 计算数学(转)
- 多进程的进程表初始化
- DX编程(2)-顶点渲染
- 正则基础之——小数点
- 最长公共子序列(经典的动态规划)
- 最新网页播放器,兼容各主流浏览器及iphone,使用简单、功能强大、兼容和扩展强
- js 得到后台全局变量和调用后台函数
- 求平面上N个点间最短距离(分治法的经典问题)
- No magic, just Basic----- 读《Windows核心编程》前言
- 几种排序