distributed
allocate
corresponding
associate
toolkit
coworker

cell – string – array – page – block – plane – die

多机

  • 单机单容器

多集群

推广进度

  • 亦庄集群部署但无人用, 来广营集群有使用但未部署

专利

低速/高速网络存储特有协议 结构

人工智能学习资料

目标

  • 了解深度学习框架如何部署以及使用

linux的系统调用的过程:

1.enter system_call

2.push eax 保存eax的值,因为此值与系统调用有关

3.SAVE_ALL ,保存现场(在定位了新堆栈(内核态堆栈)之后,CPU就会首先把原用户态堆栈指针ss和esp压入内核态堆栈,随后把标志积存器eflags的内容和返回位置cs,eip压入内核态堆栈。)

4.比较系统调用号eax和NR_systemcall,如果这是一个合法的系统调用则执行调用符号表syscall_table

5.根据eax寻找到系统调用号对应的系统调用函数,用内核函数进行处理,如sys_time,sys_read等.

6.内核函数返回后,先不急着切换回用户态,而是检查此时是否需要进程调度,如果需要,则跳转进程调度函数.

7.若不需要调度,则返回用户态进程.

如果一个任务正在内核态中运行,那么若CPU响应中断就不再需要进行堆栈切换操作。因为此时该任务运行的内核代码已经在使用内核态堆栈,并且不涉及到优先级别的变化,所以CPU仅把eflags和中断返回指针cs,eip压入当前内核态堆栈,然后执行中断服务过程。

也就是说是把参数放到寄存器里,再放到栈中来传递的?

是的话它是把四个寄存器一下全压栈还是按需要压栈?

为什么不直接放到栈中?为什么必须经过寄存器?为什么不能分批把参数放进一个寄存器一次一次压栈?

|

系统调用是在内核中执行的,参数只能压入内核栈

在进入内核之前压栈只是压入用户态栈,所以需要寄存器传递

int x是用户态和内核态的分界线