内核知识

进程管理:进程如何被创建,删除
1、每个进程都有一个进程描述符(PID),进程主要通过进程描述符表示。
2、进程描述符类型为task_struct。
3、进程列表存放在叫做任务队列的双向循环链表里。
4、进程主要是通过fork函数创建
5、进程是通过do_exit()函数终结,并用release_task()函数删除进程描述符

进程调度:主要是何时将某个进程投入运行,运行多长时间,进程调度主要是通过完全公平算法来进行的
1、调度的原因是操作系统可以同时并发的交互执行多个进程
2、进程调度也要分类型:I/O消耗型和处理器消耗型
3、调度算法:设置进程优先级,选择适合的时间片,进行公平调度(CFS)
4、调度过程:要对每个进程进行运行时间记录、选择合适的下一个进程、通过schedule函数进入调度,在调度器内进行进程的睡眠和唤醒
5、进程切换:正常进程的上下文切换是通过调度算法进行的,但是也会突然有优先级高的进程出现,例如有中断信号产生,就会出现进程抢占。
6、进程抢占:分为用户抢占和内核抢占,用户抢占是进程从内核返回用户空间时被其他进程抢占;内核抢占是没有锁的进程可被抢占

内核通信同步机制:
1、用户空间和内核空间通信主要是通过系统调用
2、内核的同步方法:原子操作、自旋锁、信号量、互斥体、顺序锁
3、原子操作:其他同步方法的基础;单步执行一个进程
   自旋锁:就是一次只有一个线程能够持有自旋锁其他线程只能忙循环等待自旋锁开启
   读——写自旋锁:分为读锁(可共享)和写锁(类似于自旋锁)
   信号量:在加锁时间较长或者加锁期间会睡眠时使用,是个睡眠锁,等待开锁期间任务进入睡眠状态
   读——写信号量:类似于读——写自旋锁,它可以动态的将获取的写锁转换位读锁

内存分配的管理方式:内核把物理页作为内存管理的基本单位
1、连续分配方式:单一连续分配、固定分区分配、动态分区分配和动态重定位分区分配。
2、离散分配方式:以页位基本分配单位:分页存储管理方式:提高内存利用率
               以段为基本分配方式:分段存储管理方式:满足用户需求
               先将用户程序分成若干个段,再把每个段分成若干个页:段页式存储管理方式
   
中断及下半部机制:中断就是一个电信号,当处理器收到这个信号时,内核就会执行中断处理程序,每个设备都有一个中断处理程序。
1、上下半部:因为要求系统既要快速响应中断,又要快速完成中断处理程序,所以将中断分为两部分
2、每个中断都有一个特定的中断号,所以驱动程序需要注册中断号
3、下半部主要是执行与中断处理程序相关的但则不需要中断处理程序去执行的工作

内核的数据结构:链表,队列,映射,二叉树
1、链表一般分单向、双向、循环三类,基本操作有增删改查
2、队列最主要的特性是先进先出,队列的创建和重置和撤销、数据的推入和摘取都有相应的函数
3、映射
### 回答1: 学习Windows内核知识最好的方法是阅读Microsoft官方文档,仔细研究Windows源码,并参与一些专门针对Windows内核的讨论和技术论坛。你可以通过实践来熟悉Windows内核,可以利用各种模拟器或虚拟机来模拟Windows系统的运行环境,以及实际操作系统的运行原理,从而更好地理解Windows内核的工作原理。 ### 回答2: 学习Windows内核知识是一项复杂而庞大的任务,需要一定的时间和耐心。以下是一些学习Windows内核知识的步骤和方法: 1. 基础知识储备:首先,需要掌握操作系统的基本知识和概念,了解进程、线程、内存管理、文件系统等。可以通过阅读相关书籍或参加相关的在线学习课程来学习这些基础知识。 2. 研究微软官方文档:微软的官方文档是学习Windows内核的重要资料之一。通过阅读Windows内核开发或Windows驱动开发相关的官方文档、技术文章和代码示例,可以对Windows内核有更深入的了解。 3. 阅读书籍:有些书籍专门针对Windows内核进行讲解,并提供了实例和代码供学习。比如《Windows内核编程》、《Windows核心编程》等,这些书籍可以帮助理解Windows内核的工作原理和开发技术。 4. 参与社区和论坛:参与Windows内核开发的社区和论坛,向其他开发者和经验丰富的内核开发人员请教问题,交流学习心得。例如,Microsoft社区、OSR Online等都是很好的交流平台。 5. 实践项目:通过实践项目来巩固所学的知识。可以选择一些简单的内核扩展或驱动开发项目,从而在实践中加深对Windows内核的理解和熟悉。 6. 参加培训:参加有关Windows内核开发的实体培训课程或工作坊,是提升自己的快速捷径。这样可以通过一些专业的师傅引导,获得实践经验和指导。 总而言之,学习Windows内核知识需要学习基础知识、阅读微软官方文档和相关书籍、参与社区和论坛交流,并进行实践项目。这些方法结合起来,可以帮助您深入了解Windows内核,并成为一名有实践经验的内核开发人员。 ### 回答3: 学习Windows内核知识是一项相对较复杂和具有挑战性的任务,但以下几个步骤可以帮助您系统地掌握这方面的知识: 1. 获取必要的基础知识:了解操作系统的基本概念、进程管理、内存管理、文件系统等。掌握C/C++编程语言和汇编语言也是必要的,因为大部分Windows内核代码是使用这些语言编写的。 2. 阅读相关文档:微软提供了大量的文档和资源,如《Windows内核开发指南》、MSDN等。仔细阅读这些文档,理解内核结构和机制。 3. 分析示例代码:微软提供了一些示例代码,可以帮助您理解内核的一些关键概念和编程技巧。尝试编译、运行和调试这些示例代码,深入理解其工作原理。 4. 阅读内核源代码:微软提供了一部分Windows内核源代码,称为“Windows Research Kernel”。通过阅读其中的代码,可以深入了解内核的实现细节和内部机制。 5. 参与开源项目:参与一些开源项目,如ReactOS等,可以提供一个实践的平台,让您更好地了解内核开发流程和实际应用。 6. 参加培训和交流活动:参加一些内核开发相关的培训班、研讨会、讲座等,与其他开发者进行交流和讨论,从他们的经验中学习。 7. 实践和调试:通过编写自己的内核代码、实践和调试,加深对内核的理解和掌握。尝试解决一些实际问题和挑战,提高自己的技术水平。 总而言之,学习Windows内核知识需要时间和耐心。坚持不懈地阅读文档、分析示例代码、阅读内核源代码、参加培训和实践,不断积累经验和提高技术能力,才能掌握这一领域的知识
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值