《Linux内核 核心知识全解析(完)》

Posted cx2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Linux内核 核心知识全解析(完)》相关的知识,希望对你有一定的参考价值。

 

技术图片

 

 

把当前栈的寄存器内容等,压到另外一个叫“内核栈”的栈里面去

把EIP指向一个叫做中断处理程序的入口,做保护现场的工作;然后执行中断处理程序;

 

mykernel:模拟了时钟中断——只有一个程序,隔一段时间就中断一次

在此基础上实现了一个极小的 基于时间片轮转的多进程调度 内核

 

技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 

技术图片

 

 

技术图片

 

 

技术图片

 

 

 

技术图片

 

 

 

技术图片

 

 系统调用是一种特殊的中断,存在保护现场和恢复现场的问题

SAVE_ALL

sys_call_table:系统调用表

 

技术图片

 

 技术图片

 

 

操作系统内核三大功能:

进程管理

内存管理

文件系统

 

技术图片

 

 task_struct 400多行代码。。。

 技术图片

 

 

技术图片

技术图片

 

 

 

技术图片

 

1、R
处于运行或可运行状态,即进程正在运行或在运行队列(可执行队列)中等待。只有在该状态的进程才可能在CPU上运行,同一时刻可能有多个进程处于该状态。
(注:很多教科书上将正在CPU上执行的进程的状态定义为Running,将可执行但尚未被调度执行的进程状态定义为Ready,这2种状态在Linux下统一为R状态)
2、S
处于可中断的睡眠状态,即进程在休眠中,由于在等待某个事件的完成(或等待某个条件的形成或等待某个信号等)
(注:等待socket连接、等待信号量等)而被挂起;当这些事件发生时,对应的等待队列中的一个或多个进程将被唤醒。一般情况下,进程列表中绝大多数进程都处于该状态。 
3、D
处于不可中断的睡眠状态,不可中断指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号,无法用kill命令杀死,进程必须等待直到有中断发生。
4、T
处于暂停或跟踪状态。进程收到SIGSTOP、SIGSTP、SIGTIN、SIGTOU等信号进入暂停状态(除非进程处于不可中断的睡眠状态);当接着向进程发送1个SIGCONT信号,进程可以从暂停状态恢复到运行或能运行状态。
当进程被跟踪时,它处于被跟踪状态。“被跟踪”指进程暂停下来,等待跟踪它的进程对它进行操作。例如在GDB调试中,对被跟踪的进程设置某个断点,进程执行到断点处停下来的时候就处于被跟踪状态。

暂停与跟踪状态还是有区别的,被跟踪状态相当于在暂停状态之上多了一层保护,处于被跟踪状态的进程不能响应SIGCONT信号而被唤醒,只能等到调试进程通过ptrace系统调用执行ptrace_cont、ptrace_detach等操作(通过ptrace系统调用的参数指定操作),或调试进程退出,被调试的进程才能恢复到R状态。
5、Z
处于僵死状态,也称退出状态。它指进程已经结束,放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置来记载该进程的退出状态等信息(task_struct结构体[保存了该进程的退出码])供其他进程收集。
6、X
进程在退出过程中可能不会保留它的task_struct。例如某个进程是多线程程序中被detach过的进程;或者父进程通过设置SIGCHLD信号的Handler为SIG_IGN,显示的忽略了SIGCHLD信号。
此时该进程被置于exit_dead退出状态,这意味着接下来的代码立即会将该进程彻底释放。故exit_dead状态非常短暂,几乎不可能通过ps命令捕捉到。
————————————————
原文链接:https://blog.csdn.net/baidu_37964071/article/details/79663658

 
   

 

 

 

 技术图片

 

 技术图片

 

 所有的进程用 list_head *tasks 链表保存

技术图片

 

 mm:物理地址、逻辑地址转换 ... MMU 内存管理单元 ...  

每个进程有自己独立的进程地址空间, x86 32位,4G

进程地址空间 -> 分段 -> 分页,转换为物理地址 ... 

 

struct mm_struct *mm, *active_mm;

 

vm_area_struct *vmacache ... 

 

技术图片

 

 

技术图片

 

 thread_struct:

技术图片

 

 

技术图片

 

 

 

以上是关于《Linux内核 核心知识全解析(完)》的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础知识day-8

一分钟掌握Linux系统grub.conf配置核心知识

一分钟掌握Linux系统grub.conf配置核心知识

一分钟掌握Linux系统grub.conf配置核心知识

Spark知识整理(未完待续)

一分钟掌握Linux系统grub.conf配置核心知识