嵌入式Linux编程入门与开发实例-第9章

嵌入式Linux编程入门与开发实例-第9章

ID:46379748

大小:1.07 MB

页数:114页

时间:2019-11-23

嵌入式Linux编程入门与开发实例-第9章_第1页
嵌入式Linux编程入门与开发实例-第9章_第2页
嵌入式Linux编程入门与开发实例-第9章_第3页
嵌入式Linux编程入门与开发实例-第9章_第4页
嵌入式Linux编程入门与开发实例-第9章_第5页
资源描述:

《嵌入式Linux编程入门与开发实例-第9章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第9章进程控制操作系统的主要任务是管理计算机的软硬件资源,进程(process)在操作系统中执行特定的任务。操作系统借助进程来管理计算机的资源。而程序是存储在磁盘上包含可执行机器指令和数据的静态实体。进程或者任务是处于活动状态的计算机程序。理解和掌握进程,对于Linux下的编程来说是非常重要的。本章主要介绍进程的概念,进程的结构和进程的内存映像,以及进程的创建和退出、进程间的通信等操作。第9章进程控制Linux进程9.1进程控制9.2进程间通信9.3习题与练习9.49.1Linux进程9.1.1Linux进程概述9.1.2Linux进程调度9.1.3进程的内存映像9.1.1Linu

2、x进程概述在Linux中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(ProcessControlBlock,简称PCB)。PCB中包含了很多重要的信息,供系统调度和进程本身执行使用,其中最重要的莫过于进程ID(process ID)了,进程ID也被称作进程标识符,是一个非负的整数,在Linux操作系统中唯一地标志一个进程。一个或多个进程可以合起来构成一个进程组(processgroup),一个或多个进程组可以合起来构成一个会话(session)。这样就有了对进程进行批量操作的能力,比如通过向某个进程组发送信号来实现向该组中的每个进程发送信号。每个进程除了进程ID外还有

3、一些其它标识信息,它们可以通过相应的函数获得。这些函数的声明在unistd.h头文件中,表10-1是这些函数的说明。用户ID和组ID的相关概念如下所示:实际用户ID(uid):标识运行该进程的用户。有效用户ID(euid):标识以什么用户身份来运行进程。实际组ID(gid):它是实际用户所属的组的组ID。有效组ID(egid):有效用户所属的组的组ID。表9-1获取进程各种标识符的函数表函数声明功能pid_tgetpid()获得当前进程IDpid_tgetppid()获得进程父进程的IDpid_tgetuid()获得进程的实际用户IDpid_tgeteuid()获得进程的有效用户I

4、Dpid_tgetgid()获得进程的实际组IDpid_tgetegid()获得进程的有效组ID【例9-1】获取进程ID。设计步骤[1]在Vim中创建一个新工程文件,命名为“example9_1.c”。[2]在“example9_1.c”中创建代码如下所示。#include#include#includeintmain(){printf("The process ID is %d",getpid()) ; /*本进程*/printf("The parent process ID is %d",getppi

5、d()) ; /*父进程*/printf("Theprocesspriorityis:%d",getpriority(PRIO_PROCESS,getpid())); return0;}[3]用GCC编译运行程序结果如图9-1所示。图9-1获取进程ID例9-1的运行结果1.Linux进程的组成Linux进程是由三部分组成:代码段、数据段和堆栈段。如图9-2所示。图9-2Linux进程组成(1)代码段代码段存放程序的可执行代码。(2)数据段数据段存放程序的全局变量、常量、静态变量。(3)堆栈段堆栈段中的堆用于存放动态分配的内存变量,栈用于函数的调用,它存放着函数的参数、函数内部定

6、义的局部变量。2.Linux进程的状态一个进程在其生存期内,可处于一组不同的状态下,称为进程状态。进程状态保存在进程任务结构的state字段中。当进程正在等待系统中的资源而处于等待状态时,则称其处于睡眠等待状态。在Linux系统中,睡眠等待状态被分为可中断的和不可中断的等待状态。◆可运行状态(TASK_RUNNING)当进程正在被CPU执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态(running)。进程可以在内核态运行,也可以在用户态运行。当系统资源已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态。这些状态在内核中表示方法相同,都被称为处于TASK

7、_RUNNING状态。◆可中断睡眠状态(TASK_INTERRUPTIBLE)当进程处于可中断等待状态时,系统不会调度该进行执行。当系统产生一个中断或者释放了进程正在等待的资源,或者进程收到一个信号,都可以唤醒进程转换到就绪状态(运行状态)。◆不可中断睡眠状态(TASK_UNINTERRUPTIBLE)与可中断睡眠状态类似。但处于该状态的进程只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态。◆暂停状态(TASK_STOPPED)当进程收到信号SIG

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。