嵌入式,进程简析

简介: 进程,资源分配的最小单位。线程,调度的最小单位 进程四要素:有一段程序可供执行,有专用的内核空间堆栈,有一个task_struct数据结构(进程控制块),有独立的用户空间 有用户空间:用户线程。
进程, 资源分配 的最小单位。线程, 调 度的最小单位
进程四要素:有一段程序可供执行,有专用的内核空间堆栈,有一个task_struct数据结构(进程控制块),有独立的用户空间
有用户空间: 用户线程。无用户空间: 内核线程
task_struct结构:
                               pid_t  pid                               进程号
进程状态:
                               TASK_RUNNING                   执行或就绪状态
                               TASK_INTERRUPTIBLE       可中断阻塞,等待资源唤醒,或中断唤醒
                               TASK_UNINTERRUPTIBLE   不可中断阻塞,不能被中断或信号唤醒
                               TASK_STOPPED                  终止状态,接收到SIGSTIOP/SIGTSTP进入该状态,接收到SIGCONT后唤醒
                               TASK_KILLABLE                   不可中断睡眠,可被SIGKILL唤醒
                               TASK_TRACED                    调试状态
                               TASK_DEAD                         进程退出
                               EXIT_ZOMBIE                       僵死状态,进程已死亡,但父进程还没收集到结束信息
                               EXIT_DEAD                           最终死亡状态,资源被回收
进程描述:struct mm_srtuct *mm          进程用户空间描述指针,内核线程该指针为空
                 unsigned int  policy              进程调度策略
                 int prio                                  优先级,数值越大优先级越小。
                 int static_prio                        静态优先级
                 struct  sched_rt_entity  rt      时间片

调度:从就绪的进程中选出最适合的一个来执行。调度策略,调度时机,调度步骤
调度方式:主动式,内核直接调用schedule(),进程需要等待资源,主动要求系统调度
                 抢占式,用户抢占(2.4和2.6内核)  从内核空间返回用户空间时,发生用户抢占
                               内核抢占(2.6内核)
在支持内核抢占的系统中,有下列情况不可抢占
       内核正在进行中断处理,内核正在进行中断上下文处理,进程持有spinlock自旋锁、以及读写锁,内核正在执行调度
抢占式内核使用变量preempt_count,称为内核抢占计数,他设置在进程的thread_info结构中,内核进入以让状态后preempt_count会加1,退出后会减1
调度流程:清理当前进程,选出下一个进程,设置新进程运行环境,进程上细纹切换

系统调用:一般情况下用户进程不能访问内核空间的,系统调用除外。linux还提供了一些库函数来对系统调用进行封装
系统调用 工作原理;应用程序将一个适当的值填人寄存器,然后调用一个特殊指令跳转到内核某一固定位置,内核根据填充的数据来调用函数
适当的值:在unist.h中为每一个系统调用设一个编号,系统调用号
特殊的指令:在intel中由中断0x80实现,ARM中由SWI实现
固定的位置;在ARM体系中,应用程序跳转到固定内核位置ENTRY(vector_swi)
相应的函数:根据系统调用号,从系统调用表sys_call_table找到对应函数

增加系统调用
       添加新的内核函数
       更新头文件unist.h
       更新系统调用表calls.s
相关文章
|
消息中间件 存储 缓存
【嵌入式软件工程师面经】Linux系统编程(线程进程)
【嵌入式软件工程师面经】Linux系统编程(线程进程)
684 1
|
Linux 程序员 数据安全/隐私保护
嵌入式 Linux进程间通信之信号量
嵌入式 Linux进程间通信之信号量
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
907 13
|
消息中间件 安全 Java
【嵌入式软件工程师面经】Linux多进程与多线程
【嵌入式软件工程师面经】Linux多进程与多线程
517 1
|
消息中间件 数据采集 网络协议
谈谈嵌入式系统中多进程设计与进程通信
谈谈嵌入式系统中多进程设计与进程通信
657 0
谈谈嵌入式系统中多进程设计与进程通信
|
存储 Linux
嵌入式 Linux 的僵尸进程是什么?
嵌入式 Linux 的僵尸进程是什么?
嵌入式 Linux进程间的通信--信号
嵌入式 Linux进程间的通信--信号
|
消息中间件 Unix Linux
嵌入式 Linux进程之间的通信
嵌入式 Linux进程之间的通信
|
存储 Linux 程序员
嵌入式 Linux多进程
嵌入式 Linux多进程
|
消息中间件 Unix Linux
嵌入式Linux C进程间通信(三)——消息队列
嵌入式Linux C进程间通信(三)——消息队列
737 0
嵌入式Linux C进程间通信(三)——消息队列

热门文章

最新文章