开发文章

嵌入式Linux-进程管理基础

嵌入式Linux-进程管理基础
一,进程管理 Process Manager 简介
PM是Linux内核子系统中一个非常重要的模块,为了学习Linux内核,PM是必须了解的模块。

PM是Linux内核子系统中一个非常重要的模块.png

二,进程基本概念
1.程序与进程
程序:存放在磁盘上的一系列代码和数据的可执行映像,是一个静止的实体。
进程:是一个执行中的程序, 它是动态的实体。
一个面试题:如何理解进程与线程的概念?
回答思路:
1.先回答进程和线程的OS基本概念: 线程是调度的基本单位,进程是资源分配的基本单位
2.画出模型图

画出模型图.png

2.进程四要素
1.有一段程序供其执行
2.内核空间和用户空间堆栈
3.进程PCB(Process Control Block),task_struct数据结构
4.有独立的用户空间

三,Linux 进程状态
1.操作系统基本状态
就绪
执行
阻塞

Linux 进程状态.png

 

2.Linux OS重要的状态
TASK_RUNNING:执行,就绪
进程正在被CPU执行,或者已经准备就绪,随时可以执行。当一个进程刚被创建时,就处于TASK_RUNNING状态

TASK_INTERRUPTIBLE:可中断阻塞
处于等待中的进程,待等待条件为真时被唤醒,也可以被信号或者中断唤醒。

TASK_UNINTERRUPTIBLE:不可中断阻塞
处于等待中的进程,待资源有效时唤醒,但不可以由其它进程通过信号(signal)或中断唤醒

TASK_KILLABLE:Linux2.6.25新引入的进程睡眠状态,原理类似于TASK_UNINTERRUPTIBLE,但是可以被致命信号(SIGKILL)唤醒。

TASK_TRACED:正在被调试状态的进程

TASK_DEAD:进程退出时(调用do_exit),所处的状态。

TASK_STOPPED:进程中止执行,当接收到SIGSTOP和SIGTSTP信号时,进程进入该状态,接收到SIGCONT信号后,进程重新回到TASK_RUNNING

3.Linux 进程退出状态
EXIT_ZOMBIE 僵死进程:表示进程的执行被终止,但是父进程还没有发布waitpid()系统调用来收集进程的相关信息

EXIT_DEAD 僵死撤销状态:表示进程的最终状态,父进程已经使用wait4()或waitpid()系统调用来收集了信息,因此进程将由系统删除

四,Linux 进程描述
在Linux内核代码中,线程、进程都使用结构task_struct(sched.h)来表示,它包含了大量描述进程线程的信息,其中比较重要的有:

复制内容到剪贴板
  1. //进程号,最大10亿  
  2.   pid_t pid;  
  3.   
  4.   //进程状态  
  5.   volatile long state;  
  6.   
  7.   //进程用户空间描述指针,内核线程该指针为NULL  
  8.   struct mm_struct* mm;  
  9.   
  10.   //该进程调度的策略  
  11.   unsigned int policy;  
  12.   
  13.   //优先级,数值越大,优先级越小  
  14.   int prio;  
  15.   
  16.   //静态优先级,[-20,19], 数值越大,优先级越小仅仅影响非实时进程的优先级,进程初始化的时间片大小仅取决于静态优先级,实时进程的static_prio不参与优先级的计算  
  17.   int static_prio;  
  18.   
  19.   //rt->time_slice;进程时间片,进程初始化的时间片大小仅取决于静态优先级,内核将100 - 139的优先级映射到200ms - 10ms的时间片上,优先级数值越大,优先级越小,则进程分配的时间片越少  
  20.   struct sched_rt_entity rt;  

在2.6的内核中,task_struct已经发生了变化,下面是Linux 2.4和2.6中task_strcut的对比

task_strcut的对比.png

task_struct结构在8kB的物理页面的第一个1KB Linux-2.6:

Linux-2.6.png

task_struct被thread_info代替,thread_info包含一个task指针,因为task_struct结构包含的信息越来越多,所以使用一个新的结构再封装一次。 五,Linux 进程基本操作
创建进程:fork() -> sys_fork() -> do_fork() -> copy_process()

Linux 进程基本操作.png

销毁进程:exit() -> sys_exit() -> do_exit()

销毁进程.png

六,总结
本次主要介绍了Linux进程相关的概念,并没有实际的代码,但是这些基本概念是学好嵌入式Linux的重要支撑。
思维导图:

思维导图.png

资料链接:链接:http://pan.baidu.com/s/1pLvvx7H 密码:2vfp

感谢 有志者事竟成 支持 磐实编程网 原文地址:
blog.csdn.net/qq_22075977/article/details/54694334

上一篇:STM32学习经验

下一篇:返回列表

文章信息

发布时间:2017-01-24

作者:有志者事竟成

发布者:aquwcw

浏览次数: