• 【linux】进程


    1.程序和进程
        程序是指编译好的二进制文件,在磁盘上不占用系统资源(cpu、内存、打开的文件、设备、锁...)
        进程是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序,占用系统资源。在内存中执行。(程序运行起来,产生一个进程)。
        程序仅仅只是一堆代码,进程指的是程序运行的过程。
    程序和进程的区别:
        1>进程是动态的,程序是静态的;
        2>进程有一定的生命周期,而程序是指令的集合,本身无“运动”的含义。没有建立进程的程序不能作为一个独立单位得到操作系统的认可。
        3>一个程序可以对应多个进程,但一个进程只能对应一个程序。
        4>进程和程序的组成不同。从静态角度看,进程由程序、数据和进程控制块三部分组成,而进程是一组有序的指令集合。
    2.并发
        在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕之前的状态。但任一个时刻点上仍只有一个进程在运行。
    单道程序设计
        所有进程一个一个排对执行。若A阻塞,B只能等待,即使CPU处于空闲状态。而在人机交互时阻塞的出现是必然的。所以这种模型在系统资源利用上及其不合理,在计算机发展历史上存在不久,大部分便被淘汰了。
    多道程序设计
        在计算机内存中同时存放几道相互独立的程序,他们在管理程序控制下,相互穿插的运行。多道程序设计必须有硬件基础作为保证。
        在多道程序设计模型中,多个进程轮流使用CPU(分时复用CPU资源)。而当下常见的CPU为纳秒级,1秒可以执行大约10亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。
        1s=1000ms,1ms=1000us,1us=1000ms
    3.虚拟内存与物理内存映射关系
        虚拟储存器的容量限制:主存容量+辅存(硬盘)容量
        物理内存:在应用中,真实存在的,插在主板内存槽上的内存的容量的大小。从本质上说,物理内存是代码和数据在其中运行的窗口。
        虚拟内存:使程序认为他拥有连续的可用的内存(一个连续完整的地址空间),实际上他通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要是进行数据交换。

     MMU的一个page是4KB,MMU以4KB为单位进行映射空间。

    两个程序即使虚拟地址相同,MMU也会将物理空间进行分开映射。

    4.进程控制块PCB

            1.进程id:系统中每个进程有唯一的id。在C语言中用pid_t类型表示,其实pid是一个非负整数。

            2.进程的状态:有初始态、就绪态、运行态、挂起态、停止态等状态。

            3.进程切换时需要保存和恢复的一些CPU寄存器。

            4.描述虚拟地址空间的信息。

            5.描述控制终端的信息。

            6.当前工作目录

            7.umask掩码

            8.文件描述符表,包含很多指向file结构体的指针。

            9.信号相关的信息

            10.用户id和组id。

            11.会话和进程组

            12.进程可以使用的字眼上限

           5.进程状态模型

            

     引起进程状态转换的具体原因:

            就绪状态 ——当前进程已分配到除CPU以外的所有必要的资源后,只能在获得处理机便可以及执行,这时的状态称为就绪状态。同时处于就绪状态的多个进程排成就绪队列。

            执行状态——指进程已获得处理机,其程序正在执行。

            阻塞状态——进程因发生某种时间而暂停执行时的状态,进程的执行受到阻塞,顾称这种状态为阻塞状态。

     

             创建状态:进程在创建时需要申请一个空白PCB,向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处的状态为创建状态。

              就绪状态:进程已经准备好,分配到所需资源,只要分配到CPU就能够立即运行。

            执行状态:进程处于就绪状态被调度后,进程进入执行状态。

            阻塞状态:正在执行的进程由于某些事件而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用。

            终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法执行。

    5.环境变量

            是指在操作系统中用来指定操作系统运行环境的一些参数。通常具备以下特征:

            1.字符串(本质)2、有统一的格式:名=值[:值]  3.值用来描述进程环境信息

            存储形式:与命令行参数类似

            使用形式:与命令行参数类似

            加载位置:与命令行参数类似。位于用户区,高于stack的起始位置

            引入环境变量表:需声明环境变量。

    常见的环境变量

            PATH:可执行文件的搜索路径

            SHELL:当前shell,它的值通常是/bin/bash.

                    echo   $SHELL

            TERM:当前终端类型。在图形界面终端下它的值通常是xterm,终端类型决定了一些程序的输出显示方式。

                   echo $TERM

            LANG:变量定义了linux系统的主语系环境

            HOME:当前用户主目录的路径

             命令:env     -------查看所有环境变量的值。

    6.进程的介绍和创建

            进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进程资源分配和调度的基本单位,是操作系统结构的基础。

            fork函数通过系统调用创建一个与原来进程几乎完全相同的进程。

            进程创建后,系统给新创建的子进程分配资源。可以通过进程号pid来区分父进程和子进程。父进程返回的是子进程的pid,子进程返回的是0.

    四个函数:

            getpid() 获取当前进程ID,

            getppid()获取当前进程的父进程ID,

            getuid()获取当前进程实际用户ID;

            getgid()获取当前进程使用用户组ID

    1. #include
    2. #include
    3. #include
    4. int main()
    5. {
    6. printf("hello world\n");
    7. printf("hello world\n");
    8. printf("hello world\n");
    9. printf("hello world\n");
    10. pid_t pid;
    11. pid=fork();
    12. if(pid == -1)
    13. {
    14. perror("fork error\n");
    15. }
    16. else if(pid == 0)
    17. {
    18. printf("hello subzi progress getpid=%d,getpid=%d\n",getpid(),getppid());
    19. }
    20. else
    21. {
    22. printf("hello numfu progress getpid=%d\n",getpid());
    23. }
    24. printf("beybey!!\n");
    25. return 0;
    26. }
  • 相关阅读:
    SQLAlchemy学习-12.查询之 order_by 按desc 降序排序
    grid实现“品”字布局
    从底层结构开始学习FPGA(16)----PLL/MMCM IP的定制与测试
    二叉树进程
    图片批量压缩工具哪个好用?这3个工具可以解决你的压缩烦恼
    ss-2.子项目互相访问(order80 -> payment8001)
    2021 华数杯全国大学生数学建模竞赛B题-进出口公司的货物装运策略(附带赛题解析&获奖论文及Python代码)
    Profinet转Modbus网关模块实现PLC和从站Modbus通讯,无需编写程序
    视频集中存储/直播点播平台EasyDSS点播文件分类功能新升级
    专业知识单选题练习系列(二)
  • 原文地址:https://blog.csdn.net/m0_73189710/article/details/127413636