单内核与微内核

2023-11-15

单内核是个很大的进程。它的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,他是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。在运行效率上,单内核会具有一定的好处.


单内核结构是非常有吸引力的一种设计,由于在同一个地址空间上实现所有低级操作的系统控制代码的复杂性的效率会比在不同地址空间上实现更高些。单核结构正趋向于容易被正确设计,所以它的发展会比微内核结构更迅速些。 [4] 
尽管每一个模块都是单独地服务这些操作,内核代码是高度集成的,而且难以编写正确。因为所有的模块都在同一个内核空间上运行,一个很小的bug都会使整个系统崩溃。然而,如果开发顺利,单内核结构就可以从运行效率上得到好处。
很多现代的单内核结构内核,如Linux和FreeBSD内核,能够在运行时将模块调入执行,这就可以使扩充内核的功能变得更简单,也可以使内核的核心部分变得更简洁。 [3] 






微内核(英文中常译作µ-kernel或者micro kernel)。是一种能够提供必要服务的操作系统内核;其中这些必要的服务包括任务,线程,交互进程通信(IPC,Inter-Process Communication)以及内存管理等等。所有服务(包括设备驱动)在用户模式下运行,而处理这些服务同处理其他的任何一个程序一样。因为每个服务只是在自己的地址空间运行。所以这些服务之间彼此之间都受到了保护。
优势
能够使得不同的API,文件系统,甚至不同的操作系统的特性在一个系统中共存。
系统非常灵活。当运行一个应用程序时,只需把选定的系统服务加载到系统中即可。而修改了服务以后可以通过联机进行测试;并不需要重新构建或者启动一个新的内核,他们并不影响系统的运行。
系统服务或者设备驱动故障和与它们有关的运行任务是隔绝的。
依存关系的服务器系统可以加以限制,使为安全重要至关信赖的计算基数的应用可被削减。
这种由微内核所决定的结构(IPC,多线程)能够应用在所有的应用程序和服务上。一个精炼的微内核接口能够有演绎成更多模块的系统结构。


结构
微内核是内核的一种精简形式。将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入的选
件,这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。
可以用商业对比来解释微内核的模块概念。考虑一个过度忙碌的商务经理。通过将工作分给其他人,这位经理可以将他的能力更有效地用于重要的商务工作中去,并集中于其他一些任务,例如开辟新的商务分支等。可以雇佣一些新人来支持增长的商务活动。经理协调这些工作,但由其他的人做好雇佣他们时说好要做的事。与此类似,微内核操作系统支持执行少量核心任务,并管理可安装模块的活动。用这种方式,微内核对于它能做的工作是非常有效的,并是可移植的,这是指它可以被设计成在不同的处理器上运行。
基于微内核的操作系统具有如下特征:
微内核提供一组“最基本”的服务,如进程调度、进程间通信、存储管理、处理I/O设备。其他服务,如文件管理、网络支持等通过接口连到微内核。与此相反,内核是集成的,比微内核更大。
微内核具有很好的扩展性,并可简化应用程序开发。用户只运行他们需要的服务,这有利于减少磁盘空间和存储器需求。
厂商可以很容易地将微内核移植到其他处理器平台,并在上面增加适合其他平台需要的模块化部件。(这指文件服务器、工程应用等等)。
微内核和硬件部件有接口,并向可安装模块提供一个接口。在微内核中,进程通过传递消息或运行“线程”来发生相互作用。线程为将一个任务分解为多个子任务提供了途径,在多处理器环境下,线程可以在不同的处理器上独立运行。
象Mach和Nucleus这样的微内核操作系统,使用户可以自己选择操作系统的接口和特性。它们十分适合可以选择多处理器和多操作系统的变化的计算机市场,开发商也可从中受益。它们能够很快地从一个系统向另一个系统移植他们的产品,使最终用户可以得到许多应用产品。这种模块化的设计也保证了可以得到大量的可选服务。






Linux大部分都是单内核的


      操作系统内核可能是微内核,也可能是单内核(后者有时称之为宏内核Macrokernel)。按照类似封装的形式,这些术语定义如下:
     微内核(Microkernelkernel)――在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,假如在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调用,并和能够执行系统调用的其他进程(或模块)通讯以完成所需任务。
      在这些设计中,微内核部分经常只但是是个消息转发站:当系统调用模块要给文档系统模块发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。(某些时候,模块也能够直接给其他模块传递消息。)在一些微内核的设计中,更多的功能,如I/O等,也都被封装在内核中了。但是最根本的思想还是要保持微内核尽量小,这样只需要把微内核本身进行移植就能够完成将整个内核移植到新的平台上。其他模块都只依赖于微内核或其他模块,并不直接直接依赖硬件。
微内核设计的一个长处是在不影响系统其他部分的情况下,用更高效的实现代替现有文档系统模块的工作将会更加容易。我们甚至能够在系统运行时将研发出的新系统模块或需要替换现有模块的模块直接而且迅速的加入系统。另外一个长处是无需的模块将不会被加载到内存中,因此微内核就能够更有效的利用内存。
      单内核(Monolithic kernel)――单内核是个很大的进程。他的内部又能够被分为若干模块(或是层次或其他)。但是在运行的时候,他是个单独的二进制大映象。其模块间的通讯是通过直接调用其他模块中的函数实现的,而不是消息传递。
      单内核的支持者声称微内核的消息传递开销引起了效率的损失。微内核的支持者则认为因此而增加的内核设计的灵活性和可维护性能够弥补任何损失。 
       我并不想讨论这些问题,但必须说明很有趣的一点是,这种争论经常会令人想到前几年CPU领域中RISC和CISC的斗争。现代的成功CPU设计中包含了任何这两种技术,就像Linux内核是微内核和单一内核的混合产物相同。Linux内核基本上是单一的,但是他并不是个纯粹的集成内核。内核模块系统将微内核的许多长处引入到Linux的单内核设计中。(顺便提一下,我考虑过一种有趣的情况,就是Linux的内核模块系统能够将系统内核转化成为简单的不传递消息的微内核设计。虽然我并不赞成,但是他仍然是个有趣的想法。)为什么Linux必然是单内核的呢?一个方面是历史的原因:在Linus的观点看来,通过把内核以单一的方式进行组织并在最初始的空间中运行是相当容易的事情。这种决策避免了有关消息传递体系结构,计算模块装载方式等方面的相关工作。(内核模块系统在随后的几年中又进行了不断地改进。)另外一个原因是充足的研发时间的结果。Linux既没有研发时间的限制,也没有深受市场压力的发行进度。
     任何的限制只有并但是分的对内核的修改和扩充。内核的单一设计在内部实现了充分的模块化,在这种条件下的修改或增加都并不怎么困难。而且问题还在于没有必要为了追求尚未证实的可维护性的微小增长而重写Linux的内核。(Linus曾多次特别强调了如下的观点:为了这点利益而损耗速度是不值得的。)
      假如Linux是纯微内核设计,那么向其他体系结构上的移植将会比较容易。实际上,有一些微内核,如Mach微内核,就已成功的证实了这种可移植性的长处。实际的情况是,Linux内核的移植虽然不是很简单,但也绝不是不可能的:大约的数字是,向一个全新的体系结构上的典型的移植工作需要30,000到60,000行代码,再加上不到20,000行的驱动程式代码。(并不是任何的移植都需要新的驱动程式代码。)粗略的计算一下,我估计一个典型的移植平均需要50,000行代码。这对于一个程式员或最多一个程式小组来说是力所能及的,能够在一年之内完成。虽然这比微内核的移植需要更多的代码,但是Linux的支持者将会提出,这样的Linux内核移植版本比微内核更能够有效的利用底层硬件,因而移植过程中的额外工作是能够从系统性能的提高上得到补偿的。
      这种特别设计的权衡也不是很轻松就能够达到的,单内核的实现策略公然违背了传统的看法,后者认为微内核是未来发展的趋势。但是由于单一模式(大部分情况下)在Linux中运行状态良好,而且内核移植相对来说比较困难,但没有明显地阻碍程式员团体的工作,他们已热情高涨地把内核成功的移植到了现存的大部分实际系统中,更不用说类似掌上型电脑的一些看起来很不实际的目标了。只要Linux的众多特点仍然值得移植,新的移植版本就会不断涌现。




        另一篇文字
        Linux内核和传统Unix内核的比较
        来源: 未知  
    所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行块(文件)。也就是说,它们必须以完整、单独的可执行块的形式在一个单独的地址空间中运行。
      Unix内核几乎都需要硬件系统提供页机制以管理内存。这种页机制可以加强内存空间的保护,并保证每个进程都可以运行于不同的虚地址空间上。
    单内核与微内核设计之比较
    操作系统内核可以分为两大设计阵营:单内核和微内核(第三阵营外内核,主要用在科研系统中,但也逐渐在现实世界中壮大起来)。


      单内核是两大阵营中一种较为简单的设计,在1980年之前,所有的内核都设计成单内核。所谓单内核就是把它从整体上作为一个单独的大过程来实现,并同时运行在一个单独的地址空间。因此,这样的内核通常以单个静态二进制文件的形式存放于磁盘。所有内核服务都在这样的一个大内核空间中运行。内核之间的通信是微不足道的,因为大家都运行在内核态,并身处同一地址空间:内核可以直接调用函数,这与用户空间没有什么区别。这种模式的支持者认为单模块具有简单和高性能的特点。大多数Unix系统都设计为单模块。
   
      另一方面,微内核并不作为一个单独的大过程来实现。相反,微内核的功能被划分为独立的过程,每个过程叫做一个服务器。理想情况下,只有强烈请求特权服务的服务器才运行在特权模式下,其他服务器都运行在用户空间。不过,所有的服务器都保持独立并运行在各自的地址空间。因此,就不可能像单模块内核那样直接调用函数,而是通过消息传递处理微内核通信:系统采用了进程间通信(IPC)机制,因此,各种服务器之间通过IPC机制互通消息,互换“服务”。服务器的各自独立有效地避免了一个服务器的失效祸及另一个。
   
     同样,模块化的系统允许一个服务器为了另一个服务器而换出。因为IPC机制的开销比函数调用多,又因为会涉及内核空间到用户空间的上下文切换,因此,消息传递需要一定的周期,而单内核中简单的函数调用没有这些开销。基于此,付之于实际的微内核系统让大部分或全部服务器位于内核,这样,就可以直接调用函数,消除频繁的上下文切换。Windows NT内核和Mach(Mac OS X的组成部分)是微内核的典型实例。不管是Windows NT还是MacOS X,都在其新近版本中不让任何微内核服务器运行在用户空间,这违背了微内核设计的初衷。
   
      Linux是一个单内核,也就是说,Linux内核运行在单独的内核地址空间。不过,Linux汲取了微内核的精华:其引以为豪的是模块化设计、抢占式内核、支持内核线程以及动态装载内核模块的能力。不仅如此,Linux还避其微内核设计上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递。至今,Linux是模块化的、多线程的以及内核本身可调度的操作系统。实用主义再次占了上风。
   
      当Linus和其他内核开发者设计Linux内核时,他们并没有完全彻底地与Unix诀别。他们充分地认识到,不能忽视Unix的底蕴(特别是Unix的API)。而由于Linux并没有基于某种特定的Unix,Linus和他的伙伴们对每个特定的问题都可以选择已知最理想的解决方案——在有些时候,当然也可以创造一些新的方案。以下是对Linux内核与Unix各种变体的内核特点所作的分析比较:
    ·Linux支持动态加载内核模块。尽管Linux内核也是单内核,可是允许在需要的时候动态地卸除和加载部分内核代码。
    ·Linux支持对称多处理(SMP)机制,尽管许多Unix的变体也支持SMP,但传统的Unix并不支持这种机制。
    ·Linux内核可以抢占(preemptive)。与传统的Unix不同,Linux内核具有允许在内核运行的任务优先执行的能力。在其他各种Unix产品中,只有Solaris和IRIX支持抢占,但是大多数传统的Unix内核不支持抢占。
    ·Linux对线程支持的实现比较有意思:内核并不区分线程和其他的一般进程。对于内核来说,所有的进程都一样—只不过其中的一些共享资源而已。
    ·Linux提供具有设备类的面向对象的设备模型、热插拔事件,以及用户空间的设备文件系统(sysfs)。
    ·Linux忽略了一些被认为是设计得很拙劣的Unix特性,像STREAMS,它还忽略了那些实际上已经根本不会使用的过时标准。
   ·Linux体现了自由这个词的精髓。


    现有的Linux特性集就是Linux公开开发模型自由发展的结果。如果一个特性没有任何价值或者创意很差,没有任何人会被迫去实现它。相反的,在Linux的发展过程中已经形成了一种值得称赞的务实态度:任何改变都要针对现实中确实存在的问题,经过完善的设计并有正确简洁的实现。于是,许多其他现代Unix系统包含的特性,如内核换页机制,都被毫不迟疑的引入进来。
    不管Linux和Unix有多大的不同,它身上都深深地打上了Unix烙印
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单内核与微内核 的相关文章

  • Nginx禁止IP,只允许域名访问

    为何禁止IP访问呢 不想直接让他们访问 修改Nginx配置文件 nginx conf 一下命令能帮不快速找到nginx的配置文件 find name nginx conf 在配置文件里面加入 一下代码 就能实现 if host d d d
  • SQL注入攻击原理及防御策略

    一 什么是SQL注入 SQL注入 一般指web应用程序对用户输入数据的合法性没有校验或过滤不严 攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句 在不知情的情况下实现非法操作 以此来实现欺骗数据库服务器执行非授权
  • Linux shell中的wait命令的使用

    Linux shell中的wait命令的使用 一 wait命令作用 二 使用格式 三 举例 3 1 案例一 3 2 案例二 函数中使用wait 3 3 案例三 3 4 案例四 四 串行执行与并行执行 4 1 串行执行 4 2 并行执行 4
  • mysql中有几种模糊查询?

    mysql中有几种模糊查询 聊起mysql中的模糊查询 大家可能马上就能想到like保留字 like加通配符就能完成很多模糊查询的操作 比如希望查询出所有以词jet开头的产品 select from table name where nam
  • LeetCode519. 随机翻转矩阵

    LeetCode519 随机翻转矩阵 题目传送门 题目 给你一个 m x n 的二元矩阵 matrix 且所有值被初始化为 0 请你设计一个算法 随机选取一个满足 matrix i j 0 的下标 i j 并将它的值变为 1 所有满足 ma
  • 转 不管你学的是什么专业,你都应该多少懂些管理学的东西

    转 不管你学的是什么专业 你都应该多少懂些管理学的东西 蝴蝶效应 青蛙现象 鳄鱼法则 鲇鱼效应 羊群效应 刺猬法则 手表定律 破窗理论 二八定律 木桶理论 马太效应 鸟笼逻辑 责任分散效应 帕金森定律 晕轮效应 霍桑效应 习得性无助实验 证
  • 基于SpringBoot+thymeleaf的课程分享平台(源码免费获取+项目介绍+运行文档)

    涉及技术 本项目核心技术采用 SpringBoot mybatis 前端 layui 开发工具 idea 数据库 mysql5 7 模版引擎采用的是 thymeleaf 安全框架采用 SpringSecurity 日志框架采用 logbac
  • vector的实现(c++)

    前言 vector是很重要的数据结构 所以了解它的底层的核心原理是很有必要的 如何了解它的底层原理呢 除了阅读原码外 自己实现一下vector的核心逻辑也是不错的选择 目录 1 四个默认成员函数 2 迭代器的实现 3 增删查改 4 容量相关
  • java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效,请重新登录

    java金蝶星空云金蝶Java 对接 金蝶云星空 接口 对接 金蝶API 对接 金蝶 接口 解决 会话失效 问题 会话已失效 请重新登录 1 准备工作 1 1 接口调用账户 1 2 下载 金蝶星空云 Java SDK 1 3 Maven项目
  • 由于现在工作环境不适合经常发博客,所以暂缓更新。

    好久没更新了 其实还有一些内容 不过目前没时间整理 后续争取补回 转载于 https www cnblogs com xianghang123 p 4908710 html
  • 【网络】UDP网络服务器

    代码的整体逻辑 UDP服务端 udpServer cc 服务端的调用 udpServer hpp 服务端的实现 UDP客户端 udpClient cc 客户端的调用 udpClient hpp 客户端的实现 1 udp服务端 服务端 1 初
  • 【用python写一个简易的消息轰炸代码】

    用python写一个简易的消息轰炸代码 前言 一 思路讲解 二 使用步骤 1 引入库 2 完整代码 总结 前言 有没有在qq 微信想用一句话不停怼一个人 这篇文章教你在回车能发送消息的一系列软件中 快速多次发送你想发的话 一 思路讲解 1
  • cocos2d-x学习笔记(持续更新)

    接受触屏事件的优先级是值越小 响应触屏事件的优先级越高 Z值越大 越外面 粒子系统设计工具 Particle Designer软件 目前只支持MAC平台 导出 plist文件 地图设计工具 Tiles 目前有两个版本 一个是Java版本 另
  • 免费的API

    https www jianshu com p e6f072839282 目前接口列表 新实时段子https api apiopen top getJoke page 1 count 2 type video 通过Id查段子https ap
  • VSCode无法登录leetcode,[ERROR] invalid password?

    VSCode无法登录leetcode 我使用的是 leetcode cn com 账户 选择的是第三方登录 github账号 v16 13 0 Active Name Version Desc solution discuss 2019 0
  • c语言常用算法归纳,C语言常用算法

    一 计数 求和 求阶乘等简单算法 此类问题都要使用循环 要注意根据问题确定循环变量的初值 终值或结束条件 更要注意用来表示计数 和 阶乘的变量的初值 例 用随机函数产生100个 0 99 范围内的随机整数 统计个位上的数字分别为1 2 3
  • pycharm配置监听端口0.0.0.0后不能在浏览器上通过本地地址访问

    解决方案 https segmentfault com q 1010000007625566参考方案 在settings py的ALLOWED HOSTS中添加 127 0 0 1 192 168 0 128 localhost 中间是本地
  • Jquery Ajax前后端交互技术

    Jquery Ajax前后端交互技术 1 什么是Ajax Ajax是一种异步 无刷新技术 什么是异步 1 现在我们大部分的请求都是同步 我必须接受你的请求给我返回结果了 我才能进行下一步操作 2 异步就是 无需返回服务器的结果 就可以继续做
  • 操作系统复习指南

    文章目录 前言 一 中断 1 中断的分类 2 硬中断和软中断 二 系统调用 1 什么是系统调用 三 进程 1 什么是进程 2 进程的组织方式 3 进程的特征 4 进程的几种状态及其转换 5 进程间的通信 6 进程的调度 7 作业调度算法 8
  • ua获取手机型号_如何根据 UA 判断手机型号和厂家?

    开门见山 拿下面2个 ua 来举例 Mozilla 5 0 Linux U Android 8 1 0 zh cn PBEM00 Build OPM1 171019 026 AppleWebKit 537 36 KHTML like Gec

随机推荐

  • idea中yml配置文件编写规范

    yaml文件实际是用YAML语言编写的 YAML简述 如下 1 语法特点 大小写敏感 通过缩进表示层级关系 禁止使用tab缩进 只能使用空格键 缩进的空格数据不重要 只要相同层级左对齐即可 使用 表示注释 2 yaml支持的数据结构有三种
  • 11,输出保留3位小数的浮点数

    读入一个浮点数 保留 3 位小数输出这个浮点数 输入格式 只有一行 一个浮点数 x 105 x 105 输出格式 也只有一行 保留 3 位小数的浮点数 输出时每行末尾的多余空格 不影响答案正确性 样例输入 12 34521 样例输出 12
  • MySQL几个问题:Column 'XXXX' in where clause is ambiguous,去除重复项,mybatis报错

    最近工作西街口 遇到MySQL Mybatis相关的几个问题 大概讲一下问题发生情况 解决办法和原因 一 Column create time in where clause is ambiguous 问题 这个不管你是在IDEA的控制台看
  • git查看远程仓库(git remote)

    实例 描述 git remote v 查看远程仓库地址 git remote show origin 查看远程仓库信息
  • 15. Canvas制作汽车油耗仪表盘

    1 说明 本篇文章在14 利用Canvas组件制作时钟的基础上进行一些更改 想查看全面的代码可以点击链接查看即可 效果展示 2 整体代码 import QtQuick 2 15 import QtQuick Controls 2 15 It
  • 深度学习——时间序列模型评价指标总结

    大Y老师 小X 你做的这个时间序列模型用什么指标评价啊 小X 直接把这篇甩给老师 老师您看哪个指标顺眼 就选哪个指标 最近在实现基于深度学习的时间序列模型时 需要对模型进行评价 总结了一些常用的和不常用的评价指标 还有相关概念的辨析 上面是
  • 谷粒学院——Day09【整合阿里云视频点播】

    作者主页 Java技术一点通的博客 个人介绍 大家好 我是Java技术一点通 记得关注 点赞 收藏 评论 认真学习 共同进步 视频点播简介 一 阿里云视频点播技术能力盘点 视频点播 ApsaraVideo for VoD 是集音视频采集 编
  • 图计算:社区发现算法

    一 定义什么是社区 社区是一种局部性结构 该局部性结构内部连接紧密 而不同的局部性结构之间连接稀疏 这种局部性结构是社区 主要应用 好友推荐 广告推送 二 如何评价一个社区的分类好坏的情况 用Modurity衡量 三 社区发现算法 算法1
  • ESP8266开发板+mysql数据库+DHT11

    wemos D1 wifi ESP8266开发板连接mysql wemos D1 wifi ESP8266开发板是一款基于esp8266的开发板 使用这个开发板可以很方便的连接wifi 同时这个开发板有很多IO口供我们使用 这个开发板的可以
  • WPS Office 2019政府定制版本 2019.1.15版

    1 广东省 广东省政府机关单位 http wpspro support wps cn gov guangdong WPS Office 2016 专用版 10 8 0 6423 潮州市党政机关单位 http wpspro support w
  • 基于FPGA的频率计设计

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 频率计是什么 二 使用步骤 1 测量方法 2 测周方法 3 系统框图 总结 前言 所谓 频率 就是周期性信号在单位时间 秒 内变化的次数 一 频率计是什么
  • 线性代数的几何意义(一)——线性代数的意义

    线性代数的几何意义 一 一 线性 代数 的意义 何为 代数 代数 一词的英文是Algebra 源于阿拉伯语 其本意是 结合在一起 就是说代数的功能就是把许多看似不相关的事物 结合在一起 也就是进行抽象 抽象的目的不是故弄玄虚 而是为了更好的
  • zabbix配置钉钉告警、和故障自愈、监控java

    文章目录 1 配置钉钉告警 server 配置 web界面创建媒介 给用户添加媒介 测试告警 实现故障自愈功能 监控Java zabbix server 安装java gateway 配置 Zabbix Server 支持 Java gat
  • 【深度学习】 Python 和 NumPy 系列教程(十五):Matplotlib详解:2、3d绘图类型(1):线框图(Wireframe Plot)

    目录 一 前言 二 实验环境 三 Matplotlib详解 1 2d绘图类型 2 3d绘图类型 0 设置中文字体 1 线框图 Wireframe Plot 一 前言 Python是一种高级编程语言 由Guido van Rossum于199
  • 信号覆盖 蓝桥杯模拟

    信号覆盖 暴力模拟 问题描述 小蓝负责一块区域的信号塔安装 整块区域是一个长方形区域 建立坐标轴后 西南角坐标为 0 0 东南角坐标为 W 0 西北角坐标为 0 H 东北角坐标为 W H 其中 W H 都是整数 他在 n 个位置设置了信号塔
  • postgresql之pgbackrest备份恢复

    1 安装pgbackrest yum install y https download postgresql org pub repos yum reporpms EL 7 x86 64 pgdg redhat repo latest no
  • 重塑未来:AI对教育行业的深远影响与挑战

    自从AI人工智能的发展进入 iPhone时刻 以来 我们已身处一个日新月异的时代 在众多领域 AI已经大放异彩 而教育作为培养下一代的关键领域 自然也受到了这场科技革命的影响 AI对教育行业重大影响 最近可汗学院 Khan Academy
  • Python金融系列第四篇:置信区间和假设检验

    作者 chen h 微信号 QQ 862251340 微信公众号 coderpai 第一篇 计算股票回报率 均值和方差 第二篇 简单线性回归 第三篇 随机变量和分布 第四篇 置信区间和假设检验 第五篇 多元线性回归和残差分析 第六篇 现代投
  • 用chatgpt写论文可行吗,查重率会达到多少

    AI工具国内体验 关注 码视野 回复关键字 1002 选题 题目 物联网技术在智能家居系统中的应用研究 概要生成 问 请以 物联网技术在智能家居系统中的应用研究 为课题 写一篇物联网专业本科毕业论文的摘要 不少于400字 答 随着人们生活水
  • 单内核与微内核

    单内核是个很大的进程 它的内部又能够被分为若干模块 或是层次或其他 但是在运行的时候 他是个单独的二进制大映象 其模块间的通讯是通过直接调用其他模块中的函数实现的 而不是消息传递 在运行效率上 单内核会具有一定的好处 单内核结构是非常有吸引