操作系统学习

2023-05-16

目录

2.1 操作系统的启动

 3.1 内存分层结构

3.2 地址空间与地址生成

 3.3 内存分配

3.4 压缩式与交换式碎片整理

4.1 非连续内存 分段

​ 4.2 非连续内存 分页

4.3 页表概述

4.4 多级页表

​ 4.5 反向页表

5.1 虚拟内存 1

 5.2 虚拟内存 2

7.1 进程 定义

7.2 进程 组成

7.3 进程 特点

7.4 进程控制结构

7.5 进程的生命期

7.6 进程变化模型

7.7 进程挂起 

7.8 为什么使用线程

7.9 什么是线程

 7.10 线程的实现

7.11 上下文切换

8.1 CPU调度

9.1 同步 

9.2 基于软件的解决方案

9.3 基于锁的实现

 10.1 信号量 背景

 10.2 信号量

10.3 信号量的使用

 10.4 信号量的实现

11.1 死锁问题

11.2 死锁特征

 11.3 死锁处理办法

11.4 死锁预防和死锁避免

11.5 死锁检测和死锁回复 

 11.6 IPC概述(进程间通信)

 11.7 实现

12.1 文件系统 

12.2 文件描述符 

12.3 目录

12.4 文件别名

12.5 文件系统的实现 (虚拟文件系统)

12.6 数据缓存

12.7 打开文件的数据结构


2.1 操作系统的启动

  1.  首先BIOS从地址0xf000:fff0开始执行(cs和ip能够组成基本的内存地址)
  2. 开始自检,检查自身的各种设备能否正常工作
  3. 将bootloader从硬盘加载内存到中去  (bootloader一般放在硬盘的第一个栈区)

控制权由BIOS变为bootloader

  • 把操作系统的代码和数据从硬盘加载到内存(OS)
  • 控制权由bootloader变为OS(跳转到操作系统的起始地址) 

 2.2 中断 

 

 3.1 内存分层结构

  •  缓存位于CPU内部,操作系统无法直接使用
  • 操作系统一般使用主存(内存)

内存执行示意图

3.2 地址空间与地址生成

  •  逻辑地址空间:一个运行的程序它所认为的一个一维的连续的地址空间
  • 程序运行时,把逻辑地址转为物理地址,这个过程就是操作系统完成的

 3.3 内存分配

  • 第一匹配分配:从起始地址开始找,碰到的刚好满足需求的第一块内存空间 

 x

 

  • 最佳匹配分配:寻找与所需内存空间 差值最小的

 

 

  • 最差匹配分配:寻找与所需内存差值最大的 

 

 

3.4 压缩式与交换式碎片整理

压缩式

假如我需要5个空间

 

 但什么时候去挪动P1,P2,P3,P4,而且开销大不大,都是问题

 交换式

4.1 非连续内存 分段

 

分段寻址方案  硬件实现  软件实现成本太高

CPU把逻辑地址分为段号加段内偏移,段表存放的是段号映射到物理地址,还有段的长度

 4.2 非连续内存 分页

页帧号 + 页帧偏移 

 

4.3 页表概述

0代表物理地址不存在,1代表物理地址存在 

 

 

4.4 多级页表

以时间换空间

 4.5 反向页表

优点:占用空间小

 

5.1 虚拟内存 1

 

 5.2 虚拟内存 2

访问位:如果很长时间没有被访问便可以置换出内存

7.1 进程 定义

7.2 进程 组成

7.3 进程 特点

并发:一个时刻感觉有多个进程在执行

并行:一个时刻真的有多个进程在执行,多个CPU

独立性:为每个进程分配不同的页表

7.4 进程控制结构

7.5 进程的生命期

 

7.6 进程变化模型

7.7 进程挂起 

 

7.8 为什么使用线程

7.9 什么是线程

 

可以把一个线程看做浏览器中的一个网页,一旦一个网页崩溃,整个浏览器就会崩溃

线程的切换状态比较快,因为相对于进程,切换时不需要更换页表 

 7.10 线程的实现

对于用户线程CPU的调度单位是进程

对于内核线程CPU的调度单位是线程

 

7.11 上下文切换

8.1 CPU调度

状态切换时进行调度

9.1 同步 

 

临界区:多线程中共享的变量

互斥:每次只能有一个线程访问共享的变量

CPU调度,就是通过进程的中断 

 

9.2 基于软件的解决方案

9.3 基于锁的实现

 那么如何实现锁

操作系统已经把下面两个函数封装成原子性的了 

 死循环等待方式的实现(忙等)

交换方式实现锁 (非忙等)等待的进程会被阻塞而不会死循环,适用于等待时间长情景

 

 10.1 信号量 背景

互斥同一时刻只允许一个线程访问,如果允许临界区同一时刻被多个进程访问,就要用到信号量

 10.2 信号量

10.3 信号量的使用

可以把等待的线程放进一个队列中,唤醒时按照队列的规则执行相应的线程

 P操作阻塞进程,V操作唤醒进程

 

 10.4 信号量的实现

11.1 死锁问题

 

11.2 死锁特征

死锁出现后会产生以下特征,但出现以下四个特征出现不一定会产生死锁

 11.3 死锁处理办法

11.4 死锁预防和死锁避免

死锁的四大特征只要打破一点就可以解决

1、把资源改为共享

2、一旦获取就拿到全部资源,而不是只拿一部分资源

 

 

11.5 死锁检测和死锁回复 

实际上很少用 

 

 11.6 IPC概述(进程间通信)

 

 

 

 11.7 实现

信号

管道  内核中的一块内存

 消息队列

共享内存  直接通信

12.1 文件系统 

12.2 文件描述符 

 

12.3 目录

 /  代表根目录

 

12.4 文件别名

软链接:存放的是路径名

 

12.5 文件系统的实现 (虚拟文件系统)

12.6 数据缓存

  

12.7 打开文件的数据结构

12.8

12.9

12.10 

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

操作系统学习 的相关文章

  • Logisim计算机组成原理实验16位无符号比较器设计

    Logisim用4位无符号比较器构建16位无符号比较器 4位无符号比较器设计思路表达式构建 16位无符号比较器构建思路构建 4位无符号比较器设计 思路 不同位之间进行比较 xff0c 高位优先 真值表太麻烦 xff0c 可以利用表达式进行构
  • React+hooks+TS练习

    一 初始化项目 通过create react app命令创建项目 xff0c template表示使用typescript xff08 node版本高于14才能使用npx xff09 npx create span class token
  • 基于Python的信用卡欺诈检测机器学习案例报告

    本报告借助Python语言探究了在机器学习中 面对一个大型的人与人之间交易的数据集 如何尽快处理大量数据并区分某交易记录是正常的用户行为还是潜在的信用卡欺诈行为 最终通过构建分类模型来对欺诈交易进行分类区分 并通过恰当的方式对构建的模型进行
  • 一个既有趣又简单的整人代码——关机代码

    这一篇博客来的比我的预计时间要长啊 xff0c 在这一周多的时间里 xff0c 我几乎很少有休息和出去玩耍的时间 说实话 xff0c 这样忙碌的生活给我的感觉还是蛮好的 xff0c 让我有一种很充实的感觉 xff0c 有种自己在与时间赛跑的
  • 【CMake】CMakeList编写整理

    什么是CMake 如果软件想跨平台 xff0c 必须要保证能够在不同平台编译 而如果使用 Make 工具 xff0c 就得为每一种标准写一次 Makefile CMake 就是针对上面问题所设计的工具 xff1a 它首先允许开发者编写一种平
  • 解决 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...警告

    解决 WARN util NativeCodeLoader Unable to load native hadoop library for your platform using builtin java classes where ap
  • Vue获取数组的数组数据

    Q xff1a 如何在vue获取数组的数组 xff1f A xff1a 用到js的map对象方法 一 data里要先定义好有两个数组 二 主要代码 这样就可以获取到数组的子数组数据
  • Ubuntu18.04 GAAS学习笔记

    GAAS学习笔记 1 环境构建1 1 依赖项安装1 2 ros安装1 3 MAVROS安装1 4 PX4 Firmware安装 全程参考官方文档 xff0c 总结遇见的错误 xff1a https gaas gitbook io guide
  • ArUco标定板生成与打印

    链接如下 xff1a https span class token punctuation span span class token operator span chev span class token punctuation span
  • ROS工作空间与功能包

    工作空间 工作空间 xff08 workspace xff09 是一个存放工程开发相关文件的文件夹 xff0c 其目录下有 xff1a src xff1a 代码空间 xff08 Source Space xff09 build xff1a
  • Ubuntu20.04安装UHD及GUN Radio3.9

    目录 1 安装UHD依赖库及UHD 2 安装GNU Radio3 9 3 1 安装UHD依赖库及UHD 总结自 xff1a USRP Hardware Driver and USRP Manual Building and Installi
  • ros安装的依赖问题

    问题描述 xff1a ros kinetic desktop full 依赖 ros kinetic desktop 但是它将不会被安装 依赖 ros kinetic perception 但是它将不会被安装 依赖 ros kinetic
  • STM32MP157驱动开发——字符设备驱动

    一 简介 字符设备是 Linux 驱动中最基本的一类设备驱动 xff0c 字符设备就是一个一个字节 xff0c 按照字节 流进行读写操作的设备 xff0c 读写数据是分先后顺序的 比如我们最常见的点灯 按键 IIC SPI xff0c LC
  • Java样卷

    一 问答题 请解释一下Java语言的主要特点 至少说明五个特点 进程和线程的概念是什么 xff1f 两者有什么区别和联系 什么是流 xff1f 什么是字节流 xff1f 什么是字符流 xff1f 字节流和字符流的差别是什么 xff1f 二
  • CodeBlocks如何将英文环境改为中文

    一 下载汉化包 xff08 链接如下 xff09 链接 xff1a https pan baidu com s 1U FMZuFvFQ9 70whXcIwQ 提取码 xff1a 2333 二 选择路径 将汉化包中的文件 xff08 Code
  • 浅谈多任务学习

    目录 一 前言及定义 二 多任务学习 xff08 MTL xff09 的两种方法 2 1 参数的硬共享机制 xff08 hard parameter sharing xff09 2 2 参数的软共享机制 xff08 soft paramet
  • PyTorch在GPU上跑代码需要迁移哪些东西?

    一 数据 模型 损失函数需要迁移到GPU上 使用GPU训练时 xff0c 数据 函数和模型都必须同时放在GPU上 xff0c 否则会出错 xff08 1 xff09 判断GPU是否可用 if torch cuda is available

随机推荐

  • C++ Primer 第五版学习 第一、二章

    一 标准输入输出 cin是标准输入 xff08 istream对象 xff09 cout是标准输出 xff08 ostream xff09 cerr是标准错误 xff0c 用来输出警告和错误消息 clog用来输出程序运行时的一般性信息 二
  • C++ Primer第五版学习 第四章第五章

    补第三章 size t size t是一些C C 43 43 标准在stddef h cstddef中定义的 这个类型足以用来表示对象的大小 size t的真实类型与操作系统有关 在32位架构中被普遍定义为 xff1a typedef un
  • C++笔试题

    1 用预处理指令 define声明一个常数 xff0c 用以表明1年中有多少秒 xff1f define SECONDS PER YEAR 60 60 24 365 UL 2 写一个标准宏MIN xff0c 这个宏输入两个参数并返回较小的一
  • C++ Primer第五版学习 第十章

    泛型算法为什么叫泛型 可以运用在多种容器类型之上 xff0c 而容器内的元素类型也可以多样化 标准库算法对迭代器而不是容器进行操作 因此 xff0c 算法不能直接添加或删除元素 find iter1 iter2 value 搜索算法 前两个
  • kindle操作:传输下载的书籍、更改书籍封面

    kindle 可以使用 calibre 软件进行电子书的管理 xff0c 官网下载地址为 xff1a https calibre ebook com download calibre 是一款电子书管理的开源软件 xff0c 支持Window
  • C++ Primer第五版学习 第十一章

    一 关联容器类型 按关键字有序保存元素 map关联数组 xff0c 保存关键字 值对set关键字即值 xff0c 即只保存关键字的容器multimap关键字可重复出现的mapmultiset关键字可重复出现的set 无序集合 unorder
  • C++ Primer第五版学习 第十二章

    一 三种内存 静态内存 xff1a 保存局部static对象 类static数据成员以及定义在任何函数之外的变量 栈内存 xff1a 保存定义在函数内的非static对象 分配在静态内存和栈内存中的对象由编译器自动创建和销毁 对于栈对象 x
  • EC20、RM500Q在TX2上或其他设备上模块识别不到

    首先本人使用的是minipcie接口 xff0c RM500Q也是转成minipcie接口接入设备的 xff0c 然后运行命令lsusb xff0c 看不到这些模块 曾尝试在两个设备上移植过EC20和RM500都遇到同样的问题 xff0c
  • 【NVIDIA】显卡报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

    输入nvidia smi报错如下 xff1a NVIDIA SMI has failed because it couldn 39 t communicate with the NVIDIA driver Make sure that th
  • 笑容逐渐消失? shader 编程入门实战 ! Cocos Creator!

    编程斗图 xff01 随手拈来 xff01 文章底部获取完整代码 xff01 效果预览 为了实现这个效果 xff0c 需要准备两张相近的图片 在 Cocos Creator 编辑器中 xff0c 新建一个材质 Material xff0c
  • Windows安装TensorFlow教程(国内源安装附上各大镜像网站网址)

    安装TensorFlow TensorFlow由Google公司打包成一个 pip 安装包 xff0c 可以用正常安装包的方式安装 TensorFlow xff0c 即进入命令行执行下面这一条简单的语句 正常安装 xff1a pip ins
  • Openstack-Rocky 一键安装(多节点搭建)~步骤超详细

    本次openstack多节点自动化安装 xff0c 采用4台虚拟机节点为演示环境 xff0c 首先演示如何自动化快速搭建一套openstack云平台 实验环境 xff1a 1 控制节点 CPU xff1a 双核双线程 CPU虚拟化开启 内存
  • python 更新pip报错 解决方法大全

    python 更新pip报错 解决方法大全 在使用Python的pip安装第三方库时会提示当前pip版本低 xff0c 要求更新 xff0c 但更新时会报错 xff0c 请依次尝试以下几种方法 xff1a 在使用Python的pip安装第三
  • 获取百度主页和系统调用

    获取百度主页 span class token function exec span 8 span class token operator lt span span class token operator gt span dev tcp
  • 文本编辑工具vim-及特殊用法,alias别名

    文章目录 简介打开文件 一 vim三种模式模式转换关闭文件特殊用法 xff1a 二 命令模式1 命令模式查找2 命令模式光标跳转3 命令模式翻屏操作4 字符编辑 xff1a 5 替换命令 r replace 6 删除命令 xff1a 7 复
  • 企业竞争分析的几种方法:SWOT、波特五力、PEST

    最近实验室要申报一个互联网 43 的项目 xff0c 项目中有关企业经营部分的内容着实令我们这些工科生无从下手 xff0c 在咨询了某专业相关的学妹后稍微有了点头绪 此处手动感谢学妹的协助哈哈哈 xff0c 本着学科交叉 xff0c 多学无
  • 解决E: 仓库 “http://ppa.launchpad.net/fcitx-team/nightly/ubuntu bionic Release” 没有 Release 文件。

    今天 xff0c 在更新软件时 xff0c 使用以下命令时 sudo apt get update sudo apt get upgrade 抛出错误 E 仓库 http ppa launchpad net fcitx team night
  • (仿牛客社区项目)Java开发笔记3.5:添加评论

    文章目录 添加评论1 dao层2 service层3 controller层4 view层5 功能测试 添加评论 根据上节的开发安排 xff1a 显示评论功能完成后 xff0c 开始实现添加评论功能 1 dao层 CommentMapper
  • js_事件

    一 常用的事件 onload 加载完成事件 页面加载完成之后 常用于做页面js代码初始化操作 onclick 单击事件 常用于按钮的点击相应操作 onblur 失去焦点事件 常用于输入框失去焦点后验证其输入内容是否合法 onchange 内
  • 操作系统学习

    目录 2 1 操作系统的启动 3 1 内存分层结构 3 2 地址空间与地址生成 3 3 内存分配 3 4 压缩式与交换式碎片整理 4 1 非连续内存 分段 4 2 非连续内存 分页 4 3 页表概述 4 4 多级页表 4 5 反向页表 5