操作系统学习记录

系统篇

内核

应用和底层硬件(CPU、内存、硬盘等)的连接桥梁。

用户态和内核态

CPU和进程可以在两种态下运行。
内核态可以直接访问所有硬件资源,用户态需要通过“系统调用”陷入到内核态才能否则只能访问用户空间地址的内存(虚拟内存)。

什么时候能从用户态陷入到内核态

就两字——中断!
中断可能是由于系统调用(用户态主动陷入)、异常(缺页、除0)、外设中断(硬盘读写完成等)三种情况产生。

什么是系统调用

程序需要访问硬件资源时候,例如内存、硬盘、网卡,就会“系统调用”陷入内核。
一次系统调用会发生两次CPU上下文切换(CPU上下文指的是CPU寄存器和程序计数器
第一次是从用户态切换到内核态,寄存器原来是用户态的指令位置需要先保存起来,然后更新成内核态指令的位置,最后跳转去内核态执行任务。
第二次是内核态切换回用户态,寄存器恢复为用户态的指令位置,回到用户态运行进程。

用户态和内核态是如何切换的

每个进程都有两个栈,用户栈和内核栈。运行在哪个态就会使用哪个栈。
态的切换最重要的就是栈的切换!
实际上就是把用户态的一些寄存器值压入到内核态栈,从内核态返回时弹栈。

什么是中断?为什么要有中断(外设中断)

这是系统用来相应硬件设备请求的一种机制,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。这是一种异步的处理事件的机制,可以提高系统的并发能力。
那为什么要有这个中断,举个例子,点了个外卖,没有中断(外卖员给你打电话)的话,你就得一直盯着(同步)或者隔三岔五(CPU轮询)看一眼外卖进度,这太耽误事了。有中断(外卖员到了打电话),你就可以心安理得干别的事情,等外卖来了你再停下去处理外卖。

什么是硬件中断和软件中断

Intel的CPU提供了三种中断程序执行的机制,分别是:

  • 中断(interrupt):点了下鼠标、敲了下键盘,这属于异步事件
  • 异常(exception):CPU执行指令时发现了错误,比如除0、缺页,这属于同步事件
  • INT指令:INT指令后面跟了一个数字,相当于直接告诉CPU中断号。Linux用的是INT 0x80

前两者属于硬件中断,因为是硬件(外设或者CPU)自动触发的
INT指令属于软件中断,是程序触发的

什么是硬中断和软中断

由CPU硬件实现的中断机制是硬中断,中断、异常、INT指令都是CPU实现的中断机制
由软件实现的中断机制是软中断,比如Linux实现的软中断守护进程
二者效果相同都是中断当前程序而去执行中断处理程序,处理完返回执行原程序

为什么要有软中断

主要就是让硬中断尽可能简单,提高系统响应速度。
比如网卡接受处理数据包这种会比较慢,而硬中断资源很宝贵,占着不放会影响别的硬中断相应(比如鼠标卡了)。而且中断处理程序相应中断时候,可能会临时关闭中断,意味着一个中断没处理完,别的中断都不能被处理。这不行!!!
所以Linux将中断分为上下两部分

  • 上半部分用来快速处理和硬件紧密相关或者时间敏感的时期
  • 下半部分用来延迟处理上半部分未完成的工作,一般由内核守护进程完成。就是解耦了,异步处理。这一部分是通过对软中断标记数组的某一个位置做一个标记,然后内核守护进程会轮询看数组哪个位置被标记为1了。按照标记位去找对应的处理程序。

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

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

相关文章

P8630 [蓝桥杯 2015 国 B] 密文搜索

P8630 [蓝桥杯 2015 国 B] 密文搜索 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P8630 题目分析 基本上是hash的板子,但实际上对于密码串,只要判断主串中任意连续的八个位置是否存在密码串即可;那么我们…

PHP学习笔记1——html标签以及头部元素页面布局

html是一种超文本标识符号&#xff0c;用来在网页中指定显示页面格式显示 基本格式 <!doctype html> <html><head><title></title> </head><body> </body></html> 包含声明&#xff0c;框架html&#xff0c;头部head&a…

怎么把公众号文章链接做成二维码?扫码查看公众号推文的方法

公众号是现在给用户分享内容的一种方式&#xff0c;通过输出优质的公众号文章内容来为关注者提供信息和内容。当我们发布公众号文章后&#xff0c;有些情况下会需要将公众号内容生成二维码之后&#xff0c;印刷到传单、展板上来显示&#xff0c;那么如何将公众号的文章链接转二…

Commonjs 和 Es Module详解

一 前言 今天我们来深度分析一下 Commonjs 和 Es Module&#xff0c;希望通过本文的学习&#xff0c;能够让大家彻底明白 Commonjs 和 Es Module 原理&#xff0c;能够一次性搞定面试中遇到的大部分有关 Commonjs 和 Es Module 的问题。 带上疑问开始今天的分析&#xff1a; …

数字化转型导师坚鹏:城市数字化转型顶层规划方法

城市数字化转型顶层规划方法 课程背景&#xff1a; 很多城市存在以下问题&#xff1a; 不知道如何系统地开展数字化转型工作&#xff1f; 不清楚如何科学地制定数字化转型战略&#xff1f; 不知道如何高效地实施数字化转型战略&#xff1f; 课程特色&#xff1a; 有…

基于SpringBoot的在线拍卖系统设计与实现(源码+调试+LW+PPT)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的在线拍…

C++编程知识

&#xff08;1&#xff09;把数组中的所有元素赋值为一个值 memset(arr,0x3f,sizeof(arr))//最大值 memset(arr,0,sizeof(distance));//赋值为0&#xff08;2&#xff09;找最大最小值的下标 int zuixiao-1//设置dist-1只是因为方便选取第一个数作为比较对象而已 for(i0;i<…

VSCode将某个字符替换为换行符并换行显示

不想每次去查了&#xff0c;我自己写博客记录一下~~~ 我的需求是一个一行的数据&#xff0c;用逗号分开&#xff0c;我希望竖着看有规律点&#xff0c;类似这样 快捷键其实想 optioncommandf &#xff0c;但是我每次都记不住&#xff0c;大家可以直接在编辑栏找到replace的地方…

vite 快速搭建 Vue3.0项目

一、初始化项目 npm create vite-app <project name>二、进入项目目录 cd ……三、安装依赖 npm install四、启动项目 npm run dev五、配置项目 安装 typescript npm add typescript -D初始化 tsconfig.json //执行命令 初始化 tsconfig.json npx tsc --init …

Unity Meta XR SDK 快捷配置开发工具【Building Block/Quick Action/OVRCameraRigInteraction】

文章目录 &#x1f4d5;教程说明&#x1f4d5;Building Block&#x1f4d5;Quick Action&#x1f4d5;OVRCameraRigInteraction 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 社区&#xff0c;博主目前在内…

【Swift】NSPopUpButton用法和示例

1.简介 NSPopUpButton 是 macOS 开发中常用的控件之一&#xff0c;它提供了一个弹出菜单&#xff0c;用户可以从中选择一个选项。NSPopUpButton 可以包含多个 NSMenuItem 对象&#xff0c;每个 NSMenuItem 表示一个选项。 2.常用方法 下面是一些 NSPopUpButton 的常用功能和…

进程线程的通信-day5

1、将互斥机制的代码实现重新敲一遍。 #include<myhead.h>//临界资源 int num520;//1、创建一个互斥锁变量 pthread_mutex_t mutex;void *task1(void *arg); void *task2(void *arg); int main(int argc, const char *argv[]) {//2、初始化互斥锁pthread_mutex_init(&am…

Shiro-14-subject 主体

理解Apache Shiro中的主题 毫无疑问&#xff0c;Apache Shiro中最重要的概念是主题。 “主题”只是一个安全术语&#xff0c;它指的是应用程序用户特定于安全的“视图”。Shiro主题实例代表了单个应用程序用户的安全状态和操作。 这些操作包括: 身份验证(登录) 授权(访问控…

了解JSON的作用及其方法

什么是json JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式采用完全独立编程语言的文本格式存储和表示数据&#xff08;就是字符串&#xff09;。它基于JavaScript语法&#xff0c;但可以被多种编程语言使用和解析。JSON以键值对的形式存…

高光谱图像降噪方法(2D Wavelet, 3D Wavelet, FORPDN, HyRes等方法)

近年来&#xff0c;随着遥感应用的不断深入&#xff0c;高光谱图像研究已经成为遥感领域发展最迅速的技术之一。与其他传统成像技术相比&#xff0c;高光谱图像具有更多优势&#xff1a;更丰富的信息量、纳米级的光谱分辨率以及范围更广且连续的光谱。因此&#xff0c;在农业、…

C#用反射实现两个类的对象之间相同属性的值的复制

目录 1.适用于创建实体的时候从一个实体作为数据源赋值 2.适用于没有创建实体&#xff0c;两个实体之间数据的转换 1.适用于创建实体的时候从一个实体作为数据源赋值 /// <summary> /// 反射实现两个类的对象之间相同属性的值的复制 /// 适用于初始化新实体 /// </…

选择VR全景行业,需要了解哪些内容?

近年来&#xff0c;随着虚拟现实、增强现实等技术的持续发展&#xff0c;VR全景消费市场得以稳步扩张。其次&#xff0c;元宇宙行业的高速发展&#xff0c;也在进一步拉动VR全景技术的持续进步&#xff0c;带动VR产业的高质量发展。作为一种战略性的新兴产业&#xff0c;国家和…

OJ_学生信息系统

题干 输入样例&#xff1a; 5 zhaoyi 70 80 90 240 qianer 65 32 77 174 sunsan 100 55 68 223 lisi 86 77 90 253 wangwu 100 59 66 225 输出样例&#xff1a; *[qianer] 65 32 77 *[sunsan] 100 55 68 *[wangwu] 100 59 66 lisi 86 77 90 zhaoyi 70 80 90 wangwu 100 59 6…

k8s-权限管理

1. 身份认证 我们在目前的k8s集群环境里面&#xff0c;只能在master节点上执行kubectl的一些命令&#xff0c;在其他节点上执行就会报错 # 看一下是不是 [rootnode1 ~]# kubectl get nodes E0220 12:50:15.695133 6091 memcache.go:238] couldnt get current server API gro…

云打印api搭建,云打印api怎么对接?

相信近来一段时间云打印概念的火热让很多企业和App都有开展打印业务的想法&#xff0c;但是云打印技术的开发又需要有打印设备的支持&#xff0c;这个时候我们可以找到专业的云打印服务平台进行api对接。那么云打印api搭建&#xff0c;云打印api怎么对接&#xff1f;今天来一起…