计算机操作系统--基础篇

2023-11-10

操作系统的演进:


多道程序设计:

早期批处理系统只能一次处理一个任务

多道程序设计使得批处理系统可以一次处理多个任务

 

多道程序设计是指在计算机内存中同时存放多个程序

多道程序在计算机的管理程序之下相互穿插运行

多道程序的管理是操作系统的重要功能


操作系统概览

 What&Why:

  • 操作系统是管理计算机硬件和软件资源的计算机程序
  • 管理配置内存、决定资源哦供需顺序、控制输入输出设备等
  • 操作系统提供让用户和系统交互的操作界面
  • 操作系统的种类是多样的,不局限于计算机
  • 从手机到超级计算机,操作系统可简单也可复杂
  • 在不同设备上,操作系统可向用户呈现多种操作手段
  • 管理硬件、并且提供用户交互的软件系统

  • 我们不可能直接操作计算机硬件

  • 设备种类繁多复杂,需要统一界面

    操作系统的简易性使得更多人能够使用计算机

     


操作系统的基本功能:

统一管理计算机资源,

操作系统实现了对计算机资源的抽象,

用户无需面向硬件接口编程

IO设备管理软件,提供读写接口

文件管理软件,提供操作文件接口

操作系统提供了用户与计算机之间的接口,

图形窗口形式

命令形式

系统调用形式


操作系统相关概念:

并发性:

并行是指两个或多个事件可以在同一时刻发生

并发是指两个或多个事件可以在同一时间间隔发生


 共享性:

 操作系统中的资源可供多个并发的程序共同使用,即资源共享

 

多个程序可以同时使用主存资源

资源共享分为:互斥共享同时访问


 互斥共享,

当资源被程序A占用时,其他想使用的程序只能等待

只有当进程A使用完以后,其他进程才可以使用该资源

 同时访问,

某种资源在一段时间内并发地被多个程序访问

这种“同时”是宏观的,从宏观去看该资源可以被同时访问


虚拟性:

把一个物理实体转变为若干个逻辑实体

物理实体是真实存在的,逻辑实体是虚拟的

虚拟的技术主要有时分复用和空分复用


时分复用,

资源在时间上进行复用,不同程序并发使用

多道程序时分使用计算机硬件资源

提供资源利用率

空分复用,

实现虚拟磁盘、虚拟内存

提高资源利用率,提高编程效率


异步性:

在多道程序环境下,允许多个进程并发执行

进程在使用资源时可能需要等待或放弃

进程的执行并不是一气呵成的,而是以走走停停的形式推进

 


进程管理之进程实体

为什么需要进程:

进程是系统进行资源分配和调度的基本单位

进程作为程序独立运行的载体保障程序正常进行

进程的存在使得操作系统弄资源的利用率大幅提升


进程的实体:

主存中的进程形态,

标识符:唯一标记一个进程,用于区别其他进程

状态:标记进程的进程状态,如运行态

程序计数器:指向进程即将被执行的下一条指令的地址

内存指针:程序代码、进程数据相关指针

上下文数据:进程执行时处理器存储的数据

IO状态信息:被进程IO操作所占用的文件列表

记账信息:使用处理器时间、时钟总数和等

进程控制块(PCB),

用于描述和控制进程运行的通用数据结构

记录进程当前状态和控制进程运行的全部信息

使得进程是能够独立运行的基本单位

PCB是操作系统进行调度经常会被读取的信息

PCB是常驻内存的,存放在系统专门开辟的PCB区域

进程与线程,

线程是操作系统运行调度的最小单位

进程是系统进行资源分配和调度的基本单位

 线程包含在进程之中,是进程实际运行工作的单位

一个进程可以并发多个线程,每个线程执行不同的任务

进程里的线程共享进程的资源


进程管理之五状态模型

就绪状态:

当进程被分配到除CPU外所有必要的资源后

只要再获得CPU的使用权,就可以立即执行

其他资源都准备好、只差CPU资源的状态为就绪状态

在一个系统中多个处于就绪状态的进程通常排成一个队列

执行状态:

进程获得CPU,其程序正在执行称为执行状态

在单处理机中,在某个时刻只能有一个进程是处于执行状态

阻塞状态:

进程因某种原因,如:其他设备未就绪而无法继续执行从而放弃CPU的状态

 

 

创建状态:

创建进程时拥有CPU但其他资源尚未就绪

终止状态:

进程由系统清理或归还PCB的状态称为终止状态


进程管理之进程同步

进程间的同步:

对竞争资源在多进程间进行使用次序的协调

使得并发执行的多个程序之间可以有效使用资源和相互合作

 临界资源:

进程间同步的原则:

空闲让进:资源无占用,允许使用

忙则等待:资源占用,请求进程等待

有限等待:保证有限等待时间能够使用资源

让权等待:等待时,进程需要让出CPU

 

进程间同步的方法:

消息队列

共享存储

信号量

线程同步:

互斥量

读写锁

自旋锁

条件变量


作业管理之进程调度

进程调度:

计算机通过决策决定哪个就绪进程可以获得CPU使用权

保留旧进程的运行信息,请出旧进程(收拾包袱)

选择新进程,准备运行环境并分配CPU(新进驻)

进程调度的机制:

就绪状态的排队机制

选择运行进程的委派机制

新老进程的上下文切换机制

进程调度方法:

非抢占式调度

  • 处理器一旦分配给某个进程,就让该进程一直使用下去
  • 调度程序不以任何原因抢占正在被使用的处理器
  • 直到进程完成工作或因IO阻塞才会让出处理器

抢占式调度

  • 允许调度程序以一定的策略暂停当前运行的进程
  • 保存好旧进程的上下文信息,分配处理器给新进程

进程调度算法:

先来先服务算法,

短进程优先调度算法,

调度程序优先选择就绪队列中估计运行时间最短的进程

不利于长作业进程的执行

高优先权优先调度算法,

进程附带优先权,调度程序优先选择权重高的进程

使得紧迫的任务可以优先处理

时间片轮转调度算法,

按先来先服务的原则排列就绪进程

每次从队列头部取出待执行进程,分配一个时间片执行

是相对公平的算法,但是不能保证及时响应用户


作业管理之死锁

死锁:

 

死锁的产生:

  • 相互竞争资源

 共享资源数量不满足各个进程需求

各个进程之间发生资源进程导致死锁

 

  • 进程调度顺序不当

 

 

 

 死锁产生的必要条件:

  • 互斥条件

进程对资源的使用是排他性的使用

某资源只能由一个进程,其他进程需要使用只能等待

  • 请求保持条件

进程至少保持一个资源,又提出新的资源请求

新资源被占用,请求被阻塞

被阻塞的资源不释放自己保持的资源

  • 不可剥夺条件

进程获得的资源在未完成使用前不能被剥夺

获得的资源只能由进程自身释放

  • 环路等待条件

 发生死锁时,必然存在进程-资源环形链

 

死锁的处理:

a.预防死锁的方法

  • 摒弃请求保持条件

系统规定进程运行之前,一次性申请所需要的资源

进程在运行期间不会提出资源请求

  • 摒弃不可剥夺条件

当一个进程请求新的资源得不到满足时,必须释放占有的资源

进程运行时占有的资源可以被释放

  • 摒弃环路等待条件

可用资源线性排序,申请必须按照需要递增申请

先行申请不再形成环路

b.银行家算法

 

 

 


 

存储管理之内存分配与回收

存储管理解决的问题:

  • 确保计算机有足够的内存处理数据
  • 确保程序可以从可用的内存中获取一部分内存使用
  • 确保程序可以归还使用后的内存以供其他程序使用

内存分配的过程:

  • 单一连续分配

单一连续分配是最简单的分配方式

只能在单用户、单进程的操作系统中使用

 

  • 固定分区分配

是支持多道程序的最简单存储分配方式

内存空间被划分为若干固定大小的区域

每个分区只提供给给一个程序使用,互不干扰

 

 

  • 动态分区分配(常用)

 根据进程实际需要,动态分配内存空间

  • 首次适应算法

分配内存时从开始顺序查找适合内存区

若没有,则该次分配失败

每次从头部开始,使得头部地址空间不断被划分

  • 最佳适应算法

将空闲区按照容量大小排序

遍历空闲区链表找到最佳合适空闲区

  • 快速适应算法

要求有多个空闲区链表

每个空闲区链表存储一种容量的空闲区

内存回收的过程:

 

 


存储管理之段页式存储管理

 

 

页式存储管理:

字块是相对于物理设备的定义

页面则是相对逻辑空间的定义

将进程逻辑空间等分成若干大小的页面

相应把物理内存空间分成与页面大小的物理块

以页面为单位把进程空间装进物理内存中分散的物理块

页表记录进程逻辑空间与物理空间的映射 

有一段连续的逻辑分布在多个页面中,将大大降低执行效率

 

段式存储管理:

将进程逻辑空间划分成若干段(非等分)

段的长度由连续逻辑的长度决定

主函数MAIN、子程序段X、子函数Y等

 

 页式存储管理与段式存储管理的区别:

 

段页式存储管理:

分页可以有效提高内存利用率

分段可以更好满足用户需求

两者结合,形成段页式存储管理

主要逻辑:

现将逻辑空间按段氏管理分成若干段

再把内存空间按页式管理等分成若干页

 

 


存储管理之虚拟内存

虚拟内存概述:

  • 有些进程实际需要的内存很大,超过物理内存的容量
  • 多道程序设计,使得每个进程可用物理内存更加稀缺
  • 不可能无限增加物理内存,物理内存总有不够的时候
  • 虚拟内存是操作系统内存管理的关键技术
  • 使得多道程序运行和大程序运行成为现实
  • 把程序使用内存划分,将部分暂时不使用的内存放置在辅存

程序的局部性原理:

  1. 程序运行时,无需全部装入内存,装载部分即可
  2. 如果访问页不在内存,则发出缺页中断,发起页面置换
  3. 从用户层面看,程序拥有很大的空间,即是虚拟内存
  4. 虚拟内存实际是对物理内存的补充,速度接近于内存,成本接近于辅存

虚拟内存的置换算法:

先进先出算法(FIFO)

最不经常使用算法(LFU)

最近最少使用算法(LRU)

 

 

 

高速缓存的替换时机和主存页面的替换时机对比:

 


 

操作系统的文件管理

文件的逻辑结构:

a.逻辑结构的文件类型,

     

有结构文件:

  1. 文件内容由定长记录和可变长记录组成
  2. 定长记录存储文件格式、文件描述等结构化数据项
  3. 可变长记录存储文件具体内容

 

无结构文件:

  • 也称为流式文件
  • 文件内容长度以字节为单位
  • 例如:excel、dll、so

   

b.顺序文件,

按顺序存放在存储介质中的文件

磁带的存储特性使得磁带只能存储顺序文件

是所有逻辑文件中存储效率最高的

c.索引文件,

可变长文件不适合使用顺序文件格式存储

索引文件是为了解决可变长文件存储而发明的一种文件格式

索引文件需要配合索引表完成存储的操作

辅存的存储空间分配:

 i.辅存的分配方式,

 

连续分配,

  • 顺序读取文件内容非常容易,速度很快
  • 对存储要求高,要求满足容量的连续存储空间

链接分配,

  • 将文件存储在离散的盘块中
  • 需要额外的存储空间存储文件的盘块链接顺序

隐式:

 显式:

不支持高效的直接存储(FAT记录项多)

检索时FAT表占用较大的存储空间(需要将整个FAT加载到内存)

 

索引分配,   

  • 把文件的所有盘块集中存储(索引)
  • 读取某个文件时,将索引读取进内存即可
  • 每个文件拥有一个索引快,记录所有盘块信息
  • 索引分配方式支持直接访问盘块
  • 文件较大时,索引分配方式具有明显优势

ii.存储空间管理,

空闲表,

空闲链表,

  • 把所有空闲盘区组成一个空闲链表
  • 每个链表节点存储空闲盘块和空闲数目

位示图,

  • 维护成本低
  • 可以非常容易找到空闲盘块
  • 使用0/1比特位,占用空间很小

 

目录管理:

 

 


 

操作系统的设备管理

广义的IO设备:

    

 

 

 

 

 

IO设备的缓冲区:

CPU与IOO设备的速率不匹配

减少CPU处理IO请求的频率

提高CPU与IO设备之间的并行性

专用缓冲区只适用于特定的IOO进程

当这样的IO进程比较多时,对内存的消耗也很大

 操作系统划分出可供多个进程使用的公共缓冲区,称之为缓冲池

 

 

 

SPOOLing技术:

是关于慢速字符设备如何与计算机主机交换信息的一种技术

利用高速共享设备将低速的独享设备模拟为高速的共享设备

逻辑上,系统为每一个用户都分配了一台独立的高速独享设备

 把同步调用低速设备改为异步调用

在输入、输出之间增加了排队转储环节(输入井、输出井)

SPOOLing负责输入(出)并与低速设备之间的调度

逻辑上,进程直接与高速设备交互,减少了进程的等待时间,提高了进程的工作效率

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机操作系统--基础篇 的相关文章

  • 6.OS运行机制(补充)

    中断
  • 计算机网路基础 - 一些基本概念与网络结构

    1 基本概念 计算机网络 通信技术 计算机技术 是两项技术紧密结合的产物 通信系统的基础模型 计算机网络 是指将地理位置不同 具有独立功能的多台计算机及其外部设备 通过通信线路连接 在网络操作系统 网络管理软件及网络通信协议的管理和协调下
  • MySQL基础(非常全)

    MySQL基础 一 MySQL概述 1 什么是数据库 答 数据的仓库 如 在ATM的示例中我们创建了一个 db 目录 称其为数据库 2 什么是 MySQL Oracle SQLite Access MS SQL Server等 答 他们均是
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • 虚拟内存的最大容量与实际容量区别

    虚拟内存的最大容量与实际容量区别 1 概念介绍 虚拟内存的最大容量是计算机的地址结构 CPU寻址范围决定的 虚拟内存的实际容量是内存与外存之和 CPU寻址范围 两者的最小值 2 例题介绍 某计算机的地址结构是64位 按字节编址 内存大小51
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自 http vbird dic ksu edu tw linux basic 0230filesystem php 第八章 Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统 每个分割槽不可太大也
  • Linux使用nvida-smi查看GPU类型

    nvida smi提供一个查看GPU信息的方法 然而这种方式不能查看GPU型号 型号被省略成了GeForce RTX 208 如果我们需要查看GPU的型号 只需要运行nvidia smi L即可 mrfive ubuntu nvidia s
  • Java堆的自动垂直缩放

    多年以来 java一直是贪婪的应用程序的同义词 这种类型的应用程序在晚上打开冰箱并吞噬所有可用资源 直到崩溃 该行为的主要原因是缺乏一种有效的方式来将操作系统在Java堆中分配且不再使用的内存交还给操作系统 However with the
  • nslookup命令详解

    nslookup命令用于查询DNS的记录 查看域名解析是否正常 在网络故障的时候用来诊断网络问题 nslookup的用法相对来说还是蛮简单的 主要是下面的几个用法 1 直接查询 这个可能大家用到最多 查询一个域名的A记录 nslookup
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • 安装黑苹果双系统专辑贴(持续更新...)

    最近终于开始研究黑苹果 然后浏览了几篇文章贴收集一下 以便需要时随时阅览 和同学们互相学习 零基础篇 1 https blog csdn net a792396951 article details 80230946 2 https zhu
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • Visual studio 2005 hangs on startup AppHangXProcB1 svchost devenv.exe svchost.exe:{2a811bb2-303b-48b...

    This problem has been torturing me for the whole afternoon and after searching on the web for a long time I finally get
  • Linux常用命令记录

    文章目录 1 软件安装 安装软件 来自源服务器 安装 deb软件 来自本地 deb文件 修复依赖关系 卸载软件 2 文件 文件夹操作 删除文件夹 移动文件 文件重命名 3 程序查看 处理 进程查看 查看端口占用情况 强制终止程序 4 解压文
  • 【操作系统】王道考研 p42 段页式管理方式

    段页式管理方式 知识总览 分段 分页管理方式中最大的优缺点 关于段式管理会产生外部碎片 ps 分段管理中产生的外部碎片也可以用 紧凑 来解决 只是需要付出较大的时间代价 分段 分页 段页式管理 示意图 先分段 后分页 段页式管理的逻辑地址结
  • Common块和Bss段的区别

    昨天看 程序员的自我修养 链接 装载与库 发现不是很理解为什么要用common块 然后仔细看了一番 有了自己的理解 common块 用来存放弱符号 而全局未初始化变量是弱符号 但是难道不是应该存放在 bss段吗 为什么要有common块呢
  • 使用ShellJS提升你的开发效率(一)

    Shelljs Unix shell commands for Node js Shelljs是Node js下的脚本语言解析器 具有丰富且强大的底层操作 Windows Linux OS X 权限 Shelljs本质就是基于node的一层
  • 《OSPF和IS-IS详解》一1.7 独立且平等

    本节书摘来自异步社区 OSPF和IS IS详解 一书中的第1章 第1 7节 作者 美 Jeff Doyle 更多章节内容可以访问云栖社区 异步社区 公众号查看 1 7 独立且平等 OSPF和IS IS详解与TCP IP相比 OSI协议对各国
  • 【操作系统xv6】学习记录4-一级页表与二级页表

    占位

随机推荐

  • 10.BIO、NIO、AIO、多路复用IO的区别(图解)

    学习之前 我们先来了解一下IO模型 同步阻塞IO Blocking IO 即传统的IO模型 同步非阻塞IO Non blocking IO 默认创建的socket都是阻塞的 非阻塞IO要求socket被设置为NONBLOCK 注意这里所说的
  • ansible 添加 cron 任务

    找到相应的role 假设以storm nimbus为例 将要完成的任务脚本放在files目录下 例如 vim roles storm nimbus files storm recovery bin bash service storm me
  • KMP算法-超级无敌详细(嚼碎了喂你)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 朴素的模式匹配算法 BF暴力匹配算法 二 KMP算法 1 next 数组求法 2 next j 数组代码分析 三 计算出与主串匹配的位置 总结 前言 提示
  • vue3导入element-plus的index.css路径问题

    在做vue3项目的过程中 使用了element plus这个开源组件库 在引入index css这个样式的时候出现了一个问题 使用了之前的 import element plus lib theme chalk index css 导入时路
  • js 三个点 “...“ 省略号的语法

    js 三个点 省略号的语法 概念 是ES6的新语法 该写法在js的不同语境中有不同的解释 可解释为展开语法 Spread syntax 和剩余语法 Rest syntax 写法相同 但作用却是完全相反的 使用时要注意区分 本文主要参考MDN
  • linux 执行 mysql存储过程_mysql 存储过程 执行

    mysql存储过程 mysql存储过程 存储过程 Stored Procedure 是在大型数据库系统中 一组为了完成特定功能的SQL 语句集 经编译后存储 在数据库中 用户通过指定存储过程的名字并给出参数 如果该存储过程带有参数 来执行它
  • 期刊分类—CSSCI、A类、B类、C类、核心期刊的区别

    文章与视频资源多平台更新 微信公众号 知乎 B站 头条 AI研习图书馆 深度学习 大数据 IT编程知识与资源分享 欢迎关注 共同进步 CSSCI A类 B类 C类 核心期刊的区别如下 一 创刊单位不同 1 cssci 是南大核心 南京大学评
  • c++变量模板总结

    一 定义 泛化 全特化 偏特化 使用方法 include
  • 几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍

    富文本编辑器 富文本编辑器 Rich Text Editor RTE 是一种可内嵌于浏览器 所见即所得的文本编辑器 它提供类似于Office Word 的编辑功能 方便那些不太懂HTML用户使用 富文本编辑器的应用非常广泛 它的历史与图文网
  • CMOS图像传感器OV7725数据手册

    下载地址 阿里云盘分享https www aliyundrive com s RuxT3cpHpiK
  • windwos、linux在虚拟机中共享文件

    因为工作的关系 目前的工作机器是ubuntu桌面版 因为有时需要用到windows下的软件 因此装了个虚拟机virtualbox 在里面装个了个windows 为了能够让两个机器相互访问 需要设置一个共享文件夹 在网上找了一圈 基本上都是w
  • 【char类型转换】

    文章目录 前言 经典例题 典例1 变式1 典例2 总结 前言 今天我们一起来了解一下关于整形提升和进制转换的问题 经典例题 典例1 计算下面程序打印的结果 include
  • 牛客网算法教程-中级篇-第一章

    文章目录 学习目标 学习内容 学习时间 学习产出 1 旋转词 模拟 2 旋转矩阵 模拟 3 数轴覆盖 贪心 4 1 完整字符串1 括号字符串的有效性 栈 4 2 完整字符串2 缺失的括号 栈 4 3 完整字符串3 最长合法括号子串 栈 5
  • vue项目中使用http-proxy-middleware解决前端开发中跨域的问题

    使用方式 1 安装 npm install http proxy middleware save dev 2 使用 一般的使用 新建js文件 在此小编命名为proxy js const proxy require http proxy mi
  • rust输入输出

    一 获取命令行参数 很多语言获取命令行参数 是通过主函数的参数获得的 但Rust主函数是个无参数函数 命令行参数只能通过std env args 函数获得 std env args 返回一个迭代器 其中包含了程序名和后面所有参数 实例 fn
  • android 弹出选择框,简单通用弹出选择框

    LinearLayout ll LinearLayout getActivity findViewById R id log sel qyport ll setOnClickListener new View OnClickListener
  • windows输出文件的树状结构

    场景 今天突然看到同事的项目里面有一个文件 类型这样 项目的一个树状图 以前也看见过但是从来没有探究过 今天来看一下 描述 提示 需要windows 系统 其他系统需要安装tree windows系统下 我们可以打开我们的一个项目 在红框内
  • 传奇DBC数据库变量详细解释传奇DB文件详解

    传奇DBC数据DB文件详解 MagicDB MagicDB 是你所修炼的法术和各种技能 1 MagID 技能代号 2 MagName 技能名称 3 Effect Type 效果类型 使用技能时角色的动作效果 4 Effect 效果 技能产生
  • 【C++|排序算法】冒泡、快排、归并、堆排序算法模版

    目录 简介 冒泡排序 快速排序 归并排序 堆排序 结语 简介 Hello 非常感谢您阅读海轰的文章 倘若文中有错误的地方 欢迎您指出 昵称 海轰 标签 程序猿 C 选手 学生 简介 因C语言结识编程 随后转入计算机专业 获得过国家奖学金 有
  • 计算机操作系统--基础篇

    操作系统的演进 多道程序设计 早期批处理系统只能一次处理一个任务 多道程序设计使得批处理系统可以一次处理多个任务 多道程序设计是指在计算机内存中同时存放多个程序 多道程序在计算机的管理程序之下相互穿插运行 多道程序的管理是操作系统的重要功能