freertos的任务是线程,Linux的任务是进程,区别即使线程都在一个程序上和一个进程一个程序
1、进程描述:内核的进程描述符是一个结构体,名为task__struct,存放进程属性与信息。所有进程的描述符用task_list循环双向链表保存,其中当前进程用全局变量current指向(存放当前进程描述符的引用),进程描述符包含的字段详见include/linux/sched.h
2、进程创建:unistd.h声明的fork(),vfork()和clone(),前两者调用sys_fork(),后者调用sys_clone(),但本质都是用do_fork()。fork()会创建子进程,并在父进程中返回子进程的PID,子进程中返回0(因此第一个进程的PID是1),之后父进程用waitpid(pid)等等就好。vfork()只是在sys_fork()调用时多传送一个参数,该参数用于阻塞父进程,直到子进程使用exit()/exec()。clone()就是把一个函数的指针和它的参数作为调用的参数。【sys_fork就是包装一下,以实现不随体系结构变化的格式要求】
3、进程生命周期:do_fork()刚创建好进程时进程处于TASK_INTERRUPTIBLE状态,然后进入TASK_RUNNING状态(就绪或者运行,只是这些是抽象的说法),理论上最后的状态就是TASK_ZOMBIE,这是调用do_exit()期间设置的。进入睡眠或者等待事件,就从运行态到阻塞态,否则一般就是主动(让出)或者被动(时间片),阻塞态包含TASK_INTERRUPTIBLE,TASK_UNINTERRUPTIBLE,TASK_ZOMBIE,TASK_STOPPED,直接用set_current_state()直接设置current>state的值
4、进程终止:主动终止(main()返回,或调用exit()),被动终止(收到不能处理的信号,内核态执行产生异常,进程收到SIGABRT信号或其他终止信号)。子进程先于父进程终止,子进程就会变成僵死进程,等待父进程调用wait()或waitpid();子进程后于父进程终止,init进程成为子进程的新父进程。所以每次有进程终止,系统都要看一边所有活着的父进程还在不在,不在就设置其父进程PID为1。
5、进程调度:进程调度的对象是运行队列,通常一个进程活跃一个时间片后开始调度,调度程序通过交换活跃数组和到期数组的指针来交换两个数组,然后执行新活跃数组里面的进程。
6、异步执行:异步执行(中断与异常)与同步执行(等待队列)是实现进程状态转换的方法。异常exception又称同步中断synchronous unterrupts,是完全发生在处理器硬件内部的事件,比如虚拟存储单元没有映射到物理内存的缺页异常。中断是处理器通过引脚INTR或NMI的外部信号获得,此信号来自中断控制器(硬件设备)。中断处理程序(分为上下半部分,上半部分为尽快执行的任务,下半部分为不太紧急的任务);IRQ结构(IRQ描述符irq_desc_t,记录中断处理程序与IRQ关联irqaction包含中断处理函数的指针handl)。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是 *** 作系统结构的基础。
在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
扩展资料
进程的特征介绍
1、动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
2、并发性:任何进程都可以同其他进程一起并发执行
3、独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
4、异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
5、结构特征:进程由程序、数据和进程控制块三部分组成。
多个不同的进程可以包含相同的程序:一个程序在不同的数据集里就构成不同的进程,能得到不同的结果;但是执行过程中,程序不能发生改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)