嵌入式linux学习笔记
进程
进程的特点:动态性、并发性、独立性、异步性
状态(三态)
进程ID:
进程ID(PID):标识进程的唯一的数字
父进程的ID:(PPID)
启动进程的用户ID(UID)
进程互斥:
当有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其它要使用该资源的进程必须等待直到该资源释放了该资源为止。(临界资源)
临界资源:同一时刻只允许一个进程,访问的资源称为临界资源 临界区:进程中访问临界资源的那段程序代码称为临界区 为了实现对临界资源的互斥访问应保证诸进程互斥地进入各自的临界区
进程的同步:
一组并发的进程按一定的顺序执行的过程为进程间的同步。 具有同步关系的一组并发进程称为合作进程,合作进程间互相发送信号称为信号或事件
进程的调度:
概念:
按一定的算法,从一组待运行的进程中选出一个来占有CPU运行
调度方式:抢占式、非抢占式
调度算法:
先来先服务调度算法
短进程优先调度算法(即运行时间短的优先)
高优先级优先调度算法(数值越小优先级越高LINUX中) 时间片轮转法(分时利用)
死锁
多个进程因竞争资源而形成的一种僵死局,若无外力作用,这些进程都将永远不能向前推进。
竞争资源
预防是防止死锁的最好的办法
进程的控制编程
#include
#include pid_t getpid(void) //获取当前进程的ID
pid_t getppid(void) //获取当父进程的ID)(返回 进程ID int型)
进程的创建——fork()
#include pid_t fork(void) //创建子进程
注:fork函数一次调用两次返回
#include #include int main(void)
{
pid_t pid;
int count=0;
pid=fork();
count++;
prinft("count=%\n",count);
return 0;
}
运行的结果:count=1 count=1
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
:子进程的数据空间、堆栈空间都会从父进程中得到一个拷
贝而不是共享。在子进程中对count+1并没有影响到父进程中的
count的值,父进程中仍为0
count++;
prinft("count=%\n",count);
这段程序分别将在父子进程中运行互相独立 vfork() 创建子进程
#include #include pid_t vfork(void) fork PKvfork
区别:1、fork子进程拷贝父进程的数据段
vfork子进程共享父进程的数据段
2、fork 父、子进程执行的次序不确定
vfork 子进程先运行,父进程后运行 #include #include int main(void)
{
pid_t pid;
int count=0;
pid=vfork();
count++;
prinft("count=%\n",count);
return 0;
}
运行结果:count=1
count=2
count++;
prinft("count=%\n",count); 这段程序:先在子进程是运行count=1;然后在父进程中运行,由于调用vfork子进程共享父进程的数据段,所以count再次自增1,count=2