广告

原创 Linux多进程程序设计

2015-3-6 23:10 266 0 分类: MCU/ 嵌入式 文集: Linux应用程序开发学习
进程:进程是一个具有独立功能的程序的一次运行活动。
进程特点:
  1. 动态性
  2. 并发性
  3. 独立性
  4. 异步性
dvsqlfv6d5qigunlj1chsvul55_2f4351a65e5b8ed5605d191183e6e5c51425654533.7796.jpg?65132015-03-06%2023:08:53
 
进程ID:
  1. 进程ID(PID):标识进程的唯一数字
  2. 父进程的ID(PPID)
  3. 启动进程的用户ID(UID)
进程互斥:进程互斥是指当有若干进程都要使用某一资源时,但该资源在同一时刻最多允许一个进程使用,这时其他进程必须等待,直到占用该资源者是犯了该资源为止。如:大家去买火车票的时候,只有一个窗口。必须要等待自己前面的人买完后自己才能买票。
 
临界资源:操作系统中将同一时刻只允许一个进程访问的资源称为临界资源。
 
临界区:进程中访问临界资源的那段程序代码称为临界区。为实现对临界资源的互斥访问应保证诸进程互斥地进入各自的临界区。
 
进程同步:一组进程按一定的顺序执行的过程称为进程间的同步。具有同步关系的这组进程称为合作进程,最有名的是如下图所示的生产者和消费者进程,
 
dvsqlfv6d5qigunlj1chsvul55_98fa6482498d9920d949277ed2df6fd51425654580.9632.jpg?37842015-03-06%2023:09:41
 
进程调度:按一定算法,将一组待运行的进程中选出一个来占有CPU运行。
在操作系统中,常见的调度算法有:
  1. 先来服务
  2. 短进程优先调度
  3. 高优先级优先调度
  4. 时间片轮转法
在有了等待运行的进程和调度算法后,接下来需要讨论的问题是:什么时候调度?         
 按照调度时机,调度可分为:抢占式调度、非抢占式调度
 
死锁:多个进程因竞争资源形成一种僵局,导致这些进程都无法继续往前直行。
 
dvsqlfv6d5qigunlj1chsvul55_a8d906186a68ae046369f650d260ee431425654613.5553.jpg?89282015-03-06%2023:10:13
 

4.0 获取进程ID

4.0.1 函数名     getpid
4.0.2 函数原形     pid_t getpid(void);
4.0.3 函数功能     获取进程的PID
4.0.4 所属头文件     <sys/types.h><unistd.h>
4.0.5 返回值     返回调用进程的ID
4.0.6 参数说明     无参数
 

4.1 创建进程     

4.1.1 函数名     fork
4.1.2 函数原形     pid_t fork(void);
4.1.3 函数功能     创建进程
4.1.4 所属头文件     <unistd.h>
4.1.5 返回值    成功:在父进程中返回子进程的PID,在子进程中返回的是0   失败:-1 
4.1.6 参数说明     无参数
 

4.2 创建进程

4.2.1 函数名     vfork
4.2.2 函数原形     pid_t vfork(void);
4.2.3 函数功能     创建一个子进程,并阻塞父进程
4.2.4 所属头文件     <sys/types.h> <unistd.h>
4.2.5 返回值     成功:在父进程中返回子进程的PID,在子进程中返回的是0.  失败:-1
4.2.6 参数说明     无参数
 

4.3 进程等待

4.3.1 函数名     wait
4.3.2 函数原形     pid_t wait(int *status);
4.3.3 函数功能     挂起调用它的进程,直到其子进程结束
4.3.4 所属头文件     <sys/types.h> <sys/wait.h>
4.3.5 返回值     成功:返回终止的那个子进程的ID  失败:-1
4.3.6 参数说明     status:如果status不是一个空指针,则终止进程的终止状态就存放在他指向的单元内。如果不关心终止状态,则可将该参数指定为空指针。
 

4.4 执行程序

4.4.1 函数名     execl
4.4.2 函数原形     int execl(const char *path, const char *arg, ...);
4.4.3 函数功能     运行可执行文件
4.4.4 所属头文件     <unistd.h>
4.4.5 返回值     成功:不返回  失败:才返回
4.4.6 参数说明     path:要运行的可执行文件的路径  arg:可执行文件运行所需要的参数
广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
潇洒哥 2015-07-08 16:01
位操作符的使用技巧
在C语言编程中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效...
潇洒哥 2015-04-04 17:39
finish shell分析之底层usart
rt_thread的finsh shell系统不愧是调试的一项利器,它可以除了完成一般shell的功能外,甚至还可以自定义命令。这个对功能单一的嵌入式系统来说是十分可贵的。在此我并不想对finsh...
潇洒哥 2015-04-01 21:29
__main() 和 main()
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置...
潇洒哥 2015-03-26 22:54
RT-Thread学习之scons篇--解析rtconfig.py文件
rtconfig.py文件,主要用于指定编译器以及安装路径。除此之外,该文件中定义了大量的变量,这些变量包括编译选项,汇编选项,链接选项。   import os # toolchain...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConsruct脚本文件解析
       scons的构建文件名称是统一的都称为SConstruct。其是scons所接受的编译脚本主文件。当然为了方便目录的组织,也允许在各个目录下面存放SConscript, 然后最上面S...
潇洒哥 2015-03-26 22:53
RT-Thread学习之scons篇--SConcript文件解析
SConscript文件是用来指定哪些文件会加入编译。先来分析下BSP主目录下的SConscript文件: import rtconfig Import('RTT_ROOT') fro...
我要评论
0
0
广告