操作系统
操作系统,英文名称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用了其中的两个,主要的区别就是执行指令的权限,直观的看就是在户态的时候的不能访问内核空间,这样就保证了应用程序写的代码只能操作自己进程的那块地址,而不影响操作系统代码的运行。
区分用户态/内核态作用
- 安全性,不能修改操作系统内核核心代码/数据
【文章福利】小编推荐自己的Linux内核技术交流群:【977878001】整理一些个人觉得比较好得学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前100进群领取,额外赠送一份价值699的内核资料包(含视频教程、电子书、实战项目及代码)
内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料
学习直通车: