操作系统——解决了我的一些困惑

news2024/11/30 18:33:28

目录

1、电脑开机做了什么事情

2、真正实现并行的计算机

3、计算机中的淘汰算法 & 分配算法 & 调度算法 & 空间管理

4、什么是虚拟内存?为什么需要虚拟内存?最多可分配多少?

5、TLB(快表)、分页存储(慢表)【二级、多级、分段、分页、段页】、虚拟内存

6、高级语言程序——转换为可执行目标程序


1、电脑开机做了什么事情

爆肝一晚上,希望用动画带你理解操作系统的启动_哔哩哔哩_bilibili

首先,我们已经通过BIOS引导,安装了一个操作系统,并且划分了分区,还安装了软件

现在开始开机:   (自检-BIOS-MBR-PBR-初始化)

  1. CPU读取磁盘信息(执行BIOS引导程序——硬件自检)
  2. 通过主引导记录MBR——找到磁盘分区 & 操作系统的分区
  3. 通过分区引导记录PBR——根据根目录找到启动管理程序
  4. 执行操作系统的初始化程序——完成操作系统的初始化

补一下:(408小白,刚刚才开始复习操作系统,还搞不定那些分区什么的,虽然王道有讲,但是忘记了差不多了)

  1. 电源开启后,计算机进行电源自检,确保各硬件设备正常
  2. 主板上的BIOS芯片被访问,执行Basic Input/Output System (BIOS)程序。BIOS负责初始化各硬件设备,并进行一系列自检,包括检查RAM、显示适配器等。
  3. BIOS通过读取硬盘驱动器的引导区Master Boot RecordMBR)来加载引导程序。MBR位于分区表的第一个扇区,其中存储了引导程序的位置和大小信息。主要分为:【磁盘引导程序 分区表】(扫描分区表:分区表记录了D盘的位置,还有系统分区C盘等等,【普通盘】就是记录的数据,【系统盘】就是操作系统的程序)
  4. 通过【MBR的引导程序】找到【系统分区】,读取【分区引导记录 - Partition Boot Record - PBR】,然后根据【根目录】找到【启动管理程序】,加载【操作系统的引导加载程序】(如果是Linux,就加载Linux,如果是Windows,就加载Windows)。完成后把【控制权】转交给【操作系统】。
  5. 【操作系统内核】被加载入内存,并开始执行【初始化程序】。【初始化程序负责配置系统环境、加载设备驱动程序和初始化各种子系统。
  6. 【初始化过程】通常涉及加载一些核心组件、建立内存管理和进程管理结构,以及准备其他必要的系统资源。
  7. 一旦初始化完成,操作系统进入【可用状态】,用户可以进行交互,并且其他应用程序可以在操作系

需要注意的是,不同的操作系统和计算机架构可能会有所不同,但基本过程大致相似。此外,硬盘分区和软件安装的细节通常在操作系统初始化之后完成。

大佬补充:

目前大多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统一了框架)

【针对UEFI启动+单系统】在开机的10s内,你的电脑都干了什么?_哔哩哔哩_bilibili

2、真正实现并行的计算机

并行处理计算机系统(parallel computer system)是指同时执行多个任务或多条指令或同时对多个数据项进行处理的计算机系统。

早期的计算机是串行逐位处理的,称为串行计算机。

并行处理计算机主要指以下两种类型的计算机:

1、能同时执行多条指令或同时处理多个数据项的单中央处理器计算机;(超流水技术)

2、多核处理机(可以有一个CPU多个核心)

3、计算机中的淘汰算法 & 分配算法 & 调度算法 & 空间管理

淘汰算法:

1、进程调度(进程五状态的切换)

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(快表)做地址转换(提高运行速度)

内存块到硬盘——有(慢表)做物理地址到虚拟地址的转换(方便程序运行)

内存块到硬盘——有(虚拟内存)做地址转换(方便程序更好运行)

6、高级语言程序——转换为可执行目标程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1255798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React入门使用 (官方文档向 Part1)

文章目录 React组件:万物皆组件 JSX: 将标签引入 JavaScriptJSX 规则1. 只能返回一个根元素2. 标签必须闭合3. 使用驼峰式命名法给 ~~所有~~ 大部分属性命名!高级提示:使用 JSX 转化器 在 JSX 中通过大括号使用 JavaScript使用引号传递字符串使用大括号&…

佳易王幼儿园缴费系统软件编程应用实例

佳易王幼儿园缴费系统软件编程实例 佳易王幼儿园缴费系统功能: 1、系统设置 2、班级设置 3、其他费用名称 4、学生信息管理 5、学生缴费 6、统计报表 7、备份全部数据 软件试用版下载可以点击下方官网卡片

前端向后端传JSON数据,使用MyBatis查询

form中向后端传的是空字符串,并不是null 而在MyBatis的判断中应判断是否为空字符串,而并非null

2016年五一杯数学建模B题能源总量控制下的城市工业企业协调发展问题解题全过程文档及程序

2016年五一杯数学建模 B题 能源总量控制下的城市工业企业协调发展问题 原题再现 能源是国民经济的重要物质基础,是工业企业发展的动力,但是过度的能源消耗,会破坏资源和环境,不利于经济的可持续发展。目前我国正处于经济转型的关键时期&…

String,StringBuffer以及StringBuilder之间的区别

文章目录 区别一:字符串内容是否可变区别二:线程安全区别三:性能区别四:使用场景 “String,StringBuffer以及StringBuilder之间的区别的区别” 这个问题是面试官比较常问的一个Java基础题。在日常的开发中,也常常会用到…

Vue轻松入门,附带学习笔记和相关案例

目录 一Vue基础 什么是Vue? 补充:mvvm框架 mvvm的组成 详解 Vue的使用方法 1.直接下载并引入 2.通过 CDN 使用 Vue 3.通过npm安装 4.使用Vue CLI创建项目 二插值表达式 什么是插值表达式? 插值表达式的缺点 解决方法 相关代…

Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式

By: Ailson Jack Date: 2023.11.26 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/165.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。…

MyBatis Generator使用总结

MyBatis Generator使用总结 介绍具体使用数据准备插件引入配置条件构建讲解demo地址 介绍 MyBatis Generator (MBG) 是 MyBatis 的代码生成器。它能够根据数据库表,自动生成 java 实体类、dao 层接口(mapper 接口)及m…

OpenCV检测圆形东西是否存在缺口?

文章目录 前言一、试过的方法二、最终使用的方法1.先极坐标变换2.计算斜率 总结 前言 想了挺久,一直没解决这个问题。后面勉强解决了。 一、试过的方法 1.想用圆度来解决,后来发现圆度差值很小,完整的圆圆度0.89,然后有缺角的圆圆…

性能测试【二】:nmon的常用操作

性能测试【二】:nmon的常用操作 1、nmon介绍说明2、软件下载2.1、Nmon下载地址2.2、Nmonanalyser下载地址 3、nmon使用3.1、将nmon上传至/usr/local/src目录下,并解压3.2、解压后根据自己系统的实际版本查找相应的使用命令,并给命令赋予可执行…

springboot函数式web

1.通常是路由(请求路径)业务 2.函数式web:路由和业务分离 一个configure类 配置bean 路由等 实现业务逻辑 这样实现了业务和路由的分离

Yolov8训练自己的数据集过程

做自己第一次使用Yolov8的记录。 1、下载代码 官网的我没找到对应的视频教程,操作起来麻烦,一下这个链接的代码可以有对应bilibili教程:完整且详细的Yolov8复现训练自己的数据集 选择这个下载: 2、安装需要的包: 按…

2018年10月16日 Go生态洞察:App Engine新Go 1.11运行时发布

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

项目中启用Log4j2日志框架

在实际的项目开发中,日志十分重要,无论是记录运行情况还是定位线上问题,都离不开对日志的分析。日志记录了系统行为的时间、地点、状态等相关信息,能帮助我们了解并监控系统状态,并在发生错误或者接近某种危险状态时能…

emu8086汇编语言输出“Hello World!“

输出Hello world 首先我们尝试用C语言来实现该功能&#xff1a; #include <stdio.h>int main() {printf("Hello World!"); // 输出“Hello World!”return 0; } 将这行代码翻译成汇编语言... ; DS 数据段定义 DATA SEGMENTZIFU DB Hello World!,$ ;字符串…

歌曲《兄弟情深》:歌手荆涛歌曲中的真挚情感

在人生的道路上&#xff0c;有时我们会遇到迷茫、失落、困惑等种种情境。而在这些时刻&#xff0c;身边有一个真挚的兄弟&#xff0c;其意义是无法估量的。歌手荆涛演唱的《兄弟情深》即是对这种深厚情感的美妙歌颂。 一、迷茫时的指引 “当我迷茫时&#xff0c;有你帮目标重新…

安卓系统修图软件(二)

晚上好&#xff0c;自上一次博主分享修图软件之后&#xff0c;今天博主将带来第二期安卓修图软件的推送&#xff0c;个个都是宝藏&#xff0c;建议大家赶紧体验哦。 1.canva可画 如果说有一款手机APP可以与PS媲美&#xff0c;那么一定非canvas莫属。这款强大的修图软件支持海报…

【面试题】介绍一下类加载过程,什么是双亲委派模型

背景 java 文件在运行之前&#xff0c;必须经过编译和类加载两个过程&#xff1a; 编译过程&#xff1a;把 .java 文件 编译成 .class 文件类加载过程&#xff1a;把 .class 文件加载到 JVM 内存里&#xff0c;加载完成后就会得到一个 class 对象&#xff0c;我们就可以使用 n…

将本地项目上传到gitee

本文详细介绍如何将本地项目上传到gitee 1.登录gitee创建一个与本地项目名相同的仓库 2.进入本地项目所在路径&#xff0c;打开Git Bash 3.执行初始化命令 git init4.添加远程仓库 4.1 点击复制你的HTTPS仓库路径 4.2 执行添加远程仓库命令 git remote add origin 你的…

顺序查找(线性查找),折半查找(二分或对分查找),分块查找(索引顺序查找)

文章目录 查找查找的基本概念 线性表的查找一、顺序查找&#xff08;线性查找&#xff09;二、折半查找&#xff08;二分或对分查找&#xff09;三、分块查找&#xff08;索引顺序查找&#xff09; 查找 查找的基本概念 查找表 查找表是同一类型的数据元素&#xff08;或记录…