嵌入式学习Day23---Linux软件编程---进程基本概念

目录

一、进程

        1.1.什么是进程

        1.2.什么是程序 

二、进程的相关指令

        2.1.进程标识符

                1.PID----进程标识符

                2.PPID---父进程标识符

        2.2.指令

        2.3.进程的创建

                1.虚拟内存空间

                2. 虚拟内存空间分布

          3.实际物理内存空间

三、进程的调度

3.1.进程调度算法

3.2.时间片

3.3.进程状态 

四、进程的消亡

五、进程相关函数接口

5.1.fork (两个返回值)

5.2.getpid

 5.3.getppid  

5.4.exit

5.5._exit

5.6.wait 

六、总结



一、进程

        1.1.什么是进程

                进程是一个程序动态执行的过程,包括进程的创建、调度、和消亡过程。

        1.2.什么是程序 

                保存在磁盘空间中的的一段代码的集合,死的。

二、进程的相关指令

        2.1.进程标识符

                1.PID----进程标识符

                2.PPID---父进程标识符

        2.2.指令

1.top
      根据CPU占用率查看进程信息 
      q退出 

    2.ps -ef 
      查看当前所有进程的信息 

      ps -ef | grep a.out 

    3.ps -aux 
      查看当前所有进程的信息

      ps -aux | grep a.out

    4.kill
      向进程发送信号,并让进程结束 
      
      kill -l 
      查看信号的类型 

      kill -信号名/信号编号 进程ID
      kill -9 进程ID 

      killall -信号名/信号编号 进程名 

    5.后台运行代码:
        ./a.out & 
    
    6.jobs 
      查看后台执行的任务

    7.fg 任务编号
      将任务编号对应的后台任务放到前台执行 

    8.nice 
        nice -n 10 ./a.out
        以10作为优先级运行a.out进程         在Linux系统中数字越小优先级越高

    9.renice
        renice -n 10 进程ID

    10.pstree
        查看进程的关系

        2.3.进程的创建

                1.虚拟内存空间

                        32bit的操作系统,进程运行时,开辟0-4G(0-2^32-1)的虚拟内存空间

                2. 虚拟内存空间分布

        用户空间:
            1.文本段:文本区 存放代码、指令
            2.数据段:数据区 存放全局变量、静态变量、常量
            3.系统数据段:堆、栈 

        内核空间:
            1.用户无法访问内核空间,通过信号、系统调用实现用户层和内核层的交互 

          3.实际物理内存空间

                MMU内存映射单元实现虚拟地址和物理地址间的映射关系;

                两个进程所占虚拟内存空间并不是 8 G,而是 4 G,两个进程分时共用同一空间;

                两个进程物理内存空间是独立的,进程1和进程2空间独立;

三、进程的调度

3.1.进程调度算法

        1.先来先执行,后来后执行
        2.高优先级调度算法
        3.时间片轮转调度算法   
        4.抢占式调度算法 
        5.多级反馈队列调度算法

3.2.时间片

         CPU在一个进程任务中执行的时间称为时间片

3.3.进程状态 

        1.运行态、就绪态:  R
            运行态:正在被CPU执行的进程任务
            就绪态:正在执行的任务,但由于CPU调度还没有被调度到

        2.可唤醒等待态:    S
            睡眠态
            由于缺少资源导致程序阻塞的状态,当拿到资源后,继续向下执行

        3.不可唤醒等待态:  D
            不想被CPU任务调度打断 

        4.暂停态            T 
            用户主动让进程任务暂停(挂起)状态

        5.僵尸态            Z
            进程任务结束了,但空间没有被回收

        6.结束态             X  
            进程任务执行完了,空间也被回收了

四、进程的消亡

    僵尸态:进程代码执行结束,空间没有被回收

    僵尸进程产生原因:
        1.子进程任务结束,空间没有被回收,该进程成为僵尸进程

    如何避免产生僵尸进程:
        1.让父进程先结束,子进程再结束,子进程不会变成僵尸进程
        2.子进程结束,父进程回收子进程空间,子进程不会变成僵尸进程

    孤儿进程:
        父进程先结束,子进程成为孤儿进程,被init进程(1号)进程收养,子进程结束,init系统进程自动回收进程空间

五、进程相关函数接口

5.1.fork (两个返回值)

 pid_t fork(void);
       功能:
           创建一个子进程
       参数:
            void 缺省
       返回值:
           创建失败返回-1 
           成功父进程中返回创建的子进程的PID
           子进程中返回0 

        写时拷贝fork创建子进程,子进程拷贝父进程中的数据,如果只是读取时不会为子进程单独生成空间,只有做写入操作时,才会为子进程开辟独立空间,提高进程创建的效率

5.2.getpid

 pid_t getpid(void);
      功能:
           获取进程的PID

 5.3.getppid  

pid_t getppid(void);  
      功能:
           获得父进程的PID 

5.4.exit

 void exit(int status);
      功能:
            进程结束 
      参数:
            status:进程结束的状态码
      返回值:
            缺省

      主函数中使用exit等价于return 

5.5._exit

 void _exit(int status);
       功能:
            立即结束进程任务

5.6.wait 

   pid_t wait(int *wstatus);
    功能:
        等待子进程结束,回收子进程空间
    参数:
        wstatus:存放子进程结束的状态码空间首地址
    返回值:
        成功返回子进程的PID
        失败返回-1

         注意:

                wait具有阻塞功能,如果子进程先结束,wait会不阻塞直接回收
                 如果子进程没结束,wait会阻塞直到子进程结束回收子进程空间


                 WIFEXITED(wstatus):判断子进程是否正常结束
                 WEXITSTATUS(wstatus):获取子进程正常结束的状态码


                 WIFSIGNALED(wstatus):判断子进程是否被信号打断结束
                 WTERMSIG(wstatus):获取子进程被信号打断结束的状态码

六、总结

        今天是2024年8月6日,今天是学习的第23天。前几天在将Linux中的IO流综合使用,实现了一个类似shell指令的minishell软件程序,收获挺大,对IO流更加熟悉深刻。今天主要学习了进程的基本概念,其中进程适合调度的尤为重要,子进程总是从fork函数开始运行代码的,并且子进程和父进程公用一片虚拟空间内存,之后谁用谁被映射到实际物理空间内存,并且物理空间各自是个字的。并且wait函数可以让子父进程实现同步,父进程wait后的代码总是在子进程结束后才开始执行。

        总结,进程的概念比较抽象,要深刻理解学以致用。加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值