06-内核开发-内核态用户态

06-内核开发-内核态,用户态

课程简介:
Linux内核开发入门是一门旨在帮助学习者从最基本的知识开始学习Linux内核开发的入门课程。该课程旨在为对Linux内核开发感兴趣的初学者提供一个扎实的基础,让他们能够理解和参与到Linux内核的开发过程中。

课程特点:
1. 入门级别:该课程专注于为初学者提供Linux内核开发的入门知识。无论你是否具有编程或操作系统的背景,该课程都将从最基本的概念和技术开始,逐步引导学习者深入了解Linux内核开发的核心原理。

2. 系统化学习:课程内容经过系统化的安排,涵盖了Linux内核的基础知识、内核模块编程、设备驱动程序开发等关键主题。学习者将逐步了解Linux内核的结构、功能和工作原理,并学习如何编写和调试内核模块和设备驱动程序。

3. 实践导向:该课程强调实践,通过丰富的实例和编程练习,帮助学习者将理论知识应用到实际的Linux内核开发中。学习者将有机会编写简单的内核模块和设备驱动程序,并通过实际的测试和调试来加深对Linux内核开发的理解。

4. 配套资源:为了帮助学习者更好地掌握课程内容,该课程提供了丰富的配套资源,包括教学文档、示例代码、实验指导和参考资料等。学习者可以根据自己的学习进度和需求,灵活地利用这些资源进行学习和实践。

无论你是计算机科学专业的学生、软件工程师还是对Linux内核开发感兴趣的爱好者,Linux内核开发入门课程都将为你提供一个扎实的学习平台,帮助你掌握Linux内核开发的基础知识,为进一步深入研究和应用Linux内核打下坚实的基础。

这一讲主要讲述用户态内核态。

1.用户态,内核态定义

内核态
内核的主要任务是管理对资源的访问,无论是视频卡、硬盘还是内存。程序经常竞争同一资源。例如,在保存文档时,update db可能开始更新 locate 数据库。像 vim 这样的编辑器会话和像update db这样的进程可以同时使用硬盘。内核的作用是维持秩序,确保用户不会不加选择地访问资源。

用户态
用户空间,是用户进程/线程所在的区域。主要用于执行用户空间程序。

2.系统安全级别

为了管理这一点,CPU 以不同的模式运行,每种模式都提供不同级别的系统控制。例如,某些cpu ,例如 Intel 80386体系结构具有四个这样的安全模式模式,称为ring(ring0,1,2,3)。
然而,Unix仅使用这些环中的两个:ring0 (ring0,也称为"supervisor mode",在此环中可以执行所有操作)和最低环ring3 ,称为"user mode"。


3.为什么定义4个安全级别,但是只有其中两个?

(1)分页分段机制。第一个原因是,尽管 x86 CPU 确实提供了四环内存保护,但是由此提供的保护粒度仅在每段级别。也就是说,每个段可以设置为一个特定的ring(特权级别) ,从0到3,以及其他保护,如写禁用。但是一台系统里面没有那么多可用的段描述符。大多数操作系统希望具有更细粒度的内存保护。比如针对单独的一页。简单的说由于分页分段机制导致的。

(2)移植性。原因是操作系统可移植性的目标。这不仅仅是在于 x86体系,Unix经验,教会我们操作系统可以对多处理器架构进行相对的移植,这是一件好事。有些处理器只支持两个环。
由于不依赖于架构中的多ring架构,操作系统实现者使得操作系统更具可移植性,所以只使用了其中两个环。

4.用户态态进入内核态方式

在Linux系统中,用户态进入内核态的几种方式包括:

系统调用(System Calls):这是用户程序最常用的方式。用户程序通过调用特定的系统调用函数(例如,通过库函数调用)来请求内核执行特定的操作。系统调用会触发从用户态切换到内核态,进入内核中预定义的代码路径执行相应的内核操作,然后返回结果给用户程序。

        回想一下关于库函数与系统调用的讨论。通常,您在用户模式下使用库函数。库函数调用一个或多个系统调用,这些系统调用代表库函数执行,但在内核中以超级用户模式执行。一旦系统调用完成其任务,它就会返回,并将执行权转移到用户模式。

异常(Exceptions):当发生某些特殊事件或错误条件时,例如访问非法内存、除零错误等,处理器会触发异常。异常会导致从用户态切换到内核态,内核会根据异常类型执行相应的异常处理程序。

外部中断(External Interrupts):外部设备或硬件中断控制器可以向处理器发送中断信号,以通知发生了某个事件,例如硬件设备完成了某个操作。当处理器收到外部中断时,会暂停当前执行的用户程序,切换到内核态执行中断处理程序。

软件中断(Software Interrupts):软件中断是由特定的指令(例如,INT指令)触发的中断。用户程序可以通过软件中断指令请求内核执行某个特定的操作。当处理器执行该指令时,会从用户态切换到内核态,内核会相应地处理中断请求。


共享内存(Share Memory):共享内存,是一种在多个进程之间实现高效通信的机制,允许它们在它们的地址空间中共享一块内存区域。在Linux系统中,可以使用共享内存来实现用户态和内核态之间的高效通信。多个进程可以直接在共享的内存区域中读写数据,避免了数据在用户态和内核态之间的复制开销,从而实现高效的通信。然而,由于多个进程可以同时访问共享内存,因此在使用共享内存时需要注意同步和互斥机制,以避免数据的不一致性或冲突

5.参考


为啥只用两个安全态?   https://superuser.com/questions/1063420/why-do-x86-cpus-only-use-2-out-of-4-rings

  • 28
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值