操作系统学习笔记(学习中)

计算机系统概述

1.操作系统概念

管理系统软/硬件资源,为程序提供服务

2.发展与分类

在这里插入图片描述

3.操作系统的运行环境

运行机制

指令:(二进制机器指令),CPU能识别,执行的最基本命令

应用程序:程序员写的跑在操作系统之上的程序

内核程序:实现操作系统的程序,内核:操作系统最核心的部分

CPU的两种状态:

内核态:正在运行内核程序,可以执行特权指令

用户态:正在运行应用程序,只能执行非特权指令

在这里插入图片描述

内核态→用户态:执行特权指令,PSW标志位为用户态,操作系统主动让出cpu使用权

用户态→内核态:由中断引发,硬件自动完成变态

中断和异常

中断的作用:让操作系统内核夺回CPU使用权

中断类型:

  • 内中断(也称异常):与当前指令有关,中断信号源于cpu内部
  • 外中断:…无关…外部,如时钟中断,I/O请求中断
系统调用

用户在程序中调用操作系统中的一些子功能。凡是与资源共享有关的操作,都需要系统调用来向操作系统提出请求。

操作系统的体系结构

大内核:将操作系统最主要的功能模块作为系统内核,性能高

微内核:只把最基本的功能作为内核,频繁的切换核心态和用户态,性能低。

进程管理

1.进程与线程

进程的概念

进程是进程实体的运行过程,是系统资源分配和的调度的一个独立单位

进程的组成

进程控制块(PCB):一种数据结构,描述进程的基本情况和运行状态,存放操作系统对进程管理需要的信息,是进程存在的唯一标志

在这里插入图片描述

程序段:程序的代码

数据段:运行过程中产生的数据

进程的特征

动态性,并发性,独立性,异步性,结构性

进程的状态与转换,进程的组织

进程控制

进程控制功能:实现进程状态转换

用原语实现进程控制。原语:操作系统中一种特殊的程序,具有原子性。

关中断指令和开中断指令(特权指令)实现原子性:CPU执行了关中断指令后不再检查中断信号,直到执行到开中断指令才恢复对中断信号的检查。

  • 进程的创建原语

  • 进程的终止:撤销原语
    在这里插入图片描述

  • 进程的阻塞和唤醒原语(成对使用)

在这里插入图片描述

  • 进程的切换原语:

进程通信

进程通信(IPC):不同进程之间的数据交互

进程内存空间独立,不能直接访问另一个进程的地址空间

  • 共享存储:互斥的访问共享存储(如pv操作)
  • 消息传递:
    • 直接通信:消息直接挂在接收进程的消息队列中
    • 间接通信:消息发向中间件(信箱),
  • 管道通信:pipe文件,读写遵循先进先出原则,半双工通信(同一时间段单向)
线程的概念

线程:程序执行流的最小单位,系统调度的基本单位,一个进程可以有多个线程

线程的实现方式和多线程模型

在这里插入图片描述

线程的转换

2.调度

概念

根据某种规则来决定一堆任务执行的顺序

调度的三个层次

  1. 高级调度(作业调度)

    作业:一个具体的任务,(程序)

    高级调度:按原则将外存的作业后备队列中挑选一个进入内存。每个作业只被调入,调出一次。

  2. 低级调度(进程调度/处理机调度)

    操作系统中最基本的一种调度,频率很高。

  3. 中级调度(内存调度)

    挂起状态:暂时调到外存等待的进程状态

    中级调度:选择一个处于挂起状态的进程进入内存

进程调度

进程在操作系统内核程序临界区中不能进行进程调度,而在普通临界区中可以。

进程调度的两种方式:

  • 非抢占式:只会主动放弃
  • 抢占式:由操作系统剥夺cpu使用权

调度器和闲逛进程

调度器(调度程序):决定让谁运行,运行多长时间

闲逛进程:没有其他就绪进程时,运行闲逛进程

调度算法的评价指标

在这里插入图片描述

调度算法

  • 先来先服务(FCFS):按照作业/进程到达的先后顺序进行服务,是一种非抢占式的调度方式,优点:公平,缺点:对短作业不利,不会导致饥饿

  • 短作业优先(SJF):从就绪队列中选出一个估计时间最短的进程,将处理及分配给它,使它立即执行到执行结束,或者发生某事件阻塞放弃处理机时重新调度

  • 高响应比优先算法(HRRN):

    响应比Rp = (等待时间 + 服务时间)/ 服务时间 = 1 + (等待时间 / 服务时间)

    当等待时间相同时,服务时间更短的优先调度

3.进程同步与互斥

同步:直接制约关系,为完成某任务建立的两个或以上的进程

互斥:间接制约关系,访问临界资源时只允许一个进程访问,其他进程必须等待

在这里插入图片描述

进程互斥的软件实现方法

抓住“谦让”和“表达意愿“思想

单标志法:

双标志先检查法:

双标志后检查法:

peterson算法:“压岁钱算法” 谁最后说客气话谁失去行动权

硬件实现

在这里插入图片描述

信号量机制

信号量:表示系统中某种资源的数量,可以使用一对原语来对信号量进行操作

一对原语:wait(S),sign(S),被称为P,V操作,用于实现对系统资源的申请和释放

在这里插入图片描述

4.经典同步问题

生产者-消费者问题

只有缓冲区没满,生产者才能往缓冲区放东西

只有缓冲区没空,消费者才能从缓冲区取东西

缓冲区也是一种临界资源,只允许互斥地访问

mutex = 1; // 互斥信号量,对缓冲区的互斥访问
empty = n; // 同步信号量,空闲缓冲区的数量
full = 0; // 同步信号量,产品数量,即非空缓冲区数量

在这里插入图片描述

读-写者问题

1.允许多个读者对文件进行读操作

2.只允许一个写者进行写操作

3.写者操作完成前不允许读者和其他写者工作

4.写者操作前应该让其他读和写者退出

5.管程

管程的功能

互斥访问:确保多个线程对共享变量的互斥访问

条件等待和通知:线程可以通过条件变量等待某个条件满足后再继续执行,或者通过条件变量停止其他线程某个条件已经满足

简要来说:对PV操作的一种管理

6.死锁

死锁:多个进程因竞争资源而互相等待,双方都无法向前推进

死锁形成的必要条件

  1. 互斥条件:对互斥使用的资源进行争夺
  2. 不可剥夺条件:进程获取的资源在未使用完之前无法被剥夺,只能自己释放
  3. 请求和保持条件:进程至少保持了一种资源,但又提出对其他进程占用的资源的申请,自己的资源又不放
  4. 循环等待条件:进程的循环等待链,我等你,你等他,他等我

以上四条件同时满足才算死锁

避免死锁

安全序列:系统按照某种序列分配资源,每个进程都能顺利完成。

系统处于安全状态,则一定不会发生死锁

银行家算法

思想:在进程提出资源申请时,系统先预判此次分配是否会导致系统进入不安全状态,如果会,则暂时不答应请求,让进程先阻塞等待。

系统分配给进程资源,归还后得到的资源为:available + allocation

内存管理

操作系统对内存的划分和动态分配

1.内存管理概念

功能

1.内存分配与回收:由操作系统完成

2.内存保护:保证进程只在自己的内存空间进行访问,不越界

3.地址转换:操作系统将逻辑地址转换为物理地址

4.内存容量的扩充:将容量小的内存从逻辑上通过虚拟技术进行扩充

连续分配管理方式

为用户程序分配连续的内存空间

1.单一连续分配:只用于单任务,单用户的操作系统

2.固定分区分配:将用户区划分为若干个大小相等或不等的分区,每个分区只进行一个作业。

3.动态分区分配:系统不会预先分配内存,而是在进程进入内存时,根据进程的大小动态的分配内存,使得内存大小正好适合进程所需的空间。

动态分区分配算法

为什么要有?当有多个空闲分区满足需求,需要合适的算法来分配空间

1.首次适应算法:从低地址开始找,找到第一个可以满足大小的空闲分区

2.最佳适应算法:为了保证大进程到来时需要的大片连续空间,优先使用小空闲分区,空闲分区按容量递增连接。

3.最坏适应算法:为了解决最佳适应算法导致的内部碎片问题,优先使用大空闲分区,空闲分区按容量递减链接。

分页存储

为什么要分页?减少内存碎片的产生

页框/页帧:内存中大小相等的分区

页面(页):每一个进程的逻辑地址空间

页表:在内存找到进程的每个页面对应的物理块,系统为每个进程建立一张页表。

页表由页号和块号(页框号)组成,其中只有块号占内存空间,页号是隐含的存储。(类似于数组,下标是不需要存储空间的)

页号=逻辑地址/页面大小

页内偏移量=逻辑地址%页面大小

页表长度:一个页表有多少个页表项

页表项长度:每个页表项占多大的存储空间

页表大小:一个页表占多大存储空间

快表

一种并行查找的高速缓冲存储器,为了提高地址变换的速度。

段页式存储

先分段,段内再分页

2.虚拟内存管理

为什么?

解决传统存储的两个问题:

1.一次性:作业必须一次性全部装入内存才能运行,导致如果作业太大,无法运行

2.驻留性:作业全部转入内存,直到作业结束,然而实际只需要一部分数据便可运行程序,导致浪费空间

是什么?

将暂时需要的信息调入内存,不需要先放在外存,便可执行程序。程序执行时,将不在内存又需要的信息调入内存。同时,若内存空间不够,操作系统将内存中不需要的信息换出到外存。

虚拟内存的特点

1.多次性:允许多次将作业调入内存

2.对换性:作业在程序运行时换进换出

3.虚拟性:在逻辑上扩充内存容量

怎么做(虚拟内存技术)

实现基础:根据多次性,肯定不能连续存储管理,而是离散分配的内存管理

用什么实现?

1.请求分页管理。2.请求分段管理。3.请求段页式管理

请求分页管理

是什么?两个功能:

1.调页功能:操作系统将缺失的页面调入内存

2.置换功能:操作系统将暂时没用的页面换入外存

页表项

在这里插入图片描述

状态位:表示页面是否被调入内存

访问字段:表示页面被访问次数,用于置换算法使用

修改位:表示页面是否被修改过

缺页中断机构

请求分页中两个重要的点:

1.是否在内存:不在则产生缺页中断,并阻塞缺页的进程,操作系统将页面调入内存

2.是否有空闲块:没有则淘汰某页(如果该页在内存中被修改过,则换回外存)

地址变换机构
在这里插入图片描述

页面置换算法

用来干嘛?决定换入换出哪些页面

1.最佳置换算法:将以后永不访问或最长时间不访问的页面淘汰。(无法预知,不可实现)

2.先进先出置换算法:每次将最早进入内存的页面淘汰。

3.最近最久未使用置换算法(LRU):每次淘汰最近最久未使用的页面。实现:在访问字段中记录该页上次使用时间t,每次替换t最大的即可。

4.时钟置换算法(CLOCK)

改进型CLOCK:先找(0,0),再找(0,1),没有的话,把所有访问位(第一个)置为0,再循环那样查找

文件管理

1.文件基本概念

文件是什么?

文件是通过硬盘为载体,存储在计算机上的数据集合

文件控制块

是什么?

英文名FCB,用来存放控制文件所需信息的数据结构,包含了==

一个FCB对应一个文件目录项,多个FCB组成文件目录

索引节点

是什么?

索引节点将除了文件名以外的属性都放入索引节点中

有什么用?

因为检索文件时只需要用到文件名,所有可以提高检索效率

文件逻辑结构

在文件内部,数据在逻辑上是如何组织起来的

无结构文件(流式文件):文件没有结构,访问只能通过穷举搜索的方式

有结构文件(记录式文件):

  • 顺序文件:串结构:按记录的存入时间排序。

    ​ 顺序结构:按关键字的顺序排列。

  • 索引文件:解决可变长记录文件检索慢的问题,本身就是一个定长记录的顺序文件

在这里插入图片描述

文件物理结构

磁盘空间分配方法:

1.连续分配:每个文件在磁盘上占有一组连续的块。类似于数组,所以它支持顺序访问和直接访问。

缺点:文件长度不宜动态增长。增加和删除需要移动相邻的记录。反复增删文件回产生外部碎片。

在这里插入图片描述

2.链接分配:离散分配的方式,通过指针链接每个磁盘块,分为隐式链接和显示链接。

隐式链接:除最后一个盘块,每个盘块都含有指向文件下一个盘块的指针。不支持随机访问
在这里插入图片描述

显示链接:为什么叫显示?它把用于连接文件各物理块的指针显示的存放在一张表中,称为文件分配表(FAT)。支持随机访问

在这里插入图片描述

索引链接

2.目录

目录结构

1.单级目录结构

实现了文件的按名存取

缺点:查找速度慢,不允许重名,不便于共享

2.两级目录结构:

解决了重名问题

缺点:不能对文件分类

3.树形目录结构:

解决了不能分类的问题

缺点:查找文件时每次按路径名逐级访问中间节点,增加了磁盘访问次数

4.无环图目录结构

解决了树形结构不便于文件共享的问题。

目录实现

查找某个文件有两种方法

1.线性列表:实现简单,但查找费时

2.哈希表:根据文件名得到一个名,并返回一个指向线性列表中元素的指针。查找速度快。

文件共享

1.硬链接:基于索引节点的共享方式。

多个指针指向一个索引结点,只要还有一个指针指向索引结点,索引结点就不能删除。

2.软链接:基于符号链实现共享。

把到达共享文件的路径记录下来,要访问文件时,根据路径寻找文件。

查找速度:硬>软

3.文件系统

输入输出管理

2.I/O控制方式

DMA:直接存储器存取

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

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

相关文章

Splunk 创建特色 dashboard 报表

1: 背景: 对原有的dashboard 进行增加点东西,特别是文字部分: 比如: 增加:“this is a guidline for how to use performance". 这段话,就不能写在title, 那样,这段文字,会出现在dashboard 的PDF 文件的分割线的上面,不符合要求。 2: 解决问题: 正确的做法是…

Qt学习:图形视图框架的使用

文章目录 前言一、场景、视图和图形项的介绍二、图形视图框架的坐标系统三、图形视图框架的事件处理四、示例完整代码五、QtCreator官方示例总结 前言 近期重温了一下Qt中的图形视图框架,这里将所学习的内容进行记录总结。这个框架提供了一个基于图形项的模型视图编…

Java配置47-Spring Eureka 未授权访问漏洞修复

文章目录 1. 背景2. 方法2.1 Eureka Server 添加安全组件2.2 Eureka Server 添加参数2.3 重启 Eureka Server2.4 Eureka Server 升级版本2.5 Eureka Client 配置2.6 Eureka Server 添加代码2.7 其他问题 1. 背景 项目组使用的 Spring Boot 比较老,是 1.5.4.RELEASE…

Linux生成静态库

GCC 什么是GCC GCC 是 GNU 编译器集合(GNU Compiler Collection)的缩写。它是一个开源的编程语言编译器,支持多种编程语言,包括 C、C、Objective-C、Fortran、Ada 和 Go 等。GCC 最初由理查德斯托曼(Richard Stallman…

2022最新版-李宏毅机器学习深度学习课程-P32 Transformer

一、 seq2seq 1. 含义 输入一个序列,机器输出另一个序列,输出序列长度由机器决定。 文本翻译:文本至文本;  语音识别:语音至文本;  语音合成:文本至语音;  聊天机器人&#…

WPF布局控件之DockPanel布局

前言:博主文章仅用于学习、研究和交流目的,不足和错误之处在所难免,希望大家能够批评指出,博主核实后马上更改。 概述: DockPanel 位置子控件基于子 Dock 属性,你有 4 个选项停靠,左 (默认) &…

HarmonyOS 数据管理与应用数据持久化(二)

通过键值型数据库实现数据持久化 场景介绍 键值型数据库存储键值对形式的数据,当需要存储的数据没有复杂的关系模型,比如存储商品名称及对应价格、员工工号及今日是否已出勤等,由于数据复杂度低,更容易兼容不同数据库版本和设备…

Gradle笔记 一 Gradle的安装与入门

文章目录 Gradle 入门Gradle 简介学习Gradle 的原因: 常见的项目构建工具Gradle 安装Gradle 安装说明安装JDK 下载并解压到指定目录配置环境变量检测是否安装成功 Gradle 项目目录结构Gradle 创建第一个项目Gradle 中的常用指令修改maven 下载源Wrapper 包装器使用教…

项目管理之如何估算项目工作成本

在项目管理中,如何估算项目工作成本是一个关键问题。为了解决这个问题,我们可以采用自上而下的成本限额估算法和自下而上的成本汇总估算法。这两种方法各有优缺点,但都可以帮助我们准确地估算项目工作成本。 自上而下的成本限额估算法 自上…

InnoDB中Buffer Pool详解

1. 概念及特点 Buffer Pool 是 MySQL 中 InnoDB 存储引擎用来缓存表数据和索引数据的内存区域。这个内存区域被用来存储磁盘上的数据页的副本,这样常用的数据可以在内存中快速被访问,而不必每次都从磁盘中读取。 以下是 Buffer Pool 的一些重要特点&a…

串口通信(6)应用定时器中断+串口中断实现接收一串数据

本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步! > 发布人:日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

I/O多路转接之select

承接上文:I/O模型之非阻塞IO-CSDN博客 简介 select函数原型介绍使用 一个select简单的服务器的代码书写 select的缺点 初识select 系统提供select函数来实现多路复用输入/输出模型 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的; 程序会停在s…

unittest 通过TextTestRunner(failfast=True),失败或错误时停止执行case

failfast是unittest.TextTestRunner的一个参数,它用于控制测试运行过程中遇到第一个失败或错误的测试方法后是否立即停止执行。 当failfast设置为True时,一旦发现第一个失败或错误的测试方法,测试运行就会立即停止,并输出相应的失…

sql基础+考点+题

查询:select from 筛选:where and和or 排序:order by(降序排列需要指定DESC关键字) join:left join 、right join 和inner join 分组聚合:group by ---搭配count , sum , avg 过滤&#x…

安全防御——二、ENSP防火墙实验学习

安全防御 一、防火墙接口以及模式配置1、untrust区域2、trust区域3、DMZ区域4、接口对演示 二、防火墙的策略1、定义与原理2、防火墙策略配置2.1 安全策略工作流程2.2 查询和创建会话 3、实验策略配置3.1 trust-to-untrust3.2 trust-to-dmz3.3 untrust-to-dmz 三、防火墙的区域…

消息中间件-RabbitMQ介绍

一、基础知识 1. 什么是RabbitMQ RabbitMQ是2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,简称MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法,由Erlang(专门针对于大…

SPSS单因素方差分析

前言: 本专栏参考教材为《SPSS22.0从入门到精通》,由于软件版本原因,部分内容有所改变,为适应软件版本的变化,特此创作此专栏便于大家学习。本专栏使用软件为:SPSS25.0 本专栏所有的数据文件请点击此链接下…

Python基础入门例程39-NP39 字符串之间的比较(运算符)

最近的博文: Python基础入门例程38-NP38 牛牛的逻辑运算(运算符)-CSDN博客 Python基础入门例程37-NP37 不低于与不超过(运算符)-CSDN博客 Python基础入门例程36-NP36 谁的数字大(运算符)-CSD…

航模模拟器训练

固定翼吃灰很久忘记咋么操作 故这里发帖防止忘记 准备物品 航模遥控器 aux线 即两端都是耳机插头的线 解密狗 电脑 phoenixRC 航模模拟软件(【飞舜极创】凤凰5.0飞行模拟器 安装和设置方法_哔哩哔哩_bilibili) 链接:https://pan.baidu.com/s/1XL4ZWhMR7MQMxDPC7B…

GraphQL入门与开源的GraphQL引擎Hasura体验

背景 Hasura 是一个开源的 GraphQL 引擎,它可以帮助开发人员快速构建和部署现代应用程序的后端。它提供了一个自动化的 GraphQL API ,可以直接连接到现有的数据库,并提供实时数据推送和订阅功能。 Hasura 团队总部位于印度。 下载安装 脚本…