UNIX V6内核源码剖析——进程
发布日期:2021-08-16 13:28:03 浏览次数:14 分类:技术文章

本文共 1417 字,大约阅读时间需要 4 分钟。

进程的概念

1. 什么是进程

2. 进程的并行执行

3. 进程的运行状态

4. 用户模式和内核模式

cpu具有2种模式——内核模式和用户模式,通过PSW来切换。

切换时, 映射到虚拟地址的物理内存区域也随之切换(内存映射的切换由MMU来完成)。

在执行系统调用等过程,可能出现内核空间和用户空间交换数据的情况,为此,系统提供了以下在用户空间和内核空间读写数据的函数:

fubyte()、fuibyte()、fuword()、fuiword()

subyte()、suibyte()、suword()、suiword()

5. 交换处理

内存和交换空间之间的换入(swap in)换出(swap out)处理。

proc结构体和user结构体

proc结构体常驻内存;user结构体可能被移至交换空间。

1. proc结构体

数组proc[],每一个元素对应一个进程。

proc结构体管理进程状态、优先级等进程信息中需要经常被内核访问的那部分信息。

proc[]的长度有NPROC定义。

1 #define NPROC 50 2  3 struct proc { 4
 char p_stat;
//状态,等于NULL表示位数为空 5
 char p_flag;
//进程标志变量 6
 char p_pri;
//优先级 7
 char p_sig;
//接收到的信号 8
 char p_uid; 9
 char p_time;
//在内存或交换空间的时间10
 char p_cpu;
//cpu占用累积时间11
 char p_nice;
//优先级补正系数12
 int p_ttyp;
//正在操作进程的终端13
 int p_pid;14
 int p_ppid;15
 int p_addr;
//数据段物理地址16
 int p_size;
//数据段长度17
 int p_wchan;
//进程休眠原因18
 int *p_textp;
//使用的代码段19 } proc[NPROC];20 21 /* stat  codes */22 #define SSLEEP 1
//高优先级休眠状态,优先级为负数23 #define SWAIT 2
//低优先级休眠状态,优先级为0或正数24 #define SRUN 3
//可执行状态25 #define SIDL 4
//进程生成中26 #define SZOMB 527 #define SSTOP 6
//等待被跟踪(trace)28 29 /* flag  codes */30 #define SLOAD 01
//进程图像处于内存中31 #define  SSYS 02
//系统进程,不会被swap out32 #define SLOCK 04
//进程调度锁33 #define SSWAP 010
//进程图像已被换出至交换空间34 #define STRC 020
//处于被跟踪状态35 #define SWTED 040
//在被跟踪时使用
View Code

 2. user结构体

user结构体用来管理进程打开的文件或目录等信息。

由于内核只需要当前执行进程的user结构体, 因此当进程被换出到交换空间时,user结构体也被换出。

 

转载于:https://www.cnblogs.com/licongyu/p/4953554.html

转载地址:https://blog.csdn.net/weixin_30807779/article/details/98241223 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux学习第四天 (Linux就该这么学)2018年11月16日
下一篇:selenium元素定位

发表评论

最新留言

关注你微信了!
[***.46.13.214]2022年12月04日 14时16分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

python虚拟环境virtualenvwrapper&virtualenv & venv & pipenv 之间的联系与区别 2019-07-31 22:59:11
Jetson Nano上pytorch 1.6.0 wheel安装包下载 2019-07-31 22:59:10
Nvidia Nano上从头构建Jetbot镜像安装指南 2019-07-31 22:59:10
Glog在linux和windows下的编译安装和使用 2019-07-31 22:59:10
Protobuf linux和windows下编译与使用 2019-07-31 22:59:09
对强化学习理解及其与有监督学习和无监督学习的比较 2019-07-31 22:59:09
机器学习-深度学习的关系思维导图 2019-07-31 22:59:09
ROS中多个工作空间同时工作 2019-07-31 22:59:08
Cartographer ROS上的编译安装和配置 2019-07-31 22:59:08
LPMS-CU2 IMU在 Nvidia Xavier安装配置 2019-07-31 22:59:08
Nvidia Xavier(ARM64)上安装openresty 2019-07-31 22:59:07
python文件编译与pyc反编译 2019-07-31 22:59:06
ROS Navigation源代码剖析(6)-move_base 代价地图costmap_2d工作流程 2019-07-31 22:59:06
ROS Navigation源代码剖析(5)-move_base 全局规划器GlobalPlanner流程 2019-07-31 22:59:06
ROS Navigation源代码剖析(4)-move_base global planner 线程工作流程 2019-07-31 22:59:05
ROS Navigation源代码剖析(3)-move_base ActionServer工作流程 2019-07-31 22:59:05
再谈ROS TF中的欧拉角和四元数变换及代码验证 2019-07-31 22:59:05
ROS Navigation源代码剖析(2)-move_base启动过程 2019-07-31 22:59:04
ROS Navigation源代码剖析(1)-move_base 线程框架 2019-07-31 22:59:04
glibc ptmalloc 内存管理详解 2019-07-31 22:59:03