嵌入式学习day27

进程和线程

进程

基本概念: 

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

        程序:存放在外存中的一段数据的集合

进程创建:

        进程空间分布:

                每个进程运行起来后,操作系统开辟0 - 4G虚拟内存空间

                进程空间:用户空间 + 内核空间(不允许用户访问)

                用户空间:文本段(文本区)+ 数据段(数据区)+ 系统数据段(堆区、栈区)

                文本段:存放代码和指令

                数据段:字符串常量、已初始化全局变量/静态变量、未初始化全局变量、静态变量

                        数据区存放数据特点:

                                未经初始化值为0

                                编译时开辟空间

                                程序结束时回收空间

                系统数据段:堆区(malloc空间)、栈区(局部变量、函数运行)

                        堆区存放数据特点:

                                malloc申请堆区空间

                                free释放堆区空间

                                注意:避免产生内存泄露

                        栈区存放数据特点:

                                未经初始化值为随机值

                                执行到变量定义开辟内存空间

                                超过变量作用域回收变量空间


                                         

        

              虚拟地址和物理地址:

                虚拟地址:

                        所有能够被用户看到的地址均为虚拟地址,表示用户可以寻址的范围

               物理地址:

                        内存存放数据对应的实际硬件物理地址

               MMU:

                         实际地址和物理地址之间的映射由内存映射单元(MMU)完成

                多进程存储:

                        存储方式:

                                多个进程空间在操作系统中存储时,空间是独立的(物理地址是独立的)

                                多个进程在操作系统中共用同一个虚拟内存空间(虚拟地址是共享的)

                多进程的调度:        

                        常见的进程调度算法:

                                先来先执行,后来后执行

                                高优先级调度算法
                                高优先级调度算法
                        多进程调度本质:
                                
                                宏观并行,微观串行
                                宏观分析:一个CPU同时执行多个进程任务
                        
                                微观分析:一个CPU在多个任务中高速切换保障多任务执行
                进程相关的命令:

                        top:

                  ps -ef:
                      

                
                   ps -aux:

                      

                  后台执行进程任务:

                jobs:

                
                fg:
                

                
                nice/renice:

                kill/killall:

        
        进程的状态:

进程相关函数接口

fork:
子进程拷贝父进程文本段、数据段、系统数据段
父进程与子进程空间独立,同一份代码中的变量和数据都会在父子进程中各有一份,父子进程
修改自己空间的数据不会影响对方的空间
进程的PID不一样
fork的返回值不一样,父进程中返回子进程的PID,子进程中返回0
PID:一定是 > 0
getpidgetppid:

exit_exit:

在主函数中调用exitreturn功能保持一致
return在函数内部将结束该函数
exit在函数内部会将进程结束
exit会在结束前刷新缓存区
_exit不会刷新缓存区
进程回收:
wait:

wait具有阻塞等待功能,等到有子进程结束才会回收子进程继续向下执行

进程消亡

孤儿进程:
        父进程先结束,子进程会成为孤儿进程,被init进程收养
僵尸进程:      
        是每个进程结束必然会经历的阶段
        产生原因:
                子进程结束后,父进程没有回收子进程空间,导致进程执行结束,空间依然被占用的状
        态,称为僵尸进程
        如何避免产生僵尸进程?
                
                父进程先结束,子进程会成为孤儿进程,孤儿进程被init进程收养,子进程再结束,init
                进程回收进程空间
                子进程结束,父进程回收子进程空间,避免产生僵尸进程
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值