【值得收藏】Linux内核原理理解

本文详细介绍了Linux内核中的内存管理,包括虚拟地址和物理地址映射、页帧、页表及TLB快表。此外,还探讨了进程管理,如进程控制块PCB、进程内核栈、进程创建、进程和线程的差异以及进程间通信。文章还涉及中断、系统调用、缺页中断和交换技术。最后,简要概述了文件系统和文件类型。
摘要由CSDN通过智能技术生成

操作系统

操作系统,英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心。

操作系统的作用是管理和控制计算机系统中的硬件和软件资源,例如,它负责直接管理计算机系统的各种硬件资源,如对CPU、内存、磁盘等的管理,同时对系统资源所需的优先次序进行管理。操作系统还可以控制设备的输入、输出以及操作网络与管理文件系统等事务。同时,它也负责对计算机系统中各类软件资源的管理。例如各类应用软件的安装、设置运行环境等。

  • 内存管理
  • 进程管理
  • 设备管理
  • 文件管理

内存管理

地址映射

l 我们程序所使用的内存地址叫做虚拟内存地址

Virtual Memory Address

l 实际存在硬件里面的空间地址叫物理内存地址

Physical Memory Address

把进程所使用的地址「隔离」开来,即让操作系统为每个进程分配独立的一套「虚拟地址」,进程间互不干涉,虚拟地址到物理地址的转化是通过mmu硬件单元实现的。

【文章福利】小编推荐自己的Linux内核技术交流群: 【977878001】整理一些个人觉得比较好得学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前100进群领取,额外赠送一份 价值699的内核资料包(含视频教程、电子书、实战项目及代码)

内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

页帧

作为内存管理的基本单元,页的许多状态需要被记录下来(比如,内核需要知道什么时候可以被回收),因此内核为内核中的每个页都以页描述符表示struct page{}.系统在初始化时根据物理内存的大小建立起一个page结构数组mem_map,作为物理页面的“仓库”

记录物理内存的信息,一个页帧一般是4k大小

页表

用来将虚拟地址空间映射到物理地址空间的数据结构称为页表。实现两个地址空间的关联最容易的方法是使用数组,对虚拟地址空间中的每一页,都分配一个数组项。该数组项指向与之关联的页帧,但有一个问题。例如,IA-32体系结构使用4 KiB页,在虚拟地址空间为4 GiB的前提下,则需要包含100万项的数组。在64位体系结构上,情况会更糟糕。每个进程都需要自身的页表,因此系统的所有内存都要用来保存页表,也就是说这个方法是不切实际的。

因为虚拟地址空间的大部分区域都没有使用,因而也没有关联到页帧,那么就可以使用功能相同但内存用量少得多的模型:多级分页

多级分页在有物理内存未分配的情况下,减少页表的占用空间

TLB(快表)

上面介绍到,MMU的输入是page table,而page table又存在内存里,和cpu的cache相比,内存的速度很慢,为了进一步加快虚拟地址到物理地址的转换速度,出现了TLB快表,它存在于cpu的L1cache里面,用来缓存已经找到的虚拟地址和物理地址的映射,这样下次转换前先排查一下TLB,如果已经在里面了就不需要使用MMU进行转换了

物理页分配

  • 伙伴系统
    为分配一组连续的页框而建立的一种健壮、高效的分配策略,最小单位未page frame:分割/合并
  • slab分配
    根据对象大小动态分配内存,分配空间可以小于page frame

虚拟空间

​ 在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同位数的系统,地址空间的范围也不同。32 位的系统如下所示:

  • 进程在用户态时,只能访问用户空间内存
  • 只有进入内核态后,才能访问内核空间内存

用户态和内核态,本质上是cpu上有一个标识位,用来表示cpu的权限,一般有0、1、2、3这四个级别,Linux用了其中的两个,主要的区别就是执行指令的权限,直观的看就是在户态的时候的不能访问内核空间,这样就保证了应用程序写的代码只能操作自己进程的那块地址,而不影响操作系统代码的运行。

区分用户态/内核态作用

  1. 安全性,不能修改操作系统内核核心代码/数据
【文章福利】小编推荐自己的Linux内核技术交流群:【977878001】整理一些个人觉得比较好得学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前100进群领取,额外赠送一份价值699的内核资料包(含视频教程、电子书、实战项目及代码)

内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

学习直通车:

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值