编写并调试一个单道处理系统的作业调度模拟程序_操作系统系列(2):操作系统发展历史...

用户需求的提升和硬件技术的发展,是操作系统发展的必要条件和基础

计算机的发展经历了4个阶段电子管计算机(1945-1955)、晶体管计算机(1955-1965)、集成电路计算机(1965-1980)、大规模集成电路计算机(1980-至今)。因此,伴随着计算机硬件的更新换代,操作系统也经历了4个阶段,分别是手工操作(50年代早期)、单道批处理系统(50年代)、多道批处理系统(60年代初)、分时系统(60年代中)。

1.手工操作(无操作系统)

出现背景:电子管计算机时代(1946-1955)

计算机硬件:电子管、接线面板(按钮/开关)

程序:二进制程序,用纸带表示。

0f8fa1d2db1164d69ae4d2e34dbe3ecd.png

流程:

人们先把程序纸带(或卡片)装上计算机,然后启动输入机把程序和送入计算机,接着通过控制台开关启动程序运行。计算完毕,打印机输出计算结果,用户卸下并取走纸带(或卡片)。第二个用户上机,重复同样的步骤。

79cb968c964c97445c2d153dada24ab3.png

特点:效率低,CPU有效运行时间极低,因为要等待大量手工操作时间,用户独占机器,程序运行过程中无法和程序员进行交互。

2.单道批处理系统

为了充分利用CPU资源,通常是把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序,在它的控制下使这批作业能一个接一个的连续处理。这种方式便是单道批处理系统

流程:管理员先将多个作业输入到磁盘形成作业队列,操作系统一次自动处理队列中每个作业。

即:装入——运行——撤出的一个过程。

程序的装入和撤出:自动完成,效率高,运行结束通知用户取结果。

特点:

1)批量:作业队列

2)自动:识别作业,装入和撤出

3)单道:依次、串行

一个程序运行过程中有时候使用CPU计算,有时候使用外部设备(如磁盘)进行输入输出。

dafdce5a7262fe14dd7275a320f2054e.png

如图,在单道批处理系统中,一程序A运行过程,从图中可以看出,外设与CPU交替空闲和忙碌CPU会在程序进行IO操作的时候空闲下来,CPU资源利用效率低,同理外设利用效率也低。

3.多道批处理系统

在上述单道批处理系统中,在程序A进行IO操作的那段时间里CPU是处于空闲状态的,我们能不能把这段CPU空闲时间利用起来,利用此时的CPU去执行程序B的计算过程?

因此,多道批处理系统由此诞生。

流程:内存中有多道程序某程序放弃CPU的时候,操作系统便调度另一程序投入运行,提高了系统的CPU利用率,也提高了整个系统的吞吐量。

一个程序运行过程中有时候使用CPU计算,有时候使用外部设备(如磁盘)进行输入输出。

df729fc3df6250c6c33a78e391fe2b9d.png

由此看出,A、B、C三道程序相互穿插执行。在作业A放弃CPU进行IO操作时,分配CPU给作业B执行,作业B放弃CPU进行IO操作,此时A、B都在进行IO操作,系统将CPU分配给C执行任务,因此,CPU的资源利用率大大提高。

特点:

1)多道:内存同时存放多道程序。

2)并行:宏观(多个程序一同向前)

3)串行:微观(CPU只有一个,串行)

4.分时系统

在多道批处理系统的时代,用户对新系统的需求具体表现在两个方面。

一是人机交互,每当程序员写好一个程序时,都需要上机调试,由于程序难免存在错误,因此用户希望能像早期使用计算机一样独占全机资源并对它进行直接控制,以便能方便地对程序中的错误进行修改,意即人机交互

二是共享主机,在20世纪60年代计算机还十分昂贵,一台计算机要同时供多个用户共享使用每个用户在共享一台计算机时都希望能像独占时一样,不仅可以随时与计算机进行交互,而且还不会感觉到其他用户的存在

分时系统在这样的背景下诞生,因此分时系统是指在一台主机上连接了多个终端并由此组成的系统,该系统允许多个用户同时通过自己的终端,以交互方式使用计算机共享主机中的资源。分时操作系统最典型的例子就是UNIX和Linux,它们可以同时连接多个终端,并且每隔一段时间重新扫描进程,重新分配进程的优先级,动态分配系统资源。

原理

分时操作系统将系统处理机时间与内存空间按一定的时间间隔(划分时间片),采用轮转运行方式轮流地切换给各终端用户的程序使用(例如规定每个作业每次只能运行一个时间片)。由于时间间隔很短,每个用户就感觉像独占全机一样,这样就解决了主机共享问题。

而对于人机交互,为实现用户键入命令后能对自己的作业及其运行及时控制或修改,各个用户的作业都必须留在内存中(作业在磁盘上是不能运行的),用时间片进行切换管理

分时操作系统的特点是可有效增加资源的使用率,支持人机交互与资源共享。例如UNIX系统就采用了剥夺式动态优先的CPU调度以支持分时操作。

简而言之,分时操作系统的核心原理在于将作业直接放入内存,并引入了时间片的概念,采用轮转运行的方式,规定每个作业每次只能运行一个时间片,然后就暂停该作业并立即调度下一个作业运行。在不长的时间内使所有的作业都执行一个时间片的时间,便可以使每个用户都能及时地与自己的作业进行交互,从而使用户的请求得到及时响应。这样就解决了在分时系统中最重要的及时接收、及时处理问题。

特征

与其前辈批处理系统相比,分时系统有如下几个特点:

1)多路性:系统允许将多台终端同时连接到一台主机上,并按分时原则为每个终端分配系统资源,提高资源利用率,降低使用费用。

2)独立性:各终端之间相互独立,互不干扰,每个用户都感觉像一人独占主机一样。

3)及时性:用户的请求能在很短的时间内就得到响应。

4)交互性:用户可通过终端与系统进行人机对话,例如请求多方面的服务。

更多内容,请关注微信公众号:IT界的泥石流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

方法区元空间实现之jdk7和8字符串常量池、运行时常量池、静态变量到底在哪?

方法区(落地实现jdk7永久代,jdk8元空间),元空间并不在虚拟机中,而是使用本地内存,它和堆在逻辑上是连续的,但在物理上是不连续的,所以也叫非堆。 1、此区域是线程共享的。储存已加载…

mysql force index报错_新特性解读 | MySQL 8.0 索引特性4-不可见索引

MySQL 8.0 实现了索引的隐藏属性。当然这个特性很多商业数据库早就有了,比如ORACLE,在11g中就实现了。我来介绍下这个小特性。介绍INVISIBLE INDEX,不可见索引或者叫隐藏索引。就是对优化器不可见,查询的时候优化器不会把她作为备…

关于Java成员变量、局部变量、方法,在JVM的内存空间分配

1、变量类型 2、类的结构 下面是一般类的结构 //类体属性状态(即:类体变量方法) public class 类名{ //类名最好首字母大写的英文String name; //在方法体外,所以是成员变量//下面是一个main方法(程序入口的主方法)public static…

python内置函数详解总结篇_Python内置函数详解——总结篇

数学运算(7个)类型转换(24个)序列操作(8个)对象操作(7个)反射操作(8个)变量操作(2个)交互操作(2个)文件操作(1个)编译执行(4个)装饰器(3个)数学运算abs:求数值的绝对值>>> abs(-2)2divmod:返回两个数值的商和余数>>> divmod(5,2)(2, 1…

Java多线程中static变量的使用

Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果? Java中 没处理好同步 导致两个线程同时为一个static变量赋值 会导致什么后果?仅仅是多耗资源还是会引发异常? 不会耗资源 也不会引发异常 而是程序出现逻辑错误,…

scanf 接收 空格 输入_如何允许使用scanf输入空格?

人们(尤其是初学者)不应该使用scanf(“%s”)或gets()或任何其他没有缓冲区溢出保护的函数,除非你确定输入总是一个特定的格式甚至不是)。记住,scanf代表“扫描格式化”,并且珍贵的格式比用户输入的数据少。如果您对输入数据格式具…

Java并发——线程安全

1、线程安全 多个线程对同一个共享变量进行读写操作时可能产生不可预见的结果,这就是线程安全问题。 故线程安全的核心点就是共享变量,只有在共享变量的情况下才会有线程安全问题。这里说的共享变量,是指多个线程都能访问的变量&#xff0c…

vue 功能模块后台可配置_Github14k的Springboot后台管理系统

关注爱编码、挖掘优秀项目。本期给各位带来的一款优质的后台管理系统:EL-ADMIN 后台管理系统。简介该项目由大神elunez一手大打造。它是一个基于 Spring Boot 2.1.0 、 Spring Boot Jpa、 JWT、Spring Security、Redis、Vue的前后端分离的后台管理系统。项目地址&am…

hibernate mysql 时间_使用Hibernate和MySQL创建时间戳和最后更新时间戳

慕斯卡3215842利用本文中的资源以及从不同来源获得的左右信息,我提出了这个优雅的解决方案,创建了以下抽象类import java.util.Date;import javax.persistence.Column;import javax.persistence.MappedSuperclass;import javax.persistence.PrePersist;i…

Java中保证线程安全的三板斧

前言 现在,如果要使用 Java 实现一段线程安全的代码,大致有 synchronized 、 java.util.concurrent 包等手段。虽然大家都会用,但却不一定真正清楚其在 JVM 层面上的实现原理,因此,笔者在查阅了一些资料后&#xff0c…

mysql oa数据库设计_OA项目1:环境搭建之数据库创建与环境添加

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。一 指定数据库:Mysqldatabase:oa建库语句:crea…

java 线程安全的原因_java的多线程:java安全问题产生的原因与JMM的关系

一、多线程产生安全问题 1、Java内存模型 共享内存模型指的就是Java内存模型(简称JMM),JMM决定一个线程对共享变量的写入时,能对另一个线程可见。 从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系: 线程之间的共享变量存储在主内存…

python用pip安装wordcloud_如何在python3.7中使用pip安装wordcloud

我一直试图在windows10上pip安装python3.7的wordcloud,但我一直收到这个错误消息,我不太理解,也无法修复。在正在为wordcloud运行setup.py安装:已完成,状态为“error”Complete output from command "c:\program …

分布式系统全局唯一ID的几种实现方式

现如今可谓是微服务、分布式、IoT(物联网)横行的时代,作为一名开发者始终还是要保持一定的危机意识,特别是在日常的项目开发中,若是有机会接触到一些关于微服务、分布式下的应用场景,应当硬着头皮、排除万难…

git如何查看缓存区文件内容_详解Git工作区、暂存区、历史记录区以及git reset、git revert、git checkout等撤销命令的区别...

一、可以将git简单的分为三个区域 1、工作区(working directory) 2、暂缓区(stage index) 3、历史记录区(history) 如图:其中git add files 把当前工作目录中的文件放入暂存区域这其实做了两件事: 1、将本地文件的时间戳、长度&#xff0…

分布式全局唯一ID的实现

分布式全局唯一ID的实现 前言 上周末考完试,这周正好把工作整理整理,然后也把之前的一些素材,整理一番,也当自己再学习一番。 一方面正好最近看到几篇这方面的文章,另一方面也是正好工作上有所涉及,所以决…

mysql多个分类取n条_MySQL获取所有分类和每个分类的前N条记录

MySQL获取所有分类和每个分类的前N条记录。比如有文章表 test(Id,type,tiem),现在要用SQL找出每种类型中时间最新的前N个数据组成的集合,一段不错的代码,留存备用。SELECT a1.* FROM test a1INNER JOIN (SELECT a.type,p.time FROM test aLEF…

Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能&#xff0…

java 矩阵转置_图解利用Java实现数组转置

我们编写Java代码,如下图所示:package com.tina;public class demo {public static void main(String args[]) {int data[] new int[] { 1, 6, 3, 9, 5, 7, 2, 0, 4, 8 };PrintArray(data);}// 输出数组内容public static void PrintArray(int arr[]) {…

java中static、final、static final浅析

final final可以修饰类、属性、方法、局部变量、参数,不能修饰接口!final修饰类:该类不能被继承(解释了为什么不能修饰接口,不过接口里面的属性、方法等是可以用final修饰的);final修饰属性&am…