• 进程与程序


    一:概念  

      程序是一系列有序指令的集合(代码段+数据段=未初始化数据段bss、已初始化数据段)。程序是静态的
      进程(代码段+数据段+堆栈段+PCB进程控制块):
    从用户角度看,进程是程序的一次动态执行过程
    从操作系统的内核来看,进程是操作系统分配的内存、CPU时间片等资源的基本单位
    进程是资源分配的最小单位,每一个进程都有自己独立的地址空间和执行状态

    进程的数据结构:

      我们进程的静态描述,由三部分组成:
      1、PCB(进程控制块):用于描述进程情况以及控制进程运行所需的全部信息。PCB(是操作系统感知进程存在的一个重要数据结构)、有关程序段和该程序段对其进行操作的数据结构集
      2、代码段:是进程中能被进程调度程序在CPU上执行的程序代码段。
      3、数据段:一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行后产生的中间或者最后数据。

    进程与程序的区别
      1、进程是动态的,程序是静态的
      2、进程的生命周期是相对短暂的,而程序是永久的
      3、进程有数据结构PCB(进程控制块)
      4、一个进程只能对应一个程序,一个程序可以对应多个进程

    二:进程状态

    1、进程状态变迁:
    就绪:除了CPU资源,其他资源都满足
    等待:比就绪态层次更低,不仅CPU资源不满足,其他一些资源(外设等)也不满足
    运行:资源都满足了

    运行-->就绪:CPU时间片用完或者被高优先级进程强占
    创建-->就绪-->运行:进程调度
    运行-->等待:发生等待事件
    运行-->撤销:代码执行完毕
    等待-->就绪:等待结束

    2、实际linux操作系统状态变迁:

    运行状态、可中断睡眠状态、不可中断睡眠状态、暂停状态、僵死状态

    三、进程控制块PCB

      进程控制块是操作系统用来感知进程存在的数据结构, Linux系统的PCB包括很多参数,每个PCB约占1KB多的内存空间。主要有以下几部分

    1、进程描述信息:

      进程标识符用于唯一的标识一个进程。(pid  ppid)

    2、进程控制信息:

      进程当前状态: 进程状态总共有TASK RUNN ING ( 可运行状态)、TASK INTERRUPT IBLE ( 可中断的等待状态)、TASK UNINTERRUPT IBLE(不可中断的等待状态)、TASK ZOMB IE( 僵死状态)、TASK STOPPED(暂停状态) 等5种。

      进程优先级:prio rity 的值给出了进程每次获取CPU 后, 可使用的时间片长度( 单位是jiffies)。

      程序开始地址、各种计时信息(cpu使用率、使用信息等)、通信信息

    3、资源信息:

      占用内存大小及管理用数据结构指针、交换区相关信息、I/O设备号、缓冲、设备相关的树结构、文件系统相关指针

    4、现场保护信息:

      寄存器、PC、程序状态字、栈指针

    四、进程标识

      每个进程都会分配到一个独一无二的数字编号,我们称之为进程标识PID.它是一个正整数,取值范围2—32768。(在文件/proc/sys/kernel/pid_max中查看

    当一个进程被启动时,它会顺序挑选下一个未使用的数字编号作为自己的PID。数字1一般为特殊的Init进程(/sbin/init),它是一个用户进程。ID为0的通常是内核调度进程。

    五、进程创建

      1、给新创建的进程分配一个内部标识,在内核中建立进程结构。

      2、复制父进程的环境。

      3、为进程分配资源,包括进程映像所需要的所有元素

      4、复制父进程地址空间的内容到该进程地址空间中。

      5、置该进程的状态为就绪,插入就绪队列。

      

    六、进程撤销(代码执行完毕)

      1、关闭软中断:因为进程即将终止而不再处理任何软中断信号;

      2、回收资源:释放进程分配的所有资源,如关闭所有已打开文件,释放进程相应地数据结构等

      3、写记账信息:将进程在运行过程中所产生的记账数据(其中包括进程运行时的各种统计信息)记录到一个全局记账文件中。

      4、置该进程为僵死状态:向父进程发送了子进程死的软中断信号,将终止信息status送到指定的存储单元中;

      5、转进程调度:因为此时CPU已经被释放,需要由进程调度进行CPU再分配。

    六、进程终止的五种方法

      从main函数返回、调用exit、调用_exit、调用abort、由信号终止。

  • 相关阅读:
    定义类或对象
    CSS 超出的文字显示省略号(单行、多行)
    获取Json对象的长度以及判断json对象是否为空
    第三次作业附加
    八皇后问题解题报告(dfs
    STL学习笔记(不定期更新)
    寒假作业之三
    寒假作业之二(2)
    寒假作业之二(1)
    第一篇随笔居然是总结耶
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/8298450.html
Copyright © 2020-2023  润新知