操作系统 W9 进程概述与进程实现
main初始化流程(main.c)
.s文件与.c文件
- 初始化中断控制器
- 初始化进程表与特权控指表
- 初始化boot image中的进程
- 设置IDLE为第一个运行的进程
- 显示欢迎信息
- 调用mpx386.s文件中的_restart函数开始进程调度(上下文切换)
硬件中断处理
- 通过CPU INT管脚通知CPU发生了中断
- CPU发出INTA信号
硬件中断
硬件产生中断信号
通过中断控制器,决定给CPU发送发送何数值,给CPU发送相应的中断服务历程。
- 中断控制器将数据放在系统数据总线上并通知处理器应执行哪个服务历程
软件中断
执行汇编指令
中断处理过程
硬件
- 硬件发送中断信号
- 中断控制器
- 打断CPU
- send digital identification of the interrupting device
- Kernel:
- 保存寄存器
- Send notification message to driver
- Restart a process
系统调用(软件)
- Caller
- 将相应消息保存到CPU
- execute software interrupt instruction。
- Kernel 同
_restart
Cold boot->restart
进程间通讯
拷贝:从内核的物理拷贝(跨逻辑地址空间拷贝)
1 | B:Send(A,&m); |
若目标进程未在等待消息,则发送者被标记为阻塞,并挂入一个等待将消息发送到接受进程的进程队列中。
即在接受进程的进程表里,接收进程维护一个链表,加一个指针指向发送者。
在当一个进程执行RECEIVE时,内核检查该队列中是否存在向他发送消息的进程。如果存在,则消息从被阻塞的发送进程拷贝到接受进程。
如果不存在这样的进程,则接受进程也会被阻塞。
如何将队列挂到连表中?
Sys_call(proc.c)