• UNIX V6内核源码剖析——进程


    进程的概念

    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 5
    27 #define SSTOP 6    //等待被跟踪(trace)
    28 
    29 /* flag  codes */
    30 #define SLOAD 01    //进程图像处于内存中
    31 #define  SSYS 02    //系统进程,不会被swap out
    32 #define SLOCK 04    //进程调度锁
    33 #define SSWAP 010    //进程图像已被换出至交换空间
    34 #define STRC 020    //处于被跟踪状态
    35 #define SWTED 040    //在被跟踪时使用
    View Code

     2. user结构体

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

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

  • 相关阅读:
    Activity的启动模式
    Activity的生命周期
    C之静态内存和动态内存
    C之指针的加法
    C之函数返回一个以上的值
    C之交换数据案例
    C之自定义类型
    C之枚举
    联合体
    C之结构体
  • 原文地址:https://www.cnblogs.com/licongyu/p/4953554.html
Copyright © 2020-2023  润新知