OS_操作系统的运行环境

2024.06.11:操作系统的运行环境学习笔记

第3节 操作系统的运行环境

  • 3.1 操作系统引导
  • 3.2 操作系统内核
    • 3.2.1 内核资源管理
    • 3.2.2 内核基本功能
  • 3.3 CPU的双重工作模式
    • 3.3.1 CPU处于用户态(目态)
    • 3.3.2 CPU处于内核态(管态)
  • 3.4 特权指令&非特权指令
    • 3.4.1 非特权指令
    • 3.4.2 特权指令
  • 3.5 系统调用
    • 3.5.1 用户态到内核态
    • 3.5.2 内核态到用户态
    • 3.5.3 系统调用的过程(CPU变态的过程)
  • 3.6 中断和异常的处理(现代OS是由中断驱动的)
    • 3.6.1 异常处理过程
    • 3.6.2 中断处理过程


3.1 操作系统引导

从开机到操作系统加载到主存中,过程是怎么样的

电脑主板
在这里插入图片描述

  • 计算机启动时,首先进行电源自我检查,确保所有的硬件设备都正常,并且准备就绪
    在这里插入图片描述
  • 准备就绪后,计算机就会从主板的ROM区去激活一个BIOS程序,这个程序会负责初始化硬件,进一步进行硬件自检

大家做题的时候,题目问你主存是由什么样的存储器组成的?见招拆招,看情况

  • RAM (大部分)
  • RAM+ROM:题干把存放BIOS这个程序的这个ROM去给它并到主存里面了
  • 硬件自检没有问题之后,这个BIOS就会从硬盘,也就是磁盘,它的主引导记录MBR中去读取引导程序
    在这里插入图片描述

BIOS程序读取硬盘0号扇区的主引导记录MBR,MBR包括(磁盘引导程序)和(分区表信息

  • 磁盘会被分成好几个区,(分区表信息)就是用来记录这个区的,我们的电脑里面系统分区最常见的这个C盘,C盘里面不仅有我们下载的这些数据,更多的是一些系统的文件,这个东西我们会把它叫做(系统分区

在这里插入图片描述

  • 假设我们要去启动windows的话,我们会根据MBR里面的磁盘引导程序去读取系统盘的第一个扇区(0号扇区),也就是分区表里面告诉我们windows所在的这个系统分区,它的盘是C盘。
  • 我们就会根据这个起始地址找到C盘,然后通过MBR里面的磁盘引导程序去启动这个盘的第一个扇区。
  • 这个盘的第一个扇区,又叫做(分区引导记录PBR),它里面会存储windows这个操作系统它的引导程序,这个引导程序会帮助你找到操作系统的内核,从而你就可以把内核调到内存了

在这里插入图片描述

  • 我们最终的结果就是将一个操作系统它的内核部分调入到了主存中,并且让它常驻主存。这样就可以让以后的用户直接使用这样的操作系统。
  • 注意操作系统并不是一整个全部调入到了内存引导的过程中,我们只是把内核部分调入到了内存。
  • 这个过程中,也请大家去注意区别MBR和PBR,MBR是磁盘的0号扇区,也就是第一个扇区里面的内容,它叫做主引导记录,它里面有磁盘引导程序和分区表信息。根据分区表,你可以找到一个系统分区,这个系统分区里面的第一个扇区就是0号扇区,它会存放分区引导记录,这个里面存放的是这个操作系统的引导程序,其实也就是几段代码,把它调入到主存里面,它就会告诉你这个内核它的位置在哪里

3.2 操作系统内核

定义:操作系统中与硬件紧密相关的模块,负责管理系统的各种资源
在这里插入图片描述
注意:只有内核从引导开始,就一直在内存的某一个空间常驻,这个空间我们把它叫做(内核空间),而主存的其他部分我们把它叫做(用户空间
在这里插入图片描述

3.2.1 内核资源管理

进程管理、存储器管理、设备管理都是由操作系统的内核代码去执行的

  • 进程管理:确保操作系统可以高效、公平、安全地同时运行多个应用程序
  • 存储器管理:确保有效、安全地分配管理计算机系统中的内存资源
  • 设备管理:确保所有外围设备和硬件都能有效且安全地与计算机系统交互

3.2.2 内核基本功能

  • 原语:在单个步骤中完成操作系统的基本构件;原语处于操作系统最底层,运行时不可以被打断;原语运行时长较短,调用频繁
  • 中断处理:系统调用、键盘命令输入、进程调度、设备驱动等很多重要的活动都依赖于中断

操作系统是靠中断去驱动的。每一次去处理中断的时候呢,都是由操作系统的内核先对中断进行一个有限处理,然后转入相关的进程,这些进程会完成后续的一个处理工作

  • 时钟管理:操作系统用来处理和控制时间和时间相关函数的机制

3.3 CPU的双重工作模式

在引导操作系统的时候,这个内核部分会被加载到内存的内核空间,然后常驻到(操作系统内核)。内核空间以外的这些内存空间就是(用户空间)。

在访问用户空间和访问内核空间的时候,CPU其实是处于两种不同的工作模式的,那么由谁来代表当前的工作模式呢,计组里面学过,CPU内部有这样的一个寄存器PSW(状态字寄存器),它里面会有一个模式位,这个模式位会用来记录当前CPU的工作模式是怎么样的


3.3.1 CPU处于用户态(目态)

CPU在用户态可以访问内存的用户空间
在这里插入图片描述


3.3.2 CPU处于内核态(管态)

CPU只有在内核态可以访问内存的内核空间(内核空间其实放的就是操作系统的内核)
在这里插入图片描述


3.4 特权指令&非特权指令

3.4.1 非特权指令

在这里插入图片描述
此时,应用程序里的所有指令都是非特权指令,非特权指令(不能直接访问)系统硬件和软件,非特权指令对内存的访问也只限于(用户空间

所有应用程序里面的所有指令,它都是非特权指令


3.4.2 特权指令

在这里插入图片描述
如果应用程序中出现特权指令,则硬件不会执行该指令,而是发出错误信号,操作系统捕捉到信号后会停止该进程的运行并转入(错误处理程序

特权指令是在CPU内核态下才可以运行的一种指令,它对内存的访问是不受限制的


3.5 系统调用

系统调用(system call)形如一组打包号的库函数,这些函数的功能需要由操作系统内核来实现,系统调用提供了(用户程序)和(操作系统内核)之间的(接口)。应用程序通过系统调用来获得操作系统的服务。
在这里插入图片描述
在这里插入图片描述

3.5.1 用户态到内核态

  • 用户程序发起系统调用
  • 发生中断,必须陷入内核态由OS内核处理中断
  • 发生异常,必须陷入内核态由OS内核处理中断
  • 用户程序试图执行特权指令

3.5.2 内核态到用户态

  • 设置程序状态字寄存器PSW中的CPU模式位,将其置为1

3.5.3 系统调用的过程(CPU变态的过程)

在这里插入图片描述


3.6 中断和异常的处理(现代OS是由中断驱动的)

在这里插入图片描述


3.6.1 异常处理过程

  • 异常触发

当程序执行中发生异常,CPU会自动检测并触发异常

  • 保存上下文

与中断处理相似,CPU会保存当前的执行状态,包括程序计数器和寄存器值

  • 执行异常处理程序

CPU查找异常向量表,根据异常类型跳转到相应异常处理程序处理

  • 处理结果

根据异常的性质,处理程序可能会修正错误并允许程序继续执行,或终止程序返回错误信息

  • 恢复或终止

如果异常可恢复,CPU将恢复之前的程序状态并继续执行;若不可恢复,终止程序并进行错误处理


3.6.2 中断处理过程

  • 触发中断

中断指由外部设备(键盘、鼠标等)发起,通常是设备完成任务或需要注意时触发

  • 中断信号接收

CPU会在当前执行的指令完成后检测中断,暂停当前进程的执行

  • 保存上下文

CPU会保存当前任务的状态,包括程序计数器和其他寄存器值(现场信息),以便中断处理完成后能恢复运行

  • 执行中断服务程序

CPU根据中断向量表找到相应中断处理程序并执行

  • 恢复上下文并返回

中断服务程序完成后,CPU恢复之前保存的程序状态,继续执行被中断的程序

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Scroll布局,横向与纵向

注意,当横向scroll时,直接子元素的宽,不能100%, 当纵向scroll时,直接子元素的高,不能100%​​​​​​​ 1、纵向代码: 方法1:用数值计算,来设置中间的高度: …

nginx负载均衡、java、tomcat装包

一、nginx 七层负载均衡 1、七层负载均衡基础配置 2、负载均衡状态 [rootserver]# vim /usr/local/nginx/conf/nginx.confworker_processes 1;event {worker_connections 1024;}http { # 七层负载均衡支持http、ftp协议include mime.types;default_type app…

【云原生】数据库忘记密码怎么办?

相信很多人都会遇到在虚拟机中忘记数据库密码的情况,想必大家都很苦恼,所以今天给大家来讲讲数据库忘记密码了如何修改密码再登录数据库!!! 1、关闭数据库服务 systemctl stop mariadb 2、执行MySQL 服务器在启动时跳…

ModuleNotFoundError: No module named ‘tqdm‘

报错信息: tqdm是一个快速、可扩展的Python进度条库,用于展示迭代器的长循环执行进度。 解决:通过以下命令安装 使用conda命令安装 conda install tqdm使用pip安装: pip install tqdm

【JVM】垃圾回收机制、算法和垃圾回收器

什么是垃圾回收机制 为了让程序员更加专注于代码的实现,而不用过多的考虑内存释放的问题,所以在Java语言中,有了自动的垃圾回收机制,也是我们常常提及的GC(Garbage Collection) 有了这个垃圾回收机制之后,程序员只需…

Spring学习笔记1

今天内容:配置maven 搭建了springboot项目 约定大于配置(它默认的框架优先级比配置的要高,基本全都用它所默认的框架只有特殊需求的时候才会修改一小部分。) IOC Spring IOC 管理项目中java bean的生命周期 在项目运行阶段,…

操作系统与进程简单介绍

操作系统与进程 操作系统进程 操作系统 上一篇博客中介绍了操作系统到底层硬件它们之间的一个关系,那么还是这张图 操作系统到用户它们之间的关系又是如何的呢? 又回到了最根本的问题上:为什么要有操作系统呢? 1、向下管理好软…

敦煌文化主题页面 HTML,CSS,Javascript 源码分享

使用技术:HTML,CSS,JavaScript 项目亮点:加入了大量的CSS动画效果,以及JS交互效果,水平适合初学者以及大学生,包含登录注册页 需要的可以dd, 绿泡泡:ColdDayOne

为面试准备的一些内容

开发中使用了什么技术? mvvm、compose、livedata、单例模式、工厂模式、弱引用、线程池、Handler。 对于项目一开始我们打算使用aosp原生的管控方式,如UsageStatManager获取每个app的使用时长,和使用PackageManager的setPackagesSuspended方…

一文弄清Java的四大引用及其两大传递

开场白 Hello大家好呀,我是CodeCodeBond✊最近在复习很多很多的基础知识,有了很多新的感悟~ 话不多说,直接发车✈ 四大引用 问题切入点 在学习 Thread线程利用ThreadLocalMap实现线程的本地内存(变量副本)的时候&…

mac配置git的sshkey

在MAC中配置Git的SSH Key: 1.打开终端 2.生成SSH密钥,输入以下命令: ssh-keygen -t rsa -b 4096 -C “你自己的账号电子邮件地址” 按回车键后,系统会提示你输入文件保存路径,默认为~/.ssh/id_rsa直接按回车键使用默…

Mybatis实战:#{} 和 ${}的使用区别和数据库连接池

一.#{} 和 ${} #{} 和 ${} 在MyBatis框架中都是用于SQL语句中参数替换的标记,但它们在使用方式和处理参数值上存在一些显著的区别。 #{}的作用: #{} 是MyBatis中用于预编译SQL语句的参数占位符。它会将参数值放入一个预编译的PreparedStatement中&am…

Java语言程序设计——篇十一(2)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 欢迎大家:这里是我的学习笔记、总结知识的地方,喜欢的话请三连,有问题可以私信🌳🌳&…

MySQL(8.0)数据库安装和初始化以及管理

1.MySQL下载安装和初始化 1.下载安装包 下载地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2.解压…

数据同步策略概览

数据同步在业务开发中比较普遍,例如 订阅MySQL的binlog将数据同步至异构数据库。数据同步方案需要考虑一下几点: 数据实时性要求数据量级是否有数据转换逻辑 可分为两种模式 发布订阅模式:分为订阅数据库log还是订阅应用层发的消息点对点模…

问界M7是不是换壳东风ix7? 这下有答案了

文 | AUTO芯 作者 | 谦行 终于真相大白了 黑子们出来挨打啊 问界M7是换壳的东风ix7? 你们没想到,余大嘴会亲自出来正面回应吧 瞧瞧黑子当时乐的 问界你可以啊!靠改名字造车呢? 还有更过分的,说M7是东风小康ix7…

【网络】网络入门(第一篇)

网络入门可以从多个方面开始,以下是一个基本的网络入门指南,涵盖了网络的基本概念、网络类型、网络协议、网络拓扑、网络设备以及网络地址等方面。 一、网络基本概念 计算机网络:将多个计算机系统和设备连接在一起,以实现资源共…

CANoe系统变量模块里定义的结构体类型和变量从CAPL代码角度理解

CAPL里声明一个结构体类型: variables {struct DoIPMessage{byte version;byte inVersion;word type;dword length;byte payload[1500];};struct DoIPMessage doipMessage; }声明一个结构体类型DoIPMessage,定义了一个此结构体…

【数据结构】哈希表(散列表)

目录 1、unordered系列关联式容器 2、哈希概念 3、哈希函数 3.1 直接定址法 3.2 除留余数法 4、哈希冲突 4.1 闭散列(开放定址法) 4.1.1 线性探测 4.1.2 二次探测 4.1.3 线性探测代码实现 插入 搜索 删除 对于不可以取模的类型 4.2 开散列(哈希桶/拉链法) 插入…

【pyhton】Python中zip用法详细解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…