深度剖析Linux内核四大核心框架

一、进程调度
1、task_struct结构在内存的存放与内核栈是不可分离。每个进程都有自己的内核栈。当进程从用户态进入内核时,CPU就自动地设置该进程的内核栈。也就是讲,CPU从任务状态段TSS中装入内核栈指针esp。
image.png
在lntel系统中,栈起始于末端,并朝这个内存区开始的方向增长。进程描述符存放在从0x018fa000开始的地址,只要把数据写进栈中,esp的值就递减。

图片说明

通过这个联合结构可以看出,内核栈系统规划占用8KB内存区。实际上进程task_struct结构所占的内存由内核动态分配的,更准确的讲,内核根本不给task_struct分配内存,而仅给内核栈分配8KB的内存。task_struct结构大小占用1K字节左右,内核栈的大小不能超7KB(对于内核栈完全足够)。

为何要将内核栈与task_struct放在一起有什么好处:

  • a. 内核可以方便而快速地找到这个结构;
  • b. 避免在创建进程时动态分配额外的内存;
  • c. task_struct结构的起始地址总是开始于页大小(page_size)的边界。

image.png

上面这段代码相当一组汇编指令(设置p是指向当前进程task_struct结构的指针)

  • movl $0xffffe000,%ecx
  • andl %esp,%ecx
  • movl %ecx,p

Linux内核四大核心框架配套视频教程

2、内核线程

内核线程(thread)或叫守护进程(daemon),在OS中占据相当大的比例,当Linux OS启动之后,尤其是Xwindows也启动之后,我们可以用ps命令查看系统中的进程,但我们会发现很多以'd'结尾的进程名,这些进程就是内核线程。
内核线程也可以叫做内核任务,它们周期性地执行,比如,磁盘高速缓存的刷新网络连通的维护,页面的换入换出等。

Linux OS内核线程与普通进程有本质的区别:

  • a. 内核线程执行的是内核中的函数,而普通进程只有通过系统调用才能够执行内核中的函数;
  • b. 内核线程只运行在内核戊,而普通进程既可以运行在用户态,也可以运行在内核态;
  • c. 因为内核线程指只运行在内核态,它只能使用大于PAGE_OFFSET(3G)的地址空间。另一个方面,不管在用户态还是内核态,普通进程可以使用4GB地址空间。

内核线程是由kernel_thread()函数的内核态下进行创建。系统中大部分的内核线程是在系统的启动过程中建立:的。

Linux内核四大核心框架配套视频教程

3、Linux调度程序 ---> 基本原理及调度算法

调度的实质就是资源的分配,系统通过不同的调度算法来实现资源分配。非常优先的调度算法考虑因素:公平、高效、周转时间、响应时间、吞量。

调度算法:

  • a. 时间片轮转调度算法: 时间片(time slice)就是分配给进程运行的一段时间。
  • b. 优先权调度算法(非抢占式优先权算法、抢占式优先调度算法)
  • c. 多级反馈队列调度: 这种调度算法本质:综合时间片轮转调度和抢占式优先权调度的优点,优先权高的进程先运行给定的时间片,相同优先权的里程轮流进行给定时间片。
  • d. 实时调度(实时系统,就是系统对外部事件有求必应、尽快响应)。

Linux内核四大核心框架配套视频教程

4、Linux进程何时调度

  • a. 进程状态转换的时刻:进程终止、进程睡眠;
  • b. 当前进程的时间片用完;
  • c. 设备驱动程序;
  • d. 进程从中断、异常、系统调用返回到用户态时。

二、内存管理

Intel 368的段机制和页机制是Linux实现虚拟存储管理的一种硬件平台。Linux内存管理主要体现在虚拟内存管理。虚拟内存管理功能:进程保护、内存映射、共享虚拟内存。
Linux虚拟内存结构见PDF文档。
实现虚拟内存组成模块,大部分代码放在/mm目录的。
因为每个进程可以通过系统调用进入内核,Linux内核由系统内的所有进程共享。

image.png

image.png

Linux内核四大核心框架配套视频教程

更多Linux内核视频

初识Linux内核,进程通信能这么玩
工程师的圣地—Linux内核,谈谈内核的架构
linux内核,进程调度器的实现,完全公平调度器CFS
Linux内核,进程间通信组件的实现
Linux内核,就这么学,才简单,网卡驱动
剖析Linux内核MMU机制
3个内核的秘密,让文件系统在你面前“一丝不挂”
剖析Linux内核内存页回收
剖析Linux内核CPU缓存技术
剖析Linux内核页表缓存
Linux高性能服务器模型选择
Linux内核协议栈基础部分
Linux内核源码之地址映射机制
剖析Linux BS算法和Slab
剖析Linux内核ARM异常处理
剖析Linux内核CFS调度器
剖析Linux内核CPU缓存
剖析Linux内核CPU缓存技术
剖析Linux内核IPv4协议源码
剖析Linux内核MMU机制
剖析Linux内核MMU详解
剖析Linux内核Netfilter架构原理
剖析Linux内核并发与同步
剖析Linux内核分配页机制
剖析Linux内核高级路由选择
剖析Linux内核进程调度策略
剖析Linux内核进程虚拟内存
剖析Linux内核蓝牙子系统架构
剖析Linux内核内存分配与回收
剖析Linux内核内存分配与回收机制
剖析Linux内核内存管理
剖析Linux内核内存页回收
剖析Linux内核内存页回收
剖析Linux内核时钟机制及调度算法
剖析Linux内核锁与IPC机制
剖析Linux内核网络协议栈
剖析Linux内核网络协议栈
剖析Linux内核物理内存管理
剖析Linux内核页表缓存
剖析Linux内核源码《内存管理》
剖析Linux内核源码框架结构
剖析Linux内核源码数据同步
剖析Linux内核源码中断机制
剖析Linux内核源码中断机制
深度剖析Linux内核地址映射机制
深度详解Linux内存管理(MM)机制
深度详解Linux内核网络结构及分布
深透剖析Linux内核字符与块设备驱动程序
剖析Linux进程fork&vfork&clone原理机制
剖析Linux内核进程调度与切换
剖析Linux内核设备驱动程序
剖析Linux内核锁及进程间通信
剖析Linux源码《内核活动》
深度剖析Linux系统内核源码

#学习路径#
全部评论
感谢楼主分享,很有用。、
点赞 回复 分享
发布于 2021-09-03 11:36

相关推荐

不愿透露姓名的神秘牛友
11-12 10:52
库玛科技 机械结构工程师 22k×15 本科985
点赞 评论 收藏
分享
评论
1
29
分享
牛客网
牛客企业服务