ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

操作系统学习

2021-10-07 18:32:46  阅读:161  来源: 互联网

标签:信号量 操作系统 学习 死锁 线程 内存 进程 页表


目录

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 非连续内存 分段

 

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

 段号 + 段的长度

 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 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

标签:信号量,操作系统,学习,死锁,线程,内存,进程,页表
来源: https://blog.csdn.net/weixin_45701638/article/details/120622634

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有