嵌入式,进程简析

简介: 进程,资源分配的最小单位。线程,调度的最小单位 进程四要素:有一段程序可供执行,有专用的内核空间堆栈,有一个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进程间通信之信号量
嵌入式 Linux进程间通信之信号量
|
存储 Linux
嵌入式 Linux 的僵尸进程是什么?
嵌入式 Linux 的僵尸进程是什么?
嵌入式 Linux进程间的通信--信号
嵌入式 Linux进程间的通信--信号
|
消息中间件 Unix Linux
嵌入式 Linux进程之间的通信
嵌入式 Linux进程之间的通信
|
存储 Linux 程序员
嵌入式 Linux多进程
嵌入式 Linux多进程
|
编译器
进程4GB空间简析,PE重定位表【滴水逆向三期50笔记+作业】
进程4GB空间简析,PE重定位表【滴水逆向三期50笔记+作业】
|
消息中间件 Unix Linux
嵌入式Linux C进程间通信(三)——消息队列
嵌入式Linux C进程间通信(三)——消息队列
444 0
嵌入式Linux C进程间通信(三)——消息队列
|
Linux
嵌入式Linux C进程间通信(二)——管道(有名和无名)
嵌入式Linux C进程间通信(二)——管道(有名和无名)
192 0
嵌入式Linux C进程间通信(二)——管道(有名和无名)
|
消息中间件 安全 Linux
嵌入式Linux C进程间通信(一)——IPC概述和信号
嵌入式Linux C进程间通信(一)——IPC概述和信号
260 0
嵌入式Linux C进程间通信(一)——IPC概述和信号
|
消息中间件 缓存 算法
嵌入式Linux C多进程编程(五)——进程退出和进程的等待
嵌入式Linux C多进程编程(五)——进程退出和进程的等待
254 0
嵌入式Linux C多进程编程(五)——进程退出和进程的等待