操作系统——解决了我的一些困惑
目录
3、计算机中的淘汰算法 & 分配算法 & 调度算法 & 空间管理
5、TLB(快表)、分页存储(慢表)【二级、多级、分段、分页、段页】、虚拟内存
1、电脑开机做了什么事情
首先,我们已经通过BIOS引导,安装了一个操作系统,并且划分了分区,还安装了软件
现在开始开机: (自检-BIOS-MBR-PBR-初始化)
- CPU读取磁盘信息(执行BIOS引导程序——硬件自检)
- 通过主引导记录MBR——找到磁盘分区 & 操作系统的分区
- 通过分区引导记录PBR——根据根目录找到启动管理程序
- 执行操作系统的初始化程序——完成操作系统的初始化
补一下:(408小白,刚刚才开始复习操作系统,还搞不定那些分区什么的,虽然王道有讲,但是忘记了差不多了)
- 电源开启后,计算机进行电源自检,确保各硬件设备正常。
- 主板上的BIOS芯片被访问,执行Basic Input/Output System (BIOS)程序。BIOS负责初始化各硬件设备,并进行一系列自检,包括检查RAM、显示适配器等。
- BIOS通过读取硬盘驱动器的引导区(Master Boot Record,MBR)来加载引导程序。MBR位于分区表的第一个扇区,其中存储了引导程序的位置和大小信息。主要分为:【磁盘引导程序 和 分区表】(扫描分区表:分区表记录了D盘的位置,还有系统分区C盘等等,【普通盘】就是记录的数据,【系统盘】就是操作系统的程序)
- 通过【MBR的引导程序】找到【系统分区】,读取【分区引导记录 - Partition Boot Record - PBR】,然后根据【根目录】找到【启动管理程序】,加载【操作系统的引导加载程序】(如果是Linux,就加载Linux,如果是Windows,就加载Windows)。完成后把【控制权】转交给【操作系统】。
- 【操作系统内核】被加载入内存,并开始执行【初始化程序】。【初始化程序】负责配置系统环境、加载设备驱动程序和初始化各种子系统。
- 【初始化过程】通常涉及加载一些核心组件、建立内存管理和进程管理结构,以及准备其他必要的系统资源。
- 一旦初始化完成,操作系统进入【可用状态】,用户可以进行交互,并且其他应用程序可以在操作系
需要注意的是,不同的操作系统和计算机架构可能会有所不同,但基本过程大致相似。此外,硬盘分区和软件安装的细节通常在操作系统初始化之后完成。
大佬补充:
目前大多BIOS 都是FLASH存储,可烧写擦除,ROM只是针对用户使用而言的,防止固件程序被随意改动,按下开机键后首先执行上电,上电后权限移交给CPU和BIOS,而后bios再调用mbr表,同样S5-S0根据ACPI会同步执行掉电以达到低功耗。值得一提的是在计算机设计中固件不一定只有BIOS code,有部分挂载需要借助UEFI系统进行升级,同样针对用户来说也是ROM。同样BIOS FLASH内部不一定只有BIOS code,这部分是ODM针对需求定制来决定的。针对硬件层来说,第一层是上电,也就是会执行上电复位/使能/软复位的操作,第二层则是BIOS,第三层是mbr,第四层是fs(eg:NTFS,mbr需要根据fs的类型再进行find os boot),第五层是OS kernel(这之前可能也还有个OS boot),而后才是OS以及OS GUI。当然实际上都是由设计决定的。例如fs其实可以不止一层,kernel可以有kernel的fs,mbr可以有mbr的fs,OS由OS的fs,而磁盘也可能有自己的文件系统(即为固件管路或者存储矩阵管理)。过程还挺复杂的,我这边接触的也只是一个角度的(ACPI上的)
注意:【uefi启动】
现在已经是uefi启动了(原理都是差不多的,不过是uefi统一了框架)
2、真正实现并行的计算机
并行处理计算机系统(parallel computer system)是指同时执行多个任务或多条指令或同时对多个数据项进行处理的计算机系统。
早期的计算机是串行逐位处理的,称为串行计算机。
并行处理计算机主要指以下两种类型的计算机:
1、能同时执行多条指令或同时处理多个数据项的单中央处理器计算机;(超流水技术)
2、多核处理机(可以有一个CPU多个核心)
3、计算机中的淘汰算法 & 分配算法 & 调度算法 & 空间管理
淘汰算法:
2、页面调度(内存页面的置换)
3、高速缓存(Cache与TLB的内存块置换)
分配算法:
1、内存分配算法——离散分配、连续分配
2、进程资源分配——银行家算法
调度算法:
1、进程调度排队——6个(FIFO)
2、磁盘调度算法——6个
空间管理:
1、文件管理方法——4个(位示图)
4、什么是虚拟内存?为什么需要虚拟内存?最多可分配多少?
0、操作系统——会默认给虚拟内存
微软官方文档——程序都需要虚拟内存的,不管你剩余内存有多少
1、为什么进程使用的是虚拟内存,而不是真实的物理内存?
虚拟内存使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,
它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
2、如果内存不够,我们可以手动设置虚拟内存的大小
对于系统上运行的进程来说:(虚拟内存的最大容量由计算机的地址结构决定的)
在32位系统上,最多可以拥有4GB(2的32次方)虚拟内存空间,
在64位系统上,则最多可以拥有256T(2的64次方)虚拟内存空间。
由于每个进程都有一个这么大的地址空间,导致所有进程的虚拟内存加起来,自然要比实际物理内存大得多。所以,并不是所有的虚拟内存都会分配物理内存,只有那些实际使用的虚拟内存才会分配物理内存。
当进程对某块虚拟内存进行读写时,CPU 就会去访问这块内存, 这时如果发现这块虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的缺页中断函数处理,这时才会真正地为它分配物理内存。
3、总结
虚拟内存技术——扩充内存逻辑空间的技术
简单说——给程序加了一个映射,方便从离散的硬盘块中,快去取出并且替换
主要通过将部分程序的内存映射到磁盘上,然后在需要时再将其读入内存中来扩展可用地址空间。
优点——它提供了更大的地址空间,使程序能够访问比实际物理内存更多的内存。
缺点——由于需要从磁盘读取和写入数据,虚拟内存访问速度相对较慢,从而导致系统性能受到影响。
4、举一个例子
对于虚拟内存——就是老板(操作系统)给员工(程序)画的饼
画饼:操作系统给程序说有100个房间(连续的内存空间)供他使用【这就是他虚拟的内存】
实际:
员工(程序)在真正使用那些房间里面的东西时【虚拟地址】,老板会进一步处理转换为内存上对应的【物理地址】
其实老板(操作系统)只会给分他10个房间【内存空间】,
并且总会及时的把没有在【内存空间】的地址,放到那【内存空间中】——页面置换
这样就让程序没有感知,感觉良好(实际上就是被坑了~)
Swap分区
5、TLB(快表)、分页存储(慢表)【二级、多级、分段、分页、段页】、虚拟内存
CPU到Cache中——有TLB(快表)做地址转换(提高运行速度)
内存块到硬盘——有(慢表)做物理地址到虚拟地址的转换(方便程序运行)
内存块到硬盘——有(虚拟内存)做地址转换(方便程序更好运行)