最近很多小伙伴都在问计算机操作系统(四)---流水线的通用原理和流水线计算机组成原理这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展1.1计算机操作系统概论、js获取计算机操作系统
最近很多小伙伴都在问计算机操作系统(四) --- 流水线的通用原理和流水线 计算机组成原理这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展1.1 计算机操作系统概论、js获取计算机操作系统版本、《计算机操作系统》读书笔记、【-】计算机操作系统等相关知识,下面开始了哦!
本文目录一览:计算机操作系统(四) --- 流水线的通用原理(流水线 计算机组成原理)
计算流水线
下面的图就可以知道流水线的思维了,I1 ,I2 ,I3 为需要经过ABC 组合逻辑的信号,可以看到当I1 到了 B 时,I2 已经到了A 了,
同理 I3也一样,流水线的思维提高了工作效率.
这里说一下吞吐量 , 延迟 , 时间周期的计算,下图为例,可以看到, 假如我们的时间周期为 70ps. 那么下面一个信号走完就需要 6*70 = 420ps , 那么 420ps 就是延迟, 吞吐量就是单位时间内可以处理的信号量,可以知道用一除以70乘以一个时间单位得到 14.29 GIPS .即是时间周期的倒数.
流水线的局限性
- 不一致的划分
我们可以看到以B 为周期(以为B里的延迟最大,思考一下要是选AC会是怎么样的),那么AC中会有空闲的地方.
- 流水线过深,收益反而下降
流水线的改进
电路重定时( circuit retiming )
将计算PC的部分移到时序的开头.具体的查看下面的链接
分支预测
当出现分支的时候, 猜测分支的方向并根据猜测的方向进行预测.
流水线冒险
一个准备写入的时候,一个提前先拿了出来就会造成数据错误,解决这个问题可以通过以下的方式
- 用暂停来比避免数据冒险(stalling)
但是这样会暂停三个周期,严重影响了性能.
- 用转发来避免数据冒险
还是上图的那种情况,一个写入,一个读取,读取的时候发现这个值需要被其他操作写入,那么读取的操作直接就拿写入的值就够了,不再等其他操作写入后,我再读取了(仔细想想,类型于并发中的可视性啊!!)
- 加载/使用数据冒险
下面为暂停+转发的方式来解决加载/使用冒险
参考资料:
- https://courses.cs.washington.edu/courses/cse467/05wi/pdfs/lectures/13-PipeliningRetiming.pdf
- https://en.wikipedia.org/wiki/Retiming
1.1 计算机操作系统概论
【操作系统(Opreating System)】:是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。
- 管理好这些设备,提高其利用率和系统的吞吐量;
- 为用户和应用程序提供一个简单的接口
- 是现代计算机系统中最基本和最重要的系统软件
【操作系统的作用】:这里从用户、资源管理以及资源抽象等方面进行分析
- OS作为用户与计算机硬件系统之间的接口:即OS处于用户与计算机硬件系统之间,用户通过OS来使用计算机系统
其中包括三大类,即命令接口、程序接口以及GUI
Ⅰ 命令接口:又分为联机命令和脱机命令,其中联机命令为一对一模式,脱机命令为一堆对一堆模式
Ⅱ 程序接口:系统调用
Ⅲ GUI:图形用户界面
- OS作为计算机系统资源的管理者:一个计算机系统中的资源可分为四类,分别是处理器、存储器、I/O设备及文件(数据和程序)
其中
Ⅰ 处理器管理用于分配和控制处理器
Ⅱ 存储器管理主要负责内存的分配与回收
Ⅲ I/O设备管理主要负责I/O设备的分配回收与操作
Ⅳ 文件操作适用于对文件的存取、共享和保护
具体功能细节 将在后面展开论述
- OS实现了对计算机资源的抽象:通常把覆盖了上述软件的机器称为扩充机器或虚机器。它向用户提供了一个对硬件操作的抽象模型,用户可以利用这个模型提供的接口操作计算机,无序了解具体的物理接口实现细节;例如,将I/O设备抽象为一组数据结构以及一组操作命令,如write、read命令等;此外,这种类型的抽象是可以进行叠加的,并且随着抽象层次的提高,抽象模型接口所提供的功能也将变得越来越强大,可见,OS是建立在计算机硬件上的多层软件的集合。
【操作系统的基本特性】:
- 并发(Concurrence)
Ⅰ 区分并发与并行
1)并发:两个或多个事件在同一时间间隔内发生;在多道程序环境下,并发是指一段时间在宏观上有多个程序在同时运行,但在单处理机系统中,这些程序是按时间片分别执行的,所以微观上仍是交替执行
2)并行:多个事件在同一时刻同时发生
Ⅱ 进程概念的引入:所谓进程,是指系统中能独立运行并作为资源分配基本的基本单位,其由一组机器指令、数据和堆栈组成,是一个能独立运行的活动实体。多个进程之间可以并发执行并交换信息
- 共享(Sharing):OS环境下的资源共享又被称为资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用
Ⅰ 互斥共享
Ⅱ 同时访问
并发和共享是多用户、多任务操作系统的两个最基本特征,其互为存在条件(资源共享是以进程的并发执行为条件的,若系统不允许并发执行也就不存在共享问题;此外,若系统不能实现资源有效管理,必然会影响并发的进行)
- 虚拟(Virtual):通过某种技术将一个物理实体变为若干逻辑对应的物理功能
Ⅰ 时空复用
Ⅱ 空分复用
- 异步(Asynchronism):进程是以人们不可预知的速度向前推进的,即进程的异步性(因此,OS也配备了进程同步机制)
js获取计算机操作系统版本
如题,想要获取当先计算机的操作系统和版本号的话,可以用如下方法。
首先,创建osversion.js文件,文件里面的代码如下
1 var osData = [
2 { name: ''Windows 2000'', group: ''windows_server'', identifier: ''Windows NT 5.0'', version: ''5.0'' },
3 { name: ''Windows XP'', group: ''windows'', identifier: ''Windows NT 5.1'', version: ''5.1'' },
4 { name: ''Windows 2003'', group: ''windows_server'', identifier: ''Windows NT 5.2'', version: ''5.2'' },
5 { name: ''Windows Vista'', group: ''windows'', identifier: ''Windows NT 6.0'', version: ''6.0'' },
6 { name: ''Windows 7'', group: ''windows'', identifier: ''Windows NT 6.1'', version: ''7.0'' },
7 { name: ''Windows 8'', group: ''windows'', identifier: ''Windows NT 6.2'', version: ''8.0'' },
8 { name: ''Windows 8.1'', group: ''windows'', identifier: ''Windows NT 6.3'', version: ''8.1'' },
9 { name: ''Windows 10'', group: ''windows'', identifier: ''Windows NT 10.0'', version: ''10.0'' },
10 { name: ''Windows 2008'', group: ''windows_server'', identifier: ''Windows NT 6.0; WOW64'', version: ''6.0'' },
11 { name: ''Windows 2008'', group: ''windows_server'', identifier: ''Windows NT 6.1; WOW64'', version: ''6.1'' },
12 { name: ''Windows 2012'', group: ''windows_server'', identifier: ''Windows NT 6.3; Win64'', version: ''6.3'' },
13 { name: ''Chrome OS'', group: ''windows'', identifier: ''CrOS'' },
14 { name: ''Mac OS X Capitan'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])11([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
15 { name: ''Mac OS X Yosemite'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])10([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
16 { name: ''Mac OS X Mavericks'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])9([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
17 { name: ''Mac OS X Mountain Lion'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])8([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
18 { name: ''Mac OS X Lion'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])7([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
19 { name: ''Mac OS X Snow Leopard'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])6([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
20 { name: ''Mac OS X Leopard'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])5([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
21 { name: ''Mac OS X Tiger'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])4([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
22 { name: ''Mac OS X Panther'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])3([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
23 { name: ''Mac OS X Jaguar'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])2([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
24 { name: ''Mac OS X Puma'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])1([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
25 { name: ''Mac OS X Cheetah'', group: ''mac'', identifier: ''Mac OS X (10([_|\.])0([0-9_\.]*))'', versionSeparator: ''[_|\.]'' },
26 { name: ''Mac OS'', group: ''mac'', identifier: ''Mac OS'' },
27 { name: ''Ubuntu'', group: ''linux_server'', identifier: ''Ubuntu'', versionIdentifier: ''Ubuntu/([0-9\.]*)'' },
28 { name: ''CentOs'', group: ''linux_server'', identifier: ''CentOs'', versionIdentifier: ''CentOs/([0-9\.]*)'' },
29 { name: ''Debian'', group: ''linux_server'', identifier: ''Debian'' },
30 { name: ''Gentoo'', group: ''linux_server'', identifier: ''Gentoo'' },
31 { name: ''国产系统'', group: ''linux'', identifier: ''Linux'' }
32 ];
33
34 var setOsData = function(os) {
35 var userAgent = navigator.userAgent.toLowerCase();
36 // Check browser type
37 for (i in osData) {
38 if (osData.hasOwnProperty(i)){
39 var osRegExp = new RegExp(osData[i].identifier.toLowerCase());
40 var osRegExpResult = osRegExp.exec(userAgent);
41
42 if (osRegExpResult != null) {
43 os.name = osData[i].name;
44 os.group = osData[i].group;
45 break;
46 }
47 }
48 }
49
50 return true;
51 };
52
53
54 var setOsVersion = function(os,version, separator) {
55 if (separator.substr(0, 1) == ''['') {
56 var splitVersion = version.split(new RegExp(separator, ''g''), 2);
57 } else {
58 var splitVersion = version.split(separator, 2);
59 }
60
61 if (separator != ''.'') {
62 version = version.replace(new RegExp(separator, ''g''), ''.'');
63 }
64
65 os.fullVersion = version;
66
67 // Major version
68 if (splitVersion[0]) {
69 os.majorVersion = parseInt(splitVersion[0]);
70 }
71
72 // Minor version
73 if (splitVersion[1]) {
74 os.minorVersion = parseInt(splitVersion[1]);
75 }
76
77 return true;
78 };
然后在HTML里添加如下代码:
<script src="js/osversion.js"></script>
<script>
var os = {};
setOsData(os);
alert(os.name);
</script>
我们来访问呢一下看下效果:
弹出来Windows 10,我的计算机的操作系统版本就是这个。
《计算机操作系统》读书笔记
计算机操作系统
操作系统
- 并发是指一段时间内有多个事件发生,并行是指某个时刻有多个事件发生,因此,并行需要多处理机
- 引入虚拟存储技术,使得一个应用程序能在远小于它的内存空间中运行
- 为了确保进程只在自己的内存空间内运行,通常会设置两个界限寄存器,存放上界和下界。每条指令访问时都由硬件检查是否越界。
- 编译后的应用程序的地址都是从“0”开始的,存储器管理将相对地址映射为内存里的物理地址,通常有硬件支持
- 内存扩充功能允许在装入一部分用户程序和数据的情况下能启动程序,也允许内存空间不足时将暂时不用的部分调至盘上
- 微内核的结构,将常用模块剥离出来,与服务端采用消息传递通信机制进行通信。降低了效率,但便于构建分布式网络系统
进程
- 进程是由一组机器指令、数据和堆栈等组成的,一个进程需要CPU、存储及I/O设备等。引入进程后使得程序可以并发执行。(多处理机能并行?)
- 进程是可拥有资源和可调度和分派的基本单位
- 进程间通信。UNIX首创pipe,外存通信,数据量大,速度慢。消息传递系统,速度快
线程
- 线程作为独立运行和独立调度的基本单位。引入线程是为了减小进程调度付出的开销
- 线程基本不拥有系统资源,可以访问进程的资源
- 在多线程OS中,进程不再是一个可执行的实体,但仍具有与执行相关的状态,且与状态管理相关的操作也会对其线程起作用
- 内核支持线程,依靠系统内核对线程进行控制。优点是系统统一管理所有线程,缺点是用户态和内核态的频繁切换开销会很大
- 用户级线程,依靠用户态对线程控制。优点是节省了模式切换的开销、进程专用调度算法、跨OS平台,缺点是系统调用阻塞进程时,该进程的所有线程被阻塞,内核每次分配一个CPU给进程,只有一个线程能执行
存储器管理
- 存储层次三级:CPU寄存器、主存(高速缓存、磁盘缓存)、辅存(磁盘、可移动存储介质)
- 用户源程序由编译程序编译成若干个目标模块
- 程序的链接
- 静态链接:链接程序将程序的目标模块链接成装配模块
- 装入时动态链接:边装入边链接
- 运行时动态链接:程序执行需要时链接
-
程序的装入
- 绝对装入方式:由程序自定义内存的绝对地址
- 可重定位装入方式:由装入程序将相对地址加上在内存中的起始地址得到绝对地址
- 动态运行时装入方式:将地址装换推迟到程序真正要执行时,需要重定位寄存器的支持
-
内存的连续分配
- 单一连续分配:分为系统区和用户区,只能用于单用户、单任务的OS
- 固定分区分配:一种是所有分区大小相等,一种是大量小分区、适量中分区、少量大分区,根据程序大小分配相应的分区。有多少分区就允许多少并发
- 动态分区分配;根据算法动态分配和回收内存
- 动态重定位分区分配:连续分配中,要把零散的小分区利用起来,需要对程序进行移动,移动后的程序和数据的地址需要进行重定位(需要重定位寄存器的支持)
-
内存的离散分配
- 分页存储管理,将程序分配到不连续的内存中,以页为基本单位,大小固定,只是单纯的数据信息
- 分段存储管理,将程序分配到不连续的内存中,以段为基本单位,大小不固定,包含逻辑信息
- 虚拟存储器,具有(页/段)请求调入和置换功能,逻辑上对内存容量进行扩充。需要相应的硬件和软件支持。(这就能解释iPhone一直RAM小但是完美实现多任务)
名词解释
- PCB:Process Control Block,进程控制块。常驻内存,系统通过它进行进程调度
- Primitive:原语。由若干条指令组成,是“原子操作”,常驻内存,执行中不允许被打断
- TCB:Thread Control Block,线程控制块。保留线程调度所需的少量信息
- Swapping:对换。把内存中暂时不能运行或不用的程序和数据调出到外存上
- LAN:Local Area Network,局域网
- WAN:Wide Area Network,广域网
PS:只记录了感兴趣的部分
建了个微信圈子,欢迎对产品有实践兴趣的同学加入,一起来玩呀![]()
写于2020-03-12
本篇文章由一文多发平台ArtiPub自动发布
【-】计算机操作系统
关于计算机操作系统(四) --- 流水线的通用原理和流水线 计算机组成原理的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于1.1 计算机操作系统概论、js获取计算机操作系统版本、《计算机操作系统》读书笔记、【-】计算机操作系统的相关信息,请在本站寻找。
本文标签: