当前位置: 首页 > news >正文

操作系统(笔记)(一)

1、操作系统的功能和目标

1.1功能

  • 存储管理
  • 文件管理
  • 设备管理
  • 处理机管理
  • 进程管理

1.2目标

  • 方便性:操作系统作为用户与计算机硬件系统之间的接口,提供了直观的命令和界面,使得用户能够更容易地操作计算机。
  • 有效性:操作系统旨在提高系统资源的利用率,通过合理组织计算机的工作流程,加速程序的运行,缩短程序的运行周期,从而提高系统的吞吐量。
  • 可扩充性:为了适应计算机硬件、体系结构以及应用程序的发展,操作系统需要具有良好的可扩充性,以便于添加、修改相应的功能和模块。
  • 开放性:在计算机应用的日益普及和网络环境的转向下,操作系统的开放性变得尤为重要,以便于不同硬件和软件之间的兼容。

直接给用户使用:

  • GUI(图形用户界面)
  • 命令接口
    • 联机命令接口
    • 脱机命令接口

给软件程序员使用:

  • 程序接口

其中命令接口和程序接口统称为“用户接口”

2、操作系统的特征

2.1并发

指的是在一个时间段内,有多任务或多线程在交替执行。在这种情况下,多个任务或线程可能会同时占用CPU资源,但在宏观层面上,它们的执行是按照一定的顺序进行的。并发提高了系统的资源利用率和吞吐量,因为它允许多个任务在不完全同时执行的情况下相互竞争CPU的使用权。并发通常涉及到任务调度和时间片轮询等技术来实现对CPU资源的合理分配。(宏观上同时发生,微观上交替发生

例子:这就比如一天上午,我8:00-10:00需要学习操作系统,10:00-12:00需要学习数据库,在“一天上午”的角度上看,我这一天上午同时学习了操作系统和数据库,而从“小时”的角度上看,我是交替学习这两门课程的。

注意:单核CPU同一时刻只能执行一个程序,各个程序只能并发进行

           多核CPU同一时刻可以执行多个程序,各程序可以并发进行

2.2并行

则意味着在同一时间段内,多个任务或线程同时在不同的处理器核心上执行。并行计算能够充分利用所有可用的硬件资源,因为它允许多个任务并行运行而不必等待其他任务完成。并行计算可以提高系统的性能和效率,特别是在处理大数据集、图形渲染和其他需要大量计算的任务时。并行可以通过多处理器系统或分布式计算架构实现。

例子:我在学习时,同时学习操作系统和数据库,即在同一时刻,我的脑子里面既是操作系统的知识,又是数据库的知识。

2.3共享

2.3.2互斥共享

某些资源在同一时刻只能被一个进程访问。

2.3.2同时访问共享

允许多个进程在同一时刻访问同一个资源

并发性和共享性互为存在条件。

2.4虚拟

  • 空分虚拟技术
  • 时分虚拟技术

2.5异步

多个程序并发运行的环境中,每个程序的运行结果、运行次序以及每次运行的时间都是不确定的

只有并发性才会导致异步性

3、操作系统运行机制

特权指令:只能由操作系统使用的指令

支持多道程序运行要区分为特权指令和非特权指令

特权指令一般引起处理器状态的切换

3.1内核态(管态)

操作系统管理程序运行的状态,较高的特 权级别,又称特权态(特态)、内核态、系统态。能够执行所有指令,使用所有资源,改变CPU状态

3.2用户态(目态)

用户程序运行时的状态,较低的特权级别, 又称为普通态(普态)、用户态,只能执行非特权指令

注意:程序状态寄存器(PSW),有一个二进制位用来判断系统处于哪一个状态。

3.3状态转变

3.3.1程序状态寄存器/程序状态字(PSW)

CF: 进位标志位     

ZF: 结果为零标志位     

SF: 符号标志位       

OF: 溢出标志位

TF:陷阱标志位

IF:中断允许(中断屏蔽)标志位

VIF:虚拟中断标志位

VIP:虚拟中断待决标志位

IOPL:IO特权级别

3.3.2管态->目态

执行一条特权指令修改PSW

3.3.3目态->管态

由中断引起,硬件自动完成

系统调用

4.中断

4.1内中断(也称为异常)

注意上图中管态下执行的指令可以使“特权指令”也可以是“非特权指令”,也就是说管态可以执行计算机所有指令

实例1:试图在目态下执行特权指令

实例2:执行除法时发现除数为0

实例3:有时应用程序想请求操作系统内核的服务

此时会执行陷入指令(trap指令)———会引发一个内部中断信号。注意陷入指令是不是特权指令(因为目态可以正常执行)

4.1.1陷入

此情况是应用程序故意引发的(即一个程序执行,需要用到特权指令,这时非特权指令会执行trap指令,使CPU状态进入管态,执行需要的指令。此从目态到管态的过程,需要执行的非特权指令成为陷入指令,这个过程成为陷入。)

4.1.2故障

由错误条件引起,可能被内核程序修复,修复后内核会把CPU使用权还给应用程序,继续执行下面的指令。

4.1.3中止

由致命错误引起,内核无法修复,一般不会再把CPU使用权还给应用程序,而是直接中止此程序

4.2外中断(狭义地称为中断)

时钟部件每隔一段时间给CPU发送一个中断信号。而且需要时I/O设备也会给CPU发送中断信号。

4.3中断机制的原理

对于不同的中断信号,需要不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到中断处理程序在内存中存放的位置。

注意:由上面可知,中断处理程序应该是内核程序(需要运行在内核态)

5计算机组织结构

5.1  I/O设备

计算机中的I/O设备指的是计算机与外部进行信息交换的输入、输出设备。

5.1.1输入设备

  • 负责将外部的信号经过判别、筛选和编码转换,输入到计 算机中.
  • 鼠标、键盘、扫描仪…

5.1.2输出设备

  • 将计算机内部信号经过转换,输出到外部介质上
  • 打印机、显示器…

5.1.3I/O访问方式

  • 程序控制I/O访问
    • 用程序控制I/O设备的运行:检测I/O状态、接受发送指令、 传送数据等。(结构简单、执行效率低---没有中断)
  • 中断驱动I/O访问
    • 1)CPU初始化I/O并启动第一次I/O操作。
    • 2)CPU去忙别的事情。
    • 3)当I/O完成时,CPU将被中断。
    • 4)CPU处理中断。
    • 5)CPU恢复被中断的程序。
  • 直接I/O访问
    • DMA方式

6.OS与用户之间的接口

6.1普通用户接口(Shell

  • 图形用户接口
  • 命令接口

6.2程序接口(系统调用和API)

  • 系统调用(System Call):提供进程与OS之 间的接口。
  • 应用程序接口(API):在函数的实现中封装 了系统调用。

7演化过程

  • 初步操作系统---单道批处理系统
    • 自动性
    • 顺序性
    • 单道性
  • 多道操作系统(在一段时间内,有多个程序同时占有CPU的使用权)
    • 多个作业并发批处理运行,在程序执行过程中不能与人进行交互
    • 并发性
    • 不交互性
    • 自动批处理
  • 分时操作系统系统
    • 并发运行的每个程序进程分配 一定的“时间片”(时间段)
    • 当一个程序进程在CPU中运行完 这段时间后,它就被剥夺CPU的 使用权,分时系统调度其它的程 序进程到CPU中并运行
    • 多路性(并发性)
    • 及时性
    • 交互性
    •  独立性
    • 实现共享主机
  • 个人操作系统
    • 芯片集成度越来越高,速度越来越快,价格越来越便宜
    • 16位 —> 64位
    • Windows,Linux,Minix,UNIX,Mac
    • 操作简单、界面丰富、可操作性强

例题:多道操作系统是如何让多个作业并发执行的?

  • 磁盘中管理多个程序文件,能够进行程序的读入、读出 (文件管理系统)
  • 为多个并发程序在内存中分配空间(内存管理)
  • 在一个时间段让哪个程序运行,被中断的程序如何恢复运 行(处理器管理-进程管理)
  • 为程序使用I/O设备提供方便的系统接口(I/O设备管理)

相关文章:

操作系统(笔记)(一)

1、操作系统的功能和目标 1.1功能 存储管理文件管理设备管理处理机管理进程管理 1.2目标 方便性:操作系统作为用户与计算机硬件系统之间的接口,提供了直观的命令和界面,使得用户能够更容易地操作计算机。有效性:操作系统旨在提…...

Redis线程模型解析

引言 Redis是一个高性能的键值对(key-value)内存数据库,以其卓越的读写速度和灵活的数据类型而广受欢迎。在Redis 6.0之前的版本中,它采用的是一种独特的单线程模型来处理客户端的请求。尽管单线程在概念上似乎限制了其扩展性和并…...

ros2 launch如何控制node的启动顺序

ros2 launch如何控制node的启动顺序 文章目录 引言如何写launch文件启动流程图具体launch代码总结引言 本文用来说明如何控制ros2 launch 节点的先后顺序,我们有时候需要一个节点启动完成后再启动其它节点,实现这个功能有两种方式: 在launch.py时写event根据事件触发使用li…...

Android13 framework层添加关机接口

framework层修改: t0_sys/frameworks/base/core/api/current.txt method RequiresPermission(android.Manifest.permission.REBOOT) public void reboot(Nullable String);method public void rebootp();t0_sys/frameworks/base/core/java/android/os/IPowerManager…...

GDB调试入门笔记

文章目录 What?WhyHow安装GDB安装命令查看是否安装成功调试简单的程序预备一个程序调试 使用breakinfolistnextprintstep一些小技巧在gdb前shell日志功能watch point| catch point 调试core调试一个运行的程序 What? GDB是什么? 全称GNU sym…...

JavaScript的`call`方法:实现函数间的调用!

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

qt5-入门-使用拖动方式创建Dialog

参考: C GUI Programming with Qt 4, Second Edition 本地环境: win10专业版,64位,Qt5.12 目录 实现效果基本流程逐步实操1)创建和初始化子部件2)把子部件放进布局中3)设置tab顺序4&#xff09…...

【Redis】RedisTemplate和StringRedisTemplate的区别

两者的关系是 StringRedisTemplate 继承 RedisTemplate 。 两者的数据是不共通的:也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。 RedisTemplate 看这个类的名字后缀是 Temp…...

面试经典150题(101-104)

leetcode 150道题 计划花两个月时候刷完之未完成后转,今天(第1天)完成了4道(101-104)150: 101.(215. 数组中的第K个最大元素) 题目描述: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请…...

Java实现读取转码写入ES构建检索PDF等文档全栈流程

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo,并已实现WebHook的搭建和触发流程接口。 传送门: 基于GitBucket的Hook构建ES检索PDF等文档全栈方案 使用ES检索PDF、word等文档快速开始 实现读取本地文件入库ES 总体思路&…...

主流开发环境和开发语言介绍

主流开发环境和开发语言介绍 一、主流开发环境介绍 主流开发环境是指广泛应用于软件开发的集成开发环境(Integrated Development Environment,简称IDE)。IDE是一种集成了编辑器、编译器、调试器等工具的软件,提供了一站式的开发环…...

C++ 使用 nlohmann::json存储json文件

C 使用 nlohmann::json存储json文件 nlohmann::json 概述JSON 存储的示例以追加的方式存储json文件 nlohmann::json 概述 nlohmann::json 是 C 中一个流行的 JSON 库,由 Niels Lohmann 开发。它提供了一个简单而强大的 API,用于解析、构建、操作和序列化…...

何为OOM(Out of Memory)?

OOM(Out of Memory) 是指程序运行过程中内存不足的情况。在 Spark 应用程序中,OOM 是一个非常常见的问题,尤其是在处理大规模数据集或执行资源密集型的操作时。当 Spark 作业尝试使用的内存超过了为其分配的内存限制时&#xff0c…...

SpringBoot+Mybatis-plus+shardingsphere实现分库分表

SpringBootMybatis-plusshardingsphere实现分库分表 文章目录 SpringBootMybatis-plusshardingsphere实现分库分表介绍引入依赖yaml配置DDL准备数据库ds0数据库ds1 entitycotrollerserviceMapper启动类测试添加修改查询删除 总结 介绍 实现亿级数据量分库分表的项目是一个挑战…...

FPGA DDR3简介及时序

一,DDR3基础知识 1、DDR3全称第三代双倍速率同步动态随机存储器。 特点:①掉电无法保存数据,需要周期性的刷新。 ②时钟上升沿和下降沿都会传输数据。 ③突发传输,突发长度Burst Length一般为8 2、DDR3的存储: bank、行地址和列地址 数据怎么存入到D…...

java网络编程 02 socket

01.socket定义 02.TCP编程 import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class clientSocket {public static void main(String[] args) throws IOException {Socket socket new Socket(Ine…...

【Web安全】SQL各类注入与绕过

【Web安全】SQL各类注入与绕过 【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection 【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection 【Web安全靶场】sqli-labs-master 38-53 Stacked-Injections 【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二…...

C++ 设计模式

文章目录 类图泛化实现关联聚合组合依赖总结 类内部的三种权限(公有、保护、私有)类的三种继承方式描述与图总结 面向对象七大原则单一职责原则(Single Responsibility Principle)里氏替换原则(Liskov Substitution Pr…...

安卓使用ExoPlayer出现膨胀类异常

1.导包 implementation com.google.android.exoplayer:exoplayer-core:2.15.1implementation com.google.android.exoplayer:exoplayer-ui:2.15.1 2.在Androidifest.xml加入权限&#xff0c;我这里加了网络与读写权限 <uses-permission android:name"android.permissio…...

C++之析构函数

在 C 中&#xff0c;析构函数&#xff08;Destructor&#xff09;是一个特殊的成员函数&#xff0c;用于在对象生命周期结束时执行清理工作和资源释放。析构函数的名称与类名相同&#xff0c;前面加上波浪号&#xff08;~&#xff09;&#xff0c;不接受任何参数&#xff0c;也…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

代码随想录刷题day30

1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币&#xff0c;另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额&#xff0c;返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...