第一次作业:深入源码分析xv6进程模型

1.进程

1.1 进程的概念

1) 狭义定义:进程是正在运行的程序的实例。

2) 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。

1.2 进程的组成

1.3 进程控制块

引用来自:https://blog.csdn.net/hgnuxc_1993/article/details/54847732

2.操作系统如何组织进程

  • 在这里把组织进程理解为管理和控制进程
  • 操作系统通过PCB来管理和控制进程,每个进程创建时,操作系统为其生成一个PCB,同时通过唯一的PID标注一个唯一进程,则可通过PCB了解该进程的状态;当进程结束时,操作系统销毁进程对应的PCB。  
  • xv6PCB结构, 见附录

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.参考文献

  • https://legacy.gitbook.com/book/th0ar/xv6-chinese/details
  • https://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf
  • https://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf

7.附录

  • PCB结构

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]; // 进程名称
};

  • void scheduler(void)

{

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);

}

}

  • swtch的函数代码如下

原文地址:https://www.cnblogs.com/Faustino/p/8977122.html

时间: 2024-10-08 23:28:20

第一次作业:深入源码分析xv6进程模型的相关文章

第一次作业:深入Linux源码分析其进程模型

一.进程 1.进程的概念 (1)进程:Process,是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. (2)进程由程序.数据和进程控制块PCB组成.当系统创建一个进程时,实际上是建立一个PCB.当进程消失时,实际上是撤销PCB.在进程活动的整个生命周期内,系统通过PCB对进程进行管理和调度. 2.查看进程状态 (1)ps指令(常用组合:aux.ef.eFH.-eo.axo) (2)示例 # ps  aux:显示所有与终端有无关联的进程信

深入源码分析Linux进程模型

一.操作系统是怎么组织进程的 1.进程的概念 在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程.一个进程应该包含如下内容: (1)程序的代码,既然进程是一个正在运行的程序,自然需要程序的代码: (2)程序的数据: (3)CPU寄存器的值,包括通用寄存器,程序计数器: (4)堆(heap)是用来保存进程运行时动态分配的内存空间: (5)栈(stack)有两个用途,1保存运行的上下文信息.2在函数调用时保存被调用函数的形参或者局部变量: (6)进程所占用的一

第一次作业 基于Linux 0.12的进程模型分析

作业内容 挑选一个开源的操作系统,深入源码分析其进程模型,具体包含如下内容: 操作系统是怎么组织进程的 进程状态如何转换(给出进程状态转换图) 进程是如何调度的 谈谈自己对该操作系统进程模型的看法 1.操作系统是怎么组织进程的 1.1什么是进程 程序是一个可执行的文件,而进程是一个执行中的程序实例.Linux操作系统上利用分时技术,可同时运行多个进程.利用分时技术,在Linux操作系统上同时可以运行多个进程.分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片,让每个进程在一个时间

Android源码分析--system_server进程分析

在上一篇博文中我们进行了有关Zygote进程的分析,我们知道Zygote进程创建了一个重要的进程–system_server进程后就进入了无限循环中,之后Android系统中的重要任务就交给了system_server进程,作为zygote的嫡长子进程,system_server进程的意义非凡,今天我们来分析一下system_server进程. 创建system_server进程 在ZygoteInit中main方法中,通过调用startSystemServer方法开启了system_serve

内核源码分析之进程地址空间(基于3.16-rc4)

所谓进程的地址空间,指的就是进程的虚拟地址空间.当创建一个进程时,内核会为该进程分配一个线性的地址空间(虚拟地址空间),有了虚拟地址空间后,内核就可以通过页表将进程的物理地址地址空间映射到其虚拟地址空间中,程序员所能看到的其实都是虚拟地址,物理地址对程序员而言是透明的.当程序运行时,MMU硬件机制会将程序中的虚拟地址转换成物理地址,然后在内存中找到指令和数据,来执行进程的代码.下面我们就来分析和进程的地址空间相关的各种数据结构和操作. 用到的数据结构: 1.内存描述符struct mm_stru

Memcached源码分析之线程模型

作者:Calix 一)模型分析 memcached到底是如何处理我们的网络连接的? memcached通过epoll(使用libevent,下面具体再讲)实现异步的服务器,但仍然使用多线程,主要有两种线程,分别是“主线程”和“worker线程”,一个主线程,多个worker线程. 主线程负责监听网络连接,并且accept连接.当监听到连接时,accept后,连接成功,把相应的client fd丢给其中一个worker线程.worker线程接收主线程丢过来的client fd,加入到自己的epol

DroidPlugin源码分析插件进程管理以及预注册Activity,Service,ContentProvide的选择

在360对DroidPlugin的特点介绍中有云: 插件的四大组件完全不需要在Host程序中注册,支持Service.Activity.BroadcastReceiver.ContentProvider四大组件. 实现了进程管理,插件的空进程会被及时回收,占用内存低. 之所以支持Service,Activity,ContentProvider三大组件,是因为DroidPlugin在AndroidManifest文件中预先注册了8个运行插件的进程,每个进程预注册Service一个, Content

第一次作业:基于Linux0.11操作系统的进程模型分析

1.前言 本文基于Linux0.11操作系统的源代码,分析其进程模型. Linux0.11下载地址:https://zhidao.baidu.com/share/20396e17045cc4ce24058aa43a81bf7b.html 2.进程的定义 程序是一个可执行的文件,而进程(process)是一个执行中的程序实例. 进程和程序的区别: 几个进程可以并发的执行一个程序 一个进程可以顺序的执行几个程序 进程由可执行的指令代码.数据和堆栈区组成.进程中的代码和数据部分分别对应一个执行文件中的

第一次作业:Linux 2.6.28进程模型与CFS调度器分析

第一次作业 1.摘要 本文主要针对Linux Kernel 2.6.28内核版本,描述了进程的概念以及调用过程. Linux Kernel源码查阅地址:https://elixir.bootlin.com/linux/v4.6/source/include/linux/types.h 2. 何谓进程 2.1 进程的概念 进程的一种官方定义: 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,也是操作系统进行资源分配和调度的一个独立单位. 简而言之,进程是操作系统为正在运行的程序所建