Linux内核--1

- Linux单内核
a.支持动态加载内核模块,卸载内核模块
b.支持多处理机制
c.可抢占
d.面向对象的设备模型,热插拔事件,
用户空间的设备文件系统

- 进程状态
a.运行
可执行/正在执行
b.可中断
阻塞等待某条件达成,条件达成时,由内核将进程状态改为运行
若等待条件过程收到信号,也导致内核将进程状态改为运行
c.不可中断
d.被其他进程跟踪
e.停止
收到SIGSTOP/SIGTSTP/SIGTTIN/SIGTTOU等信号时,
即变为停止

- 进程家族
所有的进程都是PID为1的init进程的后代,
内核在系统启动的最后阶段启动init进程,
该进程读取系统的初始化脚本

- 线程在Linux中的实现
Linux把所有的线程都当做进程来实现,
线程仅仅被视为一个与其他进程共享某些资源的进程.
每个线程都有一个隶属于自己的task_struct,
所以在内核中,它看起来就像是一个普通的进程.
- 创建所在线程和被创建线程
具备task_struct下的父子关系,
共享地址空间,文件系统资源,文件描述符,信号处理程序
- 进程退出但尚未被回收时
称为僵死进程,
占用的内存有内核栈,thread_info结构,task_struct结构
- 新的父亲
如父进程在子进程之前退出,
需有机制来保证子进程能找到一个新的父亲.
要么给子进程在当前线程组内找一个线程作为父亲,
如不行,就让init做它们的父进程.

- 进程调度
从一组处于可运行状态的进程中选择一个来执行,
为进程调度的基本工作
- 多任务
a.非抢占式多任务
除非进程自己主动停止运行,否则它会一直执行
b.抢占式多任务
进程在被抢占之前能够运行的时间是预先设置好的,
称为进程的时间片.
- 进程分类
可被分为
I/O消耗型
处理器消耗型
- 进程优先级
基于优先级的调度
优先级越高分配的时间片越大,
同时存在多个可运行进程时,从优先级最大的一个或多个中选出一个.

Linux采用了两种不同的优先级范围
a.采用nice值
适合于非实时进程
b.实时优先级
适合于实时进程

实时进程总是优于非实时进程
- 时间片
是一个数值,表明进程在被抢占前所能持续运行的时间.
- 调度策略的活动
给定一个文本编辑进程--I/O密集型
给定一个视频解码进程-处理器密集型
两者处理器的使用比例均为50%
每次切换到视频解码进程时,一般总是可以用完分配给它的时间片
每次切换到文本编辑进程时,一般总是用不完分配给它的时间片,
即进入睡眠.
切换程序注意到此现象,
在文本编辑进程和视频解码同时可运行时,
优先让文本编辑进程运行.
- 调度算法
a.完全公平调度--针对普通进程的调度类
现在进程调度器有两个通用的概念:进程优先级和时间片
将nice值和时间片大小一一映射.
同样两个可运行进程,不同时间片组合下,
进程切换时机和切换频率不同.
- 公平调度
允许每个进程运行一段时间,
循环轮转,
选择运行最少的进程作为下一个运行进程,
在所有可运行进程总数基础上计算出一个进程应运行多久.
进程的nice值作为获得处理器使用权重的参考.
每个进程按其权重在全部可运行进程中所占比例的"时间片"来运行.
给定时间片*进程A权重/所有可运行进程权重=归属进程A时间片

保证归属进程时间片最少为1ms
- Linux调度的实现
a.时间记账
a.1.调度器实体结构
进程可运行时间
a.2.虚拟实时
计算进程已经运行时间
b.进程选择
选择具有最小虚拟实时的进程
b.1.挑选下一个任务
b.2.向树中加入进程
b.3.从树中删除进程
进程变为不可运行/终止时
c.调度器入口
从最高优先级调度类中,
选择最高优先级的进程
d.睡眠和唤醒
进程把自己标记成休眠状态,
从可执行红黑树中移出,
放入等待队列,
变为可执行时,再从等待队列中移到可执行红黑树中,
d.1.等待队列
d.2.唤醒
 
- 抢占和上下文切换
a.用户抢占
在以下情况时产生
a.1.从系统调用返回用户空间时
a.2.中中断处理程序返回用户空间时
b.内核抢占
- 实时调度策略

系统调用

- 与内核通信

猜你喜欢

转载自blog.csdn.net/x13262608581/article/details/115331550
今日推荐