IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 读100本书,走万里路-1-操作系统导论-20220322 -> 正文阅读

[系统运维]读100本书,走万里路-1-操作系统导论-20220322

1.虚拟化

1.1 虚拟化cpu


进程和程序

进程: 跑起来的程序、加载进内存的程序、动态的概念。
程序:代码指令、放在硬盘里、静态概念。


如何制造出多个CPU的假象?

计算机cpu通过时分共享, 让一个进程只运行一个较小的时间片,然后切换到其他进程上,从而提供了多个虚拟cpu的假象。

这么做好处在:
可以多并发,可以让多个用户看起来都在==近乎同时==使用电脑,增强用户体验。即基本无延时体验。
但是,cpu共享逃不脱地让每个进程运行都慢一点。仔细想想,为什么?

要想实现进程间的切换需要一些底层机制,例如:上下文切换…


进程相关的方法

	1.创建create
	2.销毁destroy
	3.等待wait
	4.其他控制
	5.状态status

进程创建过程

1.将磁盘中的【代码】+【静态数据】load进内存中,加载到进程的地址空间中。
	注意:现代操作系统是【惰性】执行Load过程:仅在程序执行期间需要加载的代码或数据片才会加载。
2.分配栈和堆内存;
3.分配与输入输出相关的任务:进程的三个文件描述符,标准输入、输出和错误。

创建后的,进程【启动】。


进程API

  1. fork()
功能:几乎克隆父进程
不同:返回值;父进程:返回子进程的PID;子进程:返回0
注意:子进程先运行完还是父进程先运行完,要看本身和OS的调度。
  1. wait()
功能:阻塞当前进程
  1. exec()
功能:让子进程执行与父进程不同的程序。
不同:他只是将父进程中的代码和静态数据覆盖为自己的,堆和栈也会重新初始化;其实是并没有创建新进程,而是直接运行当前的进程。

进程状态模型

  1. 运行running
  2. 就绪ready
  3. 阻塞blocked
  4. 初始态initial
  5. 僵尸态

只有就绪和运行能相互可达:

就绪------调度--------> 运行
就绪<----时间片到-------就绪

举个例子:
Process0 需要从磁盘读取数据或者等待网络数据包,进程就会被blocked; OS发现Procees0不使用CPU并开始Process1;当Process1运行时,I/O完成,那么请问OS要切换回process0么?这涉及到什么?

OS的进程调度算法

如何不增加OS开销而实现虚拟化CPU?如何有效运行进程同时操作系统也要自己保留对CPU的控制权力?!

答案是 【受限直接执行机制

为什么要保持操作系统控制权?不放开权限给用户们的应用程序?

因为操作系统负责资源管理,如果没有控制权,一个进程可以简单地无限制运行接管机器,或访问没有权限访问的信息。这不就乱套了。
因此确保应用程序不做任何我们不希望他做的事,同时仍高效地运行它。

拆分概念

  1. 直接执行:在cpu上直接运行程序
  2. 受限:对硬件资源的访问权限时受限的;因此诞生了两种工作模式!

用户模式:用户态受限访问硬件资源。比如,不能发出I/O请求。

内核模式:内核态可访问全部资源。


用户态不能发出I/0请求,那如果用户想读取磁盘中的内容怎么办?

trap】陷阱指令:该指令使得可以跳入内核,并将特权级别提升到内核态。
完成后,OS调用【return-from-trap】指令,返回到发起调用的用户程序中,同时将特权级别降低,回到用户模式。


陷阱如何知道在OS内运行哪些代码?

内核在启动的时会设置【陷阱表】.


上面我们知道进程是受限执行的,上述通过系统调用从而使得 控制权转交给 操作系统的方式是协作方式。如果没有系统调用,没有任何非法操作,那么操作系统能夺回控制权么?

答案是【不能
这就是协作方式的问题,这种条件下只有一种方式:
重启计算机。


上述如何破解?-时钟中断!

时钟每隔几毫秒产生中断,操作系统重新获得CPU控制权,然后调度算法决定接下来跑哪些应用进程。


调度算法考虑的指标

  1. 周转时间:T周转时间= T完成时间?T到达时间
  2. 公平 fairness
  3. 响应时间:T响应时间= T首次运行?T到达时间

调度算法

考虑 【周转时间】性能指标:

  1. 先进先出(First In First Out或FIFO): 先到先得CPU,哪怕先来的时间运行时间很长,比如100秒;B,C任务运行时间尽管只需要10s,也必须等100s。
  2. 最短任务优先(Shortest Job First,SJF):为了解决上面的问题,可以先处理最短的任务。平均周转时间会变短;
    • 事实上,考虑到所有工作同时到达的假设,我们可以证明SJF确实是一个最优(optimal)调度算法。但是,实际上任务不是同时到达的…
    • SJF是非抢占的
  3. 最短完成时间优先(STCF)
    • 抢占式:每当新工作进入系统时,它就会确定剩余工作和新工作中,谁的剩余时间最少,然后调度该工作。

考虑【响应时间】指标:
以上的算法有个缺点,任务到来后必须要等待一段未知的运行时间。想想,你跑个程序,却要等别人跑一段时间后才轮到你,这互动性有多差。所有有以下算法,

  • 轮转(Round-Robin,RR)调度

基本思想很简单:RR在一个时间片(time slice,有时称为调度量子,scheduling quantum)内运行一个工作,然后切换到运行队列中的下一个任务,而不是运行一个任务直到结束。它反复执行,直到所有任务完成。因此,RR有时被称为时间切片(time-slicing)。请注意,时间片长度必须是时钟中断周期的倍数。因此,如果时钟中断是每10ms中断一次,则时间片可以是10ms、20ms或10ms的任何其他倍数。

  • 不足:轮转尽管降低了响应时间,但是直观上是推延了每个任务的结束时间,那么一般来说【周转时间】性能指标会很糟糕!

那么如何优化综合考虑【周转时间】+【响应时间】?

  • 多级反馈队列 = 优先级 + 轮转
    • MLFQ中有许多独立的队列(queue)
    • 每个队列有不同的优先级(prioritylevel)
    • 任何时刻,一个工作只能存在于一个队列中。
    • MLFQ总是优先执行较高优先级的工作(即在较高级队列中的工作)。当然,每个队列中可能会有多个工作,因此具有同样的优先级。在这种情况下,我们就对这些工作采用轮转调度。

2.并发

3.持久性

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:59:27  更:2022-03-24 01:00:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:54:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码