首页 > 其他分享 >内核简介

内核简介

时间:2024-08-04 17:38:55浏览次数:13  
标签:内核 简介 虚拟地址 页表 空间 CPU 内存

Linux内核基础

楔子

这部分的内容首先要回忆一下计算机的基础知识,基本的计算机结构包括CPU(算数逻辑单元ALU、控制单元CU)、存储器、输入和输出。CPU和其它设备是通过总线连接的。CPU执行的基础被称为指令集,CPU执行存储器存取指令时:CPU发出存取信号,然后就从存储器存取数据。存取器通过中断机制通知CPU存取完毕。引入中断机制的意义是,让CPU不必等IO的完毕,而转去执行其它指令。

计算机系统内核

内核的作用:

  • 资源管理
  • 提供基础库

传统意义上的内核实现有两种方式:

  • 微内核结构:只有最基础的功能由中央内核实现,其它的功能都由一些其它进程实现。
  • 宏内核结构;宏内核还包括有文件系统、内存管理、设备驱动程序功能。Linux内核属于宏内核。

虚拟地址空间

内存区域是通过指针寻址的,CPU字长决定了能够管理的地址空间的最大长度。现代计算机支持64位的字长,所以其管理的最大虚拟内存空间大小为 264B,实际可寻址的区域小于这个值。Linux将虚拟地址空间划分为两个部分:

  • 内核空间,TASK_SIZE~264保留给内核专用,用户进程无法访问。
  • 用户空间,从0~TASK_SIZE是用户空间范围

用户进程执行系统调用时,会发生用户状态到内核状态的切换,切换到内核空间后,由内核进程去执行相应的任务。每个进程都认为它占有全部的用户空间。

页表

虚拟地址空间和物理地址空间之间映射的问题是通过页表来实现的。物理地址和虚拟地址都被划分为页。进程A和进程B都拥有同样大小的虚拟地址空间,但是他们需要访问的资源不同,也就是需要访问的物理地址不同,所有只需要将其需要的访问的虚拟页映射到真实物理页即可。物理页经常被称为页帧,页一般指虚拟地址空间的页。

页表的设计

每个页表项数据结构中包含虚拟地址页以及与其相对应的页帧。如果只有一层,假如每页都是1KB,那么1GB就需要保存100个页表项,那么此时会很耗内存,所以实际设计方式中采用层次设计原理。Linux采用了四层页表:

  • 全局页目录(Page Global Directory, PGD)
  • 中间页目录(Page Middle Directory, PMD)
  • 页表数组(Page Table Entry, PTE)

然后进行层级查询即可,此时不需要使用的虚拟地址空间,就不会有中间页目录、页表数组等。避免只用一个数组项保存数据而占用大量的内存。

层级设计存在的另一个问题是必须通过多层转换才能够访问到物理地址。所以内核有两种加速的方式:

  • MMU(内存管理单元)优化内存访问操作
  • 保存到TLB(Translation Lookaside Buffer)(CPU缓冲区)转移后备缓冲区将频繁使用的地址存储在其中,避免直接查询页表,节约时间。

物理内存的分配

  • 伙伴系统:内存分配中经常需要分配连续的页
  • slab缓冲:本质上用于更小的分配内存单元(从页中分配)

页面交换和页面回收

页面交换是通过缺页异常实现的。页面回收其实就是页面回写,将数据写入到硬盘中。

外设

  • 块设备:可以随机访问数据,典型的就是硬盘,数据的读写只能以块(一般为512B)的倍数读写,按块读写。
  • 字符设备:顺序读取,通常不支持随机存取。按字符/字节读写数据。

缓存

从低速块设备读取数据暂存在内存中,一般缓存也是按页组织的,称为页缓存。

标签:内核,简介,虚拟地址,页表,空间,CPU,内存
From: https://www.cnblogs.com/solicit/p/18342021

相关文章

  • HTML 简介
    HTML(HyperTextMarkupLanguage)是一种用于创建网页和网页应用程序的标准标记语言。它不是一种编程语言,因为它不包含编程语言的特性,如变量、循环或条件语句。相反,HTML使用一系列的标签(tags)来定义网页的结构和内容。这些标签告诉浏览器如何显示文本、图片、链接、表格等元素。HTML......
  • Linux内核-内核链表
    1内核链表内核链表本质就是一个双向循环链表:链表的实现仅用一个include/linux/list.h实现。内核链表有别于传统链表就在节点本身不包含数据域,只包含指针域。故而可以很灵活的拓展数据结构。使用时包含在用户数据结构内部。1.1内核链表结构体structlist_head{struct......
  • Linux内核系统体系结构
    Linux内核主要由5个模块构成,它们分别是:进程调度模块、内存管理模块、文件系统模块、进程间通信模块和网络接口模块。进程调度模块用来负责控制进程对CPU资源的使用。所采取的调度策略是各进程能够公平合理地访问CPU,同时保证内核能及时地执行硬件操作。内存管理模块用于确......
  • SAP 生产订单状态简介
    SAP生产订单状态简介SAP生产订单状态的简介:生产订单状态取值在SAP中,生产订单的状态是关键的管理工具,用于跟踪和控制生产过程。每个生产订单都会经历一系列状态,这些状态提供了有关生产订单当前进展和完成情况的重要信息。SAP生产订单状态的简介:CRTD(创建)......
  • SAP 货源清单(Source List)简介
    SAP货源清单(SourceList)简介主要功能创建与维护优点相关事务码前台操作步骤总结货源清单优先级结论SAP货源清单(SourceList)是用于管理和控制采购的关键工具。它记录了某一物料的所有合格供应商以及这些供应商的有效期间。通过货源清单,企业可以确保从特定供......
  • ONNXRuntime: 深度学习模型入门学习简介
    目录ONNXRuntime的作用主要功能跨平台支持性能优化易于集成如何使用ONNXRuntimeONNXRuntime的优缺点优点缺点应用领域1.自然语言处理(NLP)2.计算机视觉(CV)3.语音识别和处理4.推荐系统5.医疗健康6.金融科技(FinTech)具体应用案例微软产品与服......
  • ESP32 RainMaker简介
    RainMaker可为您提供以下组件和功能:设备SDK:允许用户配置可读取/修改的设备信息和属性。可以实现网络配置、OTA升级,云通信等功能。透明的云中间件:支持亚马逊AWS服务,使得设备的公开属性可以被手机APP或其他第三方服务(如语音助手)访问。自适应iOS/Android的手机APP:......
  • 【Spring Boot简介】
    什么是SpringBoot呢,就是一个JavaWeb的开发框架,和SpringMVC类似,对比其他JavaWeb框架的好处,官方说是简化开发,约定大于配置,能够迅速的开发web应用。所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂的应用场景,逐渐衍生一种规范框架,只需要进行各种配置而不需要自己去实现......
  • C primer plus 第四章 4.2字符串简介
    一、什么是字符串:    是一个或多个字符的序列(被双引号引起来的就是字符串),单引号引起来的是字符,字符串=字符+空字符二、char类型和null字符:    *C中没有专门储存字符串的变量,字符串被储存在char类型的数组中。     数组:由连续的储存单元组成,字符串......
  • STM32简介及学习方向
    目录1.STM32简介2.STM32与ARM的关系3.STM32F103C8T6介绍3.1STM分类3.2STM命名规则3.3项目开发介绍3.4STM32F103C8T6芯片3.4.1芯片外观3.4.2 引脚图 3.4.3引脚对应功能表 3.4.4 STM32F103系列芯片的系统架构 3.4.5 STM32F103系列芯片总线矩阵(不含......