进程:程序执行的基本工具

进程:程序执行的基本工具,第1张

本质上讲, *** 作系统就是为了实现多道程序的一同运行,多线程或者多进程都是类似的概念,其中Linux的关键原理就是进程,也就是程序执行的基本单位。

freertos的任务是线程,Linux的任务是进程,区别即使线程都在一个程序上和一个进程一个程序

1、进程描述:内核的进程描述符是一个结构体,名为task__struct,存放进程属性与信息。所有进程的描述符用task_list循环双向链表保存,其中当前进程用全局变量current指向(存放当前进程描述符的引用),进程描述符包含的字段详见include/linux/schedh

2、进程创建:unistdh声明的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)。

以上就是关于进程:程序执行的基本工具全部的内容,包括:进程:程序执行的基本工具、、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9333890.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存