标签:back 进程模型 key word 分析 切换器 oop 线性 控制进程
1.进程
1.1 进程的概念
1) 狭义定义:进程是正在运行的程序的实例。
2) 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
1.2 进程的组成
1.3 进程控制块
引用来自:https://blog.csdn.net/hgnuxc_1993/article/details/54847732
2.操作系统如何组织进程
3.进程状态如何转换
4.进程是如何调度的
当前进程通过调用yield函数,进行进程切换。yield函数调用sched函数,sched函数启动swtch函数完成进程切换。整个流程是这样的:
yield => sched => swtch
sched是一个死循环,该循环不断在进程表中扫描,选择一个RUNNABLE的进程调度,即从scheduler切换器转换到新选择的进程
swatch函数任务:1. 保存当前(old)进程的上下文。 2. 加载新进程(new)的上下文到机器寄存器中。
参考网址:https://blog.csdn.net/Swartz2015/article/details/61615603
函数见附录
5.谈谈自己对该操作系统进程模型的看法
在学习进程部分时,没有注意该次作业要求,更侧重机器上电到进程创建部分,实模式与保护模式等部分,对计算机的概况有了进一步了解,而没有关注到进程的调度这块,所以匆匆补充这块知识,对调度方面没有深刻的体会。
附上一些阅读笔记,见附录。
6.参考文献
7.附录
struct proc {
uint sz; // 进程的内存大小(以byte计)
pde_t* pgdir; // 进程页路径的线性地址。
char *kstack; // 进程的内核栈底
enum procstate state; // 进程状态
volatile int pid; // 进程ID
struct proc *parent; // 父进程
struct trapframe *tf; // 当前系统调用的中断帧
struct context *context; // 进程运行的入口
int killed; // 当非0时,表示已结束
struct file *ofile[NOFILE]; // 打开的文件列表
struct inode *cwd; // 进程当前路径
char name[16]; // 进程名称
};
{
struct proc *p;
for(;;)
{
// Enable interrupts on this processor.
sti();
// Loop over process table looking for process to run.
acquire(&ptable.lock);
for(p = ptable.proc; p < &ptable.proc[NPROC]; p++)
{
if(p->state != RUNNABLE)
continue;
// Switch to chosen process. It is the process‘s job
// to release ptable.lock and then reacquire it
// before jumping back to us. proc = p;
switchuvm(p); p->state = RUNNING;
swtch(&cpu->scheduler, proc->context);
switchkvm(); // Process is done running for now.
// It should have changed its p->state before coming back.
proc = 0;
}
release(&ptable.lock);
}
}
标签:back 进程模型 key word 分析 切换器 oop 线性 控制进程
原文地址:https://www.cnblogs.com/Faustino/p/8977122.html