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

news2024/11/28 9:47:09

计算机系统概述

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.coloradmin.cn/o/1166541.html

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

相关文章

qt6-error: invalid use of incomplete type ‘class Ui::Widget‘

背景 昨晚刚建立qt工程,点击运行,工作可以直接使用,但是早上点开工作,就出现type类型错误。有点奇怪。问题页面显示,问题主要就是ui::widget的类型错误。 这篇文章提醒我,昨晚因为在尝试修改一些参数时&a…

Flutter 手把手国际化

1.导入依赖 flutter:sdk: flutterflutter_localizations:sdk: flutterintl: any2.安装插件Flutter Intl Android Studio > File > Settings > Plugins 搜索Flutter Intl 并安装和重启Android Studio生效 3.通过插件初始化并配置语言 Android Studio > Tools >…

【已解决】在linux部署出现java文件操作报错:java.io.FileNotFoundException

1.报错场景: 其中的 ip2region.xdb 文件是放在 resources 文件夹中的,然后在一个工具类里面读取这个文件,在开发环境中的是这样读取的: ClassPathResource resource new ClassPathResource("ip2region.xdb");//获取真…

NI-9505 嵌入式行业领先的流量校准测量算法

NI-9505 嵌入式行业领先的流量校准测量算法 基岩自动化公司,基岩OSA自动化平台的制造商,已经将流量计算机功能集成到OSA平台中。奥萨流程系列嵌入流量校准基岩自动化平台中的测量应用。Flow-Cal的软件是流量测量和生产核算数据的选择。 奥萨所有基岩控…

基于Python的豆瓣电影排行榜,可视化系统

1 简介 基于Python flask 的豆瓣电影数据获取,数据可视化系统,本系统朱亚奥包括了影视系统的爬虫与分析。影视是人们娱乐、放松心情的重要方式之一,因此对影视的分析具有重要的现实意义。通过采用Python编程语言,使用flask框架搭…

内部福利!双11百度文心一言底层的千帆大模型免费试用!

内部福利,现在可以免费试用,而且额度超高。双11福利 个人大模型平台新用户:50元;限量1000张;限时一个月使用 企业大模型平台新用户:200元;限量200张;限时一个月使用 EB4对标GPT4 …

GoLong的学习之路(十七)基础工具之GORM(操作数据库)(更新Update)

书接上回,上回写道,GORM的查询和创建(插入数据),这回继续些增删改查的改和删的操作。 文章目录 更新update修改单个列修改多个列修改选定字段批量更新新阻止全局更新 使用 SQL 表达式更新注意 根据子查询进行更新不使用…

Spring boot 整合 JWT

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

【WinForm详细教程六】WinForm中的GroupBox和Panel 、TabControl 、SplitContainer控件

文章目录 1.GroupBox和Panel2.TabControl3.SplitContainer 1.GroupBox和Panel GroupBox:是一个分组容器,提供一个框架将相关的控件组织在一起,它有标题、边框,但没有滚动条。 Panel:也是一个容器控件,用来…

Git GitHub同步失败

文章目录 错误解决方案第一步第二步第三步第四步第六步第七步 错误 昨天晚上提交代码到GitHub时遇到了这个错误。 remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.字面大体意思就是你原先的密码凭…

预约按摩小程序开发优势;

在快节奏和高压社会中,按摩已成为许多人缓解压力和保持健康的重要方式,各地的按摩店也是随处可见,而为了能够更好地提供服务,很多按摩店都引入了小程序应用。今天我们就主要了解一下按摩店小程序具体有什么用,能够提供…

【iOS免越狱】利用IOS自动化WebDriverAgent实现自动直播间自动输入

1.目标 由于看直播的时候主播叫我发 666,支持他,我肯定支持他呀,就一直发,可是后来发现太浪费时间了,能不能做一个直播间自动发 666 呢?于是就开始下面的操作。 2.操作环境 iPhone一台 WebDriverAgent …

CAD操作技巧学习总结

1&#xff0c;已知一个圆&#xff0c;画该圆切线。 L命令画直线&#xff0c;再tan指令确定第一个点为切点&#xff0c;依次输入&#xff08;长度&#xff09;<&#xff08;角度&#xff09;&#xff0c;如55<-45,负号为顺时针。 2&#xff0c;中心点偏移。 O命令偏移&am…

再学一点mybatis(原理分析)

文章目录 [TOC](文章目录) 一、mybatis是什么&#xff1f;1. Mybatis的特点以及优缺点 二、mybatis架构1.基本架构2.重要组件 三、原理1. SQL解析2. Mapper接口3. 动态代理4. SQL执行4.1 Executor4.2 StatementHandler4.3 ParameterHandler4.4 ResultHandler 文章内容有点长&am…

【蓝桥每日一题]-二分精确(保姆级教程 篇4) #kotori的设备 #银行贷款 #一元三次方程求解

今天讲二分精确题型 目录 题目&#xff1a;kotori的设备 思路&#xff1a; 题目&#xff1a;银行贷款 思路&#xff1a; 题目&#xff1a;一元三次方程求解 思路&#xff1a; 题目&#xff1a;kotori的设备 思路&#xff1a; 求&#xff1a;设备最长使用时间 二分查找&#…

Linux难学?大神告诉你,Linux到底该怎么自学!

文章目录 前言一、明白这些道理&#xff0c;Linux 就不难学二、五步学会 Linux 命令行&#xff0c;用好这本手册三、Linux 学习进阶之路 前言 知乎上有一条热门问答&#xff0c;问题是 “Linux为什么那么难&#xff1f;” 从问题来看&#xff0c;提问者还处在初学阶段。但他显…

Centos7扩容

Centos7扩容 保证虚拟机关机且没有快照的情况下按照下图进行操作&#xff1a; 设置好后开机&#xff0c;查看分区情况&#xff1a; [rootlocalhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 12G 5.4G 69% / …

21款奔驰GLS450升级23P驾驶辅助 智驾出行

驾驶辅助和自动驾驶的区别就是需要人为去接管&#xff0c;虽然车辆会根据道路自己行驶&#xff0c;弯道上也能居中自动修正行驶&#xff0c;长时间不接管方向盘&#xff0c;系统会提示人为接管&#xff0c;这就是奔驰的23P驾驶辅助系统&#xff0c; 很多车友升级23P驾驶辅助系…

Git统计个人提交代码行数

目录 一、git bash打开二、查看个人提交的代码行数统计三、查看项目每个人提交的代码行数统计四、查询所有用户的提交总次数五、统计用户一段时间内的提交代码量 在实际开发中&#xff0c;常常会想查看自己对于某个项目的贡献&#xff0c;管理者会查看项目下各成员的贡献&#…

mysql、clickhouse时间日期加法

mysql 在’2023-10-27 23:59:59’上增加5秒&#xff1a; SELECT DATE_ADD(2023-10-27 23:59:59, INTERVAL 5 second);clickhouse SELECT date_add(SECOND, 3, toDate(2018-01-01 00:00:00));clickhouse时间按秒、分、时、日、月、年作差 按秒&#xff1a; SELECT dateDiff…