操作系统的int80
先膜拜周老师构图,膜拜膜拜膜拜,哈哈。
硬件请求cpu ,中断cpu,正在做的事情,叫做 中断,
同理
软件请求cpu, 中断cpu,正在的做的事情,叫做软中断。
一个java 程序,再调用某些api,例如read, 这是系统内核的函数,程序被编译成可被cpu,执行的指令时候,对应系统调用的函数, 会有指令 int80 ,int 为cpu 指令, 80 为16进制,转十进制128,对于 cpu而言是将数字128写到 寄存器里(8位寄存器,0-255)。
内核中有中断向量表,0-255,个编号,对应128编号,表示用户程序对应调用了,内核函数函数,以下称这种函数被调用为,系统调用,此时操作系统会,将应用程序挂起,保护他的pcb,用户态切换至内核态,继续执行程序。
中断向量表中 key 128 value :callback函数, 在cpu中体现的是一个具体的地址,这个地址位置指出向着,callback 函数.
当read(fd8) 时,通常cpu会去读,内存中pageche是否有,如果没有就去读---->硬件(触发缺页处理),然后硬件中的数据写到---->cpu 寄存器,然后cpu寄存器数据写至---->内存中, 内存中具体是指pagecache,
但是cpu忙着计算,让他读硬件数据,那cpu就要等,cpu 速度,要比物理磁盘快,他们不是一个数量急的速度,肯定不能这么设计,为了防止cpu ,调入这种io陷阱,DMA,协处理器,这个芯片他去处理。等DMA都处理完这个 read(fd8)所有要读的数据,然后在向cpu 发出信号,继续执行内核态程序,内核再恢复现场,置进程进入能被操作系统调度的状态。